{"meta":{"title":"Utilisation de serveurs MCP avec le SDK GitHub Copilot","intro":"Le sdk Copilot peut s'intégrer à des serveurs MCP (protocole de contexte de modèle) pour étendre les fonctionnalités de l'assistant à des outils externes. Les serveurs MCP s’exécutent en tant que processus distincts et exposent des outils (fonctions) que Copilot peuvent appeler pendant les conversations.","product":"GitHub Copilot","breadcrumbs":[{"href":"/fr/copilot","title":"GitHub Copilot"},{"href":"/fr/copilot/how-tos","title":"Procédures"},{"href":"/fr/copilot/how-tos/copilot-sdk","title":"Kit de développement logiciel (SDK) Copilot"},{"href":"/fr/copilot/how-tos/copilot-sdk/features","title":"Fonctionnalités"},{"href":"/fr/copilot/how-tos/copilot-sdk/features/mcp","title":"MCP"}],"documentType":"article"},"body":"# Utilisation de serveurs MCP avec le SDK GitHub Copilot\n\nLe sdk Copilot peut s'intégrer à des serveurs MCP (protocole de contexte de modèle) pour étendre les fonctionnalités de l'assistant à des outils externes. Les serveurs MCP s’exécutent en tant que processus distincts et exposent des outils (fonctions) que Copilot peuvent appeler pendant les conversations.\n\n<!-- markdownlint-disable GHD046 GHD005 -->\n\n<!-- Suppressed: GHD046 (outdated release terminology), GHD005 (hardcoded data variable) -->\n\n> \\[!NOTE]\n> Il s’agit d’une fonctionnalité en constante évolution. Consultez [le problème n° 36](https://github.com/github/copilot-sdk/issues/36) pour une discussion en cours.\n\n## Qu’est-ce que MCP ?\n\n[Le protocole MCP (Model Context Protocol)](https://modelcontextprotocol.io/) est un standard ouvert pour connecter des assistants IA à des outils et sources de données externes. Les serveurs MCP peuvent :\n\n* Exécuter du code ou des scripts\n* Interroger des bases de données\n* Accéder aux systèmes de fichiers\n* Appeler des API externes\n* Et bien plus encore\n\n## Types de serveurs\n\nLe Kit de développement logiciel (SDK) prend en charge deux types de serveurs MCP :\n\n| Type            | Description                                                       | Cas d’usage                                              |\n| --------------- | ----------------------------------------------------------------- | -------------------------------------------------------- |\n| **Local/Stdio** | S’exécute en tant que sous-processus, communique via stdin/stdout | Outils locaux, accès aux fichiers, scripts personnalisés |\n| **HTTP/SSE**    | Serveur distant accessible via HTTP                               | Services partagés, outils hébergés dans le cloud         |\n\n## Configuration\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## Désactivation des serveurs configurés par session\n\nDéfinissez `disabledMcpServers` sur les noms exacts des serveurs MCP qui ne doivent pas être exécutés dans une session.\nLe paramètre est limité à la demande de création ou de reprise individuelle ; elle ne modifie pas les paramètres MCP globaux ou la configuration du serveur.\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     | Propriété de configuration       |\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\nLors de la création de session et d’une reprise **à froid** , les serveurs désactivés ne sont pas démarrés et le runtime ne lance pas leur authentification. Un cv résident ne peut pas annuler un serveur que le runtime a déjà généré. Les noms sont mis en correspondance exactement.\n\n## Configuration de l’outil\n\nVous pouvez contrôler les outils disponibles pour un serveur MCP à l’aide du `tools` champ.\n\n### Autoriser tous les outils\n\nPermet `\"*\"` d’activer tous les outils fournis par le serveur MCP :\n\n```typescript\ntools: [\"*\"]\n```\n\n### Autoriser des outils spécifiques\n\nFournissez la liste des noms d’outils pour restreindre l’accès :\n\n```typescript\ntools: [\"bash\", \"edit\"]\n```\n\nSeuls les outils répertoriés seront disponibles pour l’agent.\n\n### Désactiver tous les outils\n\nUtilisez un tableau vide pour désactiver tous les outils :\n\n```typescript\ntools: []\n```\n\n### Notes\n\n* Le `tools` champ définit les outils autorisés.\n* Il n’existe pas de configuration distincte `allow` ou `disallow` : l’accès aux outils est contrôlé directement par cette liste.\n\n## Démarrage rapide : serveur MCP du système de fichiers\n\nVoici un exemple de travail complet utilisant le serveur MCP officiel [`@modelcontextprotocol/server-filesystem`](https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem) :\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> Vous pouvez utiliser n’importe quel serveur MCP à partir du [répertoire des serveurs MCP](https://github.com/modelcontextprotocol/servers). Les options populaires incluent `@modelcontextprotocol/server-github`, `@modelcontextprotocol/server-sqlite`et `@modelcontextprotocol/server-puppeteer`.\n\n## Options de configuration\n\n### Serveur local/stdio\n\n| Propriété              | Type       | Obligatoire                           | Description                                           |\n| ---------------------- | ---------- | ------------------------------------- | ----------------------------------------------------- |\n| `type`                 |            |                                       |                                                       |\n| `\"local\"` ou `\"stdio\"` | Non        | Type de serveur (par défaut en local) |                                                       |\n| `command`              | `string`   | Yes                                   | Commande à exécuter                                   |\n| `args`                 | `string[]` | Yes                                   | Les arguments de la commande                          |\n| `env`                  | `object`   | Non                                   | Variables d’environnement                             |\n| `cwd`                  | `string`   | Non                                   | Répertoire de travail                                 |\n| `tools`                | `string[]` | Non                                   | Outils à activer (`[\"*\"]` pour tous, `[]` pour aucun) |\n| `timeout`              | `number`   | Non                                   | Délai d’expiration en millisecondes                   |\n\n### Serveur distant (HTTP/SSE)\n\n| Propriété           | Type       | Obligatoire     | Description                                          |\n| ------------------- | ---------- | --------------- | ---------------------------------------------------- |\n| `type`              |            |                 |                                                      |\n| `\"http\"` ou `\"sse\"` | Yes        | Type de serveur |                                                      |\n| `url`               | `string`   | Yes             | URL du serveur                                       |\n| `headers`           | `object`   | Non             | En-têtes HTTP (par exemple, pour l’authentification) |\n| `tools`             | `string[]` | Non             | Outils à activer                                     |\n| `timeout`           | `number`   | Non             | Délai d’expiration en millisecondes                  |\n\n## Troubleshooting\n\n### Les outils ne s’affichent pas ou ne sont pas appelés\n\n1. **Vérifier que le serveur MCP démarre correctement**\n   * Vérifiez que la commande et les arguments sont corrects\n   * Vérifier que le processus du serveur ne se bloque pas au démarrage\n   * Recherchez la sortie d’erreur dans stderr\n\n2. **Vérifier la configuration de l’outil**\n   * Assurez-vous que `tools` est défini sur `[\"*\"]` ou répertorie les outils spécifiques dont vous avez besoin\n   * Un tableau `[]` vide signifie qu’aucun outil n’est activé\n\n3. **Vérifier la connectivité pour les serveurs distants**\n   * Vérifier que l’URL est accessible\n   * Vérifier que les en-têtes d’authentification sont corrects\n\n### Problèmes courants\n\n| Issue                                             | Solution                                                                        |\n| ------------------------------------------------- | ------------------------------------------------------------------------------- |\n| « Serveur MCP introuvable »                       | Vérifier que le chemin de commande est correct et exécutable                    |\n| « Connexion refusée » (HTTP)                      | Vérifiez l’URL et vérifiez que le serveur est en cours d’exécution              |\n| Erreurs « Délai d’expiration »                    | Augmenter la valeur ou vérifier les performances du `timeout` serveur           |\n| Les outils fonctionnent, mais ne sont pas appelés | Assurez-vous que votre invite nécessite clairement la fonctionnalité de l’outil |\n\nPour obtenir des instructions détaillées sur le débogage, consultez **[autoTITLE](/fr/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging)**.\n\n## Ressources associées\n\n* [Spécification du protocole de contexte de modèle](https://modelcontextprotocol.io/)\n* [Répertoire des serveurs MCP](https://github.com/modelcontextprotocol/servers) - Serveurs MCP de la communauté\n* [GitHub MCP Server](https://github.com/github/github-mcp-server) - Serveur MCP officiel de GitHub\n* [Créez votre première application avec Copilot](/fr/copilot/how-tos/copilot-sdk/getting-started) - Concepts de base et outils personnalisés du Kit de développement logiciel (SDK)\n* [Guide de débogage](/fr/copilot/how-tos/copilot-sdk/troubleshooting/debugging) - Débogage à l’échelle du Kit de développement logiciel (SDK)\n\n## Voir aussi\n\n* [Guide de débogage du serveur MCP](/fr/copilot/how-tos/copilot-sdk/troubleshooting/mcp-debugging) - Résolution détaillée des problèmes MCP\n* [Problème n° 9 - Question](https://github.com/github/copilot-sdk/issues/9) d’utilisation des outils MCP d’origine\n* [Problème n° 36 - Problème](https://github.com/github/copilot-sdk/issues/36) de suivi de la documentation MCP"}