Conectar Claude Code a herramientas mediante MCP
Aprenda cómo conectar Claude Code a sus herramientas con el Model Context Protocol.
Claude Code puede conectarse a cientos de herramientas externas y fuentes de datos a través del Model Context Protocol (MCP), un estándar de código abierto para integraciones de IA con herramientas. Los servidores MCP dan a Claude Code acceso a sus herramientas, bases de datos y APIs.
Conecte un servidor cuando se encuentre copiando datos en el chat desde otra herramienta, como un rastreador de problemas o un panel de monitoreo. Una vez conectado, Claude puede leer y actuar en ese sistema directamente en lugar de trabajar con lo que pegue.
Si está conectando su primer servidor, comience con el inicio rápido de MCP para un recorrido paso a paso. Esta página es la referencia completa.
Qué puede hacer con MCP
Con servidores MCP conectados, puede pedirle a Claude Code que:
- Implemente características desde rastreadores de problemas: "Agregue la característica descrita en el problema JIRA ENG-4521 y cree un PR en GitHub."
- Analice datos de monitoreo: "Verifique Sentry y Statsig para verificar el uso de la característica descrita en ENG-4521."
- Consulte bases de datos: "Encuentre correos electrónicos de 10 usuarios aleatorios que utilizaron la característica ENG-4521, basándose en nuestra base de datos PostgreSQL."
- Integre diseños: "Actualice nuestra plantilla de correo electrónico estándar basándose en los nuevos diseños de Figma que se publicaron en Slack"
- Automatice flujos de trabajo: "Cree borradores de Gmail invitando a estos 10 usuarios a una sesión de retroalimentación sobre la nueva característica."
- Reaccione a eventos externos: Un servidor MCP también puede actuar como un canal que envía mensajes a su sesión, para que Claude reaccione a mensajes de Telegram, chats de Discord o eventos de webhook mientras está fuera.
Buscar y crear servidores MCP
Explore conectores revisados en el Directorio de Anthropic. Los conectores del Directorio utilizan la misma infraestructura MCP que Claude Code, por lo que puede agregar cualquier servidor remoto listado allí con claude mcp add.
[!WARNING]
Verifique que confía en cada servidor antes de conectarlo. Los servidores que obtienen contenido externo pueden exponerlo al riesgo de inyección de indicaciones.
Para crear su propio servidor, consulte la guía del servidor MCP para los fundamentos del protocolo y la documentación de construcción de conectores de Claude para autenticación, pruebas y envío al Directorio.
También puede hacer que Claude cree un servidor para usted con el plugin oficial mcp-server-dev.
1. Instalar el plugin
En la extensión de VS Code o en la aplicación de escritorio, sigue Instalar un plugin en lugar de este paso. En una terminal, inicia Claude Code ejecutando claude y luego ingresa esto en su prompt:
/plugin install mcp-server-dev@claude-plugins-official
Si la instalación falla, haga coincidir el mensaje que Claude Code reporta:
Marketplace "claude-plugins-official" not found: agrega el marketplace con/plugin marketplace add anthropics/claude-plugins-officialy luego reintenta la instalación.Plugin "<name>" not found in marketplace "claude-plugins-official": es posible que tu copia local del catálogo del marketplace esté desactualizada. Actualízala con/plugin marketplace update claude-plugins-officialy luego reintenta la instalación. Si el reintento muestra el mismo mensaje, consulta Plugin no encontrado en el marketplace.
Si el resumen de instalación reporta Run /reload-plugins to apply., Claude Code ejecuta esa recarga por ti. Si la recarga advierte que tu próximo mensaje volvería a leer la conversación, ejecuta /reload-plugins --force.
2. Ejecutar el skill de creación
/mcp-server-dev:build-mcp-server
Claude le pregunta sobre su caso de uso y crea un servidor HTTP remoto o un servidor stdio local.
Instalación de servidores MCP
Los servidores MCP se pueden configurar de varias formas según tus necesidades:
Opción 1: Agregar un servidor HTTP remoto
Los servidores HTTP son la opción recomendada para conectarse a servidores MCP remotos. Este es el transporte más ampliamente compatible para servicios basados en la nube.
# Sintaxis básica
claude mcp add --transport http <name> <url>
# Ejemplo real: Conectar a Notion
claude mcp add --transport http notion https://mcp.notion.com/mcp
# Ejemplo con token Bearer
claude mcp add --transport http secure-api https://api.example.com/mcp \
--header "Authorization: Bearer your-token"
Al configurar servidores MCP a través de JSON en .mcp.json, ~/.claude.json, o claude mcp add-json, el campo type acepta streamable-http como alias para http. La especificación MCP utiliza el nombre streamable-http para este transporte, por lo que las configuraciones copiadas de la documentación del servidor funcionan sin modificación.
Una entrada JSON que tiene una url pero sin type es un error de configuración, porque Claude Code lee una entrada sin type como un servidor stdio. Claude Code omite ese servidor e informa MCP server "<name>" has a "url" but no "type"; add "type": "http" (or "sse" / "ws") to this entry.
Solo una aplicación host SDK, como una aplicación Agent SDK o la aplicación de escritorio, puede registrar un servidor "type": "sdk" en proceso. Claude Code omite una entrada "type": "sdk" en .mcp.json, ~/.claude.json, o la configuración e informa Skipped — MCP server "<name>" declares type "sdk", which only an SDK host application can register.
En ejecuciones --output-format stream-json, Claude Code también informa una entrada --mcp-config omitida en el campo mcp_server_errors del evento system/init, para que los scripts puedan detectar que el servidor nunca se cargó. Esto requiere Claude Code v2.1.219 o posterior.
Opción 2: Agregar un servidor SSE remoto
[!WARNING]
El transporte SSE (Server-Sent Events) está obsoleto. Usa servidores HTTP en su lugar, cuando estén disponibles.
Algunos servicios aún exponen solo un endpoint SSE. Agrégalos con el mismo comando claude mcp add --transport http <name> <url> que un servidor HTTP. Claude Code intenta el transporte HTTP primero y cambia a SSE cuando el servidor no lo acepta. El cambio automático requiere Claude Code v2.1.265 o posterior.
En una versión anterior, o para conectarte sobre SSE directamente, pasa --transport sse en su lugar:
# Sintaxis básica
claude mcp add --transport sse <name> <url>
# Ejemplo real: Conectar a Asana
claude mcp add --transport sse asana https://mcp.asana.com/sse
# Ejemplo con encabezado de autenticación
claude mcp add --transport sse private-api https://api.company.com/sse \
--header "X-API-Key: your-key-here"
Opción 3: Agregar un servidor stdio local
Los servidores stdio se ejecutan como procesos locales en tu máquina. Son ideales para herramientas que necesitan acceso directo al sistema o scripts personalizados.
Claude Code establece CLAUDE_PROJECT_DIR en el entorno del servidor generado a la raíz del proyecto, para que tu servidor pueda resolver rutas relativas al proyecto sin depender del directorio de trabajo. Este es el mismo directorio que los hooks reciben en su variable CLAUDE_PROJECT_DIR. Léelo desde dentro de tu proceso de servidor, por ejemplo process.env.CLAUDE_PROJECT_DIR en Node o os.environ["CLAUDE_PROJECT_DIR"] en Python.
CLAUDE_PROJECT_DIR es la raíz estable del proyecto y no cambia cuando agregas o eliminas directorios de trabajo a mitad de sesión. Un servidor que limita su propio acceso al sistema de archivos a un conjunto de directorios permitidos debe implementar la solicitud MCP roots/list en su lugar. Claude Code responde roots/list con el directorio de lanzamiento de la sesión más cada directorio de trabajo adicional que hayas otorgado con --add-dir, /add-dir, o el ajuste additionalDirectories. Claude Code envía notifications/roots/list_changed cuando ese conjunto cambia.
Esta variable se establece en el entorno del servidor, no en el entorno propio de Claude Code, por lo que hacer referencia a ella a través de la expansión ${VAR} en el command o args de una entrada .mcp.json con alcance de proyecto o de una entrada de servidor con alcance local o de usuario en ~/.claude.json requiere un valor predeterminado como ${CLAUDE_PROJECT_DIR:-.}. Las configuraciones MCP proporcionadas por plugins sustituyen ${CLAUDE_PROJECT_DIR} directamente y no necesitan el valor predeterminado.
# Sintaxis básica
claude mcp add [options] <name> -- <command> [args...]
# Ejemplo real: Agregar servidor Airtable
claude mcp add --env AIRTABLE_API_KEY=YOUR_KEY --transport stdio airtable \
-- npx -y airtable-mcp-server
[!NOTE]
Para servidores stdio, el
--(doble guion) separa las opciones propias de Claude, como--transport,--env, y--scope, del comando y los argumentos que ejecutan el servidor. Todo lo que viene después de--se pasa al servidor sin cambios.Por ejemplo:
claude mcp add --transport stdio myserver -- npx server→ ejecutanpx serverclaude mcp add --env KEY=value --transport stdio myserver -- python server.py --port 8080→ ejecutapython server.py --port 8080conKEY=valueen el entornoSin
--, Claude Code intentaría analizar los flags del servidor, como--portarriba, como sus propias opciones.
--envacepta múltiples paresKEY=value. Si el nombre del servidor viene directamente después de--env, la CLI lee el nombre como otro par y lo rechaza, así que coloca al menos otra opción, como--transport stdio, entre--envy el nombre del servidor.
Cómo Claude Code detiene un servidor stdio
Cuando Claude Code desconecta un servidor stdio, por ejemplo cuando termina tu sesión, envía una señal al proceso del servidor y espera brevemente a que termine antes de forzar su detención. Si tu servidor guarda estado o elimina archivos de bloqueo al apagarse, maneja la señal correspondiente a tu plataforma y termina dentro de ese tiempo:
- En macOS y Linux: Claude Code envía
SIGINT, luegoSIGTERMsi el proceso aún se está ejecutando 100 milisegundos después, y luegoSIGKILLtras otros 400 milisegundos. - En Windows: Claude Code cierra el stdin del servidor y luego finaliza el árbol de procesos del servidor si el proceso aún se está ejecutando 300 milisegundos después.
Antes de v2.1.296, Claude Code en Windows finalizaba el árbol de procesos del servidor de inmediato, sin cerrar primero stdin ni esperar.
Opción 4: Agregar un servidor WebSocket remoto
Los servidores WebSocket mantienen una conexión bidireccional persistente, que es adecuada para servidores MCP remotos que envían eventos a Claude sin que se les solicite. Usa HTTP en su lugar cuando tu servidor solo responda a solicitudes, ya que HTTP admite OAuth y el flag claude mcp add --transport, mientras que WebSocket no admite ninguno de los dos.
Configura servidores WebSocket en .mcp.json o con claude mcp add-json:
claude mcp add-json events-server \
'{"type":"ws","url":"wss://mcp.example.com/socket","headers":{"Authorization":"Bearer YOUR_TOKEN"}}'
La entrada type: "ws" acepta los mismos campos url, headers, headersHelper, timeout, y alwaysLoad que http. La autenticación es solo por encabezado, así que pasa un token estático en headers o genera uno en el momento de la conexión con headersHelper. El flag claude mcp add --transport no acepta ws.
Agregar un servidor desde instrucciones de configuración escritas para otro cliente
Los servidores MCP no son específicos de Claude Code, por lo que las instrucciones de configuración de un servidor pueden estar escritas para Claude Desktop, Cursor, u otro cliente MCP y no dar ningún comando claude mcp add. Para agregar el servidor de todas formas, busca en esas instrucciones una URL, un comando de lanzamiento, o un bloque JSON:
- Una URL como
https://mcp.example.com/mcp: el servidor es remoto. - Un comando de lanzamiento como
npx -y @example/mcp-server: el servidor se ejecuta en tu máquina. - Un bloque JSON
mcpServers: configuración escrita para el archivo de configuración de otro cliente.
Cada uno es una de las entradas que toman las cuatro opciones en Instalación de servidores MCP. Encuentra a continuación la forma que tienes para convertirla en el comando que Claude Code acepta. Cada comando escribe en alcance local a menos que agregues --scope project o --scope user.
Agregar un servidor desde una URL
Una URL significa que el servidor es remoto. Para un endpoint https://, agrégalo con --transport http, o sigue la Opción 2 cuando las instrucciones digan que el endpoint usa SSE. Para un endpoint wss://, usa la Opción 4 en su lugar, ya que --transport no acepta ws:
claude mcp add --transport http example https://mcp.example.com/mcp
Si las instrucciones también dan una clave de API o un encabezado de token, pásalo con --header como se muestra en la Opción 1.
Agregar un servidor desde un comando npx, uvx, o binario
Un comando de lanzamiento significa que el servidor se ejecuta como un proceso stdio local. Pon todo el comando después de --, para que Claude Code pase flags como -y al comando que inicia el servidor en lugar de leerlos como sus propias opciones. Pasa cualquier variable de entorno que las instrucciones soliciten con --env, después del nombre del servidor y antes de --:
claude mcp add example --env API_KEY=your-key -- npx -y @example/mcp-server
La Opción 3 cubre el separador -- en su totalidad.
Agregar un servidor desde un bloque JSON mcpServers
Un bloque mcpServers escrito para otro cliente MCP, como Claude Desktop, utiliza la clave contenedora y la forma de entrada que Claude Code lee. Pasa a claude mcp add-json el objeto dentro de mcpServers, no el contenedor. Dos tipos de entrada necesitan una reparación primero:
- Una
urlsintype: agrega"type": "http","type": "sse", o"type": "ws"para que coincida con el endpoint. Claude Code lee una entrada sintypecomo un servidor stdio, por lo que una entradaurlsintypefalla. - Una clave con caracteres distintos de letras, números, guiones y guiones bajos: elige un nombre de servidor que use solo esos caracteres. De lo contrario, la clave es el nombre del servidor.
Por ejemplo, este bloque:
{
"mcpServers": {
"example": {
"command": "npx",
"args": ["-y", "@example/mcp-server"]
}
}
}
se convierte en este comando:
claude mcp add-json example '{"command":"npx","args":["-y","@example/mcp-server"]}'
Agregar servidores MCP desde configuración JSON cubre el escape de shell y el flag --scope para add-json. Para compartir el servidor con tu equipo en su lugar, agrega --scope project, o agrega la entrada bajo mcpServers en .mcp.json en la raíz de tu proyecto y haz commit. Alcance de proyecto cubre cómo Claude Code carga y aprueba ese archivo.
Cada comando claude mcp add y claude mcp add-json imprime una línea Added ... en caso de éxito. Para verificar que Claude Code se conectó, ejecuta claude mcp get <name>; Estado del servidor cubre los estados que muestra y el paso de aprobación para servidores .mcp.json.
Administración de tus servidores
Una vez configurados, puedes administrar tus servidores MCP con estos comandos:
# Listar todos los servidores configurados
claude mcp list
# Obtener detalles de un servidor específico
claude mcp get notion
# Eliminar un servidor
claude mcp remove notion
# (dentro de Claude Code) Verificar estado del servidor
/mcp
Cuando eliminas un servidor remoto, Claude Code también elimina los tokens OAuth y el registro de cliente que almacenó para ese servidor.
Estado del servidor
claude mcp add confirma una adición exitosa imprimiendo una línea Added ..., lo que significa que la configuración se escribió. Si el comando imprime un mensaje was not saved en su lugar, consulta MCP server was not saved or removed; para un mensaje may not have been saved, consulta MCP server may not have been saved or removed.
claude mcp list muestra un estado de salud junto a cada servidor que enumera, como ✔ Connected, ! Needs authentication, o ✘ Failed to connect. Un estado de falla significa que Claude Code no pudo conectarse a ese servidor, no que el comando de lista haya fallado.
Los estados en esta lista informan una decisión de configuración en lugar de un intento de conexión, por lo que Claude Code los imprime sin conectarse al servidor:
⏸ Pending approval (run `claude` to approve): un servidor con alcance de proyecto de.mcp.jsonque todavía no has aprobado. Claude Code lo muestra tanto enclaude mcp listcomo enclaude mcp get <name>. Ejecutaclaudede forma interactiva para revisarlo y aprobarlo.✘ Rejected (see disabledMcpjsonServers in settings): un servidor.mcp.jsonque una entradadisabledMcpjsonServersrechaza. Claude Code lo muestra solo enclaude mcp get <name>.⊘ Disabled for this project (re-enable via /mcp): un servidor que la listadisabledMcpServersdel proyecto nombra. Claude Code lo muestra tanto enclaude mcp listcomo enclaude mcp get <name>. Vuelve a activar el servidor desde el panel/mcp.
Aprobaciones de servidores de proyecto y confianza del espacio de trabajo
claude mcp list y claude mcp get leen aprobaciones de .mcp.json solo de archivos de configuración que no están incluidos en el repositorio, hasta que confíes en el espacio de trabajo ejecutando claude en él y aceptando el diálogo de confianza del espacio de trabajo. Un repositorio clonado no puede aprobar sus propios servidores: enableAllProjectMcpServers o enabledMcpjsonServers incluidos con commit en el .claude/settings.json del proyecto se ignoran en una carpeta no confiable, y el servidor permanece en ⏸ Pending approval en lugar de conectarse y verificarse su salud.
Las aprobaciones de estas fuentes aún se aplican en una carpeta no confiable:
- tu
~/.claude/settings.jsonde usuario - configuración administrada
- configuración pasada con
--settings
Claude Code también aplica aprobaciones de un .claude/settings.local.json sin seguimiento, pero ejecuta git para verificar si el archivo tiene seguimiento, y ejecuta esa verificación solo en una carpeta confiable. En una carpeta en la que nunca has confiado, Claude Code espera el diálogo de confianza antes de aplicar las aprobaciones del archivo, a menos que la carpeta sea tu propio directorio de configuración: tu directorio home, o un directorio cuyo .claude hayas establecido como CLAUDE_CONFIG_DIR. Antes de v2.1.207, Claude Code aplicaba aprobaciones de un .claude/settings.local.json sin seguimiento incluso en una carpeta en la que nunca habías confiado.
Una entrada disabledMcpjsonServers en cualquier archivo de configuración aún rechaza el servidor.
Detalle del estado del servidor
En /mcp, incluido el menú de un servidor allí, y en el administrador /plugin, un servidor HTTP o SSE remoto que hayas usado antes puede mostrar un estado cached como cached 2h ago · connects on first use · 5 tools. Claude Code cargó la lista de herramientas del servidor desde su caché de descubrimiento, guardada en una sesión anterior, en lugar de conectarse al inicio, y Claude Code conecta el servidor la primera vez que Claude llama a una de las herramientas del servidor. Las herramientas están disponibles desde tu primer mensaje, por lo que no necesitas hacer nada. La caché de descubrimiento y su estado cached requieren Claude Code v2.1.221 o posterior.
La caché de descubrimiento está desactivada de forma predeterminada a menos que un despliegue gradual la haya habilitado para tu cuenta. Establece MCP_DISCOVERY_CACHE=1 para activarla, o 0 para mantenerla desactivada incluso cuando el despliegue la haya habilitado. Antes de v2.1.238, la caché estaba activada de forma predeterminada.
Cuando seleccionas Disable o Clear authentication desde el menú de un servidor en /mcp, Claude Code también descarta la entrada de caché de ese servidor. Reconnect también la descarta en un servidor conectado o fallido; en un servidor cached, Reconnect conecta el servidor de inmediato y mantiene la entrada. La próxima vez que Claude Code se conecte al servidor después de descartar la entrada, obtiene la lista de herramientas del servidor en lugar de la caché.
Cuando el estado de un servidor es ✘ Failed to connect, claude mcp list añade el detalle de la falla a esa línea de estado, y claude mcp get <name> lo muestra en una línea Issue:: el código de estado HTTP o código de error, más cualquier texto de error que el servidor haya devuelto. La vista de detalle del servidor en /mcp incluye el mismo texto informado por el servidor en su fila Issue:. Claude Code oculta de este detalle el texto similar a credenciales y nunca incluye la URL expandida del servidor, que puede llevar secretos. Claude Code no añade detalle a un estado ✘ Connection error, porque el texto de excepción que imprimiría allí puede incrustar esa URL. Antes de v2.1.219, ambos comandos mostraban solo el estado de falla sin más, sin el código de estado ni el texto de error del servidor.
Cuando completas la autenticación desde /mcp y la conexión aún falla con un código de estado HTTP o un código de error de transporte, Claude Code añade ese código y el origen de la URL del servidor al mensaje que imprime después del intento. El origen es el esquema y el host, más el puerto cuando la URL nombra uno, como https://mcp.example.com.
- La ruta y la consulta nunca aparecen en ese mensaje.
- Para un servidor en el alcance local, de proyecto, o de usuario o en la configuración MCP administrada, el origen muestra el host tal como está escrito en esa configuración, por lo que una referencia
${VAR}en el host no se expande en el mensaje. - Para una falla sin código de estado ni código de error, Claude Code muestra el texto de error sin el origen.
Un servidor remoto cuya configuración tiene una url vacía se muestra como not configured en /mcp, en claude mcp list, y en el administrador /plugin, y Claude Code no intenta conectarse a él. Un plugin puede incluir una entrada de marcador de posición como esta para un conector que configuras más tarde, por lo que Claude Code no lo informa como un error ni como un problema de configuración. La vista de detalle del servidor en /mcp indica No URL configured for this server; establece la url de la entrada para conectarlo.
Advertencias de configuración
Claude Code advierte sobre los problemas de configuración a continuación. Cada entrada dice qué verifica Claude Code y cómo eliminar la advertencia:
- Espacios en blanco ocultos: Claude Code advierte cuando un valor de configuración MCP lleva espacios en blanco ocultos al principio o al final, que a menudo provienen de pegar un token con un salto de línea al final. Claude Code verifica
command,url, cada entradaargs, y los valores y nombres de clave bajoenvyheaders. Claude Code muestra la advertencia en la salida declaude mcp listy en/mcp, nombrando los campos afectados sin repetir sus valores, por ejemploLeading or trailing whitespace in: headers.Authorization. Claude Code no recorta el espacio en blanco y usa los valores exactamente como están escritos, así que edita la configuración para eliminarlo. - Mismo nombre en más de un alcance: si defines el mismo nombre de servidor en más de un alcance con diferentes endpoints, Claude Code advierte sobre el conflicto en la salida de
claude mcp listy en/mcp. Claude Code almacena los inicios de sesión OAuth por endpoint, por lo que cuando autenticas la definición que se carga en un proyecto, aún necesitas iniciar sesión por separado en un proyecto donde se carga una definición diferente. Mantén el endpoint que deseas y elimina los otros conclaude mcp remove <name> --scope <scope>. En la advertencia, Claude Code cita el endpoint de cada alcance tal como está escrito en tu configuración, con las referencias${VAR}sin expandir, por lo que nunca muestra un valor resuelto como una clave de API. - Nombres reservados: Claude Code reserva los nombres de sus servidores integrados, incluidos
workspace,claude-in-chrome,computer-use,Claude Preview, yClaude Browser. Si tu configuración define un servidor con un nombre reservado, Claude Code lo omite en el momento de la carga y muestra una advertencia pidiéndote que lo renombres.claude mcp addrechaza un nombre reservado con un error.Claude PreviewyClaude Browsernombran ambos el servidor integrado que utiliza el panel de vista previa de la aplicación de escritorio de Claude Code. - Variable de entorno faltante: si una referencia
${VAR}en la configuración de un servidor nombra una variable que no está establecida y no tiene:-default, Claude Code advierte en la salida declaude mcp listy en/mcp, nombrando la variable, y aún carga el servidor con el texto${VAR}sin expandir. Establece la variable o agrega un valor de respaldo${VAR:-default}. En laurly losheadersde un servidor remoto, algunas variables de credenciales se leen como vacías en su lugar, sin advertencia.
Disponibilidad de herramientas
El panel /mcp muestra el recuento de herramientas junto a cada servidor conectado y marca los servidores que anuncian la capacidad de herramientas pero no exponen herramientas.
Si tu solicitud necesita herramientas de un servidor que aún se está conectando en segundo plano, Claude espera a ese servidor antes de continuar. Cómo sucede la espera depende de tu configuración:
- Con búsqueda de herramientas, el valor predeterminado: la espera sucede dentro de la llamada
ToolSearch. - Sin búsqueda de herramientas: Claude usa la herramienta
WaitForMcpServersen su lugar. Las configuraciones sin búsqueda de herramientas incluyenENABLE_TOOL_SEARCH=falsey un modelo anterior a Claude Opus 4.5, Claude Sonnet 4.5 y Claude Haiku 4.5 en Agent Platform de Google Cloud. Para un gatewayANTHROPIC_BASE_URL, consulta Búsqueda de herramientas a través de un gateway de LLM. - En un despliegue de Microsoft Foundry alojado en Azure: Claude comienza en la ruta de búsqueda de herramientas en lugar de con
WaitForMcpServers, ya que Claude Code descubre el rechazo del lado del servidor del despliegue solo desde la API. Después de que Claude Code cambie ese despliegue a carga anticipada, las herramientas de un servidor que termina de conectarse quedan disponibles en la siguiente solicitud de Claude.
Con la búsqueda de herramientas habilitada, cuando un servidor termina de conectarse mientras Claude está trabajando, Claude Code enumera los nombres de herramientas del servidor a Claude en su siguiente solicitud dentro del mismo turno. Claude puede entonces buscar y llamar a esas herramientas sin esperar tu siguiente mensaje.
Después de reanudar una sesión, Claude puede llamar a una herramienta de la conversación guardada mientras el servidor MCP de la herramienta aún se está conectando. Mientras el servidor está en su primer intento de conexión, Claude Code retiene la llamada hasta 10 segundos y la ejecuta en cuanto la herramienta está disponible. Si el servidor no se conecta a tiempo, o ya está reintentando después de un intento fallido, la llamada falla con el error de herramienta No such tool available.
Deshabilitar un servidor sin eliminarlo
Desactiva un servidor en el panel /mcp para que Claude Code deje de conectarse a él sin perder su configuración. Claude Code aún enumera el servidor en /mcp, marcado como deshabilitado.
Cuando activas o desactivas un servidor, Claude Code registra tu elección por proyecto en ~/.claude.json, en una de dos listas que cubren conjuntos disjuntos de servidores:
disabledMcpServers: una lista de exclusión para servidores configurados por el usuario, servidores de plugins, servidores que tu organización proporciona a través de la configuración administrada, los conectores de claude.ai que Claude Code obtiene por sí mismo, y servidores integrados que están activados de forma predeterminada. Claude Code no se conecta a un servidor que enumeres aquí. Cuando deshabilitas un conector de claude.ai con el interruptor por proyecto de/mcpdescrito en Deshabilitar conectores de claude.ai, Claude Code lo escribe en esta lista bajo su nombre visible, por ejemploclaude.ai Slack.enabledMcpServers: una lista de inclusión para servidores integrados que están desactivados de forma predeterminada, comocomputer-use. Claude Code se conecta a un servidor desactivado de forma predeterminada solo cuando lo enumeras aquí.
Claude Code consulta exactamente una de las dos listas para cada servidor, por lo que ninguna lista sobrescribe a la otra. Si agregas un servidor normal a enabledMcpServers, o un servidor integrado desactivado de forma predeterminada a disabledMcpServers, Claude Code ignora la entrada.
disabledMcpServers y enabledMcpServers no están relacionados con enabledMcpjsonServers y disabledMcpjsonServers, que controlan la aprobación de servidores definidos en el archivo .mcp.json de un proyecto.
Tiempos de ejecución del cliente MCP
Claude Code se conecta a servidores MCP a través de uno de dos tiempos de ejecución del cliente. El tiempo de ejecución v1 se basa en MCP TypeScript SDK 1.x. El tiempo de ejecución v2 es el mismo código sobre MCP TypeScript SDK 2.0, que añade la revisión del protocolo MCP 2026-07-28. El resto de esta página se aplica a ambos tiempos de ejecución, excepto donde una sección nombra el tiempo de ejecución v2.
Claude Code elige un tiempo de ejecución cada vez que lo inicias y lo mantiene hasta que sales. En sesiones donde obtiene feature flags, utiliza el tiempo de ejecución v2 en Claude Code v2.1.232 o posterior.
En las sesiones donde no obtiene feature flags, Claude Code utiliza el tiempo de ejecución v2 de forma predeterminada en Claude Code v2.1.274 o posterior:
- Sesiones en Amazon Bedrock, Claude Platform en AWS, Agent Platform de Google Cloud, o Microsoft Foundry, a menos que una plataforma host que incrusta Claude Code establezca
CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST - Sesiones iniciadas a través de un gateway de aplicaciones de Claude
- Sesiones donde desactivas la telemetría o la obtención de feature flags, por ejemplo con
DISABLE_TELEMETRY
En v2, Claude Code también:
- Pregunta a los servidores HTTP, stdio y de conectores de claude.ai si admiten la revisión más nueva, y la utiliza con los que la admiten. Esto incluye los conectores de las sesiones en la nube y de Remote Control. Claude Code se conecta a todos los demás servidores como lo hace v1.
- Recibe notificaciones
list_changedde servidores en la revisión más nueva a través de una secuencia que mantiene abierta. - No registra un servidor de canal que se conecta en la revisión más nueva, porque esa revisión no puede transportar mensajes de canal.
- Hace fallar un inicio de sesión OAuth de MCP cuya respuesta de autorización nombra un emisor inesperado.
- Envía credenciales de OAuth de MCP solo a un endpoint de token servido sobre HTTPS o en
localhost,127.0.0.1, o::1. El inicio de sesión falla para un servidor cuyo endpoint de token eshttp://simple en cualquier otro lugar, como un dispositivo en tu red local. Consulta Refusing to send credentials to non-https token endpoint.
Anthropic puede mantener un servidor específico en el protocolo anterior, o fuera de esa secuencia, con un feature flag que Claude Code obtiene.
Para elegir el tiempo de ejecución tú mismo, establece MCP_SDK_GENERATION en v1 o v2. Para decidir si Claude Code pregunta, establece MCP_PROTOCOL_NEGOTIATION en auto o legacy.
Actualizaciones dinámicas de herramientas
Un servidor MCP puede cambiar las herramientas, prompts o recursos que ofrece mientras está conectado y enviar una notificación list_changed. Cuando llega una:
- En una sesión interactiva de terminal, Claude Code obtiene la lista actualizada de ese servidor, por lo que no necesitas reconectarlo.
- En modo no interactivo con el flag
-py en el Agent SDK, Claude Code actualiza solo la lista de herramientas con estas notificaciones.
Si una solicitud de actualización falla, Claude Code mantiene las herramientas, prompts y recursos descubiertos anteriormente del servidor hasta que una actualización posterior tenga éxito.
Secuencias de notificación en el tiempo de ejecución v2
En el tiempo de ejecución v2, Claude Code recibe notificaciones list_changed de un servidor en la revisión más nueva del protocolo a través de una secuencia que mantiene abierta. Cuando la secuencia se cierra, Claude Code la reabre, con dos límites:
- La secuencia se cierra nuevamente dentro de 10 segundos: Claude Code la reabre hasta tres veces y luego se detiene para esa conexión.
- La secuencia permanece abierta más de 10 segundos y luego se cierra, como suele ocurrir con las secuencias hacia hosts serverless: después de cinco reaperturas en una hora, Claude Code espera aproximadamente seis horas antes de la siguiente.
Hasta que la secuencia se reabre, conservas las herramientas, prompts y recursos del servidor obtenidos por última vez. Para recoger sus cambios antes, reconecta el servidor desde /mcp.
Reconexión automática
Claude Code reconecta un servidor remoto que se cae a mitad de sesión y reintenta la primera conexión de un servidor HTTP o SSE después de un error transitorio. Para un servidor stdio, consulta Servidores stdio que terminan o no logran iniciarse.
Caídas a mitad de sesión de un servidor remoto
Claude Code primero intenta reconectar un servidor remoto caído hasta cinco veces con retroceso exponencial, comenzando con un retraso de un segundo y duplicándolo cada vez:
- En una sesión interactiva:
/mcpmuestra el servidor como pendiente mientras Claude Code se reconecta. Después de cinco intentos fallidos, Claude Code marca el servidor como fallido, o como que necesita autenticación cuando el servidor necesita autorizarse de nuevo. Cuando marca el servidor como fallido, ves una notificaciónMCP server "<name>" disconnected · open /mcp to reconnect. Puedes reintentar manualmente desde/mcp. - En ejecuciones de
claude -py sesiones del Agent SDK: Claude Code hace los mismos cinco intentos, sin panel/mcppara mostrarlos. Si los cinco fallan, la ejecución continúa sin las herramientas del servidor:- Después de un error transitorio, como una respuesta 5xx o que se agote el tiempo de espera: Claude Code sigue reintentando un servidor HTTP o SSE en segundo plano. Los reintentos duran hasta aproximadamente media hora, y las herramientas del servidor vuelven a estar disponibles cuando uno se conecta. Hasta entonces, una sesión del Agent SDK informa el estado
failed, y tu código puede reconectar el servidor. Para reconectarlo enclaude -p, vuelve a iniciar la ejecución. - Cuando el servidor necesita que vuelvas a iniciar sesión: Claude Code deja de reintentar, y una sesión del Agent SDK informa el estado del servidor como
needs-auth. Inicia sesión conclaude mcp login <name>en tu shell. Luego vuelve a iniciar la ejecución o, en una sesión del Agent SDK, reconecta el servidor en su lugar.
- Después de un error transitorio, como una respuesta 5xx o que se agote el tiempo de espera: Claude Code sigue reintentando un servidor HTTP o SSE en segundo plano. Los reintentos duran hasta aproximadamente media hora, y las herramientas del servidor vuelven a estar disponibles cuando uno se conecta. Hasta entonces, una sesión del Agent SDK informa el estado
Conexiones iniciales fallidas
Cuando la primera conexión de un servidor HTTP o SSE falla con un error transitorio, como una respuesta 5xx, una conexión rechazada, o que se agote el tiempo de espera, Claude Code reintenta hasta tres veces. Si la conexión aún falla, Claude Code marca el servidor como fallido.
Esos reintentos no se aplican en estos casos:
- La primera conexión de un servidor stdio. Para intentarla de nuevo, consulta Servidores stdio que terminan o no logran iniciarse
- La primera conexión de un servidor WebSocket. Para intentarlo de nuevo en una sesión interactiva de terminal, selecciona Reconnect en el menú del servidor en
/mcp - Un error de autenticación o de recurso no encontrado, porque requiere un cambio de configuración para resolverse. Cuando un
headersHelperes la única fuente del encabezadoAuthorizationdel servidor, Claude Code reintenta un error de autenticación de todas formas, porque vuelve a ejecutar el helper en cada intento y puede obtener una credencial nueva
Servidores stdio que terminan o no logran iniciarse
Para volver a iniciar un servidor stdio, lee la columna que corresponde a lo que le pasó. Encuentra tu fila según cómo ejecutas Claude Code: una sesión interactiva, una ejecución de claude -p, o una sesión del Agent SDK.
| Cómo ejecutas Claude Code | El proceso del servidor termina a mitad de sesión | La primera conexión del servidor falla |
|---|---|---|
| Sesión interactiva | Claude Code marca el servidor como fallido. Para iniciarlo de nuevo, selecciona Reconnect en el menú del servidor en /mcp |
Claude Code marca el servidor como fallido. Para iniciarlo de nuevo, selecciona Reconnect en el menú del servidor en /mcp |
Ejecución de claude -p |
Claude Code vuelve a iniciar el servidor la próxima vez que Claude llama a una de las herramientas del servidor, y la llamada se ejecuta en cuanto el servidor se conecta | La ejecución continúa sin las herramientas del servidor. Para que Claude Code vuelva a intentar la conexión, vuelve a iniciar la ejecución. Cuando un plugin proporciona el servidor, las nuevas ejecuciones omiten la conexión durante 15 minutos después de una falla, así que espera ese tiempo primero o reintenta antes |
| Sesión del Agent SDK | Claude Code vuelve a iniciar el servidor la próxima vez que Claude llama a una de las herramientas del servidor, y la llamada se ejecuta en cuanto el servidor se conecta | La sesión continúa sin las herramientas del servidor. Tu código puede reconectar el servidor |
Solicitudes de descubrimiento fallidas
Después de que un servidor se conecta, Claude Code le envía solicitudes de descubrimiento de capacidades como tools/list, prompts/list, y resources/list. Claude Code reintenta esas solicitudes hasta tres veces con un retroceso corto después de un error transitorio de red o del servidor. No reintenta errores de autenticación, respuestas 4xx, ni solicitudes cuyo tiempo de espera se agota.
Reintentar tú mismo los servidores fallidos
Para reintentar todos los servidores que fallaron o necesitan autenticación, ejecuta /mcp reconnect all en el prompt de Claude Code en una sesión interactiva de terminal. Esto requiere Claude Code v2.1.284 o posterior. Las versiones anteriores imprimen MCP server "all" not found.
Cómo Claude se entera de que un servidor falló
Que Claude Code le informe a Claude sobre un servidor configurado que no pudo conectarse depende de la búsqueda de herramientas, que está activada de forma predeterminada:
- Con búsqueda de herramientas, Claude Code le dice a Claude qué servidor falló y su error de conexión, por lo que Claude informa la falla de conexión en su respuesta. Claude Code incluye la misma información en los resultados de
ToolSearchque no encuentran ninguna herramienta coincidente. - En cualquier configuración sin búsqueda de herramientas, Claude Code no informa a Claude de las conexiones fallidas de servidores.
Enviar mensajes con canales
Un servidor MCP también puede enviar mensajes directamente a tu sesión para que Claude pueda reaccionar a eventos externos como resultados de CI, alertas de monitoreo, o mensajes de chat. Para habilitar esto, tu servidor declara la capacidad claude/channel y tú lo activas con el flag --channels al inicio. Consulta Channels para usar un canal con soporte oficial, o Channels reference para crear el tuyo propio.
En el tiempo de ejecución v2, un servidor de canal que negocia la revisión del protocolo MCP 2026-07-28 no puede entregar mensajes de canal, por lo que Claude Code no lo registra como un canal. Un servidor de canal que no admite esa revisión se conecta con el handshake anterior y se registra como antes.
Claude Code pregunta a los servidores stdio por esa revisión de forma predeterminada. Para mantener un servidor de canal stdio en el handshake anterior, establece MCP_PROTOCOL_NEGOTIATION en legacy, lo que mantiene todos los servidores en él.
[!TIP]
Consejos:
- Usa el flag
-so--scopepara especificar dónde se almacena la configuración:
local(predeterminado): disponible solo para ti en el proyecto actualproject: compartido con todos en el proyecto a través del archivo.mcp.jsonuser: disponible para ti en todos los proyectos- Establece variables de entorno con los flags
-eo--env(por ejemplo,-e KEY=value)- Los flags
--transporty--headertambién aceptan las formas cortas-ty-H- Configura el tiempo de espera de inicio del servidor MCP usando la variable de entorno
MCP_TIMEOUT(por ejemplo,MCP_TIMEOUT=10000 claudeestablece un tiempo de espera de 10 segundos)- Establece un tiempo de espera de ejecución de herramientas por servidor agregando un campo
timeouten milisegundos a la entrada.mcp.jsonde ese servidor, por ejemplo"timeout": 600000para diez minutos. Esto sobrescribe la variable de entornoMCP_TOOL_TIMEOUTsolo para ese servidor- Claude Code muestra una advertencia cuando la salida de herramientas MCP excede 10,000 tokens y limita la salida a 25,000 tokens de forma predeterminada. Para cambiar el límite de tokens, establece la variable de entorno
MAX_MCP_OUTPUT_TOKENS, por ejemploMAX_MCP_OUTPUT_TOKENS=50000. El umbral de advertencia es fijo. A menos que el servidor aumente el límite propio de una herramienta, los resultados de texto exitosos de más de 50,000 caracteres se guardan en un archivo independientemente de esta variable. Consulta MCP output limits and warnings- Usa
/mcppara autenticarte con servidores remotos que requieren autenticación OAuth 2.0
Límites de tiempo en las llamadas a herramientas MCP
Para limitar cuánto tiempo puede durar una llamada a herramienta MCP:
- Por servidor: agrega un campo
timeouten milisegundos a la entrada de configuración de ese servidor - Para todos los servidores: establece
MCP_TOOL_TIMEOUT
El timeout por servidor es un límite estricto de tiempo real por llamada a herramienta, y las notificaciones de progreso del servidor no lo extienden. Los valores por debajo de 1000 se ignoran y se recurre a MCP_TOOL_TIMEOUT, o a su valor predeterminado de aproximadamente 28 horas cuando esa variable no está establecida. Para un servidor HTTP, SSE, o de conector de claude.ai también hay un segundo temporizador por solicitud que cubre cada solicitud hasta el primer byte de respuesta del servidor. Claude Code establece ese temporizador en el mayor de tres valores: 60 segundos, el tiempo de espera de herramientas que se aplica al servidor, y MCP_TIMEOUT. El valor predeterminado de 28 horas de un MCP_TOOL_TIMEOUT sin establecer no entra en esa comparación, y un valor por debajo de 60 segundos no acorta el temporizador. Los servidores stdio y WebSocket no tienen temporizador por solicitud.
Un timeout por servidor de al menos 1000 también actúa como un mínimo para el tiempo de espera de inactividad descrito a continuación: Claude Code nunca aborta las llamadas a herramientas de ese servidor por inactividad antes del timeout por servidor.
Una llamada a herramienta a un servidor MCP que no envía respuesta ni notificación de progreso durante la ventana de inactividad se aborta con un error en lugar de esperar el límite de tiempo real. El tiempo de espera de inactividad se aplica a todos los tipos de servidor excepto los servidores IDE y los servidores SDK en proceso. La ventana de inactividad tiene un valor predeterminado de cinco minutos para servidores HTTP, SSE, WebSocket, y de conector de claude.ai, y de 30 minutos para servidores stdio.
Establece la variable de entorno CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT en milisegundos para cambiar la ventana de inactividad, o establécela en 0 para deshabilitar la verificación.
Estos tiempos de espera limitan cuánto tiempo puede ejecutarse una llamada, no siempre cuánto tiempo bloquea la sesión: una llamada de la conversación principal que se ejecuta más de dos minutos pasa antes a una tarea en segundo plano. Consulta Automatic backgrounding of long tool calls.
Ejecución automática en segundo plano de llamadas a herramientas largas
Si la vista de detalle de una llamada en segundo plano en /tasks muestra runs on the server; survives exiting this session, consulta Tareas MCP que se ejecutan en el servidor.
Una llamada a herramienta MCP en la conversación principal que aún se está ejecutando después de dos minutos pasa a una tarea en segundo plano en lugar de bloquear la sesión. Claude recibe el ID de la tarea inmediatamente y sigue trabajando, y el resultado llega como una notificación de tarea cuando la llamada termina.
La tarea aparece en /tasks, donde también puedes detenerla, y no sobrevive a la salida de la sesión. La entrada de la tarea muestra el progreso más reciente que el servidor ha informado. Si detienes la tarea, Claude Code cancela la llamada y le dice a Claude que no llegará ningún resultado. Detenerla no garantiza que el servidor se detenga: puede que ya haya hecho parte del trabajo, o que aún lo termine.
Los límites por llamada aún se aplican mientras la llamada se ejecuta en segundo plano: el límite de tiempo real establecido por el timeout por servidor o MCP_TOOL_TIMEOUT, y el tiempo de espera de inactividad establecido por CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT.
Para cambiar o desactivar el paso automático a segundo plano:
- Establece la variable de entorno
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSen milisegundos para cambiar el umbral, o establécela en0para desactivar el paso automático a segundo plano. Con0, Claude también espera las tareas MCP en una sesión interactiva - Establece
CLAUDE_CODE_DISABLE_BACKGROUND_TASKSen1, lo que lo desactiva junto con los comandos en segundo plano y los subagentes en segundo plano
Algunas llamadas nunca pasan a segundo plano:
- Llamadas de subagentes; Claude Code solo pasa a segundo plano las llamadas de la conversación principal
- Llamadas a servidores IDE
- Llamadas en modo no interactivo, a menos que
CLAUDE_AUTO_BACKGROUND_TASKSesté establecido en1, ya que una ejecución única puede terminar antes de que llegue el resultado
Una llamada que espera en un diálogo de elicitación abierto no pasa a segundo plano mientras el diálogo está abierto; el servidor está bloqueado esperando tu entrada, no es lento, por lo que Claude Code pospone el paso hasta que el diálogo se cierre.
Tareas MCP que se ejecutan en el servidor
Una tarea MCP es un trabajo largo, como una exportación de informe o una compilación, que un servidor MCP ejecuta por sí mismo usando la extensión de tareas de MCP. La llamada a herramienta de Claude regresa en cuanto el servidor acepta el trabajo, así que Claude sigue trabajando a menos que hagas que Claude espere. Cuando el trabajo termina, la transcripción lo indica y Claude recibe el resultado. Pídeselo a Claude.
Mientras tanto, el pie muestra un recuento como 1 MCP task, y Claude Code sigue la tarea consultando su estado con el servidor. Una tarea en un servidor remoto sigue ejecutándose después de que sales. Para volver a seguirla, reanuda la misma sesión.
[!NOTE]
Las tareas MCP están en beta pública en la CLI de Claude Code y requieren Claude Code v2.1.304 o posterior. Qué necesita una llamada para convertirse en una tarea MCP enumera las sesiones y los servidores que las obtienen.
Detener una tarea MCP u obtener su resultado
Para detener una tarea en ejecución, selecciónala en /tasks y presiona x, o pídeselo a Claude. Claude Code deja de seguir la tarea y le pide al servidor que la cancele, aunque el servidor puede terminarla de todos modos. Vuelve a conectar primero un servidor desconectado desde /mcp, o no se envía ninguna solicitud de cancelación y Claude Code olvida la tarea y no puede volver a seguirla. Presionar Esc no detiene una tarea en segundo plano.
Cuando la tarea termina, aparece en la transcripción una línea como esta:
MCP task <server task id> (<server>/<tool>) completed.
El resultado va a Claude, no a la transcripción, así que pídeselo a Claude. Si Claude está inactivo cuando llega el resultado, Claude se pone a trabajar con él sin que se lo pidas.
Responder a una pregunta de una tarea MCP
Una tarea en ejecución puede abrir un diálogo de elicitación para pedirte información. Mientras /tasks está abierto, el diálogo permanece oculto, así que cierra /tasks para responder. Rechazar o presionar Esc es una respuesta para el servidor, que entonces decide si la tarea continúa.
En una sesión no interactiva, Claude Code le pide al servidor que cancele una tarea que solicita información, sin ejecutar tus hooks Elicitation ni llamar al callback onElicitation del Agent SDK.
Salir, limpiar o reanudar mientras se ejecuta una tarea MCP
Una tarea en un servidor remoto sigue ejecutándose después de que sales. El proceso de un servidor stdio se detiene cuando Claude Code sale, aunque sus tareas muestren runs on the server; survives exiting this session en /tasks. A menos que la documentación de ese servidor indique que el trabajo sobrevive al proceso, deja que esas tareas terminen o detenlas primero en /tasks.
| Situación | Qué le ocurre a la tarea | Qué puedes hacer |
|---|---|---|
Ejecutas /clear o /branch, o usas /resume con otra sesión |
Mientras Claude Code sigue abierto, el resultado llega a tu conversación actual | Después de salir, usa claude --resume con la sesión en la que empezó la tarea |
| Sales de Claude Code | Ninguna opción de salida cancela la tarea de un servidor remoto, aunque el diálogo de salida la incluya bajo The following will stop when you exit: |
Detenla primero en /tasks, o reanuda la misma sesión más tarde |
Vuelves a la sesión de la tarea de forma interactiva: claude --resume, claude --continue o /resume |
En cuanto el servidor se conecta, Claude Code vuelve a seguir la tarea, y Claude recibe el resultado si terminó mientras tanto y el servidor todavía lo conoce | Mantén sin cambios el nombre y la configuración de conexión del servidor |
Reanudas la sesión de la tarea con --resume o --continue en una ejecución única claude -p "<prompt>" |
Esa ejecución no sigue la tarea | Reanuda de forma interactiva, o con --input-format stream-json |
Inicias una sesión nueva o usas --fork-session |
La nueva sesión no sigue la tarea | Reanuda la sesión que la inició |
Qué necesita una llamada para convertirse en una tarea MCP
Una llamada a herramienta se convierte en una tarea MCP solo cuando se cumplen todas estas condiciones:
- El servidor admite tareas
- El servidor es un servidor HTTP, stdio o de conector de claude.ai conectado con la revisión 2026-07-28 del protocolo. Establecer
MCP_SDK_GENERATION=v1oMCP_PROTOCOL_NEGOTIATION=legacylo descarta - La sesión obtiene feature flags, así que no en un proveedor externo como Amazon Bedrock, ni con la telemetría o la obtención de flags desactivadas
- Anthropic ha activado las tareas MCP para tu tipo de sesión. En v2.1.304 o posterior eso abarca las sesiones de la CLI en terminal, las sesiones del Agent SDK y las ejecuciones de GitHub Actions. Otras superficies, como la extensión de VS Code y la aplicación de escritorio, no tienen tareas MCP
- La llamada proviene de la conversación principal, no de un subagente
- O bien la sesión es interactiva, o bien una sesión del Agent SDK o una ejecución de
claude -pque lee--input-format stream-jsontiene:CLAUDE_AUTO_BACKGROUND_TASKSen1CLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUNDdistinto de1CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSdistinto de0
Cualquier otra llamada es una llamada a herramienta normal, y Paso automático a segundo plano de las llamadas a herramientas largas indica cuáles de ellas pasan a segundo plano.
Mantén abierta la entrada de una sesión del Agent SDK o de stream-json, porque la ejecución no espera a las tareas MCP después de que se cierra la entrada. Una ejecución única claude -p "<prompt>" no obtiene tareas MCP.
Mensajes de estado de una tarea MCP
Estos mensajes, en la entrada de una tarea en /tasks o en su línea final de la transcripción, significan que Claude Code no puede comunicarse con el servidor o con la tarea. Mientras se muestra uno en /tasks, el trabajo puede seguir en ejecución: Claude Code no lo toca y sigue comprobando. Los mensajes de 300s y de configuración permanecen en la entrada incluso después de que se restablece el contacto.
| Mensaje | Qué está ocurriendo | Qué puedes hacer |
|---|---|---|
reconnecting… |
El servidor no ha respondido desde una reanudación, o las comprobaciones de estado no obtienen respuesta | Si persiste, vuelve a conectar desde /mcp |
needs a sign-in to <server> |
El servidor rechazó una comprobación de estado | Inicia sesión desde /mcp |
status requests come back with errors; retrying… |
El servidor, o un proxy delante de él, responde a las comprobaciones de estado con errores | Espera mientras Claude Code reintenta |
server '<name>' did not reconnect within 300s |
Ninguna comprobación respondida durante cinco minutos, por ejemplo con la conexión caída o el servidor desactivado | Vuelve a conectar desde /mcp |
server '<name>' asked for a sign-in, and none was accepted within 300s |
Después de cinco minutos, el servidor sigue pidiendo un inicio de sesión | Inicia sesión desde /mcp |
status requests to server '<name>' came back with errors, and none succeeded in 300s |
Cinco minutos de respuestas con error | Revisa la salud o los registros del propio servidor |
server '<name>' is not configured in this session; the task may still be running on it |
La sesión no tiene ningún servidor con ese nombre, por ejemplo porque se eliminó, se renombró o se dejó fuera de --mcp-config, o porque un conector de claude.ai todavía se está cargando |
Restaura el servidor con el mismo nombre y luego vuelve a reanudar la sesión. Para un conector que se está cargando, nada: Claude Code sigue la tarea en cuanto aparece |
Un mensaje que empieza con server '<name>' was reconfigured to a different transport since this task was created |
Existe un servidor con ese nombre cuya configuración de conexión cambió desde que empezó la tarea, como su URL, command, args, env, headers o timeout | Restaura la configuración anterior y luego vuelve a reanudar la sesión |
the server rejected this task's id; asking again… |
El servidor dice que no conoce el ID de la tarea. Claude Code sigue preguntando durante hasta cinco minutos | Espera: el mensaje desaparece si el servidor vuelve a reconocer el ID, o le sigue la línea outcome unknown. |
Una línea de la transcripción que termina en outcome unknown., en una de sus formas expired on the server: outcome unknown. |
El servidor rechazó el ID o se negó con otro error permanente, y Claude Code dejó de seguir la tarea | Una segunda llamada puede repetir el trabajo. Antes de volver a llamar a la herramienta, averigua con el servidor qué se hizo, por ejemplo pidiéndole a Claude que use las demás herramientas del servidor |
Límites de tiempo en las tareas MCP
De forma predeterminada, una tarea en segundo plano no tiene límite de tiempo de Claude Code. Los límites de tiempo de las llamadas a herramientas, incluidos el límite de tiempo real y el tiempo de espera por inactividad, se aplican hasta que el servidor responde a la llamada con la tarea. Si haces que Claude espere, se aplican durante toda la tarea. Las comprobaciones de estado respondidas cuentan como actividad para el tiempo de espera por inactividad.
Hacer que Claude espere el resultado de una tarea MCP
Para que Claude espere el resultado de una tarea en una sesión interactiva, establece una de dos variables de entorno, por ejemplo en el bloque env de settings.json:
CLAUDE_CODE_MCP_AUTO_BACKGROUND_MSestablecida en0: Claude espera cada llamada a herramienta MCP hasta que la llamada terminaCLAUDE_CODE_DISABLE_MCP_TASK_BACKGROUNDestablecida en1: Claude espera el resultado de una tarea. Mientras el paso automático a segundo plano está activado, mueve la llamada después de dos minutos de forma predeterminada, así que las tareas cortas terminan en su lugar y las largas no te bloquean. La llamada movida es una llamada normal en segundo plano y no una tarea MCP. No sobrevive a la salida de la sesión
Mientras Claude espera, presionar Esc o alcanzar el límite de tiempo real o el tiempo de espera por inactividad termina la llamada, y Claude Code le pide al servidor que cancele la tarea.
Si estableces CLAUDE_CODE_DISABLE_BACKGROUND_TASKS en 1 o inicias en modo bare, eso por sí solo no hace que Claude espere las tareas MCP. Este ejemplo establece CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS en 0, así que Claude espera cada llamada a herramienta MCP:
{
"env": {
"CLAUDE_CODE_MCP_AUTO_BACKGROUND_MS": "0"
}
}
Tareas MCP para autores de servidores
Si creas un servidor MCP, puedes responder a un tools/call de larga duración con una tarea. La extensión de tareas de MCP define los mensajes que envías. En una conexión con la revisión 2026-07-28 del protocolo, cada solicitud lleva las capacidades de cliente de Claude Code en params._meta["io.modelcontextprotocol/clientCapabilities"], con "io.modelcontextprotocol/tasks": {} bajo extensions. Una solicitud tools/call que no puede convertirse en una tarea omite esa extensión.
Responder a la llamada con una tarea
Responde con una tarea solo cuando la solicitud lleve la extensión, o Claude recibe el error de herramienta Unsupported result type 'task' for tools/call. Claude recibe el mismo error cuando falta taskId, status, createdAt, lastUpdatedAt o ttlMs. El objeto de la tarea es el result de JSON-RPC de tu respuesta a tools/call, no necesita un arreglo content y aquí incluye los campos opcionales statusMessage y pollIntervalMs:
{
"resultType": "task",
"taskId": "build-7f3a9c2e",
"status": "working",
"statusMessage": "Compiling, 40 of 212 files done",
"createdAt": "2026-10-22T14:03:07Z",
"lastUpdatedAt": "2026-10-22T14:03:07Z",
"ttlMs": null,
"pollIntervalMs": 5000
}
| Campo | Cómo lo maneja Claude Code |
|---|---|
resultType |
Establécelo en "task" para marcar la respuesta como una tarea. Sin él, Claude Code interpreta la respuesta como un resultado normal |
taskId |
Obligatorio. Como máximo 128 caracteres ASCII imprimibles sin espacios, o Claude recibe un error de herramienta que empieza con MCP server "<name>" returned a malformed task handle for tool "<tool>". Mantén el ID consultable entre conexiones, porque después de una reanudación Claude Code pregunta por él en una conexión nueva |
status |
Obligatorio. Uno de working, input_required, completed, failed o cancelled. Otro valor produce el error Unsupported result type |
createdAt, lastUpdatedAt, ttlMs |
Obligatorios, y ttlMs puede ser null. Claude Code no descarta una tarea porque haya pasado su ttlMs |
pollIntervalMs |
Opcional, pero no null. Milisegundos entre solicitudes tasks/get, limitados a un rango entre 250 y 30000. Claude Code usa 2000 cuando el campo está ausente, y vuelve a leer el valor de cada respuesta a tasks/get |
statusMessage |
Opcional. /tasks muestra el valor de tu última respuesta a tasks/get, no de esta primera, y una respuesta que omite el campo lo borra. Un mensaje de estado de Claude Code puede ocupar su lugar |
En un servidor HTTP o de conector de claude.ai, la respuesta con la tarea tiene que empezar dentro del temporizador por solicitud, así que acepta el trabajo y responde primero, y luego haz el trabajo.
Informar estado, resultados y preguntas
Justo después de la respuesta con la tarea, Claude Code envía tasks/get con { "taskId": ... }, y luego lo repite una vez por intervalo de sondeo. La extensión de tareas exige que tu respuesta lleve "resultType": "complete" junto con taskId, status, createdAt, lastUpdatedAt y ttlMs. ttlMs puede ser null, y statusMessage y pollIntervalMs son opcionales. Este ejemplo informa que la compilación terminó:
{
"resultType": "complete",
"taskId": "build-7f3a9c2e",
"status": "completed",
"createdAt": "2026-10-22T14:03:07Z",
"lastUpdatedAt": "2026-10-22T14:09:41Z",
"ttlMs": null,
"result": {
"content": [{ "type": "text", "text": "Build succeeded: 212 files, 0 warnings" }]
}
}
| Estado, método o respuesta | Cómo lo maneja Claude Code |
|---|---|
working |
Sigue sondeando |
completed |
Le entrega a Claude el resultado normal de tools/call en el objeto result de nivel superior. Un isError: true dentro de él se informa como un fallo |
failed |
Le indica a Claude el message del objeto error de nivel superior { code, message, data }, que la extensión de tareas exige en una tarea fallida. Sin ese message, Claude recibe statusMessage en su lugar, o si no, Task failed |
cancelled |
Le indica a Claude statusMessage, o si no, Task was cancelled by the server |
input_required |
Lee inputRequests, un objeto que asigna una clave que tú eliges a { method, params }. Claude Code responde a cada clave una vez mediante tasks/update con { taskId, inputResponses }, donde inputResponses asigna la misma clave al resultado de esa solicitud. Las claves que superan las 16 por tarea se ignoran |
Métodos en inputRequests |
elicitation/create solo se atiende en sesiones interactivas de terminal, y roots/list en todas partes. Cuando Claude Code no puede atender una solicitud, le pide al servidor que cancele la tarea |
Otro valor de status |
Claude Code le pide al servidor que cancele la tarea y la informa a Claude como fallida |
Error JSON-RPC -32602 |
Se interpreta como un ID de tarea desconocido. Para una tarea en segundo plano, Claude Code sigue preguntando durante hasta cinco minutos y luego informa a Claude que el resultado es desconocido |
tasks/cancel |
Se envía, por ejemplo, cuando Claude o la persona detiene la tarea mientras el servidor está conectado. No se envía al salir |
tasks/result, tasks/list, notifications/tasks |
No se usan, así que incluye el resultado en tus respuestas a tasks/get |
Servidores MCP proporcionados por plugins
Los plugins pueden incluir servidores MCP que proporcionan herramientas e integraciones cuando habilitas el plugin.
Cómo funcionan los servidores MCP de plugins:
- Los plugins definen servidores MCP en
.mcp.jsonen la raíz del plugin o en línea enplugin.json - Cuando habilitas un plugin, Claude Code inicia sus servidores MCP automáticamente
- Claude Code ofrece las herramientas MCP de plugins junto con las herramientas MCP configuradas manualmente
- Agregas y eliminas servidores de plugins instalando o desinstalando el plugin, no con comandos
/mcp. Aún puedes desactivar un servidor de plugin instalado en/mcp, lo que hace que Claude Code deje de conectarse a él sin eliminar el plugin
Ejemplo de configuración MCP de plugin:
En .mcp.json en la raíz del plugin:
{
"mcpServers": {
"database-tools": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/db-server",
"args": ["--config", "${CLAUDE_PLUGIN_ROOT}/config.json"],
"env": {
"DB_URL": "${DB_URL}"
}
}
}
}
O en línea en plugin.json:
{
"name": "my-plugin",
"mcpServers": {
"plugin-api": {
"command": "${CLAUDE_PLUGIN_ROOT}/servers/api-server",
"args": ["--port", "8080"]
}
}
}
Características MCP de plugins:
- Ciclo de vida automático: los servidores se conectan y desconectan en estos momentos:
- Al inicio de la sesión, Claude Code conecta automáticamente los servidores de los plugins habilitados. En
/mcp, un servidor de plugin remoto (HTTP o SSE) que hayas usado antes puede mostrar el estadocacheden su lugar; Claude Code lo conecta cuando Claude llama por primera vez a una de sus herramientas. Cuando la conexión de un servidor de plugin stdio falló hace menos de 15 minutos, Claude Code omite la conexión - Si habilitas o deshabilitas un plugin durante una sesión, Claude Code conecta o desconecta sus servidores MCP cuando el cambio se aplica. Apply plugin changes without restarting describe cuándo sucede eso. En una sesión sin terminal interactiva,
/reload-pluginsno conecta ni desconecta servidores MCP de plugins; esos cambios surten efecto en tu próxima sesión - Cuando recargas, Claude Code mantiene las conexiones activas de los servidores de plugins cuya configuración no ha cambiado, y hace lo mismo cuando reemplazas la lista de servidores MCP de la sesión desde el Agent SDK sin nombrarlos
- Cuando mueves la sesión con
/cden v2.1.246 o posterior, Claude Code conecta los servidores de los plugins que la configuración del nuevo directorio habilita y desconecta los servidores de los plugins que ya no están habilitados, por lo que no necesitas ejecutar/reload-pluginsdespués del cambio - En sesiones en la nube, una llamada MCP a un servidor de plugin que aún no está conectado, como justo después de que se reactive una sesión inactiva, inicia el servidor bajo demanda y espera a que se conecte
- Al inicio de la sesión, Claude Code conecta automáticamente los servidores de los plugins habilitados. En
- Marcadores de posición de ruta:
${CLAUDE_PLUGIN_ROOT}se resuelve al directorio de instalación del plugin,${CLAUDE_PLUGIN_DATA}a su directorio de estado persistente, y${CLAUDE_PROJECT_DIR}a la raíz estable del proyecto. La sustitución se aplica a:- servidores
stdio:command,args,env - servidores
http,sse, yws:url,headers, yheadersHelper
- servidores
- Acceso al entorno del usuario: acceso a las mismas variables de entorno que los servidores configurados manualmente
- Múltiples tipos de transporte: soporte para transportes stdio, SSE, HTTP, y WebSocket, aunque el soporte de transporte puede variar según el servidor
Los servidores de plugins aparecen en /mcp con indicadores que muestran que provienen de plugins.
claude mcp get oculta los valores configurados para el servidor stdio o WebSocket de un plugin, porque pueden contener credenciales:
- Servidor stdio: imprime
Command: stdio, una líneaArgs:vacía, y cada variable de entorno comoNAME=[REDACTED] - Servidor WebSocket: imprime
URL: wsy cada encabezado como<name>: [REDACTED], yclaude mcp listmuestrawsen lugar de la URL
Para ver lo que configuró el plugin, busca el plugin en el disco y lee su .mcp.json o plugin.json.
Nombres de herramientas MCP de plugins:
Las herramientas de un servidor MCP incluido en un plugin contienen tanto el nombre del plugin como la clave del servidor en su nombre invocable. La forma completa es mcp__plugin_<plugin-name>_<server-name>__<tool-name>, donde cualquier carácter fuera de A-Z, a-z, 0-9, _, y - se reemplaza con _. Para el servidor database-tools incluido en un plugin llamado my-plugin, una herramienta query es invocable como:
mcp__plugin_my-plugin_database-tools__query
Usa este nombre completo cuando hagas referencia a la herramienta en reglas de permisos, la lista allowed-tools de un skill, el campo tools de un subagente, o un matcher de hook. Un matcher de hook escrito contra la clave del servidor sola, como mcp__database-tools__.*, nunca se activa para un servidor incluido en un plugin.
El servidor en sí se registra bajo el nombre con alcance plugin:<plugin-name>:<server-name>, como plugin:my-plugin:database-tools. Usa ese nombre donde se espera un nombre de servidor configurado, como el campo server de un hook mcp_tool.
Consulta la referencia de componentes de plugins para obtener detalles sobre cómo incluir servidores MCP en plugins.
Alcances de instalación de MCP
Los servidores MCP se pueden configurar en tres alcances. El alcance que elija controla en qué proyectos se carga el servidor y si la configuración se comparte con su equipo. Los administradores también pueden implementar o proporcionar servidores para cada usuario a través de configuración administrada.
| Alcance | Se carga en | Compartido con equipo | Almacenado en |
|---|---|---|---|
| Local | Solo proyecto actual | No | ~/.claude.json |
| Proyecto | Solo proyecto actual | Sí, a través del control de versiones | .mcp.json en la raíz del proyecto |
| Usuario | Todos sus proyectos | No | ~/.claude.json |
Alcance local
El alcance local es el predeterminado. Un servidor con alcance local se carga solo en el proyecto donde lo agregó y permanece privado para usted. Claude Code lo almacena en ~/.claude.json bajo la ruta de ese proyecto, por lo que el mismo servidor no aparecerá en sus otros proyectos. Use el alcance local para servidores de desarrollo personal, configuraciones experimentales o servidores con credenciales que no desea en el control de versiones.
[!NOTE]
El término "alcance local" para servidores MCP difiere de la configuración local general. Los servidores MCP con alcance local se almacenan en
~/.claude.json(su directorio de inicio), mientras que la configuración local general usa.claude/settings.local.json(en el directorio del proyecto). Vea Configuración para detalles sobre ubicaciones de archivos de configuración.
# Agregar un servidor con alcance local (predeterminado)
claude mcp add --transport http stripe https://mcp.stripe.com
# Especificar explícitamente alcance local
claude mcp add --transport http stripe --scope local https://mcp.stripe.com
El comando escribe el servidor en la entrada de su proyecto actual dentro de ~/.claude.json. El ejemplo a continuación muestra el resultado cuando lo ejecuta desde /path/to/your/project:
{
"projects": {
"/path/to/your/project": {
"mcpServers": {
"stripe": {
"type": "http",
"url": "https://mcp.stripe.com"
}
}
}
}
}
Alcance de proyecto
Los servidores con alcance de proyecto habilitan la colaboración en equipo al almacenar configuraciones en un archivo .mcp.json en el directorio raíz de su proyecto. Cuando agrega un servidor con alcance de proyecto, Claude Code crea o actualiza automáticamente este archivo con la estructura de configuración apropiada. Incluya .mcp.json en el control de versiones para que todos en su equipo obtengan las mismas herramientas y servicios MCP.
# Agregar un servidor con alcance de proyecto
claude mcp add --transport http shared-server --scope project https://example.com/mcp
El archivo .mcp.json resultante sigue un formato estandarizado:
{
"mcpServers": {
"shared-server": {
"type": "http",
"url": "https://example.com/mcp"
}
}
}
Por razones de seguridad, Claude Code solicita aprobación en sesiones interactivas antes de usar servidores con alcance de proyecto desde archivos .mcp.json. Para restablecer esas opciones de aprobación, ejecute claude mcp reset-project-choices.
En ejecuciones de claude -p, sesiones de Agent SDK y sesiones en la nube fuera de los hilos de un proyecto, Claude Code no puede mostrar esa solicitud: carga servidores con alcance de proyecto sin preguntar. Claude Code también omite la solicitud en una sesión que inicias en modo bypassPermissions con skipDangerousModePermissionPrompt establecido en tu configuración de usuario o en configuración administrada. Para mantener un servidor fuera de todas formas:
- Agréguelo a
disabledMcpjsonServers, que lo bloquea en cada modo de permiso. - Excluya la configuración del proyecto completamente con
--setting-sourceso la opciónsettingSourcesdel SDK. - Inicie la sesión con
--strict-mcp-config. Claude Code entonces usa solo los servidores MCP que pasa con--mcp-config. Omitir el mensaje de aprobación para los servidores con alcance de proyecto que Claude Code no está cargando requiere Claude Code v2.1.246 o posterior; antes de v2.1.246, una sesión estricta aún esperaba aprobación para ellos, lo que dejaba las sesiones en segundo plano esperando al inicio. Vea Control exclusivo con managed-mcp.json para lo que hace la bandera bajo un archivo MCP administrado.
Aprobaciones de servidor de proyecto y confianza del espacio de trabajo cubre cómo las aprobaciones confirmadas en el repositorio interactúan con la confianza del espacio de trabajo.
Alcance de usuario
Los servidores con alcance de usuario se almacenan en ~/.claude.json y proporcionan accesibilidad entre proyectos, haciéndolos disponibles en todos los proyectos en su máquina mientras permanecen privados para su cuenta de usuario. Este alcance funciona bien para servidores de utilidad personal, herramientas de desarrollo o servicios que usa frecuentemente en diferentes proyectos.
# Agregar un servidor de usuario
claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic
Jerarquía de alcance y precedencia
Cuando el mismo servidor está definido en más de un lugar, Claude Code se conecta a él una sola vez, usando la definición de la fuente de mayor precedencia. La entrada completa del servidor de esa fuente se utiliza; los campos no se fusionan entre alcances.
- Alcance local
- Alcance de proyecto
- Alcance de usuario
- Servidores proporcionados por plugins
- Conectores de claude.ai
Claude Code coincide duplicados en los tres alcances por nombre. Los plugins y conectores coinciden por punto final, por lo que uno que apunta a la misma URL o comando que un servidor anterior se trata como un duplicado.
Dos ortografías de URL cuentan como el mismo punto final cuando difieren solo en la mayúscula y minúscula de la letra del esquema u host, el puerto predeterminado del esquema, como :443 en https, o una barra diagonal final. Una ruta diferente, cadena de consulta, información de usuario o puerto no predeterminado hace que sean servidores diferentes.
Un servidor que su organización proporciona a través de la configuración administrada managedMcpServers se clasifica por encima de todos estos, por lo que cuando uno de ellos lo duplica, Claude Code conecta la definición de la organización. Requiere Claude Code v2.1.259 o posterior.
Si abre una sesión local en la pestaña Code de la aplicación de escritorio con el mismo nombre de servidor stdio en el nivel superior de ~/.claude.json (alcance de usuario) y en .mcp.json, la pestaña Code usa la definición de ~/.claude.json.
Expansión de variables de entorno en .mcp.json
Claude Code admite la expansión de variables de entorno en archivos .mcp.json, permitiendo que los equipos compartan configuraciones mientras mantienen flexibilidad para rutas específicas de máquinas y valores sensibles como claves API.
Sintaxis soportada
${VAR}: se expande al valor de la variable de entornoVAR${VAR:-default}: se expande aVARsi está establecida, de lo contrario usadefault
Ubicaciones de expansión
Las variables de entorno se pueden expandir en:
command: la ruta del ejecutable del servidorargs: argumentos de línea de comandosenv: variables de entorno pasadas al servidorurl: para tipos de servidor HTTPheaders: para autenticación de servidor HTTP
Ejemplo con expansión de variables
{
"mcpServers": {
"api-server": {
"type": "http",
"url": "${API_BASE_URL:-https://api.example.com}/mcp",
"headers": {
"Authorization": "Bearer ${API_KEY}"
}
}
}
}
Variables de entorno no establecidas sin un valor predeterminado
Si una variable de entorno referenciada no está establecida y no tiene un valor predeterminado, la configuración aún se carga: Claude Code informa una advertencia de variable faltante para ese servidor en la salida de claude mcp list y usa el texto ${VAR} sin expandir tal como está. Establezca la variable o agregue un fallback :-default para que el servidor se inicie con el valor que pretende. En la url y headers de un servidor remoto, algunas variables de credenciales se leen como vacías en su lugar, sin advertencia.
Variables de credenciales que se leen como vacías
En la url y headers de un servidor remoto, Claude Code lee las variables de credenciales de su entorno como vacías en lugar de expandirlas. Esto evita que la .mcp.json de un proyecto o un plugin envíe sus credenciales de Claude Code o proveedor de nube a un servidor que nombra. Si escribe Bearer ${ANTHROPIC_AUTH_TOKEN}, el servidor recibe Bearer sin credencial y rechaza la solicitud, generalmente con un 401. Claude Code informa eso como una conexión fallida.
Los nombres cubiertos son:
- Las propias credenciales de Claude Code, como
ANTHROPIC_API_KEYyANTHROPIC_AUTH_TOKEN - Las credenciales de su proveedor de nube, como
AWS_BEARER_TOKEN_BEDROCK - Otras credenciales que su entorno lleva, como
HTTPS_PROXYyNPM_TOKEN
Un nombre cubierto se lee como vacío independientemente de si ha establecido la variable, y un fallback :-default en él se ignora. Una URL base del proveedor como ANTHROPIC_BASE_URL aún se expande, por lo que "url": "${ANTHROPIC_BASE_URL}/mcp" funciona, a menos que el valor de la URL en sí incruste una credencial como un nombre de usuario y contraseña.
Un nombre fuera de este conjunto, como API_KEY, se expande tal como está escrito. Para dar al servidor una de las credenciales cubiertas, cópiela en una variable con un nombre de su propia elección y haga referencia a ese nombre en su lugar.
Cuando la url o headers de un servidor remoto hace referencia a una variable cubierta que ha establecido, Claude Code la nombra en una línea de registro de depuración. Para leer la línea, ejecute claude --debug-file /tmp/claude-debug.log y busque en ese archivo never expanded toward a remote server.
Cómo aparecen las referencias en /mcp y salida de CLI
Para un servidor en el alcance local, de proyecto o de usuario, las siguientes superficies muestran una referencia ${VAR} por nombre en lugar de como su valor resuelto:
- La URL o línea de comandos en la vista de detalle
/mcpde un servidor - Salida de
claude mcp listyclaude mcp get
La vista de detalle /mcp muestra referencias de esta manera en Claude Code v2.1.268 o posterior.
Para un servidor que su organización proporciona a través de la configuración managedMcpServers, estas superficies muestran solo el host de la URL.
Para verificar qué muestran claude mcp list, claude mcp get e /mcp cuando una conexión falla, vea Detalle de estado del servidor.
Ejemplos prácticos
Ejemplo: Conectar a GitHub para revisiones de código
El servidor MCP remoto de GitHub se autentica con un token de acceso personal de GitHub pasado como encabezado. Para obtener uno, abra su configuración de token de GitHub, genere un nuevo token de grano fino con acceso a los repositorios con los que desea que Claude trabaje, luego agregue el servidor:
claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
--header "Authorization: Bearer YOUR_GITHUB_PAT"
Reemplaza YOUR_GITHUB_PAT con tu token de acceso personal. El comando claude mcp add guarda la configuración sin validar credenciales, por lo que aquí se acepta un valor de marcador de posición, pero el servidor no logra conectarse más tarde. Para verificar la conexión, ejecuta /mcp y comprueba que la fila del servidor muestre una marca de verificación. Un servidor con credenciales incorrectas muestra en su lugar una ✘, y su detalle de fallo incluye el estado HTTP que devolvió el servidor, como un 401.
Luego trabaje con GitHub:
Revisa el PR #456 y sugiere mejoras
Crea un nuevo issue para el error que acabamos de encontrar
Muéstrame todos los PR abiertos asignados a mí
Ejemplo: Consultar su base de datos PostgreSQL
DBHub, el paquete @bytebase/dbhub, es un servidor MCP que conecta Claude a una base de datos relacional a través de la cadena de conexión que pasa en --dsn. Use un usuario de base de datos de solo lectura en la cadena de conexión para que las consultas que ejecuta Claude no puedan modificar datos:
claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \
--dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"
Para confirmar que el servidor se inicia, ejecuta /mcp y comprueba que la fila de db muestre una marca de verificación.
Luego consulte su base de datos de forma natural:
¿Cuál es nuestro ingreso total este mes?
Muéstrame el esquema de la tabla de pedidos
Encuentra los clientes que no han realizado una compra en 90 días
Autenticarse con servidores MCP remotos
Muchos servidores MCP basados en la nube requieren autenticación. Claude Code admite OAuth 2.0 para conexiones seguras.
Claude Code marca un servidor remoto como que necesita autenticación cuando el servidor responde con 401 Unauthorized o 403 Forbidden. Lo que Claude Code muestra depende del servidor:
- Para un servidor en el que no has iniciado sesión, cualquiera de los códigos de estado lo marca en
/mcppara que puedas completar el flujo de OAuth. - Para un conector de claude.ai, un
401causado por claude.ai rechazando tu token de sesión no marca el conector, porque volver a autorizar el conector no puede solucionar tu inicio de sesión. Claude Code muestra el estado de token de sesión rechazado en su lugar. - Para un servidor cuyo encabezado
Authorizationconfiguraste, enheaderso a través de unheadersHelper, un401o403al conectar no marca el servidor, porque la credencial a corregir es la que configuraste. Claude Code informa que la conexión falló en su lugar. Si estableces ese encabezado desde una referencia${VAR}, verifica si esa variable es una que Claude Code lee como vacía. - Para un conector entregado a una sesión en la nube, Claude Code no ejecuta un flujo de inicio de sesión, porque el proxy de la sesión se autentica con el conector con la autorización que otorgaste en claude.ai. Cuando un conector allí necesita autorización nuevamente, reconéctalo en claude.ai/customize/connectors en lugar de desde la sesión.
Cuando un servidor OAuth en el que ya iniciaste sesión rechaza tu token almacenado con 401 Unauthorized, Claude Code actualiza el token, se reconecta e intenta la solicitud una vez más. Solo marca el servidor en /mcp si ese reintento también falla. En una ejecución de claude -p o del Agent SDK en macOS, una solicitud que Claude Code envió mientras no podía leer tu token almacenado falla en su lugar con un error de credenciales almacenadas.
Cuando el servidor rechaza el token de actualización almacenado, Claude Code muestra inmediatamente un aviso que apunta a /mcp. Abre /mcp y selecciona Re-authenticate en el servidor para iniciar sesión nuevamente antes de que la siguiente llamada a herramienta falle.
Un servidor personalizado que devuelve un encabezado WWW-Authenticate que apunta a su servidor de autorización obtiene el mismo descubrimiento automático que cualquier otro servidor remoto.
Claude Code también muestra un aviso de inicio cuando uno o más servidores configurados necesitan autenticación, para que no tengas que abrir /mcp para descubrir qué servidores necesitan inicio de sesión. El aviso solo cuenta los servidores en los que puedes iniciar sesión desde Claude Code. Antes de v2.1.218, también contaba conectores de claude.ai que no estaban conectados en claude.ai, que solo puedes conectar desde la configuración de claude.ai.
El aviso anuncia cada servidor una vez y lo excluye del recuento en lanzamientos posteriores hasta que ese servidor se haya conectado y necesite iniciar sesión nuevamente. /mcp aún enumera todos los servidores que necesitan iniciar sesión.
Una ejecución de claude -p o del Agent SDK no tiene panel /mcp, por lo que Claude Code no puede ejecutar el flujo de OAuth allí. Para usar un servidor que necesita autenticación, completa primero el inicio de sesión desde una sesión interactiva: ejecuta /mcp en la sesión, o claude mcp login <name> en tu shell. Cuando un servidor configurado necesita autenticación durante una ejecución de claude -p o del Agent SDK con búsqueda de herramientas habilitada, Claude Code le dice a Claude que las herramientas del servidor no están disponibles hasta que lo autorices.
Si configuraste headers.Authorization para el servidor y el servidor rechaza ese encabezado, Claude Code informa que la conexión falló en lugar de recurrir a OAuth. Verifica que el token sea válido para el endpoint de MCP, o elimina el encabezado para usar el flujo de OAuth.
1. Agrega el servidor que requiere autenticación
Si ya agregaste el servidor sentry en el inicio rápido de MCP, omite este paso: ejecutar claude mcp add nuevamente con el mismo nombre de servidor en el mismo alcance falla con MCP server sentry already exists in local config. De lo contrario, ejecuta:
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
2. Usa el comando /mcp dentro de Claude Code
En Claude Code, usa el comando:
/mcp
Luego sigue los pasos en tu navegador para iniciar sesión.
[!TIP]
Consejos:
- Los tokens de autenticación se almacenan de forma segura y se actualizan automáticamente
- Usa "Clear authentication" en el menú
/mcppara revocar el acceso- Si tu navegador no se abre automáticamente, copia la URL proporcionada y ábrela manualmente
- Si la redirección del navegador falla con un error de conexión después de autenticarte, pega la URL de devolución de llamada completa de la barra de direcciones de tu navegador en la solicitud de URL que aparece en Claude Code
- La autenticación OAuth funciona con servidores HTTP
Autenticarse desde la línea de comandos
El comando claude mcp login <name> ejecuta el flujo de OAuth de un servidor configurado directamente desde tu shell, para que no necesites abrir el panel /mcp dentro de una sesión. Para un conector de claude.ai, sigue Autorizar un conector de nuevo desde tu shell.
claude mcp login sentry
Para borrar las credenciales almacenadas más tarde, ejecuta claude mcp logout <name>.
claude mcp login detecta cuando no hay navegador local disponible, como durante una sesión SSH o en Linux sin un servidor de pantalla, e imprime la URL de autorización en lugar de intentar abrir un navegador. Abre la URL en tu máquina local y luego pega la URL de redirección completa de la barra de direcciones de tu navegador en la solicitud. El comando necesita una terminal interactiva para el paso de pegado, así que conéctate con ssh -t. Pasa --no-browser para forzar la solicitud de URL incluso cuando se detecta un navegador local.
claude mcp login sentry --no-browser
Usa un puerto de devolución de llamada de OAuth fijo
Algunos servidores MCP requieren un URI de redirección específico registrado con anticipación. De forma predeterminada, Claude Code elige un puerto disponible aleatorio para la devolución de llamada de OAuth. Usa --callback-port para fijar el puerto de modo que coincida con un URI de redirección preregistrado de la forma http://localhost:PORT/callback. Si el inicio de sesión en Claude Code v2.1.229 falla con una falta de coincidencia de URI de redirección, consulta la nota de versión en Usa credenciales de OAuth preconfiguradas.
Puedes usar --callback-port por sí solo (con registro dinámico de cliente) o junto con --client-id (con credenciales preconfiguradas).
# Fixed callback port with dynamic client registration
claude mcp add --transport http \
--callback-port 8080 \
my-server https://mcp.example.com/mcp
Usa credenciales de OAuth preconfiguradas
Algunos servidores MCP no admiten la configuración automática de OAuth a través del Registro Dinámico de Clientes. Si ves un error como "Incompatible auth server: does not support dynamic client registration", el servidor requiere credenciales preconfiguradas. Claude Code también admite servidores que usan un Documento de Metadatos de ID de Cliente (CIMD) en lugar del Registro Dinámico de Clientes, y los descubre automáticamente. Si el descubrimiento automático falla, registra primero una aplicación OAuth a través del portal de desarrolladores del servidor y luego proporciona las credenciales al agregar el servidor.
1. Registra una aplicación OAuth con el servidor
Crea una aplicación a través del portal de desarrolladores del servidor y anota tu ID de cliente y secreto de cliente.
Si el formulario de registro solicita un URI de redirección, elige cualquier puerto disponible e ingresa http://localhost:PORT/callback con ese puerto. Usarás el mismo puerto en el siguiente paso.
En v2.1.229, Claude Code enviaba http://127.0.0.1:PORT/callback en su lugar, y los servidores que coincidían exactamente con el URI de redirección registrado rechazaban el inicio de sesión con una falta de coincidencia de URI de redirección. Claude Code v2.1.231 restauró la forma localhost. Para recuperarte en v2.1.229, actualiza Claude Code, o agrega temporalmente la forma http://127.0.0.1:PORT/callback a los URI de redirección registrados del servidor.
2. Agrega el servidor con tus credenciales
Las pestañas cubren ambos comandos: claude mcp add toma tu ID de cliente y puerto de devolución de llamada como flags, y claude mcp add-json los toma en un objeto oauth. Si registraste un URI de redirección, establece el puerto de devolución de llamada en el puerto de ese URI.
claude mcp add
Usa --client-id para pasar el ID de cliente de tu aplicación. El flag --client-secret solicita el secreto con entrada enmascarada:
claude mcp add --transport http \
--client-id your-client-id --client-secret --callback-port 8080 \
my-server https://mcp.example.com/mcp
claude mcp add-json
Incluye el objeto oauth en la configuración JSON y pasa --client-secret como un flag separado:
claude mcp add-json my-server \
'{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' \
--client-secret
claude mcp add-json (callback port only)
Para fijar solo el puerto de devolución de llamada y dejar que Claude Code registre el cliente automáticamente, establece callbackPort por sí solo:
claude mcp add-json my-server \
'{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"callbackPort":8080}}'
CI / env var
Establece el secreto a través de una variable de entorno para omitir la solicitud interactiva:
MCP_CLIENT_SECRET=your-secret claude mcp add --transport http \
--client-id your-client-id --client-secret --callback-port 8080 \
my-server https://mcp.example.com/mcp
3. Autentícate en Claude Code
Ejecuta /mcp en Claude Code y sigue el flujo de inicio de sesión del navegador.
[!TIP]
Consejos:
- El secreto del cliente se almacena de forma segura en el llavero de tu sistema (macOS) o en un archivo de credenciales, no en tu configuración
- Solo puedes establecer el secreto del cliente cuando agregas el servidor. Cuando te autenticas con
claude mcp logino desde/mcp, Claude Code usa el secreto almacenado y no solicita uno ni leeMCP_CLIENT_SECRET- Para agregar o cambiar el secreto más tarde, elimina el servidor con
claude mcp remove <name>y luego agrégalo nuevamente con--client-secrety el mismo--scope- Si el servidor usa un cliente OAuth público sin secreto, usa solo
--client-idsin--client-secret- Estos flags solo se aplican a transportes HTTP y SSE. No tienen efecto en servidores stdio
- Usa
claude mcp get <name>para verificar que las credenciales de OAuth estén configuradas para un servidor
Sobrescribe el descubrimiento de metadatos de OAuth
Apunta Claude Code a una URL de metadatos de servidor de autorización de OAuth específica para omitir la cadena de descubrimiento predeterminada. Establece authServerMetadataUrl cuando los endpoints estándar del servidor MCP generen errores, o cuando quieras enrutar el descubrimiento a través de un proxy interno. De forma predeterminada, Claude Code primero verifica los Metadatos de Recurso Protegido de RFC 9728 en /.well-known/oauth-protected-resource y luego recurre a los metadatos del servidor de autorización de RFC 8414 en /.well-known/oauth-authorization-server.
Establece authServerMetadataUrl en el objeto oauth de la configuración de tu servidor en .mcp.json:
{
"mcpServers": {
"my-server": {
"type": "http",
"url": "https://mcp.example.com/mcp",
"oauth": {
"authServerMetadataUrl": "https://auth.example.com/.well-known/openid-configuration"
}
}
}
}
La URL debe usar https://. El scopes_supported de la URL de metadatos sobrescribe los alcances que anuncia el servidor ascendente.
Restringe los alcances de OAuth
Establece oauth.scopes para fijar los alcances que Claude Code solicita durante el flujo de autorización. Esta es la forma admitida de restringir un servidor MCP a un subconjunto aprobado por el equipo de seguridad cuando el servidor de autorización ascendente anuncia más alcances de los que quieres otorgar. El valor es una cadena única separada por espacios, que coincide con el formato del parámetro scope en RFC 6749 §3.3.
{
"mcpServers": {
"slack": {
"type": "http",
"url": "https://mcp.slack.com/mcp",
"oauth": {
"scopes": "channels:read chat:write search:read"
}
}
}
}
oauth.scopes tiene prioridad sobre authServerMetadataUrl y sobre los alcances que el servidor descubre en /.well-known. Déjalo sin establecer para permitir que el servidor MCP determine el conjunto de alcances solicitados.
Cuando oauth.scopes no está establecido, Claude Code no solicita el catálogo completo de scopes_supported de los metadatos del servidor de autorización descubiertos automáticamente. Los metadatos obtenidos de un authServerMetadataUrl configurado aún proporcionan su scopes_supported como los alcances solicitados.
Si el servidor de autorización anuncia offline_access en scopes_supported, Claude Code lo agrega a los alcances fijados para que el token de acceso pueda actualizarse sin un nuevo inicio de sesión en el navegador.
Si el servidor luego devuelve un 403 insufficient_scope para una llamada a herramienta, la llamada falla con un mensaje needs additional permissions que nombra el alcance que el servidor solicita. El servidor se muestra como que necesita autenticación en /mcp.
Si ese alcance no está en tu oauth.scopes fijado, agrégalo y luego ejecuta /mcp y autentica el servidor nuevamente. Claude Code solicita los alcances fijados en lugar del alcance que el servidor nombró, por lo que si te autenticas nuevamente sin agregarlo, el token que obtienes aún carece de él.
Usa encabezados dinámicos para autenticación personalizada
Si tu servidor MCP usa un esquema de autenticación distinto de OAuth, como Kerberos, tokens de corta duración o un SSO interno, usa headersHelper para generar encabezados de solicitud en el momento de la conexión. Claude Code ejecuta el comando y combina su salida con los encabezados de conexión.
{
"mcpServers": {
"internal-api": {
"type": "http",
"url": "https://mcp.internal.example.com",
"headersHelper": "/opt/bin/get-mcp-auth-headers.sh"
}
}
}
El comando también puede ser en línea:
{
"mcpServers": {
"internal-api": {
"type": "http",
"url": "https://mcp.internal.example.com",
"headersHelper": "echo '{\"Authorization\": \"Bearer '\"$(get-token)\"'\"}'"
}
}
}
Requisitos:
- El comando debe escribir un objeto JSON de pares clave-valor de cadena en stdout
- Claude Code ejecuta el comando en un shell y se rinde después de 10 segundos
- Claude Code elige el directorio de trabajo del comando según dónde configuraste el servidor, así que proporciona el script como una ruta absoluta o colócalo en
PATH - Los encabezados dinámicos sobrescriben cualquier
headersestático con el mismo nombre
Claude Code ejecuta el helper nuevamente en cada conexión, al inicio de la sesión y al reconectar, una vez que la regla de confianza para servidores de alcance de proyecto y local le permite ejecutarse. No almacena en caché el resultado, por lo que tu script es responsable de cualquier reutilización de token.
Si una llamada a herramienta devuelve 401 Unauthorized o 403 Forbidden, Claude Code ejecuta automáticamente el helper nuevamente bajo la misma regla, se reconecta con los encabezados nuevos e intenta la llamada una vez más. Claude Code marca el servidor como que necesita autenticación en /mcp solo si ese reintento también falla.
Cuando la salida del helper incluye un encabezado Authorization, Claude Code usa esa credencial como la autenticación del servidor y no recurre a OAuth para el servidor.
Si el servidor rechaza la credencial del helper al conectar, Claude Code informa que la conexión falló en lugar de marcar el servidor como que necesita autenticación. Corrige la credencial que devuelve tu helper y luego reconéctate desde /mcp para ejecutar el helper nuevamente.
Claude Code establece estas variables de entorno al ejecutar el helper:
| Variable | Valor |
|---|---|
CLAUDE_CODE_MCP_SERVER_NAME |
el nombre del servidor MCP |
CLAUDE_CODE_MCP_SERVER_URL |
la URL del servidor MCP |
CLAUDE_PLUGIN_ROOT |
el directorio raíz del plugin. Se establece solo cuando un plugin proporciona el servidor |
Úsalas para escribir un único script helper que sirva a múltiples servidores MCP.
Un headersHelper proporcionado por un plugin no puede hacer referencia a los valores ${user_config.*} del plugin, porque el comando se ejecuta a través de un shell. Claude Code informa que el servidor está mal configurado con un error y no sustituye el valor. Coloca ${user_config.KEY} en el campo headers del servidor en su lugar, que no se analiza mediante shell, o haz que el script helper lea el valor de un archivo de configuración. Antes de v2.1.207, headersHelper sustituía valores ${user_config.*}.
Dónde se ejecuta el helper
Claude Code elige el directorio de trabajo del comando headersHelper a partir de la configuración que declara el servidor. Un cd que Claude ejecuta en Bash no lo mueve, y /cd lo mueve solo para servidores que se ejecutan desde el directorio de trabajo principal de la sesión. Cada fila a continuación indica el directorio contra el cual se resuelve una ruta relativa en tu comando headersHelper.
| Dónde configuraste el servidor | Directorio de trabajo |
|---|---|
| Un plugin | El directorio raíz del plugin |
Un .mcp.json de proyecto o un servidor de alcance local |
El directorio del proyecto en el que se declara el servidor |
Un archivo de agente en tu proyecto, un servidor de la opción mcpServers del SDK o del método setMcpServers(), o --mcp-config |
El directorio de trabajo principal de la sesión |
Alcance de usuario, MCP administrado, un conector de claude.ai, o un archivo de agente de fuera de tu proyecto, incluido uno de un directorio --add-dir |
Tu directorio de configuración, ~/.claude a menos que establezcas CLAUDE_CONFIG_DIR |
Antes de v2.1.238, Claude Code también ejecutaba los helpers de servidores de alcance de usuario, administrados y de conector de claude.ai, y de archivos de agente de fuera de tu proyecto, desde el directorio en el que lo iniciaste.
Qué variables puede leer un helper
Un headersHelper que proporciona un repositorio o un plugin es un comando que no escribiste, por lo que Claude Code lo ejecuta sin las variables de credencial de tu entorno, como ANTHROPIC_API_KEY. Dónde configuraste el servidor decide si esto se aplica:
- Eliminadas: un servidor en un
.mcp.jsonde proyecto o en un plugin, y un servidor en línea en un archivo de agente de tu proyecto o de un directorio--add-dir - No eliminadas: un servidor en alcance de usuario o alcance local, en MCP administrado, de un conector de claude.ai, o proporcionado por el SDK o
--mcp-config, y un servidor en línea en un archivo de agente de~/.claude/agents/, de la configuración administrada, o pasado con--agents
Aparte de las variables GIT_CONFIG_KEY_<n> de Git, Claude Code elimina todas las variables de tu entorno cuyo nombre parece una credencial, como un nombre que contenga TOKEN, SECRET, PASSWORD, KEY o AUTH en mayúsculas o minúsculas, por lo que tanto ANTHROPIC_API_KEY como MY_REGISTRY_TOKEN se eliminan. Claude Code también elimina una lista fija de variables de credencial cuyos nombres no siguen ese patrón, como ANTHROPIC_CUSTOM_HEADERS.
Cuando esto se aplica a tu helper, haz que el script lea su credencial de un archivo o de un almacén de credenciales. Si la url del servidor lleva el valor en vivo de una de estas variables, como MY_REGISTRY_TOKEN, el valor CLAUDE_CODE_MCP_SERVER_URL que recibe el helper también tiene esa parte reemplazada con REDACTED.
Confía en una carpeta antes de que se ejecute su headersHelper
Claude Code ejecuta un headersHelper como un comando de shell arbitrario. Para un servidor en un .mcp.json de proyecto o en alcance local, ejecuta el helper solo después de que aceptes el diálogo de confianza para el directorio del proyecto en el que se declara el servidor. Antes de v2.1.238, una sesión de claude -p o del SDK ejecutaba estos helpers sin verificar la confianza, y una sesión interactiva los ejecutaba una vez que habías confiado en una carpeta principal.
- Confianza que no cuenta: la confianza de una carpeta principal, y la confianza automática que una sesión de
claude -po del SDK obtiene para hooks en archivos de configuración - Hasta que confíes en la carpeta: Claude Code conecta el servidor solo con sus
headersestáticos. En una sesión declaude -po del SDK también imprime una líneaheadersHelper not runpor servidor en stderr, indicándote cómo otorgar la confianza. - Confianza sin un diálogo: establece
projects["<path>"].hasTrustDialogAcceptedentrueen~/.claude.json.<path>es la carpeta en la que, según Reglas de permiso de proyecto y confianza del espacio de trabajo, Claude Code basa la confianza.
Claude Code aplica la misma regla a un servidor declarado en línea en un archivo de agente, verificando de dónde vino ese archivo de agente: tu proyecto, para un archivo en su directorio .claude/agents/, o un directorio --add-dir. Hasta que confíes en ese proyecto o directorio en sí, Claude Code no carga el servidor en absoluto, por lo que su helper tampoco se ejecuta nunca.
Inicia sesión en un servidor MCP detrás de un gateway que requiere un encabezado
El inicio de sesión OAuth en un servidor MCP falla cuando un gateway requiere un encabezado, como X-API-Key, y Claude Code no lo envía. Para que Claude Code envíe ese encabezado, agrégalo a la configuración del servidor y usa Claude Code v2.1.299 o posterior:
- Un servidor cuya configuración puedes editar: establécelo en
headerso devuélvelo desde unheadersHelper - Un servidor que proporciona MCP administrado o un plugin: pide a tu administrador o al autor del plugin que agregue el encabezado a la entrada del servidor
Luego, Claude Code agrega los encabezados configurados, excepto Authorization, a las solicitudes de inicio de sesión, actualización de token y revocación de token que envía al origen del servidor. El origen del servidor es el esquema, el host y el puerto de su url. Un gateway que requiere el encabezado aún puede detener el inicio de sesión en la página de autorización o en un servidor de autorización en otro origen:
- La página de autorización: inicias sesión en esta página en tu navegador, que no envía los encabezados configurados. Si tu navegador recibe el error del gateway en lugar de la página, pide a quien administra el gateway que deje pasar la página sin el encabezado.
- Un servidor de autorización en otro origen: si un gateway delante de ese servidor también requiere el encabezado, el inicio de sesión falla allí. Pide a quien administra ese gateway que deje pasar las solicitudes OAuth sin el encabezado.
Agregar servidores MCP desde configuración JSON
Si tiene una configuración JSON para un servidor MCP, puede agregarla directamente:
1. Agregar un servidor MCP desde JSON
# Sintaxis básica
claude mcp add-json <name> '<json>'
# Ejemplo: Agregar un servidor HTTP con configuración JSON
claude mcp add-json weather-api '{"type":"http","url":"https://api.weather.com/mcp","headers":{"Authorization":"Bearer token"}}'
# Ejemplo: Agregar un servidor stdio con configuración JSON
claude mcp add-json local-weather '{"type":"stdio","command":"/path/to/weather-cli","args":["--api-key","abc123"],"env":{"CACHE_DIR":"/tmp"}}'
# Ejemplo: Agregar un servidor HTTP con credenciales OAuth preconfiguradas
claude mcp add-json my-server '{"type":"http","url":"https://mcp.example.com/mcp","oauth":{"clientId":"your-client-id","callbackPort":8080}}' --client-secret
2. Verificar que el servidor fue agregado
claude mcp get weather-api
[!TIP]
Consejos:
- Asegúrese de que el JSON esté correctamente escapado en su shell
- El JSON debe cumplir con el esquema de configuración del servidor MCP
- Puede usar
--scope userpara agregar el servidor a su configuración de usuario en lugar de la específica del proyecto
Importar servidores MCP desde Claude Desktop
Si ya ha configurado servidores MCP en Claude Desktop, puede importarlos:
1. Importar servidores desde Claude Desktop
# Sintaxis básica
claude mcp add-from-claude-desktop
2. Seleccionar qué servidores importar
Después de ejecutar el comando, verá un diálogo interactivo que le permite seleccionar qué servidores desea importar.
3. Verificar que los servidores fueron importados
claude mcp list
Los nombres de servidores agregados a través de comandos claude mcp pueden contener solo letras, números, guiones y guiones bajos. Claude Desktop no aplica esa restricción, por lo que un servidor de Claude Desktop cuyo nombre contiene cualquier otro carácter, como un espacio, no puede ser importado. La importación reporta cada nombre que rechaza e importa los otros servidores que seleccionaste.
[!TIP]
Consejos:
- Esta característica solo funciona en macOS y Windows Subsystem for Linux (WSL)
- Lee el archivo de configuración de Claude Desktop desde su ubicación estándar en esas plataformas
- Use la bandera
--scope userpara agregar servidores a su configuración de usuario- Los servidores importados mantienen los mismos nombres que en Claude Desktop cuando el nombre contiene solo letras, números, guiones y guiones bajos. Claude Code reporta un servidor cuyo nombre contiene cualquier otro carácter y lo omite
- Si ya existen servidores con los mismos nombres, obtendrán un sufijo numérico (por ejemplo,
server_1)
Usar servidores MCP desde claude.ai
Si ha iniciado sesión en Claude Code con una cuenta de claude.ai, los servidores MCP que ha añadido en claude.ai, conocidos como conectores, están disponibles automáticamente en Claude Code:
1. Configurar servidores MCP en claude.ai
Añada servidores en claude.ai/customize/connectors. En planes Team y Enterprise, solo los administradores pueden añadir servidores.
2. Autenticar el servidor MCP
Complete los pasos de autenticación requeridos en claude.ai.
3. Ver y gestionar servidores en Claude Code
En Claude Code, use el comando:
/mcp
Los servidores de claude.ai aparecen en la lista con indicadores que muestran que provienen de claude.ai.
Anthropic también proporciona algunos conectores por sí misma, sin que tú o un administrador los agreguen. En cuentas donde Claude Docs está disponible, /mcp enumera claude.ai Claude Docs sin configuración, y Claude lo usa cuando le pides un documento destinado a otras personas. Para desactivar solo este conector, consulta Desactivar conectores de claude.ai.
Claude Code marca un conector como managed en /mcp y en el gestor de /plugin cuando su organización gestiona su autenticación en claude.ai. El estado managed no cambia cómo Claude Code se conecta al conector ni cómo aplica los controles de herramientas de su organización.
Los conectores a los que nunca ha iniciado sesión se contraen detrás de una fila Show unused connectors al final de la sección de claude.ai, por lo que una lista provisionada por la organización no llena el panel. Seleccione la fila para expandirlos. Un conector en el que inició sesión antes permanece visible incluso cuando actualmente necesita reautenticación.
Los conectores de claude.ai se obtienen solo cuando su método de autenticación activo es un inicio de sesión de suscripción de claude.ai. No se cargan, incluso si ejecutó /login anteriormente, cuando:
ANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKEN, oapiKeyHelperestá activo- Un proveedor de terceros como Amazon Bedrock o Agent Platform de Google Cloud está activo
ANTHROPIC_PROFILE, las variables de federación, o un perfil de Anthropic activo proporciona la credencialCLAUDE_CODE_OAUTH_TOKENcontiene un token declaude setup-token, que solo puede hacer solicitudes de modelo
Si /mcp no enumera un conector que añadió, ejecute /status para confirmar qué método de autenticación está activo. Desactive esa variable de entorno, elimine la configuración apiKeyHelper, o desactive el perfil, luego ejecute /login para seleccionar su cuenta de claude.ai.
Si un problema de red temporal mantiene la lista de conectores sin cargar cuando su sesión comienza, Claude Code reintenta la obtención hasta tres veces en segundo plano, y los conectores aparecen una vez que un reintento tiene éxito. Si aún no han aparecido, reinicie Claude Code para obtener la lista nuevamente.
Si /mcp muestra un conector como session token rejected, o su vista de detalle muestra claude.ai rejected the session token, claude.ai rechazó el token de su inicio de sesión de Claude Code. Autorizar el conector nuevamente no borra este estado, porque la autorización propia del conector en claude.ai no es lo que fue rechazado. Para borrarlo:
- Ejecute
/loginpara iniciar sesión nuevamente. - Reconecte el conector desde
/mcp.
Antes de v2.1.222, Claude Code marcaba los conectores como que necesitaban autenticación, y autorizarlos no lo resolvía.
Un servidor que ha añadido en Claude Code tiene precedencia sobre un conector de claude.ai que apunta a la misma URL. Cuando esto sucede, /mcp enumera el conector como oculto y muestra cómo eliminar el duplicado si prefiere usar el conector.
Algunos conectores alojados por Anthropic, como Microsoft 365, Gmail y Google Calendar, no admiten OAuth local desde Claude Code porque el proveedor de identidad ascendente solo acepta la URL de redirección que claude.ai registró. Cuando un servidor que añadió con claude mcp add o en .mcp.json apunta a uno de estos hosts e inicia sesión en él desde /mcp o con claude mcp login, Claude Code muestra is Anthropic-hosted and doesn't support local OAuth, dirigiéndole a conectar el servicio en claude.ai/customize/connectors en su lugar.
Después de eliminar su entrada con claude mcp remove <name> y conectar el servicio en claude.ai, el conector aparece en Claude Code automáticamente.
Cómo los conectores llegan a Claude Code
Qué configuración rige un conector de claude.ai depende de dónde se ejecute tu sesión, porque solo algunas sesiones obtienen conectores de claude.ai por sí mismas. Cada fila a continuación indica cómo llegan los conectores a un tipo de sesión y qué los controla allí. Las sesiones WSL de la aplicación de escritorio no tienen fila porque los conectores aún se están implementando en ellas.
| Dónde se ejecuta la sesión | Cómo llegan los conectores | Qué los rige |
|---|---|---|
| Sesiones de Terminal, VS Code, JetBrains, y Agent SDK | Claude Code los obtiene de claude.ai | La configuración en esta sección y configuración MCP gestionada |
| Sesiones en la nube | El host remoto los pasa | Su configuración de organización de claude.ai, más la configuración de lista de permitidos y lista de denegados que llega a la sesión y cualquier managed-mcp.json en el host que la ejecuta |
| Las sesiones locales y SSH de la aplicación de escritorio | La aplicación de escritorio los entrega en proceso | Entradas blocked en los controles de herramientas de conector de su organización |
disableClaudeAiConnectors, ENABLE_CLAUDEAI_MCP_SERVERS, y allowAllClaudeAiMcps actúan solo en la primera fila, los conectores que Claude Code obtiene por sí mismo. Las otras dos filas difieren de ella de estas maneras:
- Sesiones en la nube: Las entradas
allowedMcpServersydeniedMcpServersque llegan a la sesión, por ejemplo a través de configuración gestionada por servidor, también filtran los conectores entregados. El proxy de la sesión reescribe la URL de cada conector, por lo que un patrónserverUrlescrito para la URL propia del conector no coincide con él. Para admitir conectores entregados junto con una lista de permitidos de URL en un entorno autohospedado, añada las entradasserverUrlenumeradas en El tráfico de conectores sale de su red. Claude Code descarta los conectores entregados cuando hay unmanaged-mcp.jsonpresente en el host que ejecuta la sesión, como un host de ejecutor autohospedado, independientemente de si estableceallowAllClaudeAiMcps. - Sesiones locales y SSH de la aplicación de escritorio: la aplicación de escritorio registra los conectores como servidores
type: "sdk"en proceso, y ninguna configuración MCP omanaged-mcp.jsonllega a ellos. Un usuario mantiene un conector fuera de sus propias sesiones desconectándolo en claude.ai/customize/connectors. Una organización bloquea las herramientas de un conector o desactiva Claude Code en la aplicación de escritorio completamente.
Controles de organización en herramientas de conector
Su organización puede establecer controles por herramienta en conectores de claude.ai. Claude Code lee esta configuración al iniciar y la aplica localmente, excepto en las sesiones locales y SSH de la aplicación de escritorio. Allí, la aplicación de escritorio retiene las herramientas blocked antes de entregar un conector, y la configuración ask no llega a Claude Code, por lo que aplica las reglas de permiso ordinarias de la sesión a esas herramientas en lugar de solicitar en cada llamada. En sesiones donde Claude Code obtiene conectores por sí mismo, ejecute /mcp para ver qué configuración se aplica a cada herramienta en un conector.
- Herramienta establecida en
ask: Claude Code pide confirmación en cada llamada con el motivoYour organization requires approval for this tool. La solicitud aparece incluso en los modos de permisosacceptEdits,autoybypassPermissions. En la terminal, la solicitud no tiene ninguna opción para recordar tu elección. Las reglas de permitir que coinciden con la herramienta tampoco omiten la solicitud. En el mododontAsk, que nunca pide confirmación, Claude Code deniega la llamada en su lugar. - Herramienta establecida en
blocked: Claude Code filtra la herramienta antes de que Claude la vea, por lo que nunca aparece en la lista de herramientas de Claude. En sesiones donde Claude Code obtiene conectores por sí mismo, la lista de herramientas/mcpaún muestra la herramienta, marcada comodisabled by your organization.
La aplicación de escritorio y el chat de claude.ai aplican la misma configuración blocked, por lo que Claude tampoco puede usar una herramienta bloqueada allí, y no puede retener una herramienta de las sesiones de la aplicación de escritorio mientras la mantiene disponible en el chat. La aplicación de escritorio omite un conector cuyas herramientas están todas bloqueadas.
Desactivar conectores de claude.ai
Claude Code aplica disableClaudeAiConnectors solo a los conectores que obtiene por sí mismo, no a los conectores que entrega un host en la nube o la aplicación de escritorio. Para desactivar los conectores que obtiene, establezca la configuración en true en cualquier ámbito de configuración:
{
"disableClaudeAiConnectors": true
}
Esta configuración utiliza semántica any-source-true: true en cualquier fuente de configuración tiene precedencia. Un .claude/settings.json de proyecto verificado puede optar por que un repositorio no use los conectores que Claude Code obtiene por sí mismo, pero un false a nivel de proyecto no puede reactivar los conectores que un true a nivel de usuario o política ha desactivado. Los servidores pasados explícitamente a través de --mcp-config no se ven afectados.
También puede establecer la variable de entorno ENABLE_CLAUDEAI_MCP_SERVERS en false, que tiene el mismo efecto para la sesión de shell actual:
ENABLE_CLAUDEAI_MCP_SERVERS=false claude
Para bloquear conectores individuales de claude.ai en lugar de todos ellos, añádalos a deniedMcpServers por nombre o por patrón de URL. Por ejemplo, una entrada serverName de "claude.ai Slack" bloquea el conector de Slack. También puede ejecutar /mcp para activar o desactivar cualquier conector que Claude Code obtiene solo para el proyecto actual.
Usar Claude Code como servidor MCP
Puedes usar Claude Code como servidor MCP que otras aplicaciones pueden conectar:
# Inicia Claude como servidor MCP stdio
claude mcp serve
El comando no imprime nada cuando se inicia. Un servidor MCP stdio se comunica a través de stdin y stdout, por lo que una terminal silenciosa y bloqueada significa que el servidor está ejecutándose y esperando que un cliente se conecte.
Puedes usar esto en Claude Desktop agregando esta configuración a claude_desktop_config.json:
{
"mcpServers": {
"claude-code": {
"type": "stdio",
"command": "claude",
"args": ["mcp", "serve"],
"env": {}
}
}
}
[!WARNING]
Configuración de la ruta del ejecutable: el campo
commanddebe hacer referencia al ejecutable de Claude Code. Si el comandoclaudeno está en la ruta del sistema, deberás especificar la ruta completa al ejecutable.Para encontrar la ruta completa:
which claudeLuego usa la ruta completa en tu configuración:
{ "mcpServers": { "claude-code": { "type": "stdio", "command": "/full/path/to/claude", "args": ["mcp", "serve"], "env": {} } } }Sin la ruta correcta del ejecutable, encontrarás errores como
spawn claude ENOENT.
[!TIP]
Consejos:
- En Claude Desktop, intenta pedirle a Claude que lea archivos en un directorio, realice ediciones y más.
- Este servidor MCP solo expone las herramientas de Claude Code a tu cliente MCP, por lo que tu propio cliente es responsable de implementar la confirmación del usuario para llamadas a herramientas individuales.
Leer la salida de un comando en segundo plano como cliente MCP
Un campo backgroundOutputPath en un resultado de Bash o PowerShell de claude mcp serve significa que la llamada dejó su comando ejecutándose en segundo plano. Un comando se ejecuta en segundo plano cuando tu cliente establece run_in_background: true en la llamada. Un comando en primer plano también puede pasar a segundo plano cuando se agota su tiempo de espera.
El campo está en el texto JSON del resultado y contiene la ruta del archivo de salida del comando.
- Para leer la salida hasta el momento: abre el archivo en esa ruta desde tu cliente, o pasa la ruta como
file_patha la herramientaReaddel servidor - Para saber cuándo ha terminado el comando: agrega un
echode una cadena fija al valor decommand, como ennpm test; echo DONE. El comando ha terminado una vez que esa cadena aparece en el archivo. Sin la cadena, nada marca el final, porque Claude Code no agrega ninguna línea de cierre al archivo y no notifica a tu cliente. - Para leer el final de una salida larga:
Readcon solofile_pathdevuelve la primera página, o falla cuando el archivo excede el límite de tamaño. Pasa tambiénoffsetylimit, lo cual funciona con cualquier tamaño de archivo:- Llama a
Readconoffsetylimitestablecidos ambos en1, y tomatotalLinesdel resultado - Llama a
Readde nuevo conoffsetestablecido entotalLinesmenos nueve ylimitestablecido en10 - Busca tu cadena de
echoen las últimas diez líneas, que devuelve la segunda llamada
- Llama a
El campo backgroundOutputPath requiere Claude Code v2.1.295 o posterior.
Límites de salida de MCP y advertencias
Cuando las herramientas de MCP producen salidas grandes, Claude Code ayuda a gestionar el uso de tokens para evitar sobrecargar el contexto de tu conversación:
- Umbral de advertencia de salida: Claude Code muestra una advertencia cuando la salida de cualquier herramienta de MCP excede 10,000 tokens
- Límite configurable: puedes ajustar el máximo de tokens de salida de MCP permitidos usando la variable de entorno
MAX_MCP_OUTPUT_TOKENS - Límite predeterminado: el máximo predeterminado es 25,000 tokens
- Alcance: la variable de entorno se aplica a herramientas que no declaran su propio límite. Las herramientas que establecen
anthropic/maxResultSizeCharsusan ese valor en su lugar para contenido de texto, independientemente del valor en que esté configuradoMAX_MCP_OUTPUT_TOKENS. Las herramientas que devuelven datos de imagen siguen estando sujetas aMAX_MCP_OUTPUT_TOKENS - Superando el límite: cuando un resultado exitoso sin contenido de imagen excede el límite de tokens, Claude Code lo guarda en un archivo y lo reemplaza en la conversación con un mensaje que nombra la ruta del archivo, para que Claude lea el archivo cuando necesite el contenido. El archivo se encuentra en el directorio
tool-resultsde la sesión bajo~/.claude/projects/. - Tamaño de respuesta de servidores HTTP y SSE: cuando una respuesta de un servidor HTTP o SSE supera los 16 MiB, Claude Code deja de leerla y la solicitud falla. El límite se aplica después de la descompresión a un cuerpo de respuesta JSON o a un evento de un flujo de eventos. Si mantienes el servidor, devuelve menos datos por respuesta para mantenerte por debajo del límite, por ejemplo, paginando los resultados
- Tamaño de mensaje de servidores WebSocket: cuando un servidor WebSocket envía un mensaje de más de 16 MiB, Claude Code cierra la conexión y las llamadas en curso en ese servidor fallan. Si mantienes el servidor, devuelve menos datos por mensaje para mantenerte por debajo del límite
Una llamada que Claude Code ha movido a una tarea en segundo plano informa su resultado a través de la notificación de la tarea. Se aplican dos límites más a una llamada que se completa en primer plano:
- Límite de caracteres para resultados de texto: para una herramienta que no declara
anthropic/maxResultSizeChars, Claude Code guarda en un archivo un resultado exitoso sin contenido de imagen una vez que supera los 50,000 caracteres, sin importar su cantidad de tokens. ConfigurarMAX_MCP_OUTPUT_TOKENSno cambia este umbral - Resultados de error: cuando una herramienta devuelve un resultado marcado con
isError: true, Claude recibe el texto del resultado como el mensaje de error de la herramienta. Un texto de error de más de unos 11,000 caracteres conserva solo sus primeros 5,000 y sus últimos 5,000 caracteres, con un marcador entre ellos que indica cuántos caracteres se eliminaron
Para cambiar el límite de tokens, establece MAX_MCP_OUTPUT_TOKENS en tu shell antes de iniciar Claude Code:
export MAX_MCP_OUTPUT_TOKENS=50000
claude
Aumentar el límite para una herramienta específica
Si estás creando un servidor MCP, puedes permitir que herramientas individuales devuelvan resultados más grandes que el umbral predeterminado de persistencia en disco de 50,000 caracteres estableciendo _meta["anthropic/maxResultSizeChars"] en la entrada de respuesta tools/list de la herramienta. Claude Code eleva el umbral de esa herramienta al valor anotado, hasta un límite máximo de 500,000 caracteres.
Esto es útil para herramientas que devuelven salidas inherentemente grandes pero necesarias, como esquemas de bases de datos o árboles de archivos completos. Sin la anotación, los resultados exitosos que exceden el umbral predeterminado se persisten en disco y se reemplazan con una referencia de archivo en la conversación.
{
"name": "get_schema",
"description": "Returns the full database schema",
"_meta": {
"anthropic/maxResultSizeChars": 200000
}
}
La anotación se aplica independientemente de MAX_MCP_OUTPUT_TOKENS para contenido de texto, por lo que los usuarios no necesitan elevar la variable de entorno para herramientas que la declaran. Las herramientas que devuelven datos de imagen siguen estando sujetas al límite de tokens.
Imágenes en resultados de herramientas
Cuando una herramienta de MCP devuelve una imagen PNG, JPEG, GIF o WebP, Claude ve la imagen en línea en la conversación. La copia en línea puede estar reducida o comprimida para ajustarse a los límites de tamaño de imagen del modelo. Claude Code también guarda los bytes originales en un archivo en el directorio tool-results de la sesión bajo ~/.claude/projects/ y le proporciona a Claude la ruta. Claude puede entonces recortar, convertir o reutilizar el archivo de resolución completa con herramientas como Bash.
Si desactivas la persistencia de sesión con --no-session-persistence o CLAUDE_CODE_SKIP_PROMPT_HISTORY, Claude Code no escribe ningún archivo de imagen y Claude recibe solo la copia en línea.
Guardar resultados de imágenes de MCP en un archivo requiere Claude Code v2.1.283 o posterior.
Esquemas de entrada de herramientas con un combinador a nivel raíz
Algunos servidores MCP declaran el esquema de entrada de una herramienta como una unión de JSON Schema, con anyOf, oneOf o allOf en el nivel superior del esquema. La API de Claude no acepta esas palabras clave en la raíz del esquema. Sí acepta combinadores anidados dentro de properties, que Claude Code envía sin cambios.
Las herramientas con un combinador a nivel raíz permanecen disponibles. Antes de enviar la herramienta a la API, Claude Code aplana el esquema en un único objeto y antepone una oración a la descripción de la herramienta que le indica a Claude qué grupos de parámetros pertenecen juntos:
allOf: las propiedades de cada rama se fusionan, y la listarequiredde cada rama sigue aplicándoseanyOfyoneOf: las propiedades de cada rama se fusionan, y la listarequiredde cada rama se describe en la descripción de la herramienta en lugar de ser aplicada por el esquema
Su servidor recibe los argumentos que Claude eligió, así que continúe validando la combinación del lado del servidor.
Cuando Claude Code no puede producir un esquema que la API acepte, o en una implementación que no recibe la configuración remota que habilita la reescritura, omite esa herramienta, registra el motivo en el registro del servidor y deja disponibles las otras herramientas del servidor.
Herramientas con esquemas de entrada inválidos
La API de Claude verifica el esquema de entrada de cada herramienta en una solicitud y rechaza toda la solicitud cuando algún esquema falla, por lo que una única herramienta MCP con un esquema malformado haría que todas las solicitudes que la incluyan fallen con un error 400. Claude Code ejecuta dos de las comprobaciones de la API por sí mismo cuando carga las herramientas de un servidor y excluye cada herramienta que fallaría en ellas, de modo que las otras herramientas del servidor sigan funcionando:
- Los nombres de propiedades de nivel superior deben tener entre 1 y 64 caracteres de largo y usar solo letras ASCII y dígitos,
_,.y- - El esquema debe ser válido contra el meta-esquema de JSON Schema draft 2020-12. Claude Code aplica esta comprobación a esquemas que no declaran
$schemay esquemas que declaran draft 2020-12. Un esquema que declara cualquier otro dialecto omite esta comprobación, aunque la comprobación de nombres de propiedades anterior sigue aplicándose
Cuando Claude Code excluye una herramienta, registra el motivo en el registro del servidor e indica a Claude qué herramientas excluyó y por qué, para que pueda preguntarle a Claude por qué falta una herramienta. Si corrige el esquema en el servidor, la herramienta reaparece la próxima vez que Claude Code carga las herramientas del servidor.
Claude Code activa la exclusión a través de una bandera de características que obtiene de Anthropic. En una implementación donde la obtención de banderas está desactivada, o en una máquina cuyas banderas nunca han llegado, como una máquina aislada, Claude Code sigue ejecutando las comprobaciones y registra en el registro del servidor qué herramienta sería rechazada, pero envía el esquema de la herramienta a la API de todas formas. La API rechaza una solicitud que incluya ese esquema con un error 400 que nombra la herramienta por su posición. Antes de v2.1.216, ninguna implementación ejecutaba estas comprobaciones.
El manejo de combinador de nivel raíz es independiente y mantiene su propio comportamiento cuando la obtención de banderas está desactivada o las banderas nunca han llegado.
Herramientas con nombres de más de 128 caracteres
Si /mcp muestra una herramienta que Claude no puede llamar, verifica si el nombre completo de la herramienta tiene más de 128 caracteres. Ejecuta /mcp en tu sesión y selecciona la herramienta para ver su nombre completo, como mcp__<server>__<tool>. Claude Code omite una herramienta MCP de las herramientas que envía a Claude cuando su nombre completo supera los 128 caracteres. La API de Claude rechaza una solicitud que incluya una herramienta así, por lo que omitir la herramienta permite que las demás herramientas del servidor sigan funcionando.
Para ver el mensaje que nombra la herramienta y las formas de acortar su nombre completo, consulta Nombre de herramienta MCP de más de 128 caracteres.
Requerir aprobación para una herramienta específica
Si estás construyendo un servidor MCP, puedes marcar una herramienta como que requiere aprobación explícita en cada llamada estableciendo _meta["anthropic/requiresUserInteraction"] en true en la entrada de respuesta tools/list de la herramienta. El valor debe ser el booleano JSON true; cualquier otro valor se ignora.
Claude Code muestra la solicitud de permiso de esa herramienta en cada llamada, incluso en los modos de permisos acceptEdits, auto y bypassPermissions, y no ofrece una opción "no volver a preguntar" para ella. Las reglas de permitir que coinciden con la herramienta tampoco omiten la solicitud. En modo dontAsk, que nunca pide confirmación, Claude Code deniega la llamada en su lugar.
La solicitud tiene que llegar a una persona. En modo no interactivo con --permission-prompt-tool, un resultado allow de la herramienta de solicitud de permisos para una herramienta marcada se convierte en una denegación con el mensaje MCP tool requires user interaction; not supported via --permission-prompt-tool. La devolución de llamada canUseTool del Agent SDK sí recibe estas llamadas y puede aprobarlas, porque se espera que tu aplicación SDK se las muestre a un usuario.
Usa esto para herramientas cuya solicitud de permiso es en sí el objetivo, como un paso de consentimiento o de concesión de acceso donde la aprobación automática significaría que ningún humano estuvo de acuerdo. Otras herramientas del mismo servidor mantienen su comportamiento de permisos normal.
La siguiente entrada tools/list marca una herramienta como que siempre requiere aprobación.
{
"name": "grant_access",
"description": "Requests access to a protected resource",
"_meta": {
"anthropic/requiresUserInteraction": true
}
}
Algunas superficies, como Remote Control y las aplicaciones construidas sobre el Agent SDK, normalmente te permiten aprobar llamadas a herramientas con un toque. Para una herramienta marcada con esta anotación, Claude Code retiene la acción de un toque y, en su lugar, muestra la solicitud de permiso completa de la herramienta, por lo que la aprobación sigue viniendo de una persona que responde a la solicitud y no de un toque.
Claude Code retiene la aprobación de un toque de la misma manera para cualquier solicitud de permiso que solo el diálogo de la terminal pueda renderizar completamente, como una que incluye una advertencia de seguridad o una opción de permitir siempre que la superficie remota no puede mostrar. Respondes esa solicitud en el diálogo de la terminal en lugar de desde Remote Control.
Marca las herramientas que es seguro llamar dos veces
Si creas un servidor MCP, marca las herramientas que es seguro llamar dos veces para que Claude Code pueda repetir una llamada que estaba pendiente cuando se cerró una conexión. Claude Code puede repetir una llamada de ese tipo a un servidor HTTP o a un conector de claude.ai una vez, en una nueva conexión. Una llamada que Claude Code no repite puede fallar con connection closed before the tool call was answered.
Para marcar una herramienta, establece una de estas annotations en true en su entrada de tools/list:
idempotentHint: la herramienta puede cambiar algo, y llamarla de nuevo con los mismos argumentos es seguroreadOnlyHint: la herramienta no cambia nada. Claude Code también ejecuta las llamadas a la herramienta en paralelo con otras llamadas de solo lectura.
Por ejemplo, estos campos en una entrada de tools/list marcan la herramienta set_issue_status como segura de repetir:
{
"name": "set_issue_status",
"annotations": {
"idempotentHint": true
}
}
Responder a solicitudes de elicitación de MCP
Los servidores MCP pueden solicitar información estructurada de su parte durante una tarea mediante elicitación. Cuando un servidor necesita información que no puede obtener por sí solo, Claude Code muestra un diálogo interactivo y devuelve su respuesta al servidor. No se requiere configuración de su parte: los diálogos de elicitación aparecen automáticamente cuando un servidor los solicita.
Los servidores pueden solicitar información de dos formas:
- Modo de formulario: Claude Code muestra un diálogo con campos de formulario definidos por el servidor (por ejemplo, una solicitud de nombre de usuario y contraseña). Complete los campos y envíe.
- Modo de URL: Claude Code pregunta si deseas abrir un enlace en tu navegador. Los servidores utilizan este modo para un flujo que se completa fuera de la terminal, como el inicio de sesión.
En modo de URL, Claude Code pasa la URL como argumento de línea de comandos al controlador de URL de su sistema y limita la longitud de ese argumento. Cuando la URL, una vez escapada para la línea de comandos, supera ese límite, solo puede rechazar la solicitud. Cada carácter que necesita escaparse, como % o &, cuenta cuatro veces hacia el límite: su propio carácter más tres caracteres de escape. Una URL sin ninguno de ellos alcanza el límite en aproximadamente 8.000 caracteres. Una URL construida en gran medida con escapes de porcentaje, donde cada tercer carácter es un %, lo alcanza en aproximadamente 4.000.
Para responder automáticamente a solicitudes de elicitación sin mostrar un diálogo, use el hook Elicitation.
Si está creando un servidor MCP que utiliza elicitación, consulte la especificación de elicitación de MCP para obtener detalles del protocolo y ejemplos de esquema.
Modos de elicitación que declara Claude Code
Si creas un servidor MCP, las capacidades de cliente que Claude Code envía al conectarse le indican a tu servidor qué modos de elicitación puede solicitar. Claude Code declara elicitation: {form: {}, url: {}} en las siguientes conexiones, por lo que un servidor en cualquiera de ellas puede solicitar ambos modos:
- Conexiones que utilizan la revisión de protocolo 2026-07-28
- Conexiones con las revisiones de protocolo anteriores, 2025-11-25 y más antiguas, a los servidores stdio,
sse,httpywsde la configuración MCP de Claude Code de un usuario. Requiere Claude Code v2.1.287 o posterior
En sus demás conexiones con las revisiones anteriores, como con los conectores de claude.ai, Claude Code declara el elicitation: {} simple, que permite solicitudes de elicitación solo en modo de formulario.
Un servidor creado con Java MCP SDK 0.17.0 o anterior puede rechazar una declaración que contenga form y url. Consulta MCP server rejected the elicitation capability.
Usar recursos MCP
Los servidores MCP pueden exponer recursos que puede referenciar usando menciones @, de manera similar a cómo referencia archivos.
Referenciar recursos MCP
1. Listar recursos disponibles
Escriba @ en su indicación para ver los recursos disponibles de todos los servidores MCP conectados. Los recursos aparecen junto a los archivos en el menú de autocompletado.
2. Referenciar un recurso específico
Utilice el formato @server:protocol://resource/path para referenciar un recurso:
Can you analyze @github:issue://123 and suggest a fix?
Please review the API documentation at @docs:file://api/authentication
3. Referencias de múltiples recursos
Puede referenciar múltiples recursos en una sola indicación:
Compare @postgres:schema://users with @docs:file://database/user-model
[!TIP]
Consejos:
- Los recursos se obtienen automáticamente e incluyen como adjuntos cuando se referencian
- Las rutas de recursos se pueden buscar de forma difusa en el autocompletado de menciones @
- Claude Code proporciona automáticamente herramientas para listar y leer recursos MCP cuando los servidores las admiten
- Los recursos pueden contener cualquier tipo de contenido que proporcione el servidor MCP (texto, JSON, datos estructurados, etc.)
Los recursos de la interfaz de usuario de MCP Apps son entradas con un URI ui:// o el tipo de medio text/html;profile=mcp-app: páginas para que una aplicación host renderice en lugar de contenido para que Claude lea. No aparecen en las sugerencias de @ ni en los resultados de la herramienta de lista de recursos, y un servidor que ofrece solo recursos de interfaz de usuario muestra una lista de recursos vacía. Leer un recurso de interfaz de usuario por su URI sigue funcionando.
Escalar con búsqueda de herramientas MCP
La búsqueda de herramientas mantiene bajo el uso de contexto MCP al diferir las definiciones de herramientas hasta que Claude las necesita. Solo los nombres de herramientas y las instrucciones del servidor se cargan al inicio de la sesión, por lo que agregar más servidores MCP tiene un impacto mínimo en tu ventana de contexto. Claude Code no impone un límite fijo de herramientas por servidor; el límite práctico es tu presupuesto de ventana de contexto.
[!NOTE]
La búsqueda de herramientas no es compatible con los despliegues de Microsoft Foundry alojados en Azure, que la rechazan del lado del servidor: Claude Code detecta el rechazo y, en su lugar, carga las herramientas MCP por adelantado para ese despliegue.
ENABLE_TOOL_SEARCHno puede sobrescribir esto, ya que el rechazo proviene del propio despliegue.
Búsqueda de herramientas para autores de servidores MCP
Si estás creando un servidor MCP, el campo de instrucciones del servidor se vuelve más útil con la búsqueda de herramientas habilitada. Las instrucciones del servidor ayudan a Claude a entender cuándo buscar tus herramientas, de manera similar a cómo funcionan los skills.
Agrega instrucciones de servidor claras y descriptivas que expliquen:
- Qué categoría de tareas manejan tus herramientas
- Cuándo Claude debe buscar tus herramientas
- Capacidades clave que proporciona tu servidor
Claude Code corta una descripción de herramienta o las instrucciones del servidor que superen estos límites predeterminados, y Claude solo ve el texto anterior al corte:
- Instrucciones del servidor y la descripción de una herramienta que se carga por adelantado: 4.096 caracteres
- La descripción de una herramienta que Claude carga a través de la búsqueda de herramientas: 16.384 caracteres
Mantén concisas las descripciones y las instrucciones, y coloca los detalles críticos cerca del inicio. Cuando la búsqueda de herramientas compara la consulta de Claude con la descripción de una herramienta, solo lee la parte que está dentro del límite más corto, así que coloca también cerca del inicio las palabras que Claude buscaría. Una herramienta se carga por adelantado y mantiene el límite más corto siempre que no esté diferida, por ejemplo cuando la búsqueda de herramientas está desactivada, cuando la herramienta está marcada para cargarse por adelantado o cuando su servidor está exento del diferimiento.
Antes de v2.1.296, el límite más corto era de 2.048 caracteres, y antes de v2.1.295 se aplicaba a todas las descripciones de herramientas, incluidas las que se cargan a través de la búsqueda de herramientas.
Las descripciones y las instrucciones de algunos de los servidores MCP que Anthropic aloja en api.anthropic.com llegan completas a Claude. Para cambiar los límites para los demás servidores MCP de tu sesión, establece CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH en un número de caracteres. El número que establezcas reemplaza ambos límites: 8192, por ejemplo, aumenta el límite más corto y reduce el más largo. Esta variable requiere Claude Code v2.1.280 o posterior.
Marcar una herramienta para que se cargue por adelantado o permanezca diferida
Para controlar cómo se carga una de las herramientas de tu servidor, establece "anthropic/alwaysLoad" en el objeto _meta de esa herramienta. La persona que agrega tu servidor a Claude Code también puede establecer alwaysLoad para todo el servidor en su configuración, y su ajuste puede sobrescribir el tuyo:
| Valor de tu herramienta | Qué sucede |
|---|---|
true |
La herramienta se carga por adelantado. El inicio no espera a tu servidor debido a este valor. La persona que configura tu servidor aún puede diferir todas sus herramientas |
false |
La herramienta permanece diferida cuando su configuración establece "alwaysLoad": true. Esto se aplica cuando tu servidor se pasa con --mcp-config, lo proporciona una aplicación del Agent SDK o lo proporciona un plugin. En otros servidores, la herramienta se carga por adelantado. Requiere Claude Code v2.1.285 o posterior |
La siguiente entrada de tools/list solicita que una herramienta se cargue por adelantado:
{
"name": "search_tickets",
"description": "Searches the ticket tracker by keyword",
"_meta": {
"anthropic/alwaysLoad": true
}
}
Configurar búsqueda de herramientas
La búsqueda de herramientas está habilitada de forma predeterminada: las herramientas MCP se difieren y se descubren bajo demanda.
Configurar CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS mantiene la búsqueda de herramientas desactivada. No puedes sobrescribirlo configurando ENABLE_TOOL_SEARCH tú mismo. En Claude Code v2.1.227 o posterior, tu organización puede mantener la búsqueda de herramientas activada bajo esta variable a través de la configuración administrada. En una sesión que obtiene la configuración HIPAA, la búsqueda de herramientas está desactivada, y ni ENABLE_TOOL_SEARCH ni la configuración administrada la vuelven a activar. Deshabilitar capacidades de pre-lanzamiento cubre dónde se aplica la sobrescritura y qué elimina la variable.
Claude Code usa la búsqueda de herramientas en Claude Opus 4, Claude Sonnet 4, Claude Haiku 4.5 y modelos posteriores, o en Opus 4.5, Sonnet 4.5, Haiku 4.5 y modelos posteriores en Agent Platform de Google Cloud. En modelos anteriores, Claude Code carga todas las herramientas MCP por adelantado, y ENABLE_TOOL_SEARCH=true no sobrescribe esto.
En Agent Platform de Google Cloud, Claude Code decide según la generación del modelo:
- Claude Opus 4.5, Sonnet 4.5, Haiku 4.5 y posteriores: la búsqueda de herramientas está activada de forma predeterminada, igual que en la API de Anthropic.
- Modelos anteriores de Agent Platform: Claude Code carga todas las herramientas MCP por adelantado, porque sus pilas de servicio rechazan el encabezado beta requerido.
ENABLE_TOOL_SEARCH=trueno sobrescribe esto.
Antes de v2.1.221, Claude Code deshabilitaba la búsqueda de herramientas para todos los modelos en Agent Platform de Google Cloud a menos que configuraras ENABLE_TOOL_SEARCH=true.
Controla el comportamiento de la búsqueda de herramientas con la variable de entorno ENABLE_TOOL_SEARCH:
| Valor | Comportamiento |
|---|---|
| (sin establecer) | Todas las herramientas MCP diferidas y cargadas bajo demanda. Se cargan por adelantado en modelos anteriores a Opus 4 y Sonnet 4, en los modelos anteriores de Agent Platform y en los despliegues de Microsoft Foundry alojados en Azure |
true |
Herramientas MCP diferidas, con los mismos casos de respaldo que (sin establecer) |
auto |
Modo de umbral. Las herramientas que de otro modo se diferirían se cargan por adelantado mientras sus definiciones totalizan menos del 10% de la ventana de contexto. Al llegar al 10% o más, la búsqueda de herramientas se activa, y esas herramientas pueden permanecer diferidas aunque el total baje de nuevo por debajo del 10% |
auto:N |
Modo de umbral con un porcentaje personalizado, donde N es 0-100. Por ejemplo, auto:5 para 5% |
false |
Todas las herramientas MCP cargadas por adelantado, sin diferimiento |
# Use a custom 5% threshold
ENABLE_TOOL_SEARCH=auto:5 claude
# Disable tool search entirely
ENABLE_TOOL_SEARCH=false claude
O establece el valor en el campo env de tu settings.json.
También puedes deshabilitar específicamente la herramienta ToolSearch:
{
"permissions": {
"deny": ["ToolSearch"]
}
}
Si deniegas ToolSearch o lo omites de --tools, las herramientas MCP se cargan por adelantado en su lugar, pero una solicitud aún puede llevar una entrada defer_loading de marcador de posición. Si un gateway rechaza esa entrada, consulta Búsqueda de herramientas a través de un gateway de LLM.
Búsqueda de herramientas a través de un gateway de LLM
[!NOTE]
Estos casos se tratan en otros lugares:
- Configuraste
CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS: consulta cómo afecta a la búsqueda de herramientas- Una solicitud falló con un error que menciona
defer_loadingotool_reference: consulta Extra inputs are not permitted
Cuando ANTHROPIC_BASE_URL apunta a un gateway, la búsqueda de herramientas está activada de forma predeterminada, por lo que las solicitudes incluyen campos de herramienta defer_loading y bloques tool_reference para que el gateway los reenvíe. Mientras la búsqueda de herramientas está activada, las herramientas MCP se difieren. Para cargar todas las herramientas por adelantado en su lugar, establece ENABLE_TOOL_SEARCH=false en tu shell o en el env de tu configuración. Antes de v2.1.304, la búsqueda de herramientas estaba desactivada detrás de un gateway a menos que ENABLE_TOOL_SEARCH fuera true, auto o auto:N.
En v2.1.305 o posterior, Claude Code puede reintentar una solicitud sin búsqueda de herramientas después de un 400 o 422 cuya causa no reconoce. Cuando el reintento funciona, no aparece nada en pantalla y no necesitas hacer nada: las herramientas MCP se cargan por adelantado en su lugar. Claude Code vuelve a intentar la búsqueda de herramientas más tarde, a costa de otra solicitud rechazada. Para omitir esas solicitudes, establece ENABLE_TOOL_SEARCH=false.
Herramientas que permanecen diferidas por debajo del umbral de ENABLE_TOOL_SEARCH=auto
Si /context etiqueta herramientas como (deferred) o (loaded on-demand) aunque sus definiciones totalicen menos que el umbral de auto, la búsqueda de herramientas ya estaba activada en esta conversación y siguió activada. El total puede bajar más tarde, por ejemplo mientras los servidores MCP se reconectan después de que reanudas una sesión. No necesitas hacer nada: Claude carga cada una de esas herramientas cuando una tarea la necesita.
Eximir un servidor del diferimiento
Si las herramientas de un servidor siempre deben ser visibles para Claude sin un paso de búsqueda, establece alwaysLoad en true en la configuración de ese servidor. Las herramientas del servidor se cargan entonces en el contexto independientemente del ajuste ENABLE_TOOL_SEARCH. Úsalo para un pequeño número de herramientas que Claude necesita en cada turno, ya que cada herramienta cargada por adelantado consume contexto que de otro modo estaría disponible para tu conversación.
La siguiente entrada de .mcp.json exime un servidor HTTP mientras deja otros servidores diferidos:
{
"mcpServers": {
"core-tools": {
"type": "http",
"url": "https://mcp.example.com/mcp",
"alwaysLoad": true
}
}
}
El campo alwaysLoad está disponible en todos los tipos de servidor.
Configurar alwaysLoad: true también hace que el inicio espere las herramientas del servidor, limitado al tiempo de espera de conexión estándar de 5 segundos, ya que deben estar presentes cuando se construye el primer prompt. Un servidor remoto con una entrada cached válida proporciona sus herramientas desde la caché sin conectarse, por lo que no retiene el inicio. Otros servidores se conectan en segundo plano de forma predeterminada; establece MCP_CONNECTION_NONBLOCKING=0 para que el inicio también los espere.
Diferir las herramientas de un servidor
Para mantener todas las herramientas de un servidor detrás de la búsqueda de herramientas, establece "alwaysLoad": false en la entrada de ese servidor en tu configuración MCP. Eso incluye las herramientas que el autor del servidor ha marcado para cargarse por adelantado. Si omites alwaysLoad, esas herramientas marcadas se cargan por adelantado. Requiere Claude Code v2.1.287 o posterior.
Usar prompts de MCP como comandos
Los servidores MCP pueden exponer prompts que se vuelven disponibles como comandos en Claude Code.
Los prompts de un servidor llamado anthropic-skills no aparecen, porque Claude Code reserva ese nombre para skills sincronizadas desde claude.ai. Las herramientas del servidor siguen funcionando. Renombre el servidor en su configuración de MCP para enumerar sus prompts.
Ejecutar prompts de MCP
1. Descubrir prompts disponibles
Escriba / para ver los comandos disponibles para usted, incluidos los de los servidores MCP. Claude Code enumera cada prompt de MCP como /servername:promptname (MCP). Escribir /mcp__servername__promptname también lo ejecuta.
2. Ejecutar un prompt sin argumentos
/mcp__github__list_prs
3. Ejecutar un prompt con argumentos
Muchos prompts aceptan argumentos. Páselos separados por espacios después del comando. Claude Code divide los argumentos en espacios en blanco, por lo que cada argumento es un único token:
/mcp__github__pr_review 456
/mcp__jira__create_issue login-bug high
[!TIP]
Consejos:
- Los prompts de MCP se descubren dinámicamente desde los servidores conectados
- Los argumentos se analizan según los parámetros definidos del prompt
- Los resultados del prompt se inyectan directamente en la conversación
- En la forma
/mcp__servername__promptname, Claude Code reemplaza cualquier carácter en el nombre del servidor fuera deA-Z,a-z,0-9,_y-con_, y utiliza el nombre del prompt tal como lo declara el servidor
Configuración MCP gestionada
Para organizaciones que necesitan control centralizado sobre qué servidores MCP pueden conectar los usuarios, consulte Configuración MCP gestionada. Cubre la implementación de un conjunto de servidores fijo con managed-mcp.json, la provisión de servidores a cada usuario con managedMcpServers, la restricción de servidores con allowedMcpServers y deniedMcpServers, y lo que los usuarios ven cuando un servidor está bloqueado.