MCP setup
Every account gets its own MCP endpoint, scoped to just that account's tasks — no shared or global token.
1. Generate a token
Open the Account panel in the bottom-left of the sidebar and generate an MCP token. It's shown once, at generation — copy it somewhere safe.
2. Point an MCP client at it
Add Done as a remote MCP server, using the token as a bearer credential:
{
"mcpServers": {
"done": {
"url": "https://trydone.app/mcp",
"headers": { "Authorization": "Bearer <your-generated-mcp-token>" }
}
}
}A Claude agent using that token can only ever see and edit your account's tasks.
2b. Or connect via claude.ai custom connectors
On claude.ai you can add Done as a custom connector instead of editing a config file:
- Go to Settings → Connectors → Add custom connector.
- Give it a name (e.g. “Done”) and set the remote MCP server URL to
https://trydone.app/mcp. - Open Advanced settings and add a request header: name it
Authorization, and for the value enterBearer <your-generated-mcp-token>(including the space after “Bearer”) — mark it Required. - Click Add, then Connect, and enable the connector in a chat.
Claude stores the header value securely and never displays it again after you save it. Done has no OAuth flow, so this header-based auth is the only way to connect it as a custom connector — if your account doesn't yet show request headers in the connector dialog, that feature is still in staged rollout; use the config-file method above instead.
3. Tools available to the agent
The MCP server exposes workflow-shaped tools, not raw CRUD:
| list_my_tasks | Pull the ready-to-work queue — assigned to Claude, not blocked, highest priority first. Call this first. |
| list_tasks | See the whole board; filter by status/priority/project/parent, or search titles. |
| get_task | Load one task in full: notes, subtasks, blockers, and the whole activity feed. |
| claim_task | Pick it up: set in-progress, assign to Claude, and post a starting comment. |
| comment_on_task | Report progress or deliver results into the activity feed (markdown). |
| complete_task | Mark done directly — requires a summary. Only works if the task has auto_ok=true; otherwise it errors and tells you to use propose_completion. |
| propose_completion | For a non-auto_ok task: post a summary and set status to pending_approval until a human approves or rejects it. |
| approve_task / reject_task | Resolve a pending_approval task (a supervising agent can do this too, not just a human). |
| propose_plan | Before substantial work: post the plan and set status to plan_proposed until a human approves it — the pre-execution counterpart of propose_completion. |
| approve_plan / reject_plan | Resolve a plan_proposed task's plan (a supervising agent can do this too, not just a human). |
| create_task / update_task / delete_task | Full task CRUD, validated the same way the REST API is. delete_task moves it to Trash, not a hard delete. Accepts references — URLs/paths for context, fetched via the agent's own MCP connectors. |
| quick_capture | Create a task from raw text — parses due dates, priority, @claude, ~estimate, #project. |
| decompose_task | Break a task into several subtasks in one call. |
| block_task / unblock_task | Manage blocked-by dependencies (cycle-checked). |
| run_triage | Bulk-assign itself to open, unassigned tasks whose title matches a rule. |
| get_digest / get_weekly_review / get_stats | Orient at the start of a session, or pull a fuller productivity picture (trend, streak, breakdowns). |
| list_projects / create_project / update_project / delete_project | Manage sidebar projects. |
| list_tags / create_tag / delete_tag / tag_task / untag_task | Manage and apply cross-cutting tags. |
| list_trash / restore_task | See what's in Trash and bring a task back out of it. |
A typical agent run
get_digest → list_my_tasks → get_task → claim_task → work → comment_on_task → complete_task. You review results in the task's Activity panel and stay the accountable owner.
Run it on a schedule
Done is a passive queue — it can't reach out and start a Claude run — so to have Claude work your tasks unattended, schedule Claude to poll Done rather than the other way around. Add Done as a connector (above), then create a Routine at claude.ai/code on whatever cadence you like (hourly is plenty) with this as its prompt:
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 get_digest, then list_my_tasks, to see what's assigned to me (Claude) and ready.
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, description, references), carry it out, post progress with comment_on_task, and when it's finished call propose_completion with a summary — or complete_task if the task is auto_ok.
- not_started and small or auto_ok → just do it, then complete_task (auto_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. Respect the gates: never force a non-auto_ok task to done, and never act on a task that isn't assigned to me.
4. If nothing is ready, stop — don't invent work.
End with a one-line summary: plans proposed, tasks worked, tasks completed.Each run it proposes a plan for any substantial task and waits, and executes whatever you've approved in the Control Room since last time. You approve; Claude does the work — you never have to kick off a run by hand. The same setup is a click away in the Account panel (“Put Claude to work on your queue”).
Notes
- There is no OAuth flow on the MCP endpoint yet — it's a long-lived per-account bearer token, generated in-app.
- The token is scoped to a single account; there is no cross-account or global token.
- Regenerating a token immediately invalidates the previous one.