Documentación

Configuración de MCP

Cada cuenta tiene su propio endpoint MCP, con alcance limitado a las tareas de esa cuenta — sin tokens compartidos ni globales.

1. Conéctate por OAuth (recomendado)

Done es un servidor de autorización OAuth 2.1 completo para su endpoint MCP, así que los clientes que hablan OAuth — claude.ai, los conectores de ChatGPT y Claude Desktop — se conectan solos, sin copiar ningún token. Agrega Done como conector personalizado solo con la URL:

  1. Ve a Settings → Connectors → Add custom connector.
  2. Usa https://trydone.app/mcp como URL del servidor MCP remoto y haz clic en Add.
  3. Haz clic en Connect. El cliente descubre los endpoints OAuth de Done, se registra y te lleva a Done para iniciar sesión y aprobar el acceso.
  4. Aprueba, y el conector queda activo — con alcance limitado solo a tu cuenta.

2. O usa un token bearer

Para clientes que se configuran a mano (o un script), genera un token. Abre el panel Cuenta en la esquina inferior izquierda de la barra lateral y genera un token de MCP — se muestra una sola vez, así que cópialo en un lugar seguro. Puedes crear un token de acceso completo, uno de solo lectura o uno limitado a un único proyecto. Luego apunta un cliente al endpoint:

{
  "mcpServers": {
    "done": {
      "url": "https://trydone.app/mcp",
      "headers": { "Authorization": "Bearer <tu-token-de-mcp-generado>" }
    }
  }
}

En claude.ai también puedes pegar ese mismo Authorization: Bearer <token> como encabezado de solicitud en Advanced settings de un conector personalizado. De cualquier forma, un agente que usa el token solo ve y edita aquello a lo que el token tiene acceso.

3. Herramientas disponibles para el agente

El servidor MCP expone herramientas pensadas para flujos de trabajo, no CRUD en bruto:

