La funzionalità del connettore "Model Context Protocol", o MCP, di Claude ti consente di connetterti a server MCP remoti direttamente dalla Messages API senza un client MCP separato.
Una volta connesso un server MCP, Claude chiama i suoi strumenti quando la richiesta dell'utente corrisponde a una capacità descritta di uno strumento, sia esplicitamente ("cerca su Jira i bug aperti") sia implicitamente ("cosa sta bloccando il rilascio?" con un server Jira collegato).
Claude non chiama uno strumento MCP per domande di conoscenza generale su un servizio connesso. Chiedere "come funzionano i database di Notion?" con un server Notion collegato riceve una risposta diretta; chiedere "cosa c'è nel mio database Projects?" attiva lo strumento.
Puoi orientare la propensione di Claude a chiamare gli strumenti MCP tramite il tuo prompt di sistema. Consulta Quando Claude usa gli strumenti per indicazioni generali ed esempi di formulazione.
Il connettore MCP utilizza due componenti:
mcp_servers): Definisce i dettagli di connessione al server (URL, autenticazione)tools): Configura quali strumenti abilitare e come configurarliQuesto esempio abilita tutti gli strumenti di un server MCP con la configurazione predefinita:
client = anthropic.Anthropic()
response = client.beta.messages.create(
model="claude-opus-5",
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"}],
betas=["mcp-client-2025-11-20"],
)
print(response)Ogni server MCP nell'array mcp_servers definisce i dettagli di connessione:
{
"type": "url",
"url": "https://example-server.modelcontextprotocol.io/sse",
"name": "example-mcp",
"authorization_token": "YOUR_TOKEN"
}| Proprietà | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
type | string | Sì | Attualmente è supportato solo "url". |
url | string | Sì | L'URL del server MCP. Deve iniziare con https://. |
name | string | Sì | Un identificatore univoco per questo server MCP. Deve essere referenziato da esattamente un MCPToolset nell'array tools. |
authorization_token | string | No | Token di autorizzazione OAuth se richiesto dal server MCP. Consulta la specifica MCP. |
L'MCPToolset risiede nell'array tools e configura quali strumenti del server MCP sono abilitati e come devono essere configurati.
{
"type": "mcp_toolset",
"mcp_server_name": "example-mcp",
"default_config": {
"enabled": true,
"defer_loading": false
},
"configs": {
"specific_tool_name": {
"enabled": true,
"defer_loading": true
}
}
}| Proprietà | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
type | string | Sì | Deve essere "mcp_toolset". |
mcp_server_name | string | Sì | Deve corrispondere a un nome di server definito nell'array mcp_servers. |
default_config | object | No | Configurazione predefinita applicata a tutti gli strumenti in questo set. Le configurazioni dei singoli strumenti in configs sovrascrivono questi valori predefiniti. |
configs | object | No | Override di configurazione per singolo strumento. Le chiavi sono nomi di strumenti, i valori sono oggetti di configurazione. |
cache_control | object | No | Configurazione del breakpoint di cache per la cache dei prompt per questo toolset. |
Ogni strumento (sia configurato in default_config che in configs) supporta i seguenti campi:
| Proprietà | Tipo | Predefinito | Descrizione |
|---|---|---|---|
enabled | boolean | true | Indica se questo strumento è abilitato. |
defer_loading | boolean | false | Se true, la descrizione dello strumento non viene inviata inizialmente al modello. Utilizzato con lo strumento Tool search. |
Per l'elenco completo degli strumenti forniti da Anthropic e delle proprietà opzionali come defer_loading, consulta il Riferimento degli strumenti. Per la ricerca in set di strumenti di grandi dimensioni, consulta lo strumento Tool search.
I valori di configurazione vengono uniti con questa precedenza (dalla più alta alla più bassa):
configsdefault_config a livello di setEsempio:
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
"default_config": {
"defer_loading": true
},
"configs": {
"search_events": {
"enabled": false
}
}
}Risultato:
search_events: enabled: false (da configs), defer_loading: true (da default_config)enabled: true (predefinito di sistema), defer_loading: true (da default_config)Il pattern più semplice: abilita tutti gli strumenti di un server:
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp"
}Imposta enabled: false come predefinito, quindi abilita esplicitamente strumenti specifici:
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
"default_config": {
"enabled": false
},
"configs": {
"search_events": {
"enabled": true
},
"create_event": {
"enabled": true
}
}
}Abilita tutti gli strumenti per impostazione predefinita, quindi disabilita esplicitamente gli strumenti indesiderati. Inserire in denylist gli strumenti di scrittura o distruttivi è consigliato quando si creano assistenti di sola lettura, o quando si desidera un passaggio di conferma umana prima delle modifiche di stato:
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
"configs": {
"delete_all_events": {
"enabled": false
},
"share_calendar_publicly": {
"enabled": false
}
}
}Combina l'allowlist con una configurazione personalizzata per ogni strumento:
{
"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
}
}
}In questo esempio:
search_events è abilitato con defer_loading: falselist_events è abilitato con defer_loading: true (ereditato da default_config)L'API applica queste regole di validazione:
mcp_server_name in un MCPToolset deve corrispondere a un server definito nell'array mcp_serversmcp_servers deve essere referenziato da esattamente un MCPToolsetconfigs non esiste sul server MCP, viene registrato un avviso nel backend ma non viene restituito alcun errore (i server MCP possono avere disponibilità dinamica degli strumenti)Quando Claude usa strumenti MCP, la risposta include due nuovi tipi di blocchi di contenuto:
{
"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"
}
]
}Puoi connetterti a più server MCP includendo più definizioni di server in mcp_servers e un MCPToolset corrispondente per ciascuno nell'array tools:
{
"model": "claude-opus-5",
"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
}
}
]
}Con molti strumenti disponibili, Claude seleziona in base ai nomi e alle descrizioni degli strumenti. Descrizioni chiare e specifiche degli strumenti migliorano l'accuratezza della selezione. Per set di strumenti di grandi dimensioni (decine di strumenti su diversi server), considera di abilitare defer_loading con lo strumento Tool search in modo che vengano mostrati solo gli strumenti rilevanti per ogni query.
Per i server MCP che richiedono l'autenticazione OAuth, dovrai ottenere un access token. La beta del connettore MCP supporta il passaggio di un parametro authorization_token nella definizione del server MCP.
I consumatori dell'API devono gestire il flusso OAuth e ottenere l'access token prima di effettuare la chiamata API, e aggiornare il token quando necessario.
L'MCP inspector può guidarti attraverso il processo di ottenimento di un access token a scopo di test.
Esegui l'inspector con il seguente comando. Devi avere Node.js installato sulla tua macchina.
npx @modelcontextprotocol/inspectorNella barra laterale a sinistra, per "Transport type", seleziona "SSE" o "Streamable HTTP".
Inserisci l'URL del server MCP.
Nell'area a destra, fai clic sul pulsante "Open Auth Settings" dopo "Need to configure authentication?".
Fai clic su "Quick OAuth Flow" e autorizza nella schermata OAuth.
Segui i passaggi nella sezione "OAuth Flow Progress" dell'inspector e fai clic su "Continue" fino a raggiungere "Authentication complete".
Copia il valore access_token.
Incollalo nel campo authorization_token nella configurazione del tuo server MCP.
Una volta ottenuto un access token utilizzando uno dei flussi OAuth precedenti, puoi usarlo nella configurazione del tuo server MCP:
{
"mcp_servers": [
{
"type": "url",
"url": "https://example-server.modelcontextprotocol.io/sse",
"name": "authenticated-server",
"authorization_token": "YOUR_ACCESS_TOKEN_HERE"
}
]
}Per spiegazioni dettagliate del flusso OAuth, consulta la sezione Authorization nella specifica MCP.
Se gestisci la tua connessione client MCP (ad esempio, con server stdio locali, prompt MCP o risorse MCP), gli SDK forniscono funzioni helper che convertono tra i tipi MCP e i tipi dell'API di Claude. Questo elimina il codice di conversione manuale quando si utilizza un SDK MCP per il tuo linguaggio (ad esempio, il TypeScript MCP SDK) insieme all'SDK di Anthropic.
Installa sia l'SDK di Anthropic che l'SDK MCP:
Gli helper MCP sono inclusi nell'extra mcp, che richiede Python 3.10 o versioni successive:
pip install "anthropic[mcp]"Importa gli helper per il tuo linguaggio:
from anthropic.lib.tools.mcp import (
async_mcp_tool,
mcp_message,
mcp_resource_to_content,
mcp_resource_to_file,
)I nomi degli helper e le firme esatte seguono le convenzioni di ciascun linguaggio; questa tabella mostra le forme TypeScript:
| Helper | Descrizione |
|---|---|
mcpTools(tools, mcpClient) | Converte gli strumenti MCP in strumenti dell'API di Claude per l'uso con client.beta.messages.toolRunner() |
mcpMessages(messages) | Converte i messaggi di prompt MCP nel formato di messaggio dell'API di Claude |
mcpResourceToContent(resource) | Converte una risorsa MCP in un blocco di contenuto dell'API di Claude |
mcpResourceToFile(resource) | Converte una risorsa MCP in un oggetto file per l'upload |
Converti gli strumenti MCP per l'uso con il tool runner dell'SDK, che gestisce automaticamente l'esecuzione degli strumenti:
from anthropic.lib.tools.mcp import async_mcp_tool
from mcp import ClientSession
from mcp.client.stdio import StdioServerParameters, stdio_client
client = AsyncAnthropic()
async def main() -> None:
# Connettiti a un server MCP
server_params = StdioServerParameters(command="mcp-server")
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as mcp_client:
await mcp_client.initialize()
# Elenca gli strumenti e convertili per l'API di Claude
tools_result = await mcp_client.list_tools()
runner = client.beta.messages.tool_runner(
model="claude-opus-5",
max_tokens=1024,
messages=[
{"role": "user", "content": "What tools do you have available?"},
],
tools=[async_mcp_tool(tool, mcp_client) for tool in tools_result.tools],
)
final_message = await runner.until_done()
print(final_message)
asyncio.run(main())Converti i messaggi di prompt MCP nel formato di messaggio dell'API di Claude:
from anthropic.lib.tools.mcp import mcp_message
prompt = await mcp_client.get_prompt(name="my-prompt")
response = await client.beta.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[mcp_message(message) for message in prompt.messages],
)
print(response)Converti le risorse MCP in blocchi di contenuto da includere nei messaggi, o in oggetti file per l'upload:
from anthropic.lib.tools.mcp import (
mcp_resource_to_content,
mcp_resource_to_file,
)
# As a content block in a message
resource = await mcp_client.read_resource(uri="file:///path/to/doc.txt")
response = await client.beta.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
mcp_resource_to_content(resource),
{"type": "text", "text": "Summarize this document"},
],
}
],
)
print(response)
# As a file upload
file_resource = await mcp_client.read_resource(
uri="file:///path/to/data.json",
)
uploaded = await client.files.upload(
file=mcp_resource_to_file(file_resource),
)
print(uploaded.id)Le funzioni di conversione lanciano UnsupportedMCPValueError se un valore MCP non è supportato dall'API di Claude (in Go, gli helper restituiscono un UnsupportedValueError; in Java e C#, lanciano AnthropicInvalidDataException). Questo può accadere con tipi di contenuto non supportati, tipi MIME o link a risorse (risolvi i link a risorse con il tuo client MCP prima della conversione).
Puoi includere mcp_servers nelle richieste della Message Batches API. Le chiamate agli strumenti MCP tramite la Batches API hanno lo stesso prezzo di quelle nelle normali richieste della Messages API.
Il connettore MCP non è coperto dagli accordi ZDR. I dati scambiati con i server MCP, incluse le definizioni degli strumenti e i risultati di esecuzione, vengono conservati secondo la politica standard di conservazione dei dati di Anthropic.
Per l'idoneità ZDR su tutte le funzionalità, consulta API e conservazione dei dati.
Se stai utilizzando l'header beta deprecato mcp-client-2025-04-04, segui questa guida per migrare alla nuova versione.
mcp-client-2025-04-04 a mcp-client-2025-11-20tools come oggetti MCPToolset, non nella definizione del server MCPPrima (deprecato):
{
"model": "claude-opus-5",
"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"]
}
}
]
}Dopo (attuale):
{
"model": "claude-opus-5",
"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
}
}
}
]
}| Vecchio pattern | Nuovo pattern |
|---|---|
Nessuna tool_configuration (tutti gli strumenti abilitati) | MCPToolset senza default_config o configs |
tool_configuration.enabled: false | MCPToolset con default_config.enabled: false |
tool_configuration.allowed_tools: [...] | MCPToolset con default_config.enabled: false e strumenti specifici abilitati in configs |
La versione precedente del connettore MCP includeva la configurazione degli strumenti direttamente nella definizione del server 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"]
}
}
]
}| Proprietà | Tipo | Descrizione |
|---|---|---|
tool_configuration | object | Deprecato: Usa invece MCPToolset nell'array tools |
tool_configuration.enabled | boolean | Deprecato: Usa default_config.enabled in MCPToolset |
tool_configuration.allowed_tools | array | Deprecato: Usa il pattern allowlist con configs in MCPToolset |
| Supported platforms |
|
|---|
Was this page helpful?