Un servidor MCP de kanban para ChatGPT, Claude, Cursor y Codex
Por Andrei Finogeev, fundador de Weft ·
Weft es un tablero kanban alojado —Backlog, Todo, Doing, Done, con sprints opcionales— y su servidor MCP está en https://letsweft.com/api/mcp. Añade esa URL a tu cliente de IA e inicia sesión una vez con OAuth; no hay nada que instalar ni ejecutar en local. A partir de ahí, el asistente lee el tablero, crea y mueve tarjetas, reclama una tarjeta antes de trabajar en ella para que dos agentes nunca cojan la misma, informa del avance, te pregunta cuando la decisión es tuya y cierra la tarjeta con lo que hizo. Gratis para 50 tareas y 200 llamadas de IA al mes.
https://letsweft.com/api/mcpStreamable HTTP · OAuth o un token de acceso personal · 32 herramientas
Añádelo a tu cliente de IA
ChatGPT
Abrir Weft en ChatGPT — o configúralo a mano:
- 1Abre Plugins en la barra lateral de ChatGPT, o Configuración → Plugins.
- 2Busca "Weft" y abre el listado.
- 3Haz clic en "Conectar" y revisa a qué puede acceder Weft.
- 4Inicia sesión con tu cuenta de Weft en la ventana emergente que se abre.
Menciona el plugin con @ en cualquier chat: "@Weft ¿qué hay en mi tablero?", o elige Weft en el menú +. Si te saltaste la configuración, ChatGPT se ofrece a conectarlo ahí mismo.
Claude Desktop
- 1Abre Claude Desktop → Configuración → Conectores.
- 2Haz clic en "Añadir conector personalizado".
- 3Pega la URL del MCP de Weft de abajo y guarda.
- 4Completa el OAuth en la ventana del navegador que se abre.
Empieza un chat nuevo y pregunta: "¿qué hay en mi tablero de Weft?". Claude obtiene el estado del tablero a través del conector de Weft.
Claude Code
claude mcp add --transport http weft https://letsweft.com/api/mcpEjecuta `claude` en cualquier proyecto y pregunta: "¿qué hay en mi tablero?". La primera vez se abre una ventana del navegador para completar el OAuth.
Cursor
Añadir a Cursor — o configúralo a mano:
{
"mcpServers": {
"weft": {
"url": "https://letsweft.com/api/mcp"
}
}
}Abre Cursor → Settings → MCP. El servidor "weft" debería aparecer con un indicador verde cuando completes el OAuth.
Codex CLI
[mcp_servers.weft]
url = "https://letsweft.com/api/mcp"Ejecuta `codex mcp login weft` para iniciar sesión en el navegador, luego abre `codex` y pregunta: "¿qué hay en mi tablero?". El comando `/mcp` lista el servidor conectado y sus herramientas.
VS Code
Instalar la extensión de Weft — o configúralo a mano:
{
"servers": {
"weft": {
"type": "http",
"url": "https://letsweft.com/api/mcp"
}
}
}Abre el chat, pon el selector de modo en Agent y pregunta: «¿qué hay en mi tablero?». La primera vez se abre una ventana del navegador para el OAuth. «MCP: List Servers» debe mostrar weft como Running.
Windsurf
- 1Abre Windsurf → Settings → Cascade → MCP servers.
- 2Haz clic en "Add server" y elige Remote (HTTP).
- 3Pega la URL del MCP de Weft de abajo y guarda.
- 4Completa el OAuth en la ventana del navegador que se abre.
Abre Cascade y pregunta: "¿qué hay en mi tablero?". Cascade etiqueta las respuestas que usaron el servidor de Weft.
Gemini CLI
gemini extensions install https://github.com/AndreiFinogeev/weft-gemini-extensionEjecuta `gemini` y pregunta: "¿qué hay en mi tablero de weft?". La primera vez se abre un navegador para el OAuth. `gemini extensions list` debería mostrar "weft".
Hecho para agentes, no solo para ti
Reclamaciones, no choques
start_task pone una concesión sobre una tarjeta antes de que un agente trabaje en ella. Un segundo agente que pide trabajo recibe otra tarjeta, y una tarjeta cuyo agente se ha quedado en silencio se vuelve a ofrecer cuando caduca la concesión.
Avance y recibos
report_progress mantiene viva la reclamación mientras el agente trabaja; complete_task cierra la tarjeta con lo que se hizo, lo que no y enlaces que puedes comprobar.
Las preguntas te esperan
request_input deja una pregunta con opciones en tu Bandeja de entrada —en la web y en el móvil— en lugar de dejar que el agente adivine algo que solo tú puedes decidir.
Tu atención marca el ritmo
Cuando hay demasiado trabajo terminado esperando tu revisión, los agentes dejan de empezar tarjetas nuevas. Es el límite de trabajo en curso de kanban, aplicado a ti.
Tú decides qué puede hacer cada IA
Da a cada asistente conectado acceso completo, de escritura o de solo lectura, y desconéctalo con un clic. Las tarjetas eliminadas van a la papelera, no desaparecen sin más.


Las 32 herramientas
Cada herramienta declara si solo lee, si escribe o si elimina algo, para que tu cliente sepa cuándo preguntarte primero.
| Herramienta | Qué hace | Tipo |
|---|---|---|
| search | Búsqueda por palabras clave en tareas, sprints, decisiones y notas de memoria. Devuelve hasta 50 resultados {id, title, url} ordenados por relevancia, cuyos ids con prefijo de tipo se pasan a fetch. | Lectura |
| fetch | Recupera el contenido completo de un resultado de búsqueda: título, representación en texto, url de origen y metadatos estructurados. Recibe el id con prefijo que devuelve search. | Lectura |
| initialize_board | Crea las columnas predeterminadas Backlog, Todo, Doing y Done en tu tablero de Weft si no hay ninguna: la configuración de una sola llamada antes de que un agente de IA gestione tareas. Idempotente. | Escritura |
| get_board_state | Devuelve un resumen compacto del tablero Scrumban del usuario: columnas, sprint activo, Doing, tareas vencidas y cierres recientes, unas 30 veces más pequeño que una instantánea completa. | Lectura |
| list_columns | Lista todas las columnas del tablero, en orden —id, nombre y posición de cada una—, para que un agente sepa exactamente adónde puede moverse una tarea. | Lectura |
| list_tasks | Devuelve las tareas del usuario autenticado, con filtro opcional por columna, sprint, proyecto (nombre o id), creador (persona o IA) o responsable (quien la ejecuta). | Lectura |
| create_task | Crea una tarea nueva en el tablero del usuario. Va al Backlog si no se indica columna. La prioridad por defecto es media. Se usa cuando el usuario pide añadir una tarea. | Escritura |
| bulk_create_tasks | Crea hasta 1.000 tareas en una sola llamada atómica —importa exportaciones de Linear/Jira/Notion/Trello o cualquier lista de 3 o más tareas— gastando solo una llamada de IA de la cuota. | Escritura |
| update_task | Modifica campos de una tarea existente. Solo cambian los campos que pasas; los omitidos se conservan, con una excepción: a un agente se le rechaza quitar requiresReview, y el rechazo se lleva por delante toda la modificación. | Escritura |
| move_task | Mueve una tarea a otra columna y posición. Moverla a una columna con semantic='doing' empieza a medir el tiempo de ciclo; moverla a semantic='done' registra la hora de finalización. | Escritura |
| start_task | La IA la llama en el momento en que empieza a ejecutar una tarea: la tarjeta pasa a Doing para que el usuario y todos los demás clientes conectados la vean en curso (y no la cojan dos veces). Empieza a medir el tiempo de ciclo; una tarea sin asignar queda reclamada por el agente que llama (nunca se sustituye a un responsable ya asignado). No hace falta id de columna. | Escritura |
| report_progress | Dice que sigues trabajando. La reclamación de una tarea caduca si el cliente se queda en silencio, y esto la renueva. Sin latido, una tarea larga se da por abandonada y se ofrece a otro, a propósito: un agente que muere a mitad de ejecución no informa de nada, así que el silencio es la única señal que tiene el tablero. | Escritura |
| request_input | Pregunta a la persona algo que solo ella puede decidir y espera sin perder la reclamación de la tarea. Si está en su cliente, allí aparece un formulario y la respuesta vuelve dentro de la misma llamada: el agente sigue en el mismo contexto, con la misma reclamación. Si no está, la llamada vuelve aparcada y la pregunta espera en su cola; la respuesta llega al agente en su siguiente start_task o get_my_work. Para lo irreversible y lo realmente ambiguo, no para "¿puedo continuar?": cada pregunta gasta el mismo presupuesto de atención que limita el trabajo nuevo. | Escritura |
| submit_answer | Trae de vuelta lo que dijo la persona a una pregunta que planteó el agente y le devuelve el trabajo con el mismo runId y la misma concesión, para que continúe en el mismo intento en lugar de empezar uno en frío. Se marca como transmitida, nunca como si la persona actuara por sí misma: una respuesta que trae un agente y un clic de una persona son pruebas de tipo distinto, y el tablero las mantiene separadas. Si la pregunta ya se respondió en la app de Weft, se devuelve esa respuesta en lugar de un error: lo que importa es que el agente continúe con la correcta. | Escritura |
| get_my_work | Pregunta qué hacer a continuación en lugar de leer todo el tablero y adivinar. Devuelve las tareas asignadas a este cliente, lo que ya está esperando a la persona y si queda hueco en la cola de atención. También indica lo que está vencido y lo que vence o empieza en la semana, para que un agente se entere de una fecha límite sin preguntar. Cuando la cola está llena, lo útil es ayudar a vaciarla, no empezar algo nuevo, y esto lo dice antes de que se elija una tarea. | Lectura |
| complete_task | La IA la llama cuando el trabajo está realmente terminado: la tarjeta pasa a Done con la hora de finalización registrada, y el resultado opcional (qué se hizo, dónde está el resultado) se añade a la tarjeta como nota "Outcome (AI, date)". No hace falta id de columna. El trabajo marcado como pendiente de ti NO pasa a Done: va a tu cola con el recibo adjunto y, si el agente dijo qué haría después, aceptar aprueba exactamente ese paso y se lo devuelve al agente. Si la tarea lleva un plan de verificación, el servidor ejecuta sus comprobaciones aquí mismo —abre la URL, busca la cita, compara el hash—: un plan executable/state_delta cuyas comprobaciones bloqueantes pasan todas se cierra verificado por el servidor; una comprobación bloqueante fallida deja la tarjeta fuera de Done y muestra al agente lo que observó el servidor. | Escritura |
| record_decision | Una herramienta, dos usos, una sola tabla de registro. (1) Transmitir un veredicto que diste en la conversación sobre trabajo terminado que te espera —aprobado, devolverlo, descartarlo, más tarde—, lo que saca la tarjeta de la cola de revisión; la entrada se guarda como transmitida y no como si actuaras tú en la app, y esa diferencia se mantiene visible a propósito. (2) Registrar una decisión independiente que merezca la pena recordar —'elegimos Neon en vez de Supabase', una lección aprendida— como registro inmutable de estilo MADR-lite, con las opciones sopesadas y la condición para revisarla. Los registros nunca se editan: una decisión nueva con supersedesId sustituye a una antigua, y la antigua sigue legible tal como decía el día en que se tomó. Estos registros son lo que get_context sirve a cada agente la semana siguiente. | Escritura |
| get_context | Las decisiones y lecciones vigentes del espacio de trabajo, empaquetadas dentro de un presupuesto de tokens, de la más reciente a la más antigua: lo que un agente debería leer antes de empezar cualquier cosa no trivial. Se deriva de las decisiones registradas en lugar de redactarse como documento, así que no puede quedarse obsoleto: una decisión sustituida desaparece en cuanto se registra su reemplazo, y cada línea lleva su fecha. Acótalo a un proyecto o una tarea para afinarlo; las líneas que no caben en el presupuesto se cuentan, nunca se ocultan en silencio. | Lectura |
| get_task_history | Lo que le pasó a una tarea, no solo sus campos actuales. Tres modos: 'summary' (por defecto, ≤500 tokens: la tarjeta, su último recibo, recuentos), 'decisions' (todas las decisiones registradas sobre ella, incluidos los veredictos y sus motivos: el motivo de una revisión sobrevive aquí aunque una aceptación posterior sobrescriba la tarjeta), 'full' (el diario en bruto, con un tope de 100 eventos y avisándolo). Existe porque un registro de auditoría es demasiado prolijo para leerlo directamente, y la fila de la tarea solo guarda el último veredicto. | Lectura |
| trash_task | Mueve una tarea a la papelera de tu tablero de Weft. Se puede recuperar durante 30 días con restore_task; después, un proceso programado la elimina para siempre. | Elimina |
| restore_task | Recupera una tarea de la papelera en los 30 días siguientes a tirarla. La tarea vuelve al tablero donde estaba, intacta, para que un fundador en solitario nunca pierda trabajo por un borrado accidental. | Escritura |
| archive_done_tasks | Vacía la columna Done: todas sus tareas salen del tablero al archivo; search/fetch las siguen encontrando y siguen apareciendo en el historial de su sprint, nunca se eliminan. Completar un sprint archiva automáticamente sus tareas terminadas; esto se encarga del resto. Se lleva la columna entera en una llamada, sin recuento y sin vuelta atrás desde MCP —restore_task restaura desde la papelera, no desde el archivo—, por eso está marcada como destructiva: un cliente debería confirmarlo con el usuario antes de llamarla. | Elimina |
| list_projects | Lista los proyectos del tablero: contextos ligeros (una startup, un cliente, lo personal) a los que puede pertenecer una tarea. Excluye los proyectos archivados salvo que se indique includeArchived. | Lectura |
| create_project | Crea un contexto de proyecto. El nombre es único por tablero; el color por defecto se elige de una paleta rotatoria; url es la web del proyecto, cuyo favicon aparece en las tarjetas de tareas. | Escritura |
| update_project | Cambia el nombre de un proyecto, su color o la url de su web, o lo archiva/desarchiva. Los proyectos archivados desaparecen de los selectores; sus tareas conservan la asociación. | Escritura |
| list_sprints | Lista todos los sprints del usuario (planificados, activos, completados, archivados), para que un fundador en solitario o un agente revise el historial de sprints y el estado actual sin abrir la app. | Lectura |
| get_active_sprint | Devuelve el sprint activo, o null si no hay ninguno en marcha, para que un fundador en solitario o un agente consulte el objetivo actual sin abrir la app. | Lectura |
| create_sprint | Crea un sprint nuevo en estado "planned" en tu tablero de Weft, listo para programarlo con un objetivo y fechas. Usa start_sprint por separado cuando quieras empezar a trabajar. | Escritura |
| start_sprint | Pasa un sprint planificado a estado activo. Solo puede haber un sprint activo a la vez, en todos los planes: si hay otro en marcha, la llamada falla y lo nombra; completa primero ese sprint y vuelve a intentarlo. | Escritura |
| complete_sprint | Termina el sprint activo. Sus tareas terminadas se archivan en el historial del sprint: salen de la columna Done del tablero, pero se pueden seguir buscando y aparecen en la página del sprint. Las tareas sin terminar se quedan en el tablero, vinculadas al sprint. No se puede deshacer por MCP: los clientes deberían confirmarlo cuando la intención sea ambigua. | Elimina |
| add_task_to_sprint | Asigna una tarea existente a un sprint para que aparezca en su alcance y en su burndown. Idempotente: llamarla dos veces no tiene efecto adicional, así que es seguro reintentarla. | Escritura |
| remove_task_from_sprint | Desvincula una tarea de su sprint actual sin eliminarla: la tarea se queda en el tablero, en su columna, simplemente fuera del alcance de ese sprint y de su burndown. | Escritura |
Preguntas
¿Qué es un servidor MCP de kanban?
Un servidor MCP (Model Context Protocol) que expone un tablero kanban como herramientas a las que puede llamar un asistente de IA: listar las columnas, leer tarjetas, crear una tarjeta, moverla a Doing o a Done. El de Weft está alojado, así que añades una URL en lugar de ejecutar un proceso en tu máquina.
¿Tengo que instalar o ejecutar algo?
No. Añade https://letsweft.com/api/mcp a tu cliente de IA e inicia sesión con OAuth. Los clientes sin OAuth usan un token de acceso personal de Ajustes → Tokens de acceso.
¿Es gratis?
Sí, para 50 tareas y 200 llamadas de IA al mes. Pro quita los límites por 7 US$ por asiento al mes, o 60 US$ por asiento al año.
¿Funciona con ChatGPT Free?
Sí. Weft está en el Plugin directory de ChatGPT y funciona en todos los planes de ChatGPT, Free incluido. Añadir una URL MCP directamente en ChatGPT es una función de Business, Enterprise y Edu, pero para Weft no la necesitas.
¿Pueden dos agentes compartir un tablero?
Sí: para eso está el tablero. Cada agente reclama una tarjeta con start_task antes de trabajar en ella, así que no cogen la misma, y cada tarjeta muestra si la creó o la terminó una IA o una persona.
¿En qué se diferencia de un servidor MCP de kanban local?
Los servidores MCP de kanban de código abierto se ejecutan en tu máquina y guardan el tablero en un archivo o base de datos local, así que solo lo ven los agentes de esa máquina. Weft es un tablero compartido y alojado: las mismas tarjetas en ChatGPT, Claude, Cursor, Codex, la app web y las apps de iOS y Android, para ti y para tu equipo.