list_my_tasks
Trae la cola lista para trabajar — asignada a un agente de IA, sin bloqueos, sin pausa, de mayor a menor prioridad. Llámala primero. Cuando vuelve vacía, explica por qué con un desglose de lo que quedó oculto (blocked/done/wont_do/pending_approval/plan_proposed/needs_input/paused/claimed_by_other) — así “no hay nada que hacer” y “todo está en pausa” no se leen igual. Pasa include_paused para listar las pausadas e informar qué se saltó la ejecución; no quita ninguna pausa — siguen sin poder trabajarse.
next_task
Toma de forma atómica la única tarea lista de mayor prioridad — el desencolado. Úsala en una flota para que dos agentes nunca tomen la misma.
list_tasks
Mira todo el tablero; filtra por status/priority/project/parent o busca en los títulos.
get_task
Carga una tarea completa: notas, subtareas, bloqueos y el feed de actividad — más los tres niveles de instrucciones permanentes (workspace_brief, project_brief y el notes_for_agent de la propia tarea). Precedencia: espacio de trabajo → proyecto → tarea, lo más específico al final. Con presupuesto: el feed devuelve por defecto las 50 entradas más recientes (limit, 0–500) e include acota las secciones; todo lo que queda fuera se nombra en context_summary, para que una respuesta corta nunca se confunda con un historial completo.
claim_task / release_task
Toma una tarea (en curso, asignada a un agente, con un comentario inicial) — pasa tu id de `agent` (p. ej., "ChatGPT") para que una flota no la reserve dos veces — o devuélvela si no puedes terminarla ahora.
decline_task
Saca por completo una tarea de tu cola — quita la asignación y tu toma, la regresa a not_started y publica tu motivo en el hilo. Para trabajo que te asignaron pero que no debería ser tuyo. release_task solo suelta la reserva; esta quita la asignación.
pause_board
El mismo botón de parada, un nivel más arriba: deja de entregarle trabajo a cualquier agente de la cuenta hasta que una persona lo reanude. Para un muro que no es de una sola tarea — credenciales perdidas, todas las tareas fallando igual, un bucle que abarca varias tareas. Después, list_my_tasks y next_task se niegan y devuelven el motivo en lugar de una cola vacía, así una ejecución que encuentra el tablero detenido registra por qué. El trabajo que ya está en curso todavía se puede cerrar. Solo una persona puede reanudarlo, en el panel Cuenta.
pause_task
Detén el trabajo en una tarea y mantén a todos los agentes fuera de ella hasta que una persona la reanude. Para cuando estás ATASCADO de una forma que ninguna pregunta resolvería — un bucle, una credencial que falta, una tarea que no se puede hacer tal como está escrita. Requiere un motivo, y no puedes quitar la pausa: reanudar es una acción humana en la app, así que un agente que se pausó por quedar en bucle no puede volver a meterse en el bucle.
comment_on_task
Entrega resultados y conclusiones en el hilo de la tarea — el carril que lee una persona. Un comentario denso por ejecución, no una crónica paso a paso: los cambios de estado, las tomas y las trazas de ejecución quedan registrados automáticamente en el historial de la tarea.
check_criterion
Marca un criterio de aceptación como cumplido. Este es el canal de progreso — marca las condiciones a medida que las cumples en lugar de narrar el avance en comentarios. Marcar todas las casillas no completa la tarea.
ask_decision
Deja planteada una pregunta para la persona y sigue adelante — la única forma de involucrarla sin terminar tu ejecución. La tarea sale de tu cola como needs_input y la retomas con la respuesta adjunta. Requiere una recomendación. Una sola pregunta bloqueante abierta por tarea.
list_open_decisions / withdraw_decision
Mira todas las preguntas que esperan a una persona, o retira una que resolviste por tu cuenta. Revisa esto primero en cada ejecución: una tarea cuya pregunta ya se respondió es el trabajo más barato disponible.
check_night_budget
Pregunta si puedes empezar otra tarea esta noche. Los presupuestos de tarea limitan una tarea; este limita toda una sesión sin supervisión, para que una rutina nocturna no gaste en una noche el margen de una semana.
delete_comment
Elimina uno de los comentarios del propio agente — un duplicado por un reintento o un borrador que reemplazó. Tus comentarios y el historial de estados no se pueden eliminar.
complete_task
Márcala como terminada directamente — requiere un resumen. Solo funciona si la tarea tiene agent_ok=true; si no, da error y te indica usar propose_completion.
propose_completion
Para una tarea sin agent_ok: publica un resumen y cambia el estado a pending_approval hasta que una persona la apruebe o la rechace.
approve_task / reject_task
Resuelve una tarea en pending_approval (también puede hacerlo un agente supervisor, no solo una persona).
propose_plan
Antes de un trabajo sustancial: publica el plan y cambia el estado a plan_proposed hasta que una persona lo apruebe — la contraparte de propose_completion antes de la ejecución.
approve_plan / reject_plan
Resuelve el plan de una tarea en plan_proposed (también puede hacerlo un agente supervisor, no solo una persona).
create_task / update_task / delete_task
CRUD completo de tareas, con la misma validación que la API REST. delete_task la mueve a la Papelera; no la borra definitivamente. Acepta referencias — URLs o rutas como contexto, que el agente obtiene con sus propios conectores MCP.
quick_capture
Crea una tarea a partir de texto libre — reconoce fechas, prioridad, @agent (también @claude/@chatgpt), ~estimación y #proyecto.
decompose_task
Divide una tarea en varias subtareas con una sola llamada.
render_plan
Presenta los subpasos de una tarea como un plan: una lista de verificación en markdown, JSON estructurado y un widget interactivo para los hosts que renderizan UI de MCP. Llámala después de decompose_task/propose_plan.
set_step_status
Marca un subpaso del plan como hecho o reábrelo, y devuelve el plan actualizado. Marcar un paso propio del agente sin agent_ok sigue pasando por la puerta de aprobación.
block_task / unblock_task
Gestiona las dependencias de bloqueo (con verificación de ciclos).
start_run / end_run / check_budget
Abre y cierra una sesión de trabajo auditable; consulta cuántas llamadas a herramientas o minutos le quedan al presupuesto de una tarea. Cuando una tarea con presupuesto lo agota, start_run se rechaza. Pasa trace_url en start_run para enlazar la transcripción de la sesión, así “¿por qué hizo eso a las 3 a. m.?” está a un clic de la ejecución.
fleet_status
Resumen en vivo de cada tarea que un agente tiene tomada, desde hace cuánto y si la reserva ya venció — úsala para ver quién está trabajando en qué antes de tomar una tarea.
runner_heartbeat
Solo para un equipo runner autoalojado: lo registra en la cuenta e informa su estado, para que su dueño lo vea en Done en lugar de leer logs por SSH. El único estado que nada más puede mostrar es un equipo conectado pero roto — su token de Done funciona, así que mantiene el flujo de eventos y aparece como “escuchando”, mientras su sesión vencida del modelo hace fallar cada ejecución.
list_triggers / claim_trigger
Solicitudes que una persona te dirige — un clic en “Ejecutar ahora” o @claude en un comentario. Cada una es un registro duradero que espera hasta que un agente se conecte, y llega al instante a uno conectado por el flujo de eventos en vivo. Una petición explícita tiene prioridad sobre el orden de la cola, así que next_task pone primero la tarea solicitada. claim_trigger confirma una de forma atómica, para que una flota no la trabaje dos veces.
search_activity
Busca en el feed de actividad de todas las tareas que puedes ver, en lugar de leer una tarea a la vez — coincidencia de subcadena en comentarios, cambios de estado e informes de agentes, lo más reciente primero, filtrable por task_id/author/kind/since.
changes_since
La contraparte por consulta del flujo de eventos en vivo, para una sesión que se conecta, trabaja y termina: pasa tu último cursor y recibe solo lo que cambió desde entonces. Sin cursor, fija uno y no devuelve cambios — una primera llamada no puede volcar todo el tablero. Los disparadores no se incluyen; list_triggers sigue siendo la fuente para ellos.
list_claude_shipped
Lista las tareas que un agente de IA marcó como terminadas, lo más reciente primero — para una reunión diaria, una retrospectiva o para responder “¿cuánto hizo realmente el agente?”.
list_stale_tasks
Encuentra trabajo abierto que quedó en silencio, con la evidencia para decidir qué hacer — días de inactividad, avance de subtareas, bloqueos abiertos y códigos de motivo. El barrido de limpieza.
get_evidence
Todo lo que querría revisar una persona antes de aprobar una tarea, en una sola llamada: avance de criterios, gasto frente al presupuesto, comprobantes, entregables y enlaces a trazas.
propose_capture / list_capture_inbox
La puerta de entrada: propone una tarea que la persona todavía no ha escrito, para su bandeja de captura. No crea nada — aceptarla es la escritura de la persona. El listado informa la proporción de aceptadas y descartadas, que decide si esta función se gana su lugar.
propose_edit
Sugiere cambios en los campos de una tarea sin aplicarlos — una comparación entre lo actual y lo propuesto que una persona acepta o descarta campo por campo, para que tres sugerencias correctas no se rechacen junto con la cuarta. No escribe nada. Un campo que no puedes modificar tampoco lo puedes proponer.
propose_grooming / list_grooming_proposals
Convierte un barrido de tareas estancadas en un lote revisable: una acción recomendada por tarea, cada una con su motivo. No escribe nada — una persona aprueba cada elemento en la app, y esa aprobación es la escritura.
get_autonomy_ledger
Mira dónde se ha ganado agent_ok: aprobaciones y rechazos agrupados por proyecto o etiqueta, con la racha de aprobaciones actual. Solo informa — otorgar autonomía es una acción humana.
get_digest / get_weekly_review / get_stats
Oriéntate al inicio de una sesión u obtén un panorama de productividad más completo (tendencia, racha, desgloses).
list_projects / create_project / update_project / delete_project
Gestiona los proyectos de la barra lateral. create_project acepta un workspace_id opcional (de list_workspaces) para archivar el proyecto en un espacio de trabajo compartido en lugar del personal; un subproyecto toma el espacio de trabajo de su proyecto padre, así que no envíes ambos.
list_workspaces
Los espacios de trabajo a los que pertenece esta cuenta — id, nombre, rol (owner o member) y notes_for_agent, las instrucciones permanentes del espacio de trabajo. Un espacio de trabajo define quién puede ver un conjunto de tareas. Solo lectura: la persona crea y comparte los espacios de trabajo en Cuenta → Espacios de trabajo y equipo, y las instrucciones también las escribe ella.
list_goals / create_goal / update_goal / delete_goal
Gestiona los objetivos — el nivel más alto, por encima de los proyectos. Archiva proyectos o tareas bajo uno con goal_id; eliminar un objetivo desarchiva su trabajo en lugar de destruirlo.
list_tags / create_tag / delete_tag / tag_task / untag_task
Gestiona y aplica etiquetas transversales.
list_trash / restore_task
Mira qué hay en la Papelera y saca una tarea de ahí.
list_calendar_events
Lista los eventos de calendario en caché de la persona — título, hora, lugar, organizador, asistentes — de sus cuentas de Google conectadas. Úsala antes de decidir a qué tarea corresponde una reunión.
suggest_event_matches
Ordena los pares tarea↔evento de calendario más probables, del mejor al peor, con la evidencia de cada uno. Llamarla no vincula nada — confírmalo con link_task_to_event.
link_task_to_event / unlink_task_from_event
Registra — o elimina — que una tarea y un evento de calendario son lo mismo, para que la tarea quede fijada a la hora real de la reunión en lugar de acomodarse en el tiempo libre.

