FXCode
ENTRAR →
Doc. 04 — Conectores

Servidor MCP

Tus agentes leen y mueven tareas, ideas, notas y la arquitectura por MCP, con tu sesión de la CLI.

Hay dos formas de conectar tu asistente: el MCP remoto, que no necesita instalar nada, y el MCP local que sirve la CLI (fxc mcp).

MCP remoto (sin instalar nada)

Pega esta URL en tu asistente:

https://api.fxcode.dev/mcp

La primera vez se abre FXCode en el navegador: inicias sesión, ves qué aplicación pide acceso y con qué cuenta, y pulsas Permitir. Es OAuth 2.1 estándar (con registro dinámico y PKCE): no hay que copiar tokens ni crear claves. El asistente actúa con tus permisos, igual que si usaras la web.

  • Si eres cliente de un proyecto, verás solo lo tuyo: tus proyectos y tus solicitudes (crearlas, verlas, comentarlas y adjuntar capturas).
  • Los archivos se envían dentro de la llamada (en base64): un MCP remoto no ve los archivos de tu ordenador.
  • El acceso dura mientras no lo revoques; cambiar la contraseña desconecta todas las aplicaciones.

Claude Code

claude mcp add --transport http fxcode https://api.fxcode.dev/mcp

Después, dentro de Claude Code, ejecuta /mcp, elige fxcode y completa el inicio de sesión en el navegador (o, desde la terminal, claude mcp login fxcode).

Claude.ai y Claude Desktop

En Customize → Connectors (o Settings → Connectors, según la versión), pulsa + Add → Add custom connector, ponle un nombre (FXCode), pega la URL y continúa; al conectar se abre FXCode para que permitas el acceso. El conector se guarda en tu cuenta de Claude, así que vale igual en la web, en Claude Desktop y en el móvil. En planes Team y Enterprise, un administrador tiene que añadirlo primero.

ChatGPT

Activa el modo desarrollador (Settings → Apps & Connectors → Advanced settings, o Security and login en versiones recientes). Luego crea una app o conector personalizado (Settings → Apps & Connectors → Create, o el botón + de Plugins → Add custom MCP server), pega la URL, elige autenticación OAuth, confirma el aviso de riesgo y conéctate. Disponible en planes Plus, Pro, Business, Enterprise y Edu en la web.

Cursor

En ~/.cursor/mcp.json (o .cursor/mcp.json del proyecto):

{
  "mcpServers": {
    "fxcode": { "url": "https://api.fxcode.dev/mcp" }
  }
}

Cursor detecta que el servidor pide OAuth y muestra Connect / Needs login en Settings → MCP.

Codex

codex mcp add fxcode --url https://api.fxcode.dev/mcp
codex mcp login fxcode

O en ~/.codex/config.toml:

[mcp_servers.fxcode]
url = "https://api.fxcode.dev/mcp"

y luego codex mcp login fxcode.

Agentes sin OAuth: el endpoint también acepta un token de API (fxc_...) como Authorization: Bearer. Un token con permisos limitados solo ve las herramientas que esos permisos cubren; las solicitudes de clientes requieren un token de acceso completo.

Herramientas del MCP remoto

Quién Herramientas
Equipo whoami, list_projects, list_task_options, list_tasks, get_task, create_task, update_task, set_task_status, finish_task, attach_files_to_task, list_task_comments, comment_task, list_task_links, add_task_link, remove_task_link, bulk_update_tasks, archive_tasks, merge_tasks, link_tasks, unlink_tasks, next_task, queue_task, get_queue, link_note_to_task, unlink_note_from_task, list_ideas, add_idea, promote_idea, list_notes, get_note, add_note, list_requests, get_request, create_request, comment_request, attach_files_to_request, respond_request, convert_request, link_request, archive_request, delete_request, verify_request, project_progress, list_releases, get_release, create_release, update_release, link_release_version, generate_release_changelog, project_report, report_work_session, parallel_work, start_architecture_scan, end_architecture_scan
Cliente whoami, list_projects, list_requests, get_request, create_request, comment_request, attach_files_to_request, verify_request, project_progress

