Connect AI assistants to TodoMode (MCP)
TodoMode runs a hosted MCP server, so an AI assistant — Claude Code, Claude Desktop, Cursor, or any other client of the Model Context Protocol — can read your projects, see what is due, search, and add or update tasks for you. It acts as you, through a personal API token, with exactly the access that token has.
https://app.todomode.com/mcp
Before you start: a token #
In TodoMode, open Settings → API, name a token (say "Claude Code"), choose its access and an expiry, and press Create token. Choose read only if the assistant should only look things up; choose read and write if it should add, change or complete tasks. The token is shown once — and, right below it, the setup commands on this page with your token already filled in.
Claude Code #
One command (use --scope user to have TodoMode in every project, not just this one):
claude mcp add --transport http todomode https://app.todomode.com/mcp \
--header "Authorization: Bearer tm_…"
Check it with claude mcp list, or /mcp inside Claude Code. To keep the token out of the
command line and your shell history, put it in an environment variable and write the server into
the project's .mcp.json (Claude Code expands ${…}):
{
"mcpServers": {
"todomode": {
"type": "http",
"url": "https://app.todomode.com/mcp",
"headers": { "Authorization": "Bearer ${TODOMODE_TOKEN}" }
}
}
}
Then try: "What's on my plate today in TodoMode?", "Add 'review the PR due:fri #work' to my Work project", "Log what we just changed in a note on the 'Fix login' task".
Claude Desktop (and claude.ai) #
Claude Desktop connects to remote servers as connectors: Settings → Connectors → Add custom
connector, with the URL https://app.todomode.com/mcp. If the dialog has a Request headers
section, add a header named Authorization with the value Bearer tm_… (your token) and save.
If your Claude app does not offer request headers yet, use the TodoMode command line as a local bridge instead — it speaks MCP to Claude Desktop on your computer and forwards to TodoMode:
- Install it and log in (see the command line guide):
todomode login - Print a ready-made config:
todomode mcp --print-config - Paste the
todomodeentry intoclaude_desktop_config.json(Claude Desktop → Settings → Developer → Edit Config) and restart Claude Desktop.
The printed entry looks like this (the paths are yours):
{
"mcpServers": {
"todomode": {
"command": "/usr/bin/python3",
"args": ["/Users/you/.local/bin/todomode", "mcp"]
}
}
}
The bridge reads the token that todomode login saved, so it is not in the config file.
Cursor #
Add TodoMode to ~/.cursor/mcp.json (every workspace) or .cursor/mcp.json (one project):
{
"mcpServers": {
"todomode": {
"url": "https://app.todomode.com/mcp",
"headers": { "Authorization": "Bearer ${env:TODOMODE_TOKEN}" }
}
}
}
${env:TODOMODE_TOKEN} reads the token from your environment; you can also paste it in place.
Other clients #
Any MCP client that supports the Streamable HTTP transport works: give it the URL
https://app.todomode.com/mcp and the header Authorization: Bearer tm_…. For a client that only
starts local (stdio) servers, run todomode mcp from the command line tool as the server command —
or any stdio-to-HTTP bridge that can send a header.
What the assistant can do #
| Tool | What it does | Token |
|---|---|---|
list_projects | Your projects (and ones shared with you), with open-task counts. | read |
list_tasks | A project's outline, or tasks across projects by due date, tag or priority. | read |
get_task | One task in full: notes, dates, tags, repeat rule, reminders, subtasks, link. | read |
get_backlinks | The tasks that link to a task with [[...]], and whether from their title or note. | read |
search_tasks | The app's search: words, "phrases", -not, #tag, due:today, priority:high … | read |
agenda | What is overdue, due today, tomorrow, this week, next week. | read |
list_trash | Recently deleted tasks. | read |
add_task | Add a task — due:fri at:9am #tag !high @weekly r:-1h all work. To your Inbox unless told otherwise. | write |
update_task | Change the title, notes, due date, priority, tags or repeat rule. | write |
append_to_note | Add to the end of a task's notes. | write |
complete_task | Tick a task off (or reopen it). Repeating tasks roll on as in the app. | write |
move_task | Move a task and its subtasks to another project. | write |
delete_task | Move a task to the trash (restorable for 30 days). | write |
restore_from_trash | Undo a delete. | write |
import_outline | Add a nested list of tasks in one go. | write |
create_project | Make a new project. | write |
Titles and notes can link to other tasks: [[task_…|Title]] (or just [[task_…]] when the
title is not for everyone who can read the task). The assistant follows one by getting that task;
it can write a link the same way, or as [[Exact title]], which TodoMode turns into the stored
form when it saves (see Links between tasks).
With a read-only token the assistant is only offered the read tools. Your projects are also
available as resources (in Claude Code, type @ to attach a project's outline to the
conversation).
Safety #
- The token is the key. Anyone with it can do what its access allows. Prefer read-only tokens, and tokens that expire; revoke one in Settings → API and it stops at once.
- The assistant cannot do more than you. Shared projects keep their limits, deleting goes to the trash, and projects cannot be deleted at all.
- Your assistant asks before it acts. MCP clients show you each tool call and let you approve it; write tools are marked as such, and
delete_taskandupdate_taskas destructive, so clients can ask first. - Requests count against the token's rate limit (120 a minute), like the API's.
Troubleshooting #
- "401 Unauthorized" / "needs authentication". The token is wrong, revoked or expired. Make a new one and update the header. (Claude Code may offer to sign in with OAuth: TodoMode uses tokens, not OAuth, so update the header instead.)
- "This connection uses a read-only API token". The assistant tried to change something with a read token; make a read-and-write token if you want that.
- "Payment required". Your trial or subscription has ended: reading still works, changes do not until it is renewed.
- "403 Origin not allowed". Something sent the request from a web page. MCP clients do not; call the server from a client, not from a browser tab.