Prompts y recursos

Además de herramientas, el servidor es totalmente nativo de MCP: también expone prompts y recursos, para que un cliente pueda ofrecer flujos de trabajo listos para usar y adjuntar datos en vivo como contexto.

  • prompts/list · plantillas de una línea que corresponden a flujos de trabajo reales, para que un cliente pueda mostrarlas como comandos de barra:
    • plan_my_dayArma un plan realista y priorizado para hoy a partir de mis tareas abiertas.
    • work_nextToma y trabaja la única tarea lista de mayor prioridad.
    • daily_reviewResume qué se terminó, qué está vencido y en qué enfocarse después.
    • groom_boardEncuentra el trabajo abierto que murió en silencio y propone qué hacer con cada uno — solo propone.
    • answer_backlogRetoma las tareas cuyas preguntas pendientes ya respondí.
    • prep_meetingsRelaciona los eventos de calendario de hoy con las tareas de las que tratan y prepara cada uno.
    • triage_taskEvalúa una tarea y planéala o señala qué la está bloqueando.
  • resources/list · vistas de solo lectura que un cliente puede adjuntar: done://digest, done://queue y un done://task/<id> por cada tarea abierta. Los tokens con alcance limitado solo ven su propio proyecto.

Una ejecución típica de un agente

get_digestlist_open_decisions next_taskget_task → trabajo, marcando check_criterion a medida que se cumple cada condición → comment_on_task una vez con el informe → propose_completion. Tú revisas los resultados en el hilo de la tarea y sigues siendo el responsable final.

