MCP
Conectar · los 3 clientes de Claude

Conectar desde Claude: Code, Desktop, Mobile

"Claude" no es un solo programa — es tres clientes distintos con soporte de MCP muy distinto entre sí. Esta página no repite los manuales de MCP Ops, MCP Analytics, MCP Forms y MCP Auth (esos ya cubren Claude Code a fondo); acá está lo que cambia si en vez de Code usás Claude Desktop o Claude Mobile.

0. Qué funciona en cada cliente

Antes de seguir cualquier paso, mirá esta tabla — ahorra tiempo. "Soportado" significa que hay un camino real y documentado oficialmente; no significa que sea igual de simple en los tres.

Cliente MCP ops (remoto, bearer) MCP dynamo-analytics, dynamo-forms y dynamo-auth (stdio local)
Claude Code (CLI) ✅ nativo — claude mcp add --transport http ... --header ✅ nativo — claude mcp add -- node dist/server.js (uno por MCP: analytics, forms y auth)
Claude Desktop ⚠️ Sin headers nativos en claude_desktop_config.json. Vía puente mcp-remote (bearer, §2.2) o Custom Connector (requiere OAuth — ops no lo implementa hoy, §2.3). ✅ nativo — el mismo bloque JSON que en Code (uno por MCP), pegado a mano en claude_desktop_config.json (§2.1).
Claude Mobile (iOS/Android) ⚙️ Se configura una sola vez en claude.ai y sincroniza al móvil (§3) — disponible con el gateway: el connector exige OAuth y ops hoy usa bearer estático. ❌ Imposible por arquitectura — stdio exige un proceso local; el móvil no ejecuta procesos arbitrarios. Llegan al celular vía gateway remoto, no por su cuenta.

Estado real de Dynamo hoy: el único camino simple y soportado end-to-end para ops es Claude Code (bearer nativo). Desktop funciona con el puente mcp-remote (§2.2). Para Mobile el flujo ya está escrito y es de un solo paso (configurar en claude.ai → sincroniza al celular, §3), pero se enciende cuando el gateway DynamoMCP implemente OAuth 2.0 con Dynamic Client Registration — no prometemos pasos que hoy no funcionan.

1. Claude Code (CLI) — ya documentado

Si vas a usar Claude Code, no sigas leyendo esta página: andá directo a MCP Ops / Worklist (bearer HTTP nativo, claude mcp add --transport http), MCP Analytics, MCP Forms o MCP Auth (los tres stdio local, claude mcp add -- node ...). Los cuatro manuales tienen los comandos literales paso a paso.

2. Claude Desktop

Claude Desktop lee su configuración de MCP de un único archivo JSON, claude_desktop_config.json. Para abrirlo (o crearlo si no existe):

  1. Clic en el menú Claude de la barra de menú del sistema (macOS) — no en los ajustes dentro de la ventana de chat — y elegí Settings…
  2. Pestaña Developer en el panel izquierdo → botón Edit Config. Esto abre (o crea) el archivo en tu editor.
SORuta literal
macOS ~/Library/Application Support/Claude/claude_desktop_config.json
Windows %APPDATA%\Claude\claude_desktop_config.json

Después de guardar el archivo, cerrá Claude Desktop por completo y volvé a abrirlo — no alcanza con cerrar la ventana, tiene que terminar el proceso.

2.1 MCP Analytics, Forms y Auth (stdio) en Desktop

Los tres corren local (mismo binario que en Code) — Desktop los arranca él mismo como subproceso, así que el bloque JSON es prácticamente el mismo que ya viste en MCP Analytics § 4 / MCP Forms § 4 / MCP Auth § 4. Completá el instalar / npm run login / npm run build de ese manual primero (ojo: Forms y Auth instalan con NODE_AUTH_TOKEN=$(gh auth token) npm ci, no con npm install) — acá solo cambia dónde pegás el JSON:

json — claude_desktop_config.json
{
  "mcpServers": {
    "dynamo-analytics": {
      "command": "node",
      "args": ["/RUTA/ABSOLUTA/A/analytics-dynamo/mcp/dist/server.js"],
      "env": {
        "SUPABASE_URL": "https://bxogqotctuurtcgjakfz.supabase.co",
        "ANON_KEY": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImJ4b2dxb3RjdHV1cnRjZ2pha2Z6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODIxODY5OTcsImV4cCI6MjA5Nzc2Mjk5N30.IL2_oF_UWFuOMZfvD6rJ4g4f87q4f9ioROJrxGss0qg"
      }
    }
  }
}

Para Forms y Auth es la misma forma, cambiando el nombre y la ruta del server.js (el SUPABASE_URL y la ANON_KEY de QA son los mismos: analytics, forms y auth comparten el proyecto Supabase por ambiente, y por eso también comparten el npm run login):

