Claude は Model Context Protocol (MCP) をネイティブでサポートしており、データベース、コード実行環境、API、カスタムサーバーなどの外部ツールをワークフローに直接組み込むことができます。ターミナルで Claude Code を使う場合でも、デスクトップで Claude Desktop を使う場合でも、MCP 設定はプロトコルレベルでは同じように機能しますが、サーバーの登録方法にいくつかの違いがあります。このガイドでは、Claude Code 向けの claude mcp add CLI コマンドと、Claude Desktop 向けの JSON 設定ファイルの両方の方法を説明し、さらにツール呼び出しの推論とサンドボックス実行がどのように位置づけられるかについても解説します。
MCP が Claude で果たす役割
MCP は Anthropic によるオープンスタンダードで、言語モデルが外部ツールを統一的な方法で呼び出せるようにします。MCP 以前は、AI アプリケーションは使用するツールごとに個別のグルーコードが必要でした。MCP を使えば、準拠したサーバーは標準的な検出・呼び出しプロトコルを通じて機能を公開し、Claude を含む準拠したホストはツールごとの統合作業なしにそれらを利用できます。
具体的には、Claude に MCP サーバーを追加すると、Claude ホストにツールセットの場所を伝えることになります。Claude はセッション中にそれらのツールを一覧表示し、タスクに応じて名前で呼び出すことができます。サーバーが実行を処理し、Claude がいつどのように呼び出すかの推論を担当します。
MCP の基本概念は次の 3 つです。
| 概念 | 説明 | 例 |
|---|---|---|
| ツール | サーバーによって公開される呼び出し可能な関数 | run_python、query_db、list_models |
| リソース | サーバーがコンテキストとして利用可能にする読み取り専用データ | ファイル、データベースの行、データセット |
| プロンプト | サーバーにバンドルされた事前構築済みの指示テンプレート | システムレベルのタスク説明 |
ほとんどの開発者にとって、ツールが最も重要です。リソースとプロンプトは、より構造化されたエージェントパイプラインを構築する際に関係してきます。
Claude Code で MCP サーバーを追加する
Claude Code では、claude mcp サブコマンドグループを使用して MCP 管理を行います。設定ファイルを手動で編集することなく、サーバーの追加、削除、一覧表示が可能です。
claude mcp add — 基本形式
claude mcp add <名前> <コマンド> [引数...]
例えば、ローカルの Python MCP サーバーを追加するには:
claude mcp add my-tools python /path/to/mcp_server.py
これにより、my-tools という名前のサーバーが stdio トランスポートを使用して python /path/to/mcp_server.py を実行するよう登録されます。Claude Code はセッション開始時にプロセスを起動し、セッション中はそれを維持します。
環境変数を渡す
多くの MCP サーバーは API キーやエンドポイント URL を必要とします。登録時に --env を使用して渡します。
claude mcp add my-tools python /path/to/mcp_server.py \
--env API_KEY=your_key_here \
--env BASE_URL=https://api.example.com
値は Claude Code の設定に保存され、サーバープロセス起動時に注入されます。秘密鍵をサーバーコマンド自体にハードコードしないでください。
claude mcp add json — JSON 仕様から登録する
すでに JSON 形式で記述されたサーバー仕様がある場合(チーム間で設定を共有するときによくあります)、それを直接パイプできます。
echo '{
"command": "python",
"args": ["/path/to/mcp_server.py"],
"env": {
"API_KEY": "your_key"
}
}' | claude mcp add my-tools --json
またはファイルを渡すこともできます。
claude mcp add my-tools --json < server-spec.json
これは位置引数形式と同等ですが、バージョン管理や共有が容易な単一の設定成果物を提供します。
サーバーの一覧表示と削除
# 登録されたすべてのサーバーを表示
claude mcp list
# サーバーを削除
claude mcp remove my-tools
スコープ: プロジェクト vs ユーザー
デフォルトでは、claude mcp add はサーバーをユーザーレベルの設定に登録し、すべての Claude Code セッションで利用可能にします。現在のプロジェクトのみに登録するには(.claude/settings.json に保存されます)、--scope project を追加します。
claude mcp add my-tools python /path/to/mcp_server.py --scope project
プロジェクトスコープのサーバーは、プロジェクトごとに異なるツールが必要で、設定を分離したい場合に便利です。
claude mcp serve — Claude Code を MCP サーバーとして公開する
逆の方向も可能です。claude mcp serve は Claude Code 自体を MCP サーバーとして起動し、別の MCP ホストが接続してそのツールを使用できるようにします。
claude mcp serve
これは、Claude Code の機能をより大きなエージェントパイプラインに組み込み、異なるホストがツール呼び出しを調整する場合に便利です。
Claude Desktop の MCP サーバー設定
Claude Desktop は MCP サーバー設定を JSON ファイルに保存します。場所は OS によって異なります。
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
ファイルが存在しない場合は作成します。構造は次のとおりです。
{
"mcpServers": {
"my-tools": {
"command": "python",
"args": ["/path/to/mcp_server.py"],
"env": {
"API_KEY": "your_key_here"
}
}
}
}
mcpServers 下の各キーが、Claude がサーバーを識別するために使用する名前です。必要なだけサーバーを登録できます。Claude Desktop は起動時にすべてを読み込みます。
ファイルを編集したら、Claude Desktop を再起動して変更を反映させます。MCP ツールが正常に読み込まれると、チャット入力エリアにハンマーアイコンが表示されます。
SSE 経由でリモート MCP サーバーを追加する
stdio ではなく Server-Sent Events (SSE) トランスポートを使用するリモートサーバーの場合、設定の形状が少し異なります。
{
"mcpServers": {
"remote-tools": {
"url": "https://your-mcp-server.example.com/sse"
}
}
}
一部のリモートサーバーは認証を必要とします。サーバーが期待する場合は、ヘッダーフィールドにベアラートークンを渡します。
{
"mcpServers": {
"remote-tools": {
"url": "https://your-mcp-server.example.com/sse",
"headers": {
"Authorization": "Bearer your_token_here"
}
}
}
}
MCP トランスポートタイプ: stdio と SSE
MCP サーバーは 2 つのトランスポートメカニズムのいずれかを使用して Claude ホストと通信します。
stdio — サーバーは同じマシン上でサブプロセスとして実行されます。ホストがプロセスを起動し、標準入出力を介して JSON-RPC メッセージを読み書きします。これはローカルサーバーのデフォルトであり、最も簡単にセットアップできます。
SSE (Server-Sent Events) — サーバーはリモートで実行され、HTTP エンドポイントを公開します。ホストは URL に接続し、ツールの応答をストリームとして受け取ります。これはマシンをまたいで動作し、共有チームインフラやホスト型ツールサービスに適しています。
個人の開発者が最初に始める場合、stdio の方が簡単です。ネットワークが不要で、サーバープロセスが管理されます。SSE は、チームで単一の MCP サーバーを共有したい場合や、ツール自体が特定のネットワーク環境で実行する必要がある場合に価値を発揮します。
Claude が MCP ツールをどのように推論するか
セッションが開始され MCP サーバーが登録されると、Claude は各サーバーから利用可能なツールをクエリします。これにより、ツール名と JSON Schema の説明のリストが生成されます。Claude はツールを推測的に呼び出すことはありません。会話やタスクで必要になった場合にのみ、ツールの説明に基づいて呼び出します。
ツール呼び出しの流れは次のとおりです。
- ユーザーがメッセージまたはタスクを送信します。
- Claude は登録されたツールが役立つかどうかを評価します。
- 役立つ場合、Claude は適切な引数を使用してツール呼び出しを構築します。
- MCP ホストが呼び出しを適切なサーバーに送信します。
- サーバーが実行し、結果を返します。
- Claude は結果を推論に組み込み、続行します。
このループは 1 ターンで複数回発生する可能性があります。Claude はツール呼び出しを連鎖させ、あるツールの結果を別のツールの引数として使用し、同じセッション内で複数のサーバーにわたって集約できます。
ツールの説明の質はここで非常に重要です。曖昧な説明は、呼び出しの見逃しや誤った呼び出しにつながります。ツールの機能、引数の意味、戻り値を含む正確な説明により、Claude は推測することなく正確にルーティングできます。
サンドボックスでのツール実行
MCP ツールがコード(Python スクリプト、シェルコマンド、ファイル操作など)を実行する場合、ローカルマシンで実行すると分離に関する問題が生じます。ファイルシステムアクセス、プロセス生成、ネットワーク呼び出しを持つツールは、誤動作や予期しないパスへの誘導があった場合に広範囲に影響を及ぼす可能性があります。
Novita AI Agent Sandbox は、ツール実行用の分離されたクラウド環境を提供することでこの問題に対処します。MCP サーバーをローカルで実行する代わりに、サンドボックスインスタンス内にデプロイします。サンドボックスは独自のファイルシステム、ネットワークスコープ、リソース制限を持ちます。エージェントはその境界内でファイルの書き込み、コードの実行、内部 API の呼び出しをホストマシンに影響を与えることなく行えます。
サンドボックス内で実行される MCP サーバーは、SSE トランスポートを介してツールを公開し、Claude はリモートで接続します。そのため、Claude から見ると統合は同一です。違いは、ツールが実際に何で実行されているかという点だけです。
MCP デプロイメント向け Novita Sandbox の主な特徴:
- 高速起動: インスタンスは約 200ms 未満で起動し、ツールの往復遅延を低く抑えます
- 秒単位の課金: アイドル予約ではなく、アクティブな実行時間のみ支払います
- 分離されたファイルシステム: 各サンドボックスインスタンスは独立したワークスペースを持ち、セッション間のデータ漏洩を防ぎます
- 設定可能なネットワークポリシー: ツールが到達できる外部サービスを制御します
Novita Sandbox を利用した MCP サーバーの構築手順については、Novita Sandbox と mcp-use ライブラリを使用したリモートコード実行 MCP サーバーの構築 を参照してください。
MCP ツール推論に Novita LLM API を使用する
Claude の独自モデルはツール使用をネイティブに処理しますが、コスト、レイテンシ、専門性などの理由で、MCP ツールの推論の一部を別のモデルにルーティングしたい場合があります。Novita LLM API は、関数呼び出しと構造化ツール呼び出しをサポートするモデルにアクセス可能な OpenAI 互換エンドポイントを提供します。
これは MCP アーキテクチャにおいて 2 つの方法で利用できます。
1. カスタム MCP ホストの背後にある推論モデルとして: 独自の MCP ホストを構築する場合(Claude Code や Claude Desktop ではなく)、Novita LLM API を使用してモデル層を強化できます。ホストはツールリストと会話とともに Novita API を呼び出し、モデルがツール呼び出し指示を返し、ホストがそれらを MCP サーバーにディスパッチします。
import openai
client = openai.OpenAI(
base_url="https://api.novita.ai/v3/openai",
api_key="your_novita_api_key",
)
response = client.chat.completions.create(
model="meta-llama/llama-3.3-70b-instruct",
messages=[{"role": "user", "content": "利用可能なツールを一覧表示し、簡単なテストを実行してください"}],
tools=[
{
"type": "function",
"function": {
"name": "list_models",
"description": "API から利用可能なすべてのモデルを一覧表示します。",
"parameters": {"type": "object", "properties": {}},
}
}
],
tool_choice="auto",
)
2. MCP ツール自体の内部 LLM として: MCP ツールは内部で Novita LLM API を使用できます。例えば、要約ツール、分類ツール、コードを生成するツールなどです。ツールはエージェントから入力を受け取り、Novita API を呼び出し、結果を返します。これにより、モデル推論コストをメインのエージェントモデルコストから分離し、各サブタスクに適したモデルを選択できます。
Novita の API を呼び出す MCP サーバーの実践的な例については、Novita AI で最初の MCP サーバーを構築する方法 を参照してください。
よくある問題と修正
Claude Desktop にサーバーが表示されない
最も一般的な原因は claude_desktop_config.json の JSON 構文エラーです。保存する前に JSON バリデーターを使用してください。末尾のカンマでもファイルの読み込みが妨げられます。編集後は毎回 Claude Desktop を再起動してください。
claude mcp add コマンドが見つからない
これは Claude Code がインストールされていないか、PATH に含まれていないことを意味します。npm install -g @anthropic-ai/claude-code で Claude Code をインストールし、claude --version で確認してください。
ツールは一覧表示されるが呼び出されない
Claude はツールが現在のタスクに関連すると判断した場合のみ呼び出します。ツールの説明が曖昧すぎると、Claude はそれらを選択しません。具体性を追加してください。ツールの機能、使用すべきタイミング、入力と出力の内容を記述します。
サーバーが起動直後に終了する
サーバーコマンドが正しいこと、必要な環境変数がすべて設定されていることを確認してください。ターミナルでコマンドを直接実行して実際のエラー出力を確認してください。Claude Code は一部の設定でサブプロセスの stderr を抑制する場合があります。
SSE 接続が拒否される
サーバー URL が Claude を実行しているマシンから到達可能であること、サーバーが実際に期待するポートでリッスンしていること、必要な認証ヘッダーが正しく設定されていることを確認してください。
ツール呼び出しが検証エラーで失敗する
Claude が渡す引数は、ツールが宣言する JSON Schema と一致する必要があります。ツールの inputSchema 定義を確認してください。必須フィールドが欠落していたり、型が一致しない場合、サーバーは呼び出しを拒否します。Claude はスキーマに基づいて引数を構築するため、不完全なスキーマは不完全な呼び出しにつながります。
FAQ
Claude Code は MCP をサポートしていますか?
はい。Claude Code は claude mcp サブコマンドを介して MCP をネイティブサポートしています。サーバーの登録には claude mcp add、登録状況の確認には claude mcp list、登録解除には claude mcp remove を使用します。完全なコマンドリファレンスについては claude mcp --help を実行してください。
Claude Code に MCP サーバーを追加するにはどうすればよいですか?
stdio サーバーの場合は claude mcp add <名前> <コマンド> [引数...] を実行するか、--json を使用して JSON 仕様を渡します。プロジェクトスコープで登録するには --scope project を追加します。追加後、新しい Claude Code セッションを開始すると、ツールがすぐに利用可能になります。
claude mcp serve とは何ですか?
claude mcp serve は Claude Code 自体を MCP サーバーとして実行し、その機能を MCP プロトコルを通じて公開します。別の MCP ホストが Claude Code に接続し、それをツールソースとして使用できます。これは、Claude が複数のコンポーネントのうちの 1 つであるマルチエージェントシステムを構築する場合に便利です。
同じ MCP サーバーを Claude Code と Claude Desktop の両方で使用できますか?
はい。サーバー自体はどのホストが接続するかを気にしません。stdio サーバーの場合、Claude Code(claude mcp add 経由)と Claude Desktop(claude_desktop_config.json 経由)の両方で同じコマンドを起動できます。SSE サーバーの場合、URL に到達可能なホストはすべて接続できます。
Claude はどの MCP ツールを呼び出すかをどのように判断しますか?
セッション開始時に、Claude は登録されたすべてのサーバーからツールリストをクエリします。各ツールには名前と説明があります。タスクを処理する際、Claude は説明が必要な内容と一致するかどうかに基づいてツールを選択します。ユースケースが明確に記述された適切な説明は正確なツール選択につながり、曖昧な説明は見逃しや誤った呼び出しにつながります。
登録できる MCP サーバーの数に制限はありますか?
MCP 仕様にハードリミットはなく、Claude Code や Claude Desktop にもありません。実際には、数十のサーバーに数百のツールがあると、セッション起動(ツール検出は起動時に実行)が遅くなり、Claude のツール選択にノイズが加わる可能性があります。ツールセットは、特定のプロジェクトやセッションに実際に必要なものに絞ってください。
stdio トランスポートと SSE トランスポートの違いは何ですか?
Stdio はサーバーをローカルサブプロセスとして実行し、ホストは stdin/stdout を介して通信します。SSE はリモート HTTP エンドポイントに接続し、応答をストリームとして受信します。Stdio はローカル開発に簡単で、SSE はリモート、共有、または本番デプロイメントに適しています。
