La función de conector "Model Context Protocol", o MCP, de Claude te permite conectarte a servidores MCP remotos directamente desde la API de Messages sin un cliente MCP separado.
Una vez que un servidor MCP está conectado, Claude llama a sus herramientas cuando la solicitud del usuario corresponde a la capacidad descrita de una herramienta, ya sea de forma explícita ("busca en Jira los bugs abiertos") o implícita ("¿qué está bloqueando el lanzamiento?" con un servidor de Jira conectado).
Claude no llama a una herramienta MCP para preguntas de conocimiento general sobre un servicio conectado. Preguntar "¿cómo funcionan las bases de datos de Notion?" con un servidor de Notion conectado se responde directamente; preguntar "¿qué hay en mi base de datos de Proyectos?" activa la herramienta.
Puedes orientar con qué facilidad Claude llama a las herramientas MCP a través de tu indicación del sistema. Consulta Cuándo usa Claude las herramientas para obtener orientación general y ejemplos de redacción.
El conector MCP utiliza dos componentes:
mcp_servers): Define los detalles de conexión del servidor (URL, autenticación)tools): Configura qué herramientas habilitar y cómo configurarlasEste ejemplo habilita todas las herramientas de un servidor MCP con la configuración predeterminada:
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)Cada servidor MCP en el arreglo mcp_servers define los detalles de conexión:
{
"type": "url",
"url": "https://example-server.modelcontextprotocol.io/sse",
"name": "example-mcp",
"authorization_token": "YOUR_TOKEN"
}| Propiedad | Tipo | Obligatorio | Descripción |
|---|---|---|---|
type | string | Sí | Actualmente solo se admite "url". |
url | string | Sí | La URL del servidor MCP. Debe comenzar con https://. |
name | string | Sí | Un identificador único para este servidor MCP. Debe ser referenciado por exactamente un MCPToolset en el arreglo tools. |
authorization_token | string | No | Token de autorización OAuth si el servidor MCP lo requiere. Consulta la especificación MCP. |
El MCPToolset se encuentra en el arreglo tools y configura qué herramientas del servidor MCP están habilitadas y cómo deben configurarse.
{
"type": "mcp_toolset",
"mcp_server_name": "example-mcp",
"default_config": {
"enabled": true,
"defer_loading": false
},
"configs": {
"specific_tool_name": {
"enabled": true,
"defer_loading": true
}
}
}| Propiedad | Tipo | Obligatorio | Descripción |
|---|---|---|---|
type | string | Sí | Debe ser "mcp_toolset". |
mcp_server_name | string | Sí | Debe coincidir con un nombre de servidor definido en el arreglo mcp_servers. |
default_config | object | No | Configuración predeterminada aplicada a todas las herramientas de este conjunto. Las configuraciones individuales de herramientas en configs anulan estos valores predeterminados. |
configs | object | No | Anulaciones de configuración por herramienta. Las claves son nombres de herramientas, los valores son objetos de configuración. |
cache_control | object | No | Configuración de punto de interrupción de caché de almacenamiento en caché de prompts para este toolset. |
Cada herramienta (ya sea configurada en default_config o en configs) admite los siguientes campos:
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
enabled | boolean | true | Indica si esta herramienta está habilitada. |
defer_loading | boolean | false | Si es true, la descripción de la herramienta no se envía al modelo inicialmente. Se usa con la herramienta de búsqueda de herramientas. |
Para ver el directorio completo de herramientas proporcionadas por Anthropic y propiedades opcionales como defer_loading, consulta la Referencia de herramientas. Para buscar en conjuntos grandes de herramientas, consulta la herramienta de búsqueda de herramientas.
Los valores de configuración se combinan con esta precedencia (de mayor a menor):
configsdefault_config a nivel de conjuntoEjemplo:
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
"default_config": {
"defer_loading": true
},
"configs": {
"search_events": {
"enabled": false
}
}
}Resulta en:
search_events: enabled: false (de configs), defer_loading: true (de default_config)enabled: true (predeterminado del sistema), defer_loading: true (de default_config)El patrón más simple: habilitar todas las herramientas de un servidor:
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp"
}Establece enabled: false como predeterminado y luego habilita explícitamente herramientas específicas:
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
"default_config": {
"enabled": false
},
"configs": {
"search_events": {
"enabled": true
},
"create_event": {
"enabled": true
}
}
}Habilita todas las herramientas de forma predeterminada y luego deshabilita explícitamente las herramientas no deseadas. Se recomienda incluir en la lista de denegados las herramientas de escritura o destructivas al crear asistentes de solo lectura, o cuando quieras un paso de confirmación humana antes de los cambios de estado:
{
"type": "mcp_toolset",
"mcp_server_name": "google-calendar-mcp",
"configs": {
"delete_all_events": {
"enabled": false
},
"share_calendar_publicly": {
"enabled": false
}
}
}Combina la lista de permitidos con una configuración personalizada para cada herramienta:
{
"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
}
}
}En este ejemplo:
search_events está habilitada con defer_loading: falselist_events está habilitada con defer_loading: true (heredado de default_config)La API aplica estas reglas de validación:
mcp_server_name en un MCPToolset debe coincidir con un servidor definido en el arreglo mcp_serversmcp_servers debe ser referenciado por exactamente un MCPToolsetconfigs no existe en el servidor MCP, se registra una advertencia en el backend pero no se devuelve ningún error (los servidores MCP pueden tener disponibilidad dinámica de herramientas)Cuando Claude usa herramientas MCP, la respuesta incluye dos nuevos tipos de bloques de contenido:
{
"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"
}
]
}Puedes conectarte a múltiples servidores MCP incluyendo múltiples definiciones de servidor en mcp_servers y un MCPToolset correspondiente para cada uno en el arreglo 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 muchas herramientas disponibles, Claude selecciona basándose en los nombres y descripciones de las herramientas. Las descripciones claras y específicas de las herramientas mejoran la precisión de la selección. Para conjuntos grandes de herramientas (docenas de herramientas en varios servidores), considera habilitar defer_loading con la herramienta de búsqueda de herramientas para que solo se muestren las herramientas relevantes por consulta.
Para los servidores MCP que requieren autenticación OAuth, necesitarás obtener un token de acceso. La beta del conector MCP admite pasar un parámetro authorization_token en la definición del servidor MCP.
Se espera que los consumidores de la API manejen el flujo OAuth y obtengan el token de acceso antes de realizar la llamada a la API, y que actualicen el token según sea necesario.
El inspector MCP puede guiarte a través del proceso de obtener un token de acceso para fines de prueba.
Ejecuta el inspector con el siguiente comando. Necesitas tener Node.js instalado en tu máquina.
npx @modelcontextprotocol/inspectorEn la barra lateral de la izquierda, para "Transport type", selecciona "SSE" o "Streamable HTTP".
Ingresa la URL del servidor MCP.
En el área de la derecha, haz clic en el botón "Open Auth Settings" después de "Need to configure authentication?".
Haz clic en "Quick OAuth Flow" y autoriza en la pantalla de OAuth.
Sigue los pasos en la sección "OAuth Flow Progress" del inspector y haz clic en "Continue" hasta llegar a "Authentication complete".
Copia el valor de access_token.
Pégalo en el campo authorization_token de tu configuración del servidor MCP.
Una vez que hayas obtenido un token de acceso usando cualquiera de los flujos OAuth anteriores, puedes usarlo en tu configuración del servidor MCP:
{
"mcp_servers": [
{
"type": "url",
"url": "https://example-server.modelcontextprotocol.io/sse",
"name": "authenticated-server",
"authorization_token": "YOUR_ACCESS_TOKEN_HERE"
}
]
}Para obtener explicaciones detalladas del flujo OAuth, consulta la sección de Autorización en la especificación MCP.
Si gestionas tu propia conexión de cliente MCP (por ejemplo, con servidores stdio locales, prompts MCP o recursos MCP), los SDK proporcionan funciones auxiliares que convierten entre tipos MCP y tipos de la API de Claude. Esto elimina el código de conversión manual cuando usas un SDK de MCP para tu lenguaje (por ejemplo, el SDK de MCP para TypeScript) junto con el SDK de Anthropic.
Instala tanto el SDK de Anthropic como el SDK de MCP:
Los helpers MCP están incluidos en el extra mcp, que requiere Python 3.10 o posterior:
pip install "anthropic[mcp]"Importa los helpers para tu lenguaje:
from anthropic.lib.tools.mcp import (
async_mcp_tool,
mcp_message,
mcp_resource_to_content,
mcp_resource_to_file,
)Los nombres de los helpers y las firmas exactas siguen las convenciones de cada lenguaje; esta tabla muestra las formas de TypeScript:
| Helper | Descripción |
|---|---|
mcpTools(tools, mcpClient) | Convierte herramientas MCP en herramientas de la API de Claude para usar con client.beta.messages.toolRunner() |
mcpMessages(messages) | Convierte mensajes de prompt MCP al formato de mensajes de la API de Claude |
mcpResourceToContent(resource) | Convierte un recurso MCP en un bloque de contenido de la API de Claude |
mcpResourceToFile(resource) | Convierte un recurso MCP en un objeto de archivo para cargar |
Convierte herramientas MCP para usarlas con el tool runner del SDK, que maneja la ejecución de herramientas automáticamente:
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:
# Conectarse a un servidor 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()
# Listar las herramientas y convertirlas para la API de 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())Convierte mensajes de prompt MCP al formato de mensajes de la API de 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)Convierte recursos MCP en bloques de contenido para incluir en mensajes, o en objetos de archivo para cargar:
from anthropic.lib.tools.mcp import (
mcp_resource_to_content,
mcp_resource_to_file,
)
# Como un bloque de contenido en un mensaje
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)
# Como una carga de archivo
file_resource = await mcp_client.read_resource(
uri="file:///path/to/data.json",
)
uploaded = await client.beta.files.upload(
file=mcp_resource_to_file(file_resource),
)
print(uploaded.id)Las funciones de conversión lanzan UnsupportedMCPValueError si un valor MCP no es compatible con la API de Claude (en Go, los helpers devuelven un UnsupportedValueError; en Java y C#, lanzan AnthropicInvalidDataException). Esto puede ocurrir con tipos de contenido no compatibles, tipos MIME o enlaces de recursos (resuelve los enlaces de recursos con tu cliente MCP antes de convertir).
Puedes incluir mcp_servers en solicitudes de la API de Message Batches. Las llamadas a herramientas MCP a través de la API de Batches tienen el mismo precio que las de las solicitudes regulares de la API de Messages.
El conector MCP no está cubierto por los acuerdos de ZDR. Los datos intercambiados con servidores MCP, incluidas las definiciones de herramientas y los resultados de ejecución, se retienen de acuerdo con la política estándar de retención de datos de Anthropic.
Para conocer la elegibilidad de ZDR en todas las funciones, consulta API y retención de datos.
Si estás usando el encabezado beta obsoleto mcp-client-2025-04-04, sigue esta guía para migrar a la nueva versión.
mcp-client-2025-04-04 a mcp-client-2025-11-20tools como objetos MCPToolset, no en la definición del servidor MCPAntes (obsoleto):
{
"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"]
}
}
]
}Después (actual):
{
"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
}
}
}
]
}| Patrón antiguo | Patrón nuevo |
|---|---|
Sin tool_configuration (todas las herramientas habilitadas) | MCPToolset sin default_config ni configs |
tool_configuration.enabled: false | MCPToolset con default_config.enabled: false |
tool_configuration.allowed_tools: [...] | MCPToolset con default_config.enabled: false y herramientas específicas habilitadas en configs |
La versión anterior del conector MCP incluía la configuración de herramientas directamente en la definición del servidor 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"]
}
}
]
}| Propiedad | Tipo | Descripción |
|---|---|---|
tool_configuration | object | Obsoleto: Usa MCPToolset en el arreglo tools en su lugar |
tool_configuration.enabled | boolean | Obsoleto: Usa default_config.enabled en MCPToolset |
tool_configuration.allowed_tools | array | Obsoleto: Usa el patrón de lista de permitidos con configs en MCPToolset |
| Supported platforms |
|
|---|
Was this page helpful?