todo-app/mcp/README.md
Krzysztof kuhy Rudnicki 57019eec30
Some checks are pending
dependency freshness / dependencies on newest stable (push) Waiting to run
file-length / file length <= 250 lines (push) Waiting to run
md-naming / markdown naming convention (push) Waiting to run
release-apk / release (APK) (push) Waiting to run
repo-contract / repo contract (push) Waiting to run
Track who filed a note (created_by)
New optional note field created_by (kuhy|claude), stored like by/repo and
omitted when unset so older builds stay wire-compatible. App UI stamps kuhy;
MCP add_task and the CLI stamp claude. list/get/search output includes it.
Human notes sort above Claude's; Claude notes are hidden behind a per-device
eye toggle. CLI --backfill-created-by [--dry-run] classifies old notes by the
node that wrote created_at, writing only the created_by field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-10 14:18:19 +01:00

1.6 KiB

todo MCP server

Repo tasks for any Claude session (local or cloud): add_task, list_tasks, get_task, update_task, close_task (refused without evidence), search_tasks. Dart, Streamable HTTP on 127.0.0.1:8735/mcp; Caddy publishes it as https://todo.kuhy.duckdns.org/mcp.

The server is one more sync node: it reuses lib/cli (CliSession, SyncService) and writes its own CRDT log at todo-sync/notes/<node id>.json plus todo-sync/revs/<node id>. Code: lib/mcp/, entrypoint mcp/todo_mcp.dart, tests test/mcp/.

Output shapes: list_tasks and search_tasks print one tab-separated line per task (id8 status priority repo title created_by); get_task prints key: value lines (including created_by) then --- and the text. created_by is claude for notes filed through add_task or the CLI and kuhy for everything else (a missing value reads as kuhy).

What Where
Firebase seed (read once) ~/.config/todo-mcp/firebase_auth.json
Bearer token hashes ~/.config/todo-mcp/tokens (<sha256> <env>)
Log, node id, session copy (0600) ~/.local/share/todo-mcp/
Binary ~/.local/lib/todo-mcp/todo_mcp

One-time setup

python3 ~/src/utils/crdt-sync/tool/seed_session.py --app todo-mcp
mcp/mint_token.sh pc        # prints the token once; export it as TODO_MCP_TOKEN
mcp/install.sh              # build + install the unit
systemctl --user enable --now todo-mcp.service

Deploy a new build: mcp/install.sh (restarts a running unit). Revoke a token: delete its line in tokens; no restart needed.