MCP server for a plaintext todo list: CRUD + tags + search + stats Tools/Resources/Prompts, with a built-in browser dashboard.
Project description
todo-mcp-server-kit
An MCP server for a plaintext todo list.
It exposes a project-local .claude/todos.md through MCP Tools (create /
edit / complete / delete / search), Resources (list views + aggregate
stats, including URI-templated views), and Prompts (weekly review /
daily plan) — plus a built-in browser dashboard for visual editing.
The on-disk format is plain, human-readable Markdown, so your todos stay readable and version-controllable without this tool.
Install & run
Zero-install with uv (recommended):
uvx todo-mcp-server-kit --project-root /path/to/your/project
Or install from PyPI:
pip install todo-mcp-server-kit
todo-mcp-server-kit --project-root /path/to/your/project
The server speaks MCP over stdio — it is normally launched by an MCP client (Claude Code, Cursor, …), not run by hand.
--project-root is optional; resolution order is:
--project-root > $TODO_MCP_PROJECT_ROOT > current working directory.
Todos live in <project-root>/.claude/todos.md.
Register with Claude Code
claude mcp add todo -s user -- uvx todo-mcp-server-kit --project-root /path/to/your/project
Or, in any MCP client config (mcpServers):
{
"mcpServers": {
"todo": {
"command": "uvx",
"args": ["todo-mcp-server-kit", "--project-root", "/path/to/your/project"]
}
}
}
Capabilities
Tools (tools/call)
| Tool | Signature | Purpose |
|---|---|---|
add_todo |
(text, priority="med", due=None, tags=None) |
Create a todo |
mark_done |
(id) |
Mark complete |
edit_todo |
(id, text?, priority?, due?, done?, tags?) |
Edit fields (done=False to reopen; tags=[] to clear) |
remove_todo |
(id) |
Delete |
search_todos |
(query?, tag?, priority?, status="all", due_before?, due_after?) |
Filter by any combination of criteria |
open_dashboard |
() |
Get the dashboard URL |
Resources (resources/read)
| URI | Type | Content |
|---|---|---|
todo://list |
markdown | Full todos.md |
todo://tag/{tag} |
markdown | Todos carrying a tag (URI template) |
todo://status/{status} |
markdown | open / done view (URI template) |
todo://stats |
json | Counts, completion rate, by-priority/by-tag, overdue, due-soon |
Prompts (prompts/get)
| Prompt | Purpose |
|---|---|
weekly_review |
Review the week: done / open / overdue + next-week focus |
daily_plan |
Plan today: surface overdue, pick a Top-3 from open items |
Browser dashboard
On startup the server runs a small HTTP dashboard in a daemon thread
(default http://localhost:8765, falling back to the next free port). It
renders todos as an interactive table — view, add, edit, complete, tag, and
delete — and re-reads the file on every request. Call open_dashboard to get
the URL.
Bound to
127.0.0.1only, no auth — intended for local personal use; don't expose the port. The dashboard lives and dies with the server process.
Data format
Each todo is one Markdown line under <project-root>/.claude/todos.md:
- [ ] #12 [high] (due: 2026-06-01) (tags: agent,learning) Finish the v2 spec
due and tags are optional. See docs/FORMAT.md for the
full grammar.
Docs
docs/FORMAT.md— thetodos.mdline grammar (single source of truth)CONTRIBUTING.md— dev setup & tests
License
MIT © Zhang Yu
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file todo_mcp_server_kit-0.2.0.tar.gz.
File metadata
- Download URL: todo_mcp_server_kit-0.2.0.tar.gz
- Upload date:
- Size: 18.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
952aa4bd130758c7f91522a9be5fab45a7598a4fc978d43c9a77408ae90553ed
|
|
| MD5 |
27ab08665e58b1b5521cd58112fcb4d3
|
|
| BLAKE2b-256 |
a8e822b969ef20afe2837dc0ef6bd30f5c1b6f4449b5a6c16575d6bd56f07297
|
Provenance
The following attestation bundles were made for todo_mcp_server_kit-0.2.0.tar.gz:
Publisher:
publish.yml on zzcodd/mcp_repos
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
todo_mcp_server_kit-0.2.0.tar.gz -
Subject digest:
952aa4bd130758c7f91522a9be5fab45a7598a4fc978d43c9a77408ae90553ed - Sigstore transparency entry: 1672368267
- Sigstore integration time:
-
Permalink:
zzcodd/mcp_repos@8546d342cb10e0860f4c3b533f9b247a178e1e41 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/zzcodd
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8546d342cb10e0860f4c3b533f9b247a178e1e41 -
Trigger Event:
push
-
Statement type:
File details
Details for the file todo_mcp_server_kit-0.2.0-py3-none-any.whl.
File metadata
- Download URL: todo_mcp_server_kit-0.2.0-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3de4e5bbc8e7f61952ad56e626b80adbb8e991fec4000c62d37dc258df1c1d24
|
|
| MD5 |
c19a57654c4cc2e2a95c1eb75abf7bce
|
|
| BLAKE2b-256 |
2f8495ff335d2479d71f5d2d943fd1223f68fb26d92166b34bf25ffbad671b4c
|
Provenance
The following attestation bundles were made for todo_mcp_server_kit-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on zzcodd/mcp_repos
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
todo_mcp_server_kit-0.2.0-py3-none-any.whl -
Subject digest:
3de4e5bbc8e7f61952ad56e626b80adbb8e991fec4000c62d37dc258df1c1d24 - Sigstore transparency entry: 1672368276
- Sigstore integration time:
-
Permalink:
zzcodd/mcp_repos@8546d342cb10e0860f4c3b533f9b247a178e1e41 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/zzcodd
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8546d342cb10e0860f4c3b533f9b247a178e1e41 -
Trigger Event:
push
-
Statement type: