La fonctionnalité de connecteur Model Context Protocol (MCP) de Claude vous permet de vous connecter à des serveurs MCP distants directement depuis l'API Messages sans client MCP séparé.
Version actuelle : Cette fonctionnalité nécessite l'en-tête bêta : "anthropic-beta": "mcp-client-2025-11-20"
La version précédente (mcp-client-2025-04-04) est dépréciée. Consultez la documentation de la version dépréciée ci-dessous.
Le connecteur MCP utilise deux composants :
mcp_servers) : Définit les détails de connexion au serveur (URL, authentification)tools) : Configure les outils à activer et comment les configurerCet exemple active tous les outils d'un serveur MCP avec la configuration par défaut :
curl https://api.anthropic.com/v1/messages \
-H "Content-Type: application/json" \
-H "X-API-Key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "anthropic-beta: mcp-client-2025-11-20" \
-d '{
"model": "claude-opus-4-6",
"max_tokens": 1000,
"messages": [{"role": "user", "content": "What tools do you have available?"}],
"mcp_servers": [
{
"type": "url",
"url": "https://example-server.modelcontextprotocol.io/sse",
"name": "example-mcp",
"authorization_token": "YOUR_TOKEN"
}
],
"tools": [
{
"type": "mcp_toolset",
"mcp_server_name": "example-mcp"
}
]
}'Chaque serveur MCP dans le tableau mcp_servers définit les détails de connexion :
{
"type": "url",
"url": "https://example-server.modelcontextprotocol.io/sse",
"name": "example-mcp",
"authorization_token": "YOUR_TOKEN"
}| Propriété | Type | Requis | Description |
|---|---|---|---|
type | string | Oui | Actuellement, seul "url" est pris en charge |
url | string | Oui | L'URL du serveur MCP. Doit commencer par https:// |
name | string | Oui | Un identifiant unique pour ce serveur MCP. Doit être référencé par exactement un MCPToolset dans le tableau tools. |
authorization_token | string | Non | Jeton d'autorisation OAuth si requis par le serveur MCP. Consultez la spécification MCP. |
L'MCPToolset se trouve dans le tableau tools et configure les outils du serveur MCP qui sont activés et comment ils doivent être configurés.
{
"type": "mcp_toolset",
"mcp_server_name": "example-mcp",
"default_config": {
"enabled": true,
"defer_loading": false
},
"configs": {
"specific_tool_name": {
"enabled": true,
"defer_loading": true
}
}
}| Propriété | Type | Requis | Description |
|---|---|---|---|
type | string | Oui | Doit être "mcp_toolset" |
mcp_server_name | string | Oui | Doit correspondre à un nom de serveur défini dans le tableau mcp_servers |
default_config | object | Non | Configuration par défaut appliquée à tous les outils de cet ensemble. Les configurations d'outils individuels dans configs remplaceront ces valeurs par défaut. |
configs | object | Non | Remplacements de configuration par outil. Les clés sont les noms des outils, les valeurs sont des objets de configuration. |
cache_control | object | Non | Configuration du point d'arrêt du cache pour cet ensemble d'outils |
Chaque outil (qu'il soit configuré dans default_config ou dans configs) supporte les champs suivants :
| Propriété | Type | Par défaut | Description |
|---|---|---|---|
enabled | boolean | true | Si cet outil est activé |
defer_loading | boolean | false | Si true, la description de l'outil n'est pas envoyée au modèle initialement. Utilisé avec Tool Search Tool. |
Les valeurs de configuration fusionnent avec cette priorité (la plus haute à la plus basse) :
configsdefault_config au niveau de l'ensembleExemple :
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
"default_config": {
"defer_loading": true
},
"configs": {
"search_events": {
"enabled": false
}
}
}Résulte en :
search_events : enabled: false (de configs), defer_loading: true (de default_config)enabled: true (valeur par défaut du système), defer_loading: true (de default_config)Le modèle le plus simple - activer tous les outils d'un serveur :
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
}Définissez enabled: false comme valeur par défaut, puis activez explicitement des outils spécifiques :
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
"default_config": {
"enabled": false
},
"configs": {
"search_events": {
"enabled": true
},
"create_event": {
"enabled": true
}
}
}Activez tous les outils par défaut, puis désactivez explicitement les outils indésirables :
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
"configs": {
"delete_all_events": {
"enabled": false
},
"share_calendar_publicly": {
"enabled": false
}
}
}Combinez la création d'une liste blanche avec une configuration personnalisée pour chaque outil :
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
"default_config": {
"enabled": false,
"defer_loading": true
},
"configs": {
"search_events": {
"enabled": true,
"defer_loading": false
},
"list_events": {
"enabled": true
}
}
}Dans cet exemple :
search_events est activé avec defer_loading: falselist_events est activé avec defer_loading: true (hérité de default_config)L'API applique ces règles de validation :
mcp_server_name dans un MCPToolset doit correspondre à un serveur défini dans le tableau mcp_serversmcp_servers doit être référencé par exactement un MCPToolsetconfigs n'existe pas sur le serveur MCP, un avertissement backend est enregistré mais aucune erreur n'est retournée (les serveurs MCP peuvent avoir une disponibilité d'outils dynamique)Lorsque Claude utilise des outils MCP, la réponse inclura deux nouveaux types de blocs de contenu :
{
"type": "mcp_tool_use",
"id": "mcptoolu_014Q35RayjACSWkSj4X2yov1",
"name": "echo",
"server_name": "example-mcp",
"input": { "param1": "value1", "param2": "value2" }
}{
"type": "mcp_tool_result",
"tool_use_id": "mcptoolu_014Q35RayjACSWkSj4X2yov1",
"is_error": false,
"content": [
{
"type": "text",
"text": "Hello"
}
]
}Vous pouvez vous connecter à plusieurs serveurs MCP en incluant plusieurs définitions de serveur dans mcp_servers et un MCPToolset correspondant pour chacun dans le tableau tools :
{
"model": "claude-opus-4-6",
"max_tokens": 1000,
"messages": [
{
"role": "user",
"content": "Use tools from both mcp-server-1 and mcp-server-2 to complete this task"
}
],
"mcp_servers": [
{
"type": "url",
"url": "https://mcp.example1.com/sse",
"name": "mcp-server-1",
"authorization_token": "TOKEN1"
},
{
"type": "url",
"url": "https://mcp.example2.com/sse",
"name": "mcp-server-2",
"authorization_token": "TOKEN2"
}
],
"tools": [
{
"type": "mcp_toolset",
"mcp_server_name": "mcp-server-1"
},
{
"type": "mcp_toolset",
"mcp_server_name": "mcp-server-2",
"default_config": {
"defer_loading": true
}
}
]
}Pour les serveurs MCP qui nécessitent une authentification OAuth, vous devrez obtenir un jeton d'accès. Le bêta du connecteur MCP supporte le passage d'un paramètre authorization_token dans la définition du serveur MCP.
Les consommateurs d'API sont censés gérer le flux OAuth et obtenir le jeton d'accès avant de faire l'appel API, ainsi que d'actualiser le jeton selon les besoins.
L'inspecteur MCP peut vous guider tout au long du processus d'obtention d'un jeton d'accès à des fins de test.
Exécutez l'inspecteur avec la commande suivante. Vous devez avoir Node.js installé sur votre machine.
npx @modelcontextprotocol/inspectorDans la barre latérale à gauche, pour "Type de transport", sélectionnez soit "SSE" soit "HTTP Streamable".
Entrez l'URL du serveur MCP.
Dans la zone de droite, cliquez sur le bouton "Open Auth Settings" après "Need to configure authentication?".
Cliquez sur "Quick OAuth Flow" et autorisez sur l'écran OAuth.
Suivez les étapes dans la section "OAuth Flow Progress" de l'inspecteur et cliquez sur "Continue" jusqu'à atteindre "Authentication complete".
Copiez la valeur access_token.
Collez-la dans le champ authorization_token dans votre configuration de serveur MCP.
Une fois que vous avez obtenu un jeton d'accès en utilisant l'un des flux OAuth ci-dessus, vous pouvez l'utiliser dans votre configuration de serveur MCP :
{
"mcp_servers": [
{
"type": "url",
"url": "https://example-server.modelcontextprotocol.io/sse",
"name": "authenticated-server",
"authorization_token": "YOUR_ACCESS_TOKEN_HERE"
}
]
}Pour des explications détaillées du flux OAuth, consultez la section Autorisation dans la spécification MCP.
Si vous gérez votre propre connexion client MCP (par exemple, avec des serveurs stdio locaux, des invites MCP ou des ressources MCP), le SDK TypeScript fournit des fonctions d'assistance qui convertissent entre les types MCP et les types d'API Claude. Cela élimine le code de conversion manuel lors de l'utilisation du SDK MCP aux côtés du SDK Anthropic.
Ces assistants sont actuellement disponibles uniquement dans le SDK TypeScript.
Utilisez le paramètre API mcp_servers lorsque vous avez des serveurs distants accessibles via URL et que vous n'avez besoin que du support des outils. Si vous utilisez le SDK Agent, les connexions MCP sont gérées automatiquement. Utilisez les assistants côté client lorsque vous avez besoin de serveurs locaux, d'invites, de ressources ou de plus de contrôle sur la connexion avec le SDK de base.
Installez à la fois le SDK Anthropic et le SDK MCP :
npm install @anthropic-ai/sdk @modelcontextprotocol/sdkImportez les assistants depuis l'espace de noms bêta :
import {
mcpTools,
mcpMessages,
mcpResourceToContent,
mcpResourceToFile,
} from '@anthropic-ai/sdk/helpers/beta/mcp';| Assistant | Description |
|---|---|
mcpTools(tools, mcpClient) | Convertit les outils MCP en outils d'API Claude pour utilisation avec client.beta.messages.toolRunner() |
mcpMessages(messages) | Convertit les messages d'invite MCP au format de message d'API Claude |
mcpResourceToContent(resource) | Convertit une ressource MCP en bloc de contenu d'API Claude |
mcpResourceToFile(resource) | Convertit une ressource MCP en objet fichier pour téléchargement |
Convertissez les outils MCP pour utilisation avec l'exécuteur d'outils du SDK, qui gère l'exécution des outils automatiquement :
import Anthropic from '@anthropic-ai/sdk';
import { mcpTools } from '@anthropic-ai/sdk/helpers/beta/mcp';
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
const anthropic = new Anthropic();
// Connect to an MCP server
const transport = new StdioClientTransport({ command: 'mcp-server', args: [] });
const mcpClient = new Client({ name: 'my-client', version: '1.0.0' });
await mcpClient.connect(transport);
// List tools and convert them for the Claude API
const { tools } = await mcpClient.listTools();
const runner = await anthropic.beta.messages.toolRunner({
model: 'claude-sonnet-4-5',
max_tokens: 1024,
messages: [{ role: 'user', content: 'What tools do you have available?' }],
tools: mcpTools(tools, mcpClient),
});Convertissez les messages d'invite MCP au format de message d'API Claude :
import { mcpMessages } from '@anthropic-ai/sdk/helpers/beta/mcp';
const { messages } = await mcpClient.getPrompt({ name: 'my-prompt' });
const response = await anthropic.beta.messages.create({
model: 'claude-sonnet-4-5',
max_tokens: 1024,
messages: mcpMessages(messages),
});Convertissez les ressources MCP en blocs de contenu à inclure dans les messages, ou en objets fichier pour téléchargement :
import { mcpResourceToContent, mcpResourceToFile } from '@anthropic-ai/sdk/helpers/beta/mcp';
// As a content block in a message
const resource = await mcpClient.readResource({ uri: 'file:///path/to/doc.txt' });
await anthropic.beta.messages.create({
model: 'claude-sonnet-4-5',
max_tokens: 1024,
messages: [
{
role: 'user',
content: [
mcpResourceToContent(resource),
{ type: 'text', text: 'Summarize this document' },
],
},
],
});
// As a file upload
const fileResource = await mcpClient.readResource({ uri: 'file:///path/to/data.json' });
await anthropic.beta.files.upload({ file: mcpResourceToFile(fileResource) });Les fonctions de conversion lèvent UnsupportedMCPValueError si une valeur MCP n'est pas prise en charge par l'API Claude. Cela peut se produire avec des types de contenu non pris en charge, des types MIME ou des liens de ressources non-HTTP.
Si vous utilisez l'en-tête bêta dépréciée mcp-client-2025-04-04, suivez ce guide pour migrer vers la nouvelle version.
mcp-client-2025-04-04 à mcp-client-2025-11-20tools en tant qu'objets MCPToolset, pas dans la définition du serveur MCPAvant (dépréciée) :
{
"model": "claude-opus-4-6",
"max_tokens": 1000,
"messages": [...],
"mcp_servers": [
{
"type": "url",
"url": "https://mcp.example.com/sse",
"name": "example-mcp",
"authorization_token": "YOUR_TOKEN",
"tool_configuration": {
"enabled": true,
"allowed_tools": ["tool1", "tool2"]
}
}
]
}Après (actuelle) :
{
"model": "claude-opus-4-6",
"max_tokens": 1000,
"messages": [...],
"mcp_servers": [
{
"type": "url",
"url": "https://mcp.example.com/sse",
"name": "example-mcp",
"authorization_token": "YOUR_TOKEN"
}
],
"tools": [
{
"type": "mcp_toolset",
"mcp_server_name": "example-mcp",
"default_config": {
"enabled": false
},
"configs": {
"tool1": {
"enabled": true
},
"tool2": {
"enabled": true
}
}
}
]
}| Ancien modèle | Nouveau modèle |
|---|---|
Pas de tool_configuration (tous les outils activés) | MCPToolset sans default_config ou configs |
tool_configuration.enabled: false | MCPToolset avec default_config.enabled: false |
tool_configuration.allowed_tools: [...] | MCPToolset avec default_config.enabled: false et outils spécifiques activés dans configs |
Cette version est dépréciée. Veuillez migrer vers mcp-client-2025-11-20 en utilisant le guide de migration ci-dessus.
La version précédente du connecteur MCP incluait la configuration des outils directement dans la définition du serveur MCP :
{
"mcp_servers": [
{
"type": "url",
"url": "https://example-server.modelcontextprotocol.io/sse",
"name": "example-mcp",
"authorization_token": "YOUR_TOKEN",
"tool_configuration": {
"enabled": true,
"allowed_tools": ["example_tool_1", "example_tool_2"]
}
}
]
}| Propriété | Type | Description |
|---|---|---|
tool_configuration | object | Dépréciée : Utilisez MCPToolset dans le tableau tools à la place |
tool_configuration.enabled | boolean | Dépréciée : Utilisez default_config.enabled dans MCPToolset |
tool_configuration.allowed_tools | array | Dépréciée : Utilisez le modèle de liste blanche avec configs dans MCPToolset |
Was this page helpful?