メインコンテンツへスキップ
Model Context Protocol(MCP)は、AI エージェントを外部ツールおよびデータソースに接続するためのオープンスタンダードです。MCP を使用すると、エージェントはデータベースをクエリし、Slack や GitHub などの API と統合し、カスタムツール実装を記述することなく他のサービスに接続できます。 MCP サーバーはローカルプロセスとして実行したり、HTTP 経由で接続したり、SDK アプリケーション内で直接実行したりできます。
このページは Agent SDK の MCP 設定について説明しています。Claude Code CLI に MCP サーバーを追加してすべてのプロジェクトで読み込むには、MCP インストールスコープを参照してください。

クイックスタート

この例は、HTTP トランスポートを使用して Claude Code ドキュメンテーションMCP サーバーに接続し、allowedToolsとワイルドカードを使用してサーバーからすべてのツールを許可します。
エージェントはドキュメンテーションサーバーに接続し、hooks に関する情報を検索して、結果を返します。

MCP サーバーを追加する

query() を呼び出すときにコード内で MCP サーバーを設定するか、settingSources経由で読み込まれる .mcp.json ファイルで設定できます。

コード内で

mcpServers オプションで MCP サーバーを直接渡します:

設定ファイルから

プロジェクトルートに .mcp.json ファイルを作成します。project 設定ソースが有効な場合、ファイルが取得されます。これはデフォルトの query() オプションの場合です。settingSources を明示的に設定する場合は、このファイルを読み込むために "project" を含めます:

MCP ツールを許可する

MCP ツールは Claude が使用する前に明示的な許可が必要です。許可がない場合、Claude はツールが利用可能であることを認識しますが、呼び出すことはできません。

ツール命名規則

MCP ツールは mcp__<server-name>__<tool-name> という命名パターンに従います。たとえば、"github" という名前の GitHub サーバーに list_issues ツールがある場合、mcp__github__list_issues になります。

allowedTools でアクセスを許可する

allowedTools を使用して、Claude が使用できる MCP ツールを指定します:
ワイルドカード(*)を使用すると、各ツールを個別にリストアップすることなく、サーバーからすべてのツールを許可できます。
MCP アクセスには allowedTools をパーミッションモードより優先してください。 permissionMode: "acceptEdits" は MCP ツールを自動承認しません(ファイル編集とファイルシステム Bash コマンドのみ)。permissionMode: "bypassPermissions" は MCP ツールを自動承認しますが、他のすべてのセーフティプロンプトも無効にするため、必要以上に広範です。allowedTools のワイルドカードは、必要な MCP サーバーのみを許可し、それ以上は許可しません。完全な比較については、パーミッションモードを参照してください。

利用可能なツールを検出する

MCP サーバーが提供するツールを確認するには、サーバーのドキュメンテーションを確認するか、サーバーに接続して system init メッセージを検査します:

トランスポートタイプ

MCP サーバーはさまざまなトランスポートプロトコルを使用してエージェントと通信します。サーバーのドキュメンテーションを確認して、どのトランスポートをサポートしているかを確認してください:
  • ドキュメンテーションに実行するコマンドnpx @modelcontextprotocol/server-github など)が記載されている場合は、stdio を使用します
  • ドキュメンテーションにURL が記載されている場合は、HTTP または SSE を使用します
  • コード内で独自のツールを構築している場合は、SDK MCP サーバーを使用します

stdio サーバー

stdin/stdout 経由で通信するローカルプロセス。同じマシンで実行する MCP サーバーに使用します:

HTTP/SSE サーバー

クラウドホストされた MCP サーバーとリモート API に HTTP または SSE を使用します:
ストリーミング可能な HTTP トランスポートの場合は、代わりに "type": "http" を使用します。.mcp.json およびその他の JSON 設定ファイルでは、"streamable-http""http" のエイリアスとして受け入れられます。プログラマティック mcpServers オプションは "http" のみを受け入れます。

SDK MCP サーバー

別のサーバープロセスを実行する代わりに、アプリケーションコード内でカスタムツールを直接定義します。実装の詳細については、カスタムツールガイドを参照してください。 多くの MCP ツールを設定している場合、ツール定義はコンテキストウィンドウの大部分を消費する可能性があります。ツール検索は、コンテキストからツール定義を保留し、各ターンで Claude が必要とするツールのみを読み込むことでこれを解決します。 ツール検索はデフォルトで有効になっています。設定オプションと詳細については、ツール検索を参照してください。 カスタム SDK ツールでのベストプラクティスとツール検索の使用を含む詳細については、ツール検索ガイドを参照してください。

