Esta página cubre la configuración de MCP para el Agent SDK. Para agregar servidores MCP a la CLI de Claude Code de modo que se carguen en cada proyecto, consulte Alcances de instalación de MCP.
Inicio rápido
Este ejemplo se conecta al servidor MCP de documentación de Claude Code usando transporte HTTP y utilizaallowedTools con un comodín para permitir todas las herramientas del servidor.
Agregar un servidor MCP
Puede configurar servidores MCP en código al llamar aquery(), o en un archivo .mcp.json cargado mediante settingSources.
Agregar un servidor en código
Pase servidores MCP directamente en la opciónmcpServers. Este ejemplo inicia un servidor MCP del sistema de archivos local para /Users/me/projects. Reemplace esa ruta con un directorio en su máquina:
Agregar un servidor desde un archivo de configuración
Cree un archivo.mcp.json en la raíz de su proyecto. El archivo se carga cuando la fuente de configuración project está habilitada, que lo está para las opciones predeterminadas de query(). Si establece settingSources explícitamente, incluya "project" para que este archivo se cargue. Reemplace /Users/me/projects con un directorio en su máquina:
Temporización de la conexión
Claude Code registra los servidores que usted pasa enoptions.mcpServers al inicio y emite el mensaje init una vez que se resuelve la espera de primer turno, si la hay. Si cada servidor de options.mcpServers retrasa el primer turno, y cuándo se conecta, depende de su tipo:
Los servidores cargados desde archivos de configuración como
.mcp.json o desde plugins comúnmente muestran pending en el mensaje init. Cuando options.mcpServers contiene un servidor stdio, HTTP o SSE, el primer turno espera a que se conecten estos servidores pendientes también, hasta MCP_TIMEOUT. Cuando options.mcpServers está vacío o contiene solo servidores SDK, el primer turno espera hasta 2 segundos en su lugar:
- Con búsqueda de herramientas, el valor predeterminado: la espera cubre servidores aún pendientes configurados con
alwaysLoad: truey no el resto. El resto sigue conectándose en segundo plano. Disponibilidad de herramientas describe cómo Claude accede a sus herramientas una vez que se conectan. - Sin búsqueda de herramientas: la espera cubre cada servidor pendiente. Configurar búsqueda de herramientas cubre qué desactiva la búsqueda de herramientas. Si usted excluye la herramienta
ToolSearchde la sesión, por ejemplo a través dedisallowedTools, la sesión también se ejecuta sin búsqueda de herramientas.
permissionPromptToolName, el primer turno también espera al servidor de esa herramienta en todos los casos, hasta MCP_TIMEOUT.
Para establecer la espera del primer turno usted mismo, agregue CLAUDE_CODE_MCP_STARTUP_WAIT_MS a la opción env, por ejemplo CLAUDE_CODE_MCP_STARTUP_WAIT_MS: "5000". El primer turno entonces espera hasta esa cantidad de milisegundos para cada servidor pendiente, independientemente de si la búsqueda de herramientas está disponible. Este plazo también reemplaza la espera del primer turno MCP_TIMEOUT para servidores stdio, HTTP y SSE en options.mcpServers. CLAUDE_CODE_MCP_STARTUP_WAIT_MS requiere Claude Code v2.1.274 o posterior.
Los servidores aún pendientes cuando termina la espera siguen conectándose en segundo plano. Establezca la variable en 0 para omitir la espera. Un servidor permissionPromptToolName mantiene su propia espera MCP_TIMEOUT independientemente del valor.
Para bloquear el inicio mismo en una fase separada y anterior a la espera del primer turno, antes de que se envíe el mensaje init:
- Establezca
MCP_CONNECTION_NONBLOCKINGen0para bloquear todo el lote de conexiones. Claude Code limita esa espera a 5 segundos por defecto. Ajuste el límite con la variable de entornoMCP_CONNECT_TIMEOUT_MS, en milisegundos. Los servidores aún pendientes en ese plazo siguen conectándose en segundo plano. - Establezca
alwaysLoad: trueen la configuración de un servidor para que sus herramientas estén disponibles en sus esquemas completos en el primer turno, exentas de aplazamiento de búsqueda de herramientas. Claude Code espera al inicio a que se conecten las herramientas de ese servidor, limitado al mismo plazo, mientras que otros servidores siguen conectándose en segundo plano; un servidor remoto con una lista de herramientas en caché las proporciona sin conectarse, según la tabla anterior.
system con subtipo init reporta el estado de cada servidor en el momento en que se emite; consulte Manejo de errores para leer esos estados.
Permitir herramientas MCP
Las herramientas MCP requieren permiso explícito antes de que Claude pueda usarlas. Sin permiso, Claude verá que las herramientas están disponibles pero no podrá llamarlas.Convención de nomenclatura de herramientas
Las herramientas MCP siguen el patrón de nomenclaturamcp__<server-name>__<tool-name>. Por ejemplo, un servidor GitHub llamado "github" con una herramienta list_issues se convierte en mcp__github__list_issues.
Aprobación automática con allowedTools
UseallowedTools para aprobar automáticamente herramientas MCP específicas para que Claude pueda usarlas sin un aviso de permiso:
*) le permiten permitir todas las herramientas de un servidor sin enumerar cada una individualmente.
Prefiera
allowedTools sobre modos de permiso para acceso MCP. permissionMode: "acceptEdits" no aprueba automáticamente herramientas MCP (solo ediciones de archivos y comandos Bash del sistema de archivos). permissionMode: "bypassPermissions" sí aprueba automáticamente herramientas MCP pero también desactiva la mayoría de otros avisos de seguridad, lo que es más amplio de lo necesario; consulte Cómo se evalúan los permisos para los avisos que permanecen. Un carácter comodín en allowedTools otorga exactamente el servidor MCP que desea y nada más. Consulte Modos de permiso para una comparación completa.Descubrir herramientas disponibles
Para ver qué herramientas proporciona un servidor MCP, consulte la documentación del servidor o inspeccione el arraytools en el mensaje init system. Los nombres de herramientas MCP comienzan con mcp__.
Claude Code emite el mensaje init después de la espera de conexión de primer turno para servidores pasados en options.mcpServers, por lo que el array tools enumera las herramientas mcp__ de cada servidor que se ha conectado para entonces, más las de servidores con una lista de herramientas en caché, que se conectan en el primer uso. Las herramientas de cualquier otro servidor que no se haya conectado están ausentes; consulte Manejo de errores para leer el estado de cada servidor.
Este filtro imprime los nombres de herramientas MCP:
Tipos de transporte
Los servidores MCP se comunican con su agente utilizando diferentes protocolos de transporte. Consulte la documentación del servidor para ver qué transporte admite:- Si la documentación le proporciona un comando para ejecutar (como
npx @modelcontextprotocol/server-filesystem), use stdio - Si la documentación le proporciona una URL, use HTTP o SSE
- Si está creando sus propias herramientas en código, use un servidor MCP SDK
Servidores stdio
Procesos locales que se comunican a través de stdin/stdout. Utiliza esto para servidores MCP que ejecutas en la misma máquina. Para el formato.mcp.json, usa los mismos campos que se muestran en Agregar un servidor desde un archivo de configuración. En código, pasa el comando y sus argumentos. Reemplaza /Users/me/projects con un directorio en tu máquina:
Servidores HTTP/SSE
Use HTTP o SSE para servidores MCP alojados en la nube y API remotas. Para el formulario.mcp.json, use los mismos campos que en el ejemplo en Encabezados HTTP para servidores remotos, con "type": "sse" para un servidor SSE. En código, pase la URL del servidor:
"type": "http" en su lugar. En archivos de configuración .mcp.json y otros JSON, "streamable-http" se acepta como un alias para "http". El tipo McpHttpServerConfig de los SDK declara solo "http", así que use "http" para servidores que pase en código.
Servidores MCP SDK
Defina herramientas personalizadas directamente en el código de su aplicación en lugar de ejecutar un proceso de servidor separado. Consulte la guía de herramientas personalizadas para obtener detalles de implementación. Un servidor MCP SDK registrado por una solicitud de controlinitialize comienza a conectarse tan pronto como Claude Code procesa la solicitud.
Búsqueda de herramientas MCP
Cuando tiene muchas herramientas MCP configuradas, las definiciones de herramientas pueden consumir una porción significativa de su ventana de contexto. La búsqueda de herramientas resuelve esto al retener las definiciones de herramientas del contexto y cargar solo las que Claude necesita para cada turno. La búsqueda de herramientas está habilitada de forma predeterminada. Consulte Búsqueda de herramientas para opciones de configuración, mejores prácticas y uso de búsqueda de herramientas con herramientas SDK personalizadas.Autenticación
La mayoría de los servidores MCP requieren autenticación para acceder a servicios externos. Pase las credenciales a través de variables de entorno en la configuración del servidor.Pasar credenciales a través de variables de entorno
Use el campoenv para pasar claves API, tokens y otras credenciales al servidor MCP:
- En código
- .mcp.json
Encabezados HTTP para servidores remotos
Para servidores HTTP y SSE, pase los encabezados de autenticación directamente en la configuración del servidor:- En código
- .mcp.json
Autenticación OAuth2
La especificación MCP admite OAuth 2.1 para autorización. El SDK no abre un navegador ni ejecuta un flujo OAuth interactivo. Cuando un servidor configurado devuelve un desafío de autorización y no hay ningún token almacenado disponible, la ejecución del agente continúa sin las herramientas de ese servidor, y el servidor reporta el estadoneeds-auth. La matriz mcp_servers del mensaje de inicialización del sistema aún puede mostrar pending para ese servidor cuando se emite. Para confirmar si un servidor necesita credenciales, consulte mcpServerStatus() en el SDK de TypeScript o get_mcp_status() en Python.
Para proporcionar credenciales, complete el flujo OAuth en su propia aplicación y pase el token de acceso resultante en los headers del servidor:
Ejemplos
Listar problemas de un repositorio
Este ejemplo se conecta al servidor MCP de GitHub remoto para listar problemas recientes. El ejemplo incluye registro de depuración para verificar la conexión MCP y las llamadas a herramientas. Antes de ejecutar, cree un token de acceso personal de GitHub con acceso de lectura a los repositorios que desea consultar y establézcalo como variable de entorno:MCP servers:, un status de connected para github confirma que el token funciona. Si Claude Code tiene una lista de herramientas en caché para el servidor, el estado puede mostrar pending en su lugar y el servidor se conecta en su primera llamada a herramienta. Si el estado es failed o needs-auth, consulte Manejo de errores antes de confiar en el resultado, ya que Claude puede recurrir a herramientas integradas cuando el servidor no está disponible.
Consultar una base de datos
Este ejemplo utiliza DBHub para consultar una base de datos Postgres. El agente descubre automáticamente el esquema de la base de datos, escribe la consulta SQL y devuelve los resultados. La herramientaexecute_sql de DBHub ejecuta cualquier SQL que emita el agente, incluidas escrituras, a menos que lo restrinja. Establecer readonly = true en el archivo de configuración de DBHub hace que DBHub rechace las declaraciones INSERT, UPDATE, DELETE y DDL, por lo que el ejemplo no puede modificar sus datos incluso si el agente emite una escritura. DBHub resuelve ${DATABASE_URL} desde el entorno del proceso cuando carga la configuración, por lo que la cadena de conexión se mantiene fuera del archivo. Cree este dbhub.toml junto a su script:
dbhub.toml
DATABASE_URL en su cadena de conexión. Reemplace los valores de marcador de posición con los detalles de su propia base de datos:
Manejo de errores
Los servidores MCP pueden fallar al conectarse por varias razones: el proceso del servidor podría no estar instalado, las credenciales podrían ser inválidas, o un servidor remoto podría ser inaccesible. Claude Code emite un mensajesystem con subtipo init al inicio de cada consulta. Este mensaje incluye el estado de conexión para cada servidor MCP. El campo status puede ser "pending", "connected", "failed", "needs-auth" o "disabled". Claude Code emite el mensaje init después del tiempo de espera de conexión de primer turno para servidores pasados en options.mcpServers, por lo que un servidor de este tipo que se conectó dentro del tiempo de espera muestra "connected".
En el mensaje init, no trate "pending" como un fallo por sí solo. Puede significar cualquiera de estos:
- El servidor aún no se ha conectado. Vea cuánto tiempo espera Claude Code antes del primer turno
- La lista de herramientas del servidor fue servida desde la caché, con una conexión realizada en el primer uso
- El plazo de conexión expiró. Un servidor de este tipo reporta
"pending"o"failed"dependiendo del tiempo
"failed" o "needs-auth" para detectar servidores que no serán utilizables:
"connected". Cuando la conexión a él se cae a mitad de sesión, Claude Code mueve el servidor de vuelta a "pending" mientras se reconecta. Una llamada posterior a mcpServerStatus() en TypeScript, o ClaudeSDKClient.get_mcp_status() en Python, puede entonces reportar "pending" para un servidor que vio conectado anteriormente, sin cambio de configuración de su parte.
Después de que cinco intentos de reconexión fallen, el servidor reporta "failed", o "needs-auth" cuando necesita ser autorizado nuevamente. Un servidor HTTP o SSE en estado "failed" aún puede volver a "connected" sin que hagas ninguna llamada, porque Claude Code sigue reintentando en segundo plano después de un error transitorio. Para reintentar manualmente, llama a reconnectMcpServer() en TypeScript o ClaudeSDKClient.reconnect_mcp_server() en Python.
Solución de problemas
El servidor muestra estado “failed”
Verifique el mensajeinit para ver qué servidores no pudieron conectarse:
"pending" no significa que el servidor haya fallado. Consulte Manejo de errores para ver los casos que cubre en la inicialización. Para obtener estados actualizados más adelante en la sesión, llame al método mcpServerStatus() de la consulta en el SDK de TypeScript, o ClaudeSDKClient.get_mcp_status() en Python.
Causas comunes:
- Variables de entorno faltantes: Asegúrese de que los tokens y credenciales requeridos estén configurados. Para servidores stdio, verifique que el campo
envcoincida con lo que el servidor espera. - Servidor no instalado: Para comandos
npx, verifique que el paquete exista y que Node.js esté en su PATH. - Cadena de conexión inválida: Para servidores de base de datos, verifique el formato de la cadena de conexión y que la base de datos sea accesible.
- Problemas de red: Para servidores HTTP/SSE remotos, verifique que la URL sea accesible y que los firewalls permitan la conexión.
Las herramientas no se están llamando
Si Claude ve herramientas pero no las utiliza, verifique que haya otorgado permiso conallowedTools:
Falta una herramienta en un servidor MCP del SDK
En el SDK de TypeScript, cuando el esquema de entrada de una herramienta no se puede convertir a JSON Schema, el servidor que creaste concreateSdkMcpServer() omite esa herramienta al listar sus herramientas. En ese momento, el SDK emite una advertencia. En Node.js, la advertencia es una advertencia de proceso con el código CLAUDE_SDK_MCP_TOOL_SCHEMA_UNCONVERTIBLE, y comienza con este texto:
Tiempos de espera de conexión
Las conexiones del servidor MCP se agotan después de 30 segundos de forma predeterminada. Para cambiar cuánto tiempo puede tomar una llamada de herramienta en ejecución, establezcaMCP_TOOL_TIMEOUT. Si su servidor tarda más en iniciarse, la conexión falla. Aumente el límite de conexión con la variable de entorno MCP_TIMEOUT, en milisegundos. Para servidores que necesitan más tiempo de inicio, también considere:
- Usar un servidor más ligero si está disponible
- Precalentar el servidor antes de iniciar su agente
- Verificar los registros del servidor para detectar causas de inicialización lenta
timeout a createSdkMcpServer().
La salida de la herramienta excede el máximo de tokens permitidos
El SDK aplica los mismos límites de salida MCP que Claude Code. Cuando el resultado exitoso de una herramienta sin contenido de imagen es mayor que 25.000 tokens, Claude Code guarda la salida en un archivo y reemplaza el resultado de la herramienta con un mensaje de error que nombra la ruta del archivo, para que el agente pueda leer la salida en porciones. Para cambiar el límite de tokens, establece la variable de entornoMAX_MCP_OUTPUT_TOKENS. A menos que la herramienta declare anthropic/maxResultSizeChars, un resultado de texto exitoso de más de 50.000 caracteres se guarda en un archivo independientemente del límite de tokens. Consulta Límites de salida MCP y advertencias para el comportamiento completo, incluida la forma en que un servidor declara esa anotación.
Recursos relacionados
- Guía de herramientas personalizadas: Cree su propio servidor MCP que se ejecute en proceso con su aplicación SDK
- Permisos: Controle qué herramientas MCP puede usar su agente con
allowedToolsydisallowedTools - Referencia del SDK de TypeScript: Referencia completa de la API incluyendo opciones de configuración de MCP
- Referencia del SDK de Python: Referencia completa de la API incluyendo opciones de configuración de MCP
- Directorio de servidores MCP: Explore los servidores MCP disponibles para bases de datos, API y más