{"meta":{"title":"GitHub Copilot SDK での MCP サーバーの使用","intro":"Copilot SDK は MCP サーバー (モデル コンテキスト プロトコル) と統合して、アシスタントの機能を外部ツールで拡張できます。 MCP サーバーは個別のプロセスとして実行され、会話中に呼び出すことができるCopilotツール (関数) を公開します。","product":"GitHub Copilot","breadcrumbs":[{"href":"/ja/enterprise-cloud@latest/copilot","title":"GitHub Copilot"},{"href":"/ja/enterprise-cloud@latest/copilot/how-tos","title":"方法"},{"href":"/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk","title":"Copilot SDK"},{"href":"/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features","title":"機能"},{"href":"/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/features/mcp","title":"MCP"}],"documentType":"article"},"body":"# GitHub Copilot SDK での MCP サーバーの使用\n\nCopilot SDK は MCP サーバー (モデル コンテキスト プロトコル) と統合して、アシスタントの機能を外部ツールで拡張できます。 MCP サーバーは個別のプロセスとして実行され、会話中に呼び出すことができるCopilotツール (関数) を公開します。\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n> \\[!NOTE]\n> これは進化する機能です。 進行中のディスカッションについては [、問題 #36](https://github.com/github/copilot-sdk/issues/36) を参照してください。\n\n## MCP とは\n\n[モデル コンテキスト プロトコル (MCP)](https://modelcontextprotocol.io/) は、AI アシスタントを外部のツールやデータ ソースに接続するためのオープンな標準です。 MCP サーバーは次のことができます。\n\n* コードまたはスクリプトを実行する\n* データベースのクエリ\n* ファイル システムにアクセスする\n* 外部 API を呼び出す\n* その他\n\n## サーバーの種類\n\nSDK では、次の 2 種類の MCP サーバーがサポートされています。\n\n| タイプ             | 説明                                 | ユースケース(事例)                    |\n| --------------- | ---------------------------------- | ----------------------------- |\n| **Local/Stdio** | サブプロセスとして実行され、stdin/stdout 経由で通信する | ローカル ツール、ファイル アクセス、カスタム スクリプト |\n| **HTTP/SSE**    | HTTP 経由でアクセスされるリモート サーバー           | 共有サービス、クラウドでホストされるツール         |\n\n## コンフィギュレーション\n\n### Node.js/ TypeScript\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nconst client = new CopilotClient();\nconst session = await client.createSession({\n    model: \"gpt-5\",\n    mcpServers: {\n        // Local MCP server (stdio)\n        \"my-local-server\": {\n            type: \"local\",\n            command: \"node\",\n            args: [\"./mcp-server.js\"],\n            env: { DEBUG: \"true\" },\n            cwd: \"./servers\",\n            tools: [\"*\"],  // \"*\" = all tools, [] = none, or list specific tools\n            timeout: 30000,\n        },\n        // Remote MCP server (HTTP)\n        \"github\": {\n            type: \"http\",\n            url: \"https://api.githubcopilot.com/mcp/\",\n            headers: { \"Authorization\": \"Bearer ${TOKEN}\" },\n            tools: [\"*\"],\n        },\n    },\n});\n```\n\n### Python\n\n```python\nimport asyncio\nfrom copilot import CopilotClient\nfrom copilot.session import PermissionHandler\n\nasync def main():\n    client = CopilotClient()\n    await client.start()\n\n    session = await client.create_session(on_permission_request=PermissionHandler.approve_all, model=\"gpt-5\", mcp_servers={\n        # Local MCP server (stdio)\n        \"my-local-server\": {\n            \"type\": \"local\",\n            \"command\": \"python\",\n            \"args\": [\"./mcp_server.py\"],\n            \"env\": {\"DEBUG\": \"true\"},\n            \"cwd\": \"./servers\",\n            \"tools\": [\"*\"],\n            \"timeout\": 30000,\n        },\n        # Remote MCP server (HTTP)\n        \"github\": {\n            \"type\": \"http\",\n            \"url\": \"https://api.githubcopilot.com/mcp/\",\n            \"headers\": {\"Authorization\": \"Bearer ${TOKEN}\"},\n            \"tools\": [\"*\"],\n        },\n    })\n\n    response = await session.send_and_wait(\"List my recent GitHub notifications\")\n    print(response.data.content)\n\n    await client.stop()\n\nasyncio.run(main())\n```\n\n### Go\n\n```golang\npackage main\n\nimport (\n    \"context\"\n    \"log\"\n    copilot \"github.com/github/copilot-sdk/go\"\n)\n\nfunc main() {\n    ctx := context.Background()\n    client := copilot.NewClient(nil)\n    if err := client.Start(ctx); err != nil {\n        log.Fatal(err)\n    }\n    defer client.Stop()\n\n    session, err := client.CreateSession(ctx, &copilot.SessionConfig{\n        Model: \"gpt-5\",\n        MCPServers: map[string]copilot.MCPServerConfig{\n            \"my-local-server\": copilot.MCPStdioServerConfig{\n                Command: \"node\",\n                Args:    []string{\"./mcp-server.js\"},\n                Tools:   []string{\"*\"},\n            },\n        },\n    })\n    if err != nil {\n        log.Fatal(err)\n    }\n    defer session.Disconnect()\n\n    // Use the session...\n}\n```\n\n### .NET\n\n```csharp\nusing GitHub.Copilot;\n\nawait using var client = new CopilotClient();\nawait using var session = await client.CreateSessionAsync(new SessionConfig\n{\n    Model = \"gpt-5\",\n    McpServers = new Dictionary<string, McpServerConfig>\n    {\n        [\"my-local-server\"] = new McpStdioServerConfig\n        {\n            Command = \"node\",\n            Args = new List<string> { \"./mcp-server.js\" },\n            Tools = new List<string> { \"*\" },\n        },\n    },\n});\n```\n\n## セッションごとに構成されたサーバーを無効にする\n\n`disabledMcpServers`を、セッションで実行してはならない MCP サーバー名に正確に設定します。\nこの設定のスコープは、個々の作成要求または再開要求です。グローバル MCP 設定またはサーバー構成は変更されません。\n\n```typescript\nconst session = await client.createSession({\n    mcpServers: {\n        filesystem: { type: \"local\", command: \"npx\", args: [\"-y\", \"@modelcontextprotocol/server-filesystem\", \".\"] },\n        github: { type: \"http\", url: \"https://api.githubcopilot.com/mcp/\" },\n    },\n    disabledMcpServers: [\"github\"],\n});\n```\n\n| SDK     | 構成プロパティ                          |\n| ------- | -------------------------------- |\n| Node.js | `disabledMcpServers`             |\n| Python  | `disabled_mcp_servers`           |\n| Go      | `DisabledMCPServers`             |\n| .NET    | `DisabledMcpServers`             |\n| Java    | `setDisabledMcpServers(...)`     |\n| Rust    | `with_disabled_mcp_servers(...)` |\n\nセッションの作成と **コールド** 再開では、無効になっているサーバーは起動されず、ランタイムは認証を開始しません。 常駐履歴書は、ランタイムが既に生成したサーバーを元に戻すことはできません。 名前は正確に一致します。\n\n## ツールの構成\n\n`tools` フィールドを使用して、MCP サーバーで使用できるツールを制御できます。\n\n### すべてのツールを許可する\n\n`\"*\"`を使用して、MCP サーバーによって提供されるすべてのツールを有効にします。\n\n```typescript\ntools: [\"*\"]\n```\n\n### 特定のツールを許可する\n\nアクセスを制限するツール名の一覧を指定します。\n\n```typescript\ntools: [\"bash\", \"edit\"]\n```\n\nエージェントで使用できるのは、一覧に示されているツールのみです。\n\n### すべてのツールを無効にする\n\n空の配列を使用して、すべてのツールを無効にします。\n\n```typescript\ntools: []\n```\n\n### Notes\n\n* `tools` フィールドでは、使用できるツールを定義します。\n* 個別の `allow` または `disallow` 構成はありません。ツール アクセスは、この一覧を通じて直接制御されます。\n\n## クイック スタート: ファイルシステム MCP サーバー\n\n公式の [`@modelcontextprotocol/server-filesystem`](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem) MCP サーバーを使用した完全な作業例を次に示します。\n\n```typescript\nimport { CopilotClient } from \"@github/copilot-sdk\";\n\nasync function main() {\n    const client = new CopilotClient();\n\n    // Create session with filesystem MCP server\n    const session = await client.createSession({\n        mcpServers: {\n            filesystem: {\n                type: \"local\",\n                command: \"npx\",\n                args: [\"-y\", \"@modelcontextprotocol/server-filesystem\", \"/tmp\"],\n                tools: [\"*\"],\n            },\n        },\n    });\n\n    console.log(\"Session created:\", session.sessionId);\n\n    // The model can now use filesystem tools\n    const result = await session.sendAndWait({\n        prompt: \"List the files in the allowed directory\",\n    });\n\n    console.log(\"Response:\", result?.data?.content);\n\n    await session.disconnect();\n    await client.stop();\n}\n\nmain();\n```\n\n**Output:**\n\n```text\nSession created: 18b3482b-bcba-40ba-9f02-ad2ac949a59a\nResponse: The allowed directory is `/tmp`, which contains various files\nand subdirectories including temporary system files, log files, and\ndirectories for different applications.\n```\n\n> \\[!TIP]\n> [MCP サーバー ディレクトリから任意の MCP サーバー](https://github.com/modelcontextprotocol/servers)を使用できます。 一般的なオプションには、 `@modelcontextprotocol/server-github`、 `@modelcontextprotocol/server-sqlite`、 `@modelcontextprotocol/server-puppeteer`などがあります。\n\n## 構成オプション\n\n### ローカル/stdio サーバー\n\n| 財産                      | タイプ        | 必須                 | 説明                                      |\n| ----------------------- | ---------- | ------------------ | --------------------------------------- |\n| `type`                  |            |                    |                                         |\n| `\"local\"` または `\"stdio\"` | No         | サーバーの種類 (既定値はローカル) |                                         |\n| `command`               | `string`   | はい                 | 実行するコマンド                                |\n| `args`                  | `string[]` | はい                 | コマンド引数                                  |\n| `env`                   | `object`   | No                 | 環境変数                                    |\n| `cwd`                   | `string`   | No                 | 作業ディレクトリ                                |\n| `tools`                 | `string[]` | No                 | すべてを有効にするツール (`[\"*\"]` すべて有効), (`[]` なし) |\n| `timeout`               | `number`   | No                 | タイムアウト (ミリ秒)                            |\n\n### リモート サーバー (HTTP/SSE)\n\n| 財産                   | タイプ        | 必須      | 説明                |\n| -------------------- | ---------- | ------- | ----------------- |\n| `type`               |            |         |                   |\n| `\"http\"` または `\"sse\"` | はい         | サーバーの種類 |                   |\n| `url`                | `string`   | はい      | サーバー アドレス         |\n| `headers`            | `object`   | No      | HTTP ヘッダー (認証用など) |\n| `tools`              | `string[]` | No      | 有効にするツール          |\n| `timeout`            | `number`   | No      | タイムアウト (ミリ秒)      |\n\n## Troubleshooting\n\n### ツールが表示されない、または呼び出されていない\n\n1. **MCP サーバーが正しく起動されていることを確認する**\n   * コマンドと引数が正しいことを確認する\n   * 起動時にサーバー プロセスがクラッシュしないことを確認する\n   * stderr でエラー出力を探す\n\n2. **ツールの構成を確認する**\n   * `tools`が`[\"*\"]`に設定されているか、必要な特定のツールが一覧表示されていることを確認します\n   * 空の配列 `[]` は、ツールが有効になっていないこと\n\n3. **リモート サーバーの接続を確認する**\n   * URL にアクセスできることを確認する\n   * 認証ヘッダーが正しいことを確認する\n\n### 一般的な問題\n\n| Issue                             | ソリューション                       |\n| --------------------------------- | ----------------------------- |\n| \"MCP サーバーが見つかりません\"                | コマンド パスが正しく、実行可能であることを確認する    |\n| \"接続が拒否されました\" (HTTP)               | URL を確認し、サーバーが実行されていることを確認します |\n| \"タイムアウトエラー\"                       |                               |\n| `timeout`値を増やすか、サーバーのパフォーマンスを確認する |                               |\n| ツールは機能しますが、呼び出されません               | プロンプトにツールの機能が明確に必要であることを確認する  |\n\nデバッグの詳細なガイダンスについては、 **[MCP サーバー デバッグ ガイド](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging)** を参照してください。\n\n## 関連するリソース\n\n* [モデル コンテキスト プロトコルの仕様](https://modelcontextprotocol.io/)\n* [MCP サーバー ディレクトリ](https://github.com/modelcontextprotocol/servers) - コミュニティ MCP サーバー\n* [GitHub MCP サーバー](https://github.com/github/github-mcp-server) - 公式GitHub MCP サーバー\n* [初めてのCopilot搭載アプリを構築する](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/getting-started) - SDK の基本とカスタム ツール\n* [デバッグ ガイド](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/troubleshooting/debugging) - SDK 全体のデバッグ\n\n## こちらも参照ください\n\n* [MCP サーバー デバッグ ガイド](/ja/enterprise-cloud@latest/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging) - MCP の詳細なトラブルシューティング\n* [問題 9](https://github.com/github/copilot-sdk/issues/9) - 元の MCP ツールの使用に関する質問\n* [問題 #36](https://github.com/github/copilot-sdk/issues/36) - MCP ドキュメントの追跡に関する問題"}