Preguntar sin detenerse

Un agente que llega a una bifurcación real — gastar dinero, cualquier cosa de cara al exterior, cualquier cosa irreversible — no debería adivinar, pero tampoco quedarse esperando. Llama a ask_decision y sigue adelante: la tarea sale de su cola como needs_input, tú respondes en la Sala de control o directamente desde un mensaje directo de Slack, y la tarea vuelve a la cola con tu respuesta adjunta — así la siguiente ejecución lee la respuesta en lugar de volver a plantear la pregunta.

Cada pregunta trae la recomendación del propio agente y su razonamiento, así que responder suele ser un clic y no una tarea de redacción. Responder no es una aprobación: le devuelve la tarea al agente y nunca cierra nada. Solo puede haber una pregunta bloqueante abierta por tarea, lo que evita que una bandeja de decisiones se convierta en el feed de comentarios que reemplazó.

Esto es lo que hace que valga la pena dejar corriendo una rutina nocturna. Sin esto, la primera ambigüedad a las 3 a. m. detiene toda la noche; con esto, esa tarea queda en espera y el agente sigue trabajando en el resto.

Ejecútalo según un horario

Done no incluye ningún agente ni programador. Es una cola pasiva — no puede tomar la iniciativa e iniciar una ejecución — así que, para que tus tareas se trabajen sin supervisión, algo fuera de Done tiene que despertar con cierta frecuencia y llamarlo. Todos los clientes MCP se conectan de la misma forma; solo cambia la programación:

ClaudeRutinas

Se ejecuta en la nube de Anthropic según un horario, con Done conectado como conector.

  1. Agrega Done como conector en claude.ai/customize/connectors, con la URL del servidor MCP https://trydone.app/mcp. Tiene que estar en tu cuenta de claude.ai — una rutina no ve los servidores MCP que agregaste localmente en la CLI.
  2. Abre claude.ai/code/routines y haz clic en New routine — o ejecuta /schedule en la CLI de Claude Code y describe lo que quieres con tus propias palabras.
  3. Pega uno de los prompts de Done como instrucciones. Una rutina se ejecuta sin nadie mirando, así que el prompt tiene que valerse por sí mismo; justo para eso están escritos los de la vista Indicaciones.
  4. Dale un disparador de horario — cada hora, diario, entre semana o semanal. Una hora es el intervalo más corto permitido.
  5. En Connectors, deja Done incluido y quita los que esta rutina no tiene por qué tocar. Créala y luego presiona Run now una vez para ver la primera ejecución de principio a fin.

Antes de empezar: Las rutinas requieren un plan de pago (Pro, Max, Team o Enterprise) con Claude Code en la web activado.

ChatGPTTareas programadas