認証

ほとんどの MCP サーバーは外部サービスにアクセスするために認証が必要です。サーバー設定の環境変数を通じて認証情報を渡します。

環境変数を通じて認証情報を渡す

env フィールドを使用して、API キー、トークン、およびその他の認証情報を MCP サーバーに渡します:
デバッグログを含む完全な動作例については、リポジトリからの問題のリストを参照してください。

リモートサーバーの HTTP ヘッダー

HTTP および SSE サーバーの場合、サーバー設定で認証ヘッダーを直接渡します:

OAuth2 認証

MCP 仕様は OAuth 2.1 をサポートしています。SDK はブラウザを開いたり、対話的な OAuth フローを実行したりしません。設定されたサーバーが認可チャレンジを返し、保存されたトークンが利用できない場合、エージェント実行はそのサーバーのツールなしで続行され、サーバーは システム初期化メッセージmcp_servers 配列で needs-auth ステータスで報告されます。エージェントが特定のサーバーの接続に依存している場合は、起動時にその配列を確認してください。 認証情報を提供するには、アプリケーションで OAuth フローを完了し、結果のアクセストークンをサーバーの headers に渡します:

リポジトリから問題をリストする

この例は、GitHub MCP サーバーに接続して最近の問題をリストします。この例には、MCP 接続とツール呼び出しを検証するためのデバッグログが含まれています。 実行する前に、repo スコープを持つ GitHub 個人用アクセストークンを作成し、環境変数として設定します:

データベースをクエリする

この例は、Postgres MCP サーバーを使用してデータベースをクエリします。接続文字列はサーバーへの引数として渡されます。エージェントは自動的にデータベーススキーマを検出し、SQL クエリを記述して、結果を返します:

エラーハンドリング

MCP サーバーはさまざまな理由で接続に失敗する可能性があります。サーバープロセスがインストールされていない、認証情報が無効である、またはリモートサーバーに到達できない可能性があります。 SDK は各クエリの開始時に、サブタイプ initsystem メッセージを発行します。このメッセージには、各 MCP サーバーの接続ステータスが含まれます。status フィールドをチェックして、エージェントが作業を開始する前に接続失敗を検出します:

トラブルシューティング

サーバーが「失敗」ステータスを表示する

init メッセージをチェックして、どのサーバーが接続に失敗したかを確認します:
一般的な原因:
  • 環境変数の欠落:必要なトークンと認証情報が設定されていることを確認します。stdio サーバーの場合、env フィールドがサーバーが期待するものと一致することを確認します。
  • サーバーがインストールされていないnpx コマンドの場合、パッケージが存在し、Node.js が PATH にあることを確認します。
  • 無効な接続文字列:データベースサーバーの場合、接続文字列の形式を確認し、データベースにアクセス可能であることを確認します。
  • ネットワークの問題:リモート HTTP/SSE サーバーの場合、URL に到達可能であり、ファイアウォールが接続を許可していることを確認します。

ツールが呼び出されていない

Claude がツールを認識しているが使用していない場合は、allowedTools で許可を付与していることを確認します:

接続タイムアウト

MCP サーバー接続のデフォルトタイムアウトは 30 秒です。サーバーの起動に時間がかかる場合、接続は失敗します。MCP_TIMEOUT 環境変数でリミットを上げてください(ミリ秒単位)。より多くの起動時間が必要なサーバーの場合は、以下も検討してください:
  • 利用可能な場合は、より軽量なサーバーを使用する
  • エージェントを開始する前にサーバーをプリウォーミングする
  • 遅い初期化の原因についてサーバーログを確認する

ツール出力が許可される最大トークン数を超える

SDK は Claude Code と同じ MCP 出力制限を適用します。ツール結果が 25,000 トークンより大きい場合、完全な出力はファイルに保存され、ツール結果はファイルパスを名前に含むエラーメッセージに置き換えられるため、エージェントは出力を部分的に読み戻すことができます。MAX_MCP_OUTPUT_TOKENS 環境変数でリミットを上げてください。サーバーがツールごとにより高いリミットを宣言する方法を含む完全な動作については、MCP 出力制限と警告を参照してください。