Qu'est-ce que MCP ?
Le Model Context Protocol (MCP) est un protocole ouvert créé par Anthropic qui permet à Claude Code de se connecter à des services externes. Un serveur MCP expose des "outils" (tools) que Claude peut appeler pour interagir avec des APIs, bases de données, ou tout autre système.
Architecture
Claude Code <-> Client MCP <-> Serveur MCP <-> Service externeLe protocole utilise JSON-RPC sur stdio ou SSE (Server-Sent Events). Claude Code agit comme client MCP et peut se connecter à plusieurs serveurs simultanément.
Configuration
Les serveurs MCP se configurent dans .claude/settings.json :
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "ghp_..."
}
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "postgresql://..."
}
}
}
}Serveurs MCP populaires
- GitHub : Créer des issues, PRs, lire des repos
- PostgreSQL : Requêter et modifier des bases de données
- Filesystem : Accès contrôlé à des répertoires spécifiques
- Slack : Envoyer des messages, lire des canaux
- Google Drive : Lire et créer des documents
- Brave Search : Recherche web
Créer un serveur MCP custom
Un serveur MCP minimal en TypeScript :
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({ name: "mon-serveur", version: "1.0.0" });
server.tool(
"get-weather",
"Obtenir la météo d'une ville",
{ city: z.string() },
async ({ city }) => {
const data = await fetchWeather(city);
return { content: [{ type: "text", text: JSON.stringify(data) }] };
}
);
const transport = new StdioServerTransport();
await server.connect(transport);Bonnes pratiques
- Principe du moindre privilège : N'exposez que les outils nécessaires
- Validation des entrées : Utilisez zod ou un schéma strict pour chaque outil
- Gestion d'erreurs : Retournez des messages d'erreur clairs
- Documentation : Décrivez chaque outil clairement pour que Claude comprenne quand l'utiliser
- Variables d'environnement : Ne hardcodez jamais les credentials
Scope de configuration
- Projet (
.claude/settings.json) : Partagé avec l'équipe, committé dans git - Utilisateur (
~/.claude/settings.json) : Personnel, tokens et credentials privés