json — claude_desktop_config.json
{
  "mcpServers": {
    "dynamo-forms": {
      "command": "node",
      "args": ["/RUTA/ABSOLUTA/A/forms-dynamo/mcp/dist/server.js"],
      "env": {
        "SUPABASE_URL": "https://bxogqotctuurtcgjakfz.supabase.co",
        "ANON_KEY": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImJ4b2dxb3RjdHV1cnRjZ2pha2Z6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODIxODY5OTcsImV4cCI6MjA5Nzc2Mjk5N30.IL2_oF_UWFuOMZfvD6rJ4g4f87q4f9ioROJrxGss0qg"
      }
    }
  }
}
json — claude_desktop_config.json
{
  "mcpServers": {
    "dynamo-auth": {
      "command": "node",
      "args": ["/RUTA/ABSOLUTA/A/auth-dynamo/mcp/dist/server.js"],
      "env": {
        "SUPABASE_URL": "https://bxogqotctuurtcgjakfz.supabase.co",
        "ANON_KEY": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImJ4b2dxb3RjdHV1cnRjZ2pha2Z6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODIxODY5OTcsImV4cCI6MjA5Nzc2Mjk5N30.IL2_oF_UWFuOMZfvD6rJ4g4f87q4f9ioROJrxGss0qg"
      }
    }
  }
}

Si claude_desktop_config.json ya tiene otros servers, agregá "dynamo-analytics" / "dynamo-forms" / "dynamo-auth" dentro del mcpServers existente — no reemplaces el archivo entero. Los tres pueden convivir en el mismo archivo.

2.2 MCP Ops (remoto, bearer) en Desktop — vía mcp-remote

ops exige un header Authorization: Bearer <token> en cada request. El config nativo de Desktop no tiene un campo para headers custom en un server remoto — solo command/args/env (piensa siempre en términos de "arrancar un proceso", no de HTTP directo). El puente estándar de la comunidad para este caso es el paquete npm mcp-remote, que corre local y reenvía la conexión al servidor HTTP agregando el header.

json — claude_desktop_config.json
{
  "mcpServers": {
    "ops": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://ops.dynamotech.co/mcp",
        "--header",
        "Authorization:${OPS_AUTH_HEADER}"
      ],
      "env": {
        "OPS_AUTH_HEADER": "Bearer <TU_TOKEN>"
      }
    }
  }
}

Gotcha real de mcp-remote, documentado en su propio README: "Cursor and Claude Desktop (Windows) have a bug where spaces inside args aren't escaped when it invokes npx, which ends up mangling these values." La solución que da el propio proyecto: sacar el espacio alrededor de los : en el valor de --header ("Authorization:${OPS_AUTH_HEADER}", sin espacio después de los dos puntos) y meter el valor completo — con espacios, ahí sí está bien — dentro de una variable de entorno ("Bearer <TU_TOKEN>" en env). Usá exactamente el formato del bloque de arriba, no "Authorization: Bearer ..." directo en args.

Reemplazá https://ops.dynamotech.co/mcp por https://ops-qa.dynamotech.co/mcp para probar contra QA primero (ver MCP Ops § 1-2 sobre cuál ambiente está activo hoy).

2.3 Alternativa nativa — Custom Connectors (requiere OAuth)

Desktop y claude.ai tienen un mecanismo nativo para servers remotos sin pasar por mcp-remote: Settings → Connectors → Add → Add custom connector, pegando la URL del server (ej. https://ops.dynamotech.co/mcp).

Por qué no es el camino recomendado para ops hoy: el paso "Complete Authentication" de este flujo está pensado para OAuth (el server implementa registro dinámico de cliente / autoriza por usuario) — es la vía esperada para que cada persona entre con su propia identidad. ops hoy autentica con bearer tokens estáticos por scope, no con OAuth. Existe un modo "Request headers" para casos así (API key/bearer fijo), pero está en beta con acceso limitado — hay que pedirle acceso anticipado a Anthropic, no es autoservicio, y solo acepta un set fijo de nombres de header (authorization, x-api-key, x-auth-token). Hasta que alguno de los dos exista para ops, usá el puente mcp-remote de §2.2.

3. Claude Mobile (iOS / Android)

La idea clave, y es más simple de lo que parece: configuralo una vez en claude.ai (desde el navegador o la app de escritorio) y queda habilitado automáticamente en tu móvil. En el celular no se configura nada — los connectors viajan con tu cuenta, no con el dispositivo.

3.1 El flujo, paso a paso

  1. Desde una computadora (no desde el celular), entrá a claude.ai con la misma cuenta que usás en el móvil. Si preferís Claude Desktop, sirve igual: es el mismo panel.
  2. Settings → Connectors → Add → Add custom connector (el mismo flujo de §2.3).
  3. Pegá la URL del gateway y dale Add:
    url — gateway DynamoMCP
    https://mcp.dynamotech.co/mcp
  4. Claude abre Complete Authentication → iniciás sesión con tu cuenta Dynamo y aceptás los permisos. Cuando volvés, el connector debe figurar como Connected y mostrar sus tools.
  5. Abrí Claude en el celular (iOS o Android) con esa misma cuenta. El connector ya está ahí. Si no aparece, cerrá sesión y volvé a entrar: la sincronización ocurre "la próxima vez que inicies sesión en Claude para iOS o Android".

Estado hoy — este paso a paso está listo, pero todavía no hay a qué apuntarlo. Los connectors de claude.ai exigen un server remoto que hable OAuth 2.0. Los MCP de Dynamo hoy no lo hacen: ops autentica con bearer estático por scope, y dynamo-analytics, dynamo-forms y dynamo-auth son stdio local. El flujo de arriba queda operativo cuando el gateway DynamoMCP (Fase 4) implemente OAuth 2.0 con Dynamic Client Registration — la URL del paso 3 es un placeholder del gateway, no un endpoint que hoy responda. Hasta entonces: en el celular no hay nada que configurar, y ningún MCP de Dynamo funciona ahí.

3.2 Dos límites que no cambian nunca