Una tarea con temporizador que llega a Done mediante un conector personalizado.

  1. Agrega Done como conector personalizado en el modo de desarrollador, apuntando a https://trydone.app/mcp, e inicia sesión cuando te lo pida.
  2. Inicia un chat, pega uno de los prompts de Done y pide que se ejecute según un horario — "ejecuta esto cada día entre semana a las 8 a.m.".
  3. Administra lo que creaste en Tareas, dentro del menú de tu perfil. Las tareas solo se activan con temporizador, como mucho cada hora aproximadamente, y se pausan solas si las ignoras por mucho tiempo.

Antes de empezar: En Plus y Pro, los conectores MCP personalizados son de solo lectura — un agente puede leer tu cola, pero no puede tomar, comentar ni completar nada. Para escribir de vuelta necesitas un plan Business, Enterprise o Edu.

Cualquier otroTu propio programador

Cualquier cliente MCP, activado por lo que ya usas para ejecutar cosas con temporizador.

  1. Apunta el cliente a https://trydone.app/mcp y envía tu token en un encabezado Authorization: Bearer.
  2. Haz que cron, un horario de CI o un ejecutor de flujos — lo que ya uses para correr cosas con temporizador — inicie ese cliente con uno de los prompts de Done como instrucciones.
  3. Dale a la ejecución un lugar donde reportar. Cada prompt de la biblioteca termina escribiendo de vuelta en Done, así que el tablero es el registro y no necesitas buscar en otro lado.

Sea cual sea el camino que elijas, este es el prompt que debes darle (está en inglés; cópialo tal cual):

You are my Done task runner. Work my queue through the Done MCP connector only — never touch anything outside my Done account.

Each run:
1. Call list_open_decisions first, then get_digest and list_my_tasks, to see what's assigned to me (the AI agent) and ready. A task whose parked question I've since answered is the cheapest work on the board — the context is written down and the blocker just cleared — so start there.
2. For each ready task, decide what to do:
   - in_progress with plan_approved_at set → its plan is approved, so DO THE WORK now. Read it with get_task (notes_for_agent, acceptance_criteria, description, references), carry it out, and when it's finished call propose_completion with a summary — or complete_task if the task is agent_ok.
   - not_started and small or agent_ok → just do it, then complete_task (agent_ok) or propose_completion.
   - not_started and substantial or ambiguous (multi-step, judgment calls, anything I'd want to sign off on the approach for) → do NOT start it. Call propose_plan with a short plan of how you intend to tackle it, then move on. It waits for my approval and comes back to you once I approve it in the Control Room.
3. Report progress by ticking the acceptance criteria with check_criterion as you actually meet each one — not by narrating into comments. Post at most ONE dense comment_on_task per task per run: what you did, what you found, what's left. A running commentary is noise.
4. Hit a real fork — spending money, anything outward-facing (an email, a post, a reply to a customer), anything irreversible — and call ask_decision with your own recommendation, then MOVE ON to the next task. Don't guess, and don't sit there waiting. If you later work the answer out yourself, withdraw_decision rather than leaving a stale question in my queue.
5. If a task was assigned to me but shouldn't be — it needs my accounts, my signature, or my judgment — hand it back with decline_task and a one-line reason. Declining is a valid outcome.
6. Respect the gates: never force a non-agent_ok task to done, and never act on a task that isn't assigned to me.
7. For any task that has sub-steps (a plan) — one you decomposed, or that already had subtasks — call render_plan on it so I get the laid-out plan with progress and an "Open in Done" link.
8. If nothing is ready, stop — don't invent work.

If you're running unattended overnight, wrap the run: call start_run at the top and check_night_budget before picking up each task, so you stop at the caps I set in Account → Notifications, and call end_run when you finish.

End with a one-line summary: plans proposed, tasks worked, tasks completed, questions parked.

En cada ejecución propone un plan para cualquier tarea sustancial y espera, y ejecuta todo lo que hayas aprobado en la Sala de control desde la última vez. Tú apruebas; el agente hace el trabajo — nunca tienes que iniciar una ejecución a mano. La misma configuración está a un clic en el panel Cuenta (“Pon a un agente de IA a trabajar en tu cola”).

Notas

  • Conéctate por OAuth (clientes que descubren /.well-known/oauth-authorization-server) o con un token bearer de larga duración por cuenta, generado en la app — ambos funcionan contra el mismo endpoint.
  • Cada token y cada autorización tienen alcance limitado a una sola cuenta; no hay tokens entre cuentas ni globales. Los tokens bearer pueden limitarse aún más a solo lectura o a un único proyecto.
  • Regenerar o revocar un token lo invalida de inmediato.
  • El plan Free incluye 100 llamadas de agente (MCP) al mes; Pro y Teams son ilimitados. Consulta los precios.