Remarque
Il s’agit d’une fonctionnalité en constante évolution. Consultez le problème n° 36 pour une discussion en cours.
Qu’est-ce que MCP ?
Le protocole MCP (Model Context Protocol) est un standard ouvert pour connecter des assistants IA à des outils et sources de données externes. Les serveurs MCP peuvent :
- Exécuter du code ou des scripts
- Interroger des bases de données
- Accéder aux systèmes de fichiers
- Appeler des API externes
- Et bien plus encore
Types de serveurs
Le Kit de développement logiciel (SDK) prend en charge deux types de serveurs MCP :
| Type | Description | Cas d’usage |
|---|---|---|
| Local/Stdio | S’exécute en tant que sous-processus, communique via stdin/stdout | Outils locaux, accès aux fichiers, scripts personnalisés |
| HTTP/SSE | Serveur distant accessible via HTTP | Services partagés, outils hébergés dans le cloud |
Configuration
Node.js / TypeScript
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient();
const session = await client.createSession({
model: "gpt-5",
mcpServers: {
// Local MCP server (stdio)
"my-local-server": {
type: "local",
command: "node",
args: ["./mcp-server.js"],
env: { DEBUG: "true" },
cwd: "./servers",
tools: ["*"], // "*" = all tools, [] = none, or list specific tools
timeout: 30000,
},
// Remote MCP server (HTTP)
"github": {
type: "http",
url: "https://api.githubcopilot.com/mcp/",
headers: { "Authorization": "Bearer ${TOKEN}" },
tools: ["*"],
},
},
});
Python
import asyncio
from copilot import CopilotClient
from copilot.session import PermissionHandler
async def main():
client = CopilotClient()
await client.start()
session = await client.create_session(on_permission_request=PermissionHandler.approve_all, model="gpt-5", mcp_servers={
# Local MCP server (stdio)
"my-local-server": {
"type": "local",
"command": "python",
"args": ["./mcp_server.py"],
"env": {"DEBUG": "true"},
"cwd": "./servers",
"tools": ["*"],
"timeout": 30000,
},
# Remote MCP server (HTTP)
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/",
"headers": {"Authorization": "Bearer ${TOKEN}"},
"tools": ["*"],
},
})
response = await session.send_and_wait("List my recent GitHub notifications")
print(response.data.content)
await client.stop()
asyncio.run(main())
Go
package main
import (
"context"
"log"
copilot "github.com/github/copilot-sdk/go"
)
func main() {
ctx := context.Background()
client := copilot.NewClient(nil)
if err := client.Start(ctx); err != nil {
log.Fatal(err)
}
defer client.Stop()
session, err := client.CreateSession(ctx, &copilot.SessionConfig{
Model: "gpt-5",
MCPServers: map[string]copilot.MCPServerConfig{
"my-local-server": copilot.MCPStdioServerConfig{
Command: "node",
Args: []string{"./mcp-server.js"},
Tools: []string{"*"},
},
},
})
if err != nil {
log.Fatal(err)
}
defer session.Disconnect()
// Use the session...
}
.NET
using GitHub.Copilot;
await using var client = new CopilotClient();
await using var session = await client.CreateSessionAsync(new SessionConfig
{
Model = "gpt-5",
McpServers = new Dictionary<string, McpServerConfig>
{
["my-local-server"] = new McpStdioServerConfig
{
Command = "node",
Args = new List<string> { "./mcp-server.js" },
Tools = new List<string> { "*" },
},
},
});
Configuration de l’outil
Vous pouvez contrôler les outils disponibles pour un serveur MCP à l’aide du tools champ.
Autoriser tous les outils
Permet "*" d’activer tous les outils fournis par le serveur MCP :
tools: ["*"]
Autoriser des outils spécifiques
Fournissez la liste des noms d’outils pour restreindre l’accès :
tools: ["bash", "edit"]
Seuls les outils répertoriés seront disponibles pour l’agent.
Désactiver tous les outils
Utilisez un tableau vide pour désactiver tous les outils :
tools: []
Notes
- Le
toolschamp définit les outils autorisés. - Il n’existe pas de configuration distincte
allowoudisallow: l’accès aux outils est contrôlé directement par cette liste.
Démarrage rapide : serveur MCP du système de fichiers
Voici un exemple de travail complet utilisant le serveur MCP officiel @modelcontextprotocol/server-filesystem :
import { CopilotClient } from "@github/copilot-sdk";
async function main() {
const client = new CopilotClient();
// Create session with filesystem MCP server
const session = await client.createSession({
mcpServers: {
filesystem: {
type: "local",
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
tools: ["*"],
},
},
});
console.log("Session created:", session.sessionId);
// The model can now use filesystem tools
const result = await session.sendAndWait({
prompt: "List the files in the allowed directory",
});
console.log("Response:", result?.data?.content);
await session.disconnect();
await client.stop();
}
main();
Output:
Session created: 18b3482b-bcba-40ba-9f02-ad2ac949a59a
Response: The allowed directory is `/tmp`, which contains various files
and subdirectories including temporary system files, log files, and
directories for different applications.
Conseil
Vous pouvez utiliser n’importe quel serveur MCP à partir du répertoire des serveurs MCP. Les options populaires incluent @modelcontextprotocol/server-github, @modelcontextprotocol/server-sqliteet @modelcontextprotocol/server-puppeteer.
Options de configuration
Serveur local/stdio
| Propriété | Type | Obligatoire | Description |
|---|---|---|---|
type | |||
"local" ou "stdio" | Non | Type de serveur (par défaut en local) | |
command | string | Yes | Commande à exécuter |
args | string[] | Yes | Les arguments de la commande |
env | object | Non | Variables d’environnement |
cwd | string | Non | Répertoire de travail |
tools | string[] | Non | Outils à activer (["*"] pour tous, [] pour aucun) |
timeout | number | Non | Délai d’expiration en millisecondes |
Serveur distant (HTTP/SSE)
| Propriété | Type | Obligatoire | Description |
|---|---|---|---|
type | |||
"http" ou "sse" | Yes | Type de serveur | |
url | string | Yes | URL du serveur |
headers | object | Non | En-têtes HTTP (par exemple, pour l’authentification) |
tools | string[] | Non | Outils à activer |
timeout | number | Non | Délai d’expiration en millisecondes |
Troubleshooting
Les outils ne s’affichent pas ou ne sont pas appelés
-
Vérifier que le serveur MCP démarre correctement
- Vérifiez que la commande et les arguments sont corrects
- Vérifier que le processus du serveur ne se bloque pas au démarrage
- Recherchez la sortie d’erreur dans stderr
-
Vérifier la configuration de l’outil
- Assurez-vous que
toolsest défini sur["*"]ou répertorie les outils spécifiques dont vous avez besoin - Un tableau
[]vide signifie qu’aucun outil n’est activé
- Assurez-vous que
-
Vérifier la connectivité pour les serveurs distants
- Vérifier que l’URL est accessible
- Vérifier que les en-têtes d’authentification sont corrects
Problèmes courants
| Issue | Solution |
|---|---|
| « Serveur MCP introuvable » | Vérifier que le chemin de commande est correct et exécutable |
| « Connexion refusée » (HTTP) | Vérifiez l’URL et vérifiez que le serveur est en cours d’exécution |
| Erreurs « Délai d’expiration » | Augmenter la valeur ou vérifier les performances du timeout serveur |
| Les outils fonctionnent, mais ne sont pas appelés | Assurez-vous que votre invite nécessite clairement la fonctionnalité de l’outil |
Pour obtenir des instructions détaillées sur le débogage, consultez autoTITLE.
Ressources associées
- Spécification du protocole de contexte de modèle
- Répertoire des serveurs MCP - Serveurs MCP de la communauté
- GitHub MCP Server - Serveur MCP officiel de GitHub
- Créez votre première application avec Copilot - Concepts de base et outils personnalisés du Kit de développement logiciel (SDK)
- Guide de débogage - Débogage à l’échelle du Kit de développement logiciel (SDK)
Voir aussi
- Guide de débogage du serveur MCP - Résolution détaillée des problèmes MCP
- Problème n° 9 - Question d’utilisation des outils MCP d’origine
- Problème n° 36 - Problème de suivi de la documentation MCP