La arquitectura (get_architecture, link_task, foco) sigue siendo cosa del MCP local de la CLI, que trabaja junto a tu código; el remoto solo marca el indicador de escaneo. Su report_work_session no ve tu repo: pásale tú branch, worktreePath, hostname, agent y files.

MCP local con la CLI

El servidor MCP local lo sirve la propia CLI: fxc mcp arranca un servidor por stdio que usa la sesión guardada por fxc auth login. No hay tokens que configurar aparte.

Instalar

  1. Instala la CLI e inicia sesión.
  2. Regístralo en tu cliente.

Claude Code

claude mcp add fxcode --scope user -- fxc mcp

Cursor, Claude Desktop y otros clientes: agrega un servidor stdio en su configuración de MCP:

{
  "mcpServers": {
    "fxcode": { "command": "fxc", "args": ["mcp"] }
  }
}

Para apuntar a otra instalación o usar otra cuenta sin tocar tu sesión, define FXC_API_URL y FXC_TOKEN en el entorno del servidor.

Herramientas

Los estados y las prioridades se pasan por nombre («Working», «Alta»), ignorando mayúsculas y tildes. Las de solo lectura se marcan como tales para que el cliente pueda ejecutarlas sin pedir confirmación.

Herramienta Qué hace
whoami El usuario conectado
list_projects Proyectos a los que tienes acceso (para obtener el projectId)
list_task_options Estados (cuáles terminan y cuáles animan el progreso) y prioridades
list_tasks Tareas por proyecto, estado, prioridad, entorno, versión, etiqueta, texto, asignado (assignee: usuario o persona sin cuenta), changelogId, parentId, due (overdue, week, none), release (id o nombre; none) o solo las tuyas; sin las terminadas ni las archivadas salvo que las pidas (includeDone, archived)
get_task Una tarea con su descripción, enlaces, fechas originales, madre, subtareas, relaciones, quién la bloquea (blockedBy) y notas enlazadas
create_task Crea una tarea (asignada a ti), con estado, prioridad, entorno, versión, etiquetas, parentId, changelogId, dueDate (YYYY-MM-DD) y release (id o nombre)
update_task Cambia solo lo que pases: título, descripción, estado, prioridad, entorno, versión, etiquetas, parentId, changelogId, dueDate (none la borra), release (id, nombre o none), archived, rama (branch) y PR (prUrl, prNumber)
bulk_update_tasks / archive_tasks Los mismos cambios (estado, prioridad, asignado, entorno, versión, etiquetas que añadir o quitar, archivar) a varias tareas / archivar o recuperar varias
merge_tasks Fusiona duplicadas en una tarea destino: mueve comentarios, adjuntos, enlaces, notas y solicitudes, archiva las de origen y las marca «duplicada de»
link_tasks / unlink_tasks Relaciones entre tareas del mismo proyecto: relates_to, blocks, blocked_by, duplicates (no confundir con link_task, que enlaza a piezas de la arquitectura)
next_task / queue_task / get_queue La cola de trabajo del proyecto: la tarea que toca tomar (nunca una bloqueada), colocar o sacar una tarea de la cola, y la vista En curso / Sigue / Después. Ver Kanban, cola y relaciones
link_note_to_task / unlink_note_from_task Enlaza una nota del proyecto (un análisis, una especificación) a una tarea, para verla desde los dos lados
list_task_comments / comment_task Lee los comentarios de una tarea o añade uno, con archivos
list_task_links / add_task_link / remove_task_link Enlaces de una tarea (diseños, documentos, tickets)
import_tasks Solo el MCP local: importa un JSON de tareas (Notion…) con dryRun para ensayar. Ver Importar tareas
finish_task Termina una tarea según el modo de ramas del proyecto: en una rama de trabajo pasa a revisión; en la principal se completa. Sin branch, el MCP local usa la rama de git actual
add_idea / list_ideas Anota y lista ideas, sueltas o de un proyecto
promote_idea Convierte una idea en tarea (una suelta necesita proyecto)
add_note Guarda una nota en Markdown o HTML
get_architecture Piezas, conexiones y foco actual del proyecto
import_architecture Reemplaza la arquitectura (sin credenciales; se valida antes de enviar)
link_task Enlaza o suelta una tarea de piezas de la arquitectura
focus_pieces / unfocus_pieces Marca o apaga «un agente está trabajando aquí»
start_architecture_scan / end_architecture_scan Muestra o quita «Escaneando el repositorio…» en la página de Arquitectura (import_architecture lo cierra; failed: true si no pudo terminar). Ver indicador de escaneo
report_work_session Abre, refresca (latido) o cierra (end) tu sesión de trabajo en una tarea con el contexto de git del directorio del servidor: rama, worktree, máquina, agente y archivos tocados
parallel_work El panel «En paralelo» del proyecto: sesiones, posibles choques y worktrees para limpiar. Ver Trabajo en paralelo
list_my_projects Proyectos de los que formas parte, como equipo o como cliente
list_requests / get_request Solicitudes de clientes con su clasificación, su estado de cara al cliente (clientStatus), archivos y conversación; filtros type (BUG, FEATURE, IDEA, none) y mine
create_request Crea una solicitud con lo que se necesita (projectId, description, title?, pageUrl?, priority?, files? con rutas locales). type es opcional y solo cuenta si eres del equipo. Solo el equipo: requesterPersonId (en nombre del cliente, aunque no tenga cuenta), createdAt (fecha original) y silent (sin correos)
link_request Solo el equipo: vincula una solicitud a una tarea existente de su proyecto (queda Aceptada y se cierra al terminar la tarea), sin crear otra
archive_request / delete_request Solo el equipo: archivar (o recuperar) o borrar una solicitud creada por error
comment_request Comenta (message?) y/o adjunta archivos locales (files?) en una solicitud
download_request_files Baja los adjuntos de una solicitud a una carpeta local (dir)
list_releases / get_release Las entregas de un proyecto (con su avance y cuál es la actual) / una entrega con su avance por estado y prioridad, las tareas pendientes y terminadas y cuántas tareas tienen una version con su nombre
create_release / update_release Crea o cambia una entrega: name, targetDate (YYYY-MM-DD), status (planned, in_progress, delivered), description
link_release_version Enlaza las tareas cuya version se llama como la entrega
generate_release_changelog Crea (o rehace, mientras es borrador) el changelog del proyecto con las tareas terminadas de la entrega; con IA si está configurada, si no un borrador con la lista
project_report El informe de estado del proyecto (`format: json
verify_request El cliente acepta una solicitud «Lista para revisar» (decision: accept) o pide cambios (decision: request_changes con comment obligatorio). Ver verificación del cliente
respond_request / convert_request Clasificar (type: BUG, FEATURE, IDEA), responder o cambiar el estado; convertir: BUG/FEATURE en tarea, IDEA en idea (se cierra sola al terminar la tarea)

Las solicitudes llegan sin clasificar: el cliente solo cuenta lo que necesita. El equipo las clasifica con respond_request (type) y las convierte con convert_request, que elige tarea o idea según la clasificación. Los nombres antiguos CORRECTION y CHANGE se aceptan como alias de BUG y FEATURE.

Los adjuntos siguen las mismas reglas que el portal: imágenes, PDF, texto, Office, zip y vídeo, hasta 10 MB cada uno y 20 por solicitud, y el contenido tiene que corresponder a la extensión. Las rutas son de la máquina donde corre fxc mcp (usa rutas absolutas o ~).

La convención de trabajo

Al conectarse, el servidor le explica al agente cómo trabajar para que se vea en FXCode:

  1. Al empezar una tarea, la pasa al estado en progreso (por ejemplo «Working») y la enlaza a las piezas de la arquitectura que va a tocar.
  2. Si se mete en otra parte del sistema, marca foco en esa pieza.
  3. Al terminar, llama a finish_task con su rama: si está en una rama de trabajo la tarea pasa a revisión; en la principal, se completa. Y quita el foco. Nunca deja una tarea en «Working» si ya no la está tocando.
  4. Después pide la siguiente con next_task (la primera de la cola del proyecto que no esté bloqueada). Si la cola está vacía, para.
  5. Pone fxc-<taskId> en el nombre de la rama o [fxc:<taskId>] en el título del PR, para que el webhook de GitHub la reconozca.
  6. Lo que se le ocurra sin compromiso de hacerlo lo anota como idea, no como tarea.
  7. Con varios agentes a la vez, cada uno registra su sesión (report_work_session) y mira parallel_work antes de meterse en una pieza que ya toca otro.

Así, en la arquitectura del proyecto ves en vivo dónde está trabajando cada agente.

Para clientes

Si tu cuenta es cliente en todos sus proyectos, fxc mcp lo detecta al arrancar (se lo pregunta al API, no depende de nada local) y solo ofrece las herramientas de clientes: whoami, list_my_projects, list_requests, get_request, create_request, comment_request, download_request_files y verify_request (aceptar una solicitud «Lista para revisar» o pedir cambios con un comentario). El API comprueba igualmente cada llamada: un cliente solo ve y toca las solicitudes de sus proyectos, nunca tareas, pagos, notas ni nada del trabajo interno del equipo.

Como cliente no clasificas nada: el asistente crea la solicitud con lo que necesitas (description) y el equipo la clasifica al revisarla. El estado que ves (clientStatus) es uno de estos: Recibida, En revisión, En curso (aceptada o convertida en tarea sin terminar), Hecha, Guardada como idea (anotada, aún no se va a implementar) o Descartada (con el motivo en response). Además te llega un correo, en tu idioma, cuando cambia el estado de una de tus solicitudes o el equipo te responde.

1. Instala la CLI e inicia sesión (detalle en CLI › Para clientes):

# macOS / Linux (en Windows, el instalador de PowerShell de esa página)
curl -fsSL https://api.fxcode.dev/downloads/cli/install-sh | sh
fxc auth login --web --api-url https://api.fxcode.dev

2a. Claude Code

claude mcp add fxcode --scope user -- fxc mcp
claude mcp list        # fxcode: fxc mcp - ✓ Connected

2b. Claude Desktop: en Ajustes › Desarrollador › Editar configuración (claude_desktop_config.json) añade el servidor y reinicia la app:

{
  "mcpServers": {
    "fxcode": {
      "command": "fxc",
      "args": ["mcp"]
    }
  }
}

En Windows, si Claude Desktop no encuentra fxc, usa "command": "fxc.cmd" o la ruta completa que da where fxc. Para usar un token en vez de la sesión guardada, añade "env": { "FXC_API_URL": "https://api.fxcode.dev", "FXC_TOKEN": "<token>" }.

3. Pídelo hablando. Un ejemplo de conversación:

Tú: En la tienda, el botón «Pagar» no hace nada en el iPhone. Te dejo la captura en ~/Desktop/pago.png. Es urgente.

Claude: (llama a list_my_projects y ve un solo proyecto, «Tienda online») La dejo en «Tienda online», prioridad Alta, contando que el botón «Pagar» no responde en iPhone, con la captura adjunta. ¿Te parece?

Tú: Sí.

Claude: (llama a create_request con files: ["~/Desktop/pago.png"]) Listo: la solicitud quedó Recibida y el equipo ya tiene el aviso.

Tú: ¿Cómo van mis solicitudes?

Claude: (llama a list_requests con mine: true) Tienes 3: «El botón Pagar no responde en iPhone» (Recibida), «Cambiar el color del menú» (En revisión) y «Exportar pedidos a Excel» (En curso: pasó a ser una tarea del equipo, que respondió: «Lo hacemos en el próximo sprint»).

Tú: En la del menú, añade que también quiero el logo más grande y adjunta ~/Desktop/logo.pdf.

Claude: (llama a comment_request con el mensaje y el archivo) Hecho: comentario y archivo añadidos.