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
- Instala la CLI e inicia sesión.
- 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:
- 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.
- Si se mete en otra parte del sistema, marca foco en esa pieza.
- Al terminar, llama a
finish_taskcon 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. - 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. - 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. - Lo que se le ocurra sin compromiso de hacerlo lo anota como idea, no como tarea.
- Con varios agentes a la vez, cada uno registra su sesión (
report_work_session) y miraparallel_workantes 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_projectsy 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_requestconfiles: ["~/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_requestsconmine: 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_requestcon el mensaje y el archivo) Hecho: comentario y archivo añadidos.