TL;DR Tu tarea programada en la nube no lee nada de tu máquina, tampoco los servidores que añadiste con
claude mcp add. Si el servidor tiene URL pública, añádelo como connector enclaude.ai/customize/connectorsy actívalo en la pestaña Connectors de la tarea. Si no,claude mcp add --scope projecty haz commit del.mcp.json.
claude mcp add guarda el servidor en ~/.claude.json, en tu máquina. Una tarea programada en la nube (las antiguas routines) corre en un contenedor de Anthropic que clona tu repositorio y nada más, así que ese servidor no existe para ella. La lista de connectors de la tarea tampoco lo enseña: solo muestra las integraciones de tu cuenta de claude.ai.
Y no te avisa. La ejecución sale como Succeeded, porque ese estado solo dice que la sesión terminó sin error. Las herramientas que faltan aparecen en la transcripción, no en la fila del historial.
Dónde se queda tu servidor
Por defecto, claude mcp add usa el scope local: el servidor queda atado a la carpeta desde la que lo añades, dentro de tu ~/.claude.json. Hecho en una carpeta de prueba, con un servidor añadido en local y otro con --scope user:
claude mcp add --transport http docs https://mcp.deepwiki.com/mcp
claude mcp add --transport http --scope user docs-user https://mcp.deepwiki.com/mcp
Added HTTP MCP server docs with URL: https://mcp.deepwiki.com/mcp to local config
File modified: /tmp/claude-0/tip/lab2/home/.claude.json [project: /tmp/claude-0/tip/lab2/work]
Added HTTP MCP server docs-user with URL: https://mcp.deepwiki.com/mcp to user config
File modified: /tmp/claude-0/tip/lab2/home/.claude.json
Ninguno de los dos sale de ese archivo. Y desde la carpeta del repositorio, claude mcp list ya no ve el local, porque se añadió en la carpeta de arriba:
docs-user: https://mcp.deepwiki.com/mcp (HTTP) - √ Connected
Ese detalle importa más abajo, en el setup script.
Los tres sitios que sí lee la nube
| Connector de claude.ai | .mcp.json del repositorio |
Setup script del entorno | |
|---|---|---|---|
| Servidor | Remoto, con URL pública | HTTP o stdio | HTTP o stdio |
| Llega a | Todas tus tareas, claude.ai y tu terminal | Tareas con ese repositorio como único repo | Todas las sesiones de ese entorno |
| Red | Por los servidores de Anthropic, sin allowlist | La de la sesión: su host, en Allowed domains | La de la sesión |
| Credenciales | OAuth o cabeceras en claude.ai | Network secret del entorno | Network secret del entorno |
1. Si tiene URL pública: añádelo como connector
En claude.ai/customize/connectors, añade un connector personalizado con la URL del servidor y autentícalo ahí: OAuth, o una cabecera fija si funciona con API key. Claude se conecta desde la nube de Anthropic, así que el servidor tiene que responder desde internet: detrás de una VPN o de un firewall no conecta aunque desde tu portátil sí. En Team y Enterprise lo añade un Owner y cada persona lo conecta después.
Luego abre la tarea en claude.ai/code/routines, Edit, pestaña Connectors, y comprueba que está. Al crear una tarea entran todos los connectors que tenías conectados, así que si añadiste este después, inclúyelo tú aquí (o con /schedule update).
2. Si viaja con el repositorio: commit del .mcp.json
claude mcp add --transport http --scope project docs https://mcp.deepwiki.com/mcp
git add .mcp.json && git commit -m "Add docs MCP server" && git push
{
"mcpServers": {
"docs": {
"type": "http",
"url": "https://mcp.deepwiki.com/mcp"
}
}
}
En tu terminal, un servidor de .mcp.json espera a que lo apruebes. En una sesión en la nube no hay a quién preguntar y Claude Code lo carga directamente, igual que en claude -p. En ese mismo repositorio de prueba, el evento de arranque de claude -p --output-format stream-json --verbose lo trae conectado:
{ "name": "docs", "status": "connected", "source": "project" }
Tres condiciones que lo rompen sin decir nada:
- La tarea tiene más de un repositorio. Solo se carga el
.mcp.jsonde una tarea con un único repositorio. - El host no está permitido. En el entorno Default, con acceso Trusted, una petición a un host fuera de la lista falla con
403yx-deny-reason: host_not_allowed. Los connectors no pasan por ahí; este servidor sí. Añade su host en Allowed domains del entorno. - El comando no existe en el contenedor. Un servidor stdio con
npxfunciona, porque los registros de paquetes están permitidos. Una ruta como/Users/tú/bin/mi-servidorno.
3. Si lo quieres en todas las tareas de un entorno: el setup script
El setup script corre como root antes de que arranque Claude, y lo que escribe en ~/.claude.json vale para la sesión. Así publica mi rutina de tips en wmedia.es: su entorno empieza con esta línea.
claude mcp add --transport http --scope user wmedia https://wmedia.es/mcp/wmedia
El --scope user es obligatorio. El script arranca en la carpeta que contiene los repositorios, no dentro de uno, y un servidor local añadido ahí no se ve desde el repositorio, como en la salida de arriba.
La API key no se escribe en el script ni en las variables del entorno, que lee cualquiera que use ese entorno. Se guarda como network secret: el proxy de la sesión añade la cabecera Authorization solo a las peticiones a wmedia.es.
Comprueba que lo tiene antes de que trabaje
Como Succeeded no te dice si la tarea tuvo el servidor, haz que lo diga ella. Añade al principio del prompt:
Antes de nada, comprueba que tienes las herramientas mcp__docs__.
Si no están, di cuál falta y para sin hacer nada más.
Lanza la primera con Run now y abre la ejecución: la respuesta está en su transcripción, no en el estado.
Si el servidor solo existe en tu máquina
Un servidor en localhost o en tu red privada no llega a la nube por ninguno de los tres caminos. Para ese caso está la tarea Local de la app de escritorio, que corre en tu ordenador con tus archivos y tus servidores MCP, con el ordenador despierto: lo cuento en tareas programadas locales. La forma de añadir y separar servidores por scope está en tu primer servidor MCP.
Documentación oficial: Automate work with scheduled tasks · Cloud environments
Requisitos
- Plan Pro, Max, Ultra, Team o Enterprise con tareas programadas en la nube. Salidas de Claude Code v2.1.318, en un contenedor en la nube, el 4 de noviembre de 2026.