todo-mcp
todo-mcp
TODO.md をストアとするMCPサーバーです。TODO.md は手動で読み・編集・diff ができます。書き込みはバイト範囲のスプライスなので、ファイルは常にあなたのもののままです。手書きのテーブル、タブインデント、タスク外の散文が再シリアライズされることはありません。
MCPクライアントにはstdioで、それ以外にはStreamable HTTPで応答します。
クレジット
CalamityAdam/mcp-todo をベースにしています。createTodoMcpServer ファクトリの形やExpress の Streamable HTTP ラッパー、セッション処理というオリジナルのスキャフォールドを提供してくれました。
それ以外はほとんど残っていません。そのバージョンは ~/.mcp-todos.json のJSONブロブに番号付きレコードとしてtodosを保存し、{ id, title, done } に対する3つのツールを持っていました。このバージョンはストアをマークダウンドキュメントに置き換え、数値IDをスラグに変更し、ステータス、エリア、参照ブレッドクラム、日付入りログノート、全文検索、重複検出を備えた7つのツールへ拡張しました。2つのプロジェクトはもはや実装を共有していません。
アップストリームには LICENSE ファイルがありません。package.json はISCを宣言しており、このリポジトリはそれを引き継いでいます。
インストール
GitHubから直接実行できます。クローンは不要です。
npx github:adrianhardy/todo-mcp変更をプッシュしたら、npx --ignore-existing github:adrianhardy/todo-mcp で変更を取り込めます。
通常の利用では、一度インストールすればあとは忘れて構いません。
npm i -g github:adrianhardy/todo-mcp
todo-mcpどちらの方法でも、インストール時に prepare スクリプトがソースからビルドするため、dist/ がコミットされることはありません。Node 20 以降が必要です。
使い方
todo-mcp はデフォルトで HTTP サーバーを起動します。人がターミナルでサーバーを実行するときに便利だからです。MCPクライアントがサブプロセスとして起動する際に必要なstdioで通信したい場合は、MCP_STDIO=1 を設定してください。
MCPクライアントで利用する
{
"mcpServers": {
"todo": {
"command": "npx",
"args": ["-y", "github:adrianhardy/todo-mcp"],
"env": { "MCP_STDIO": "1" }
}
}
}グローバルにインストールした場合、同じ env ブロックで "command": "todo-mcp" になります。
どのファイルを使用するかは作業ディレクトリが決めます。 TODO_FILE はプロセスのcwdを基準に解決され、デフォルトは TODO.md です。プロジェクト内で起動したクライアントは、そのプロジェクトのTODOリストを編集します。サーバーをどこから起動しても共有のリストを使いたい場合は、TODO_FILE に絶対パスを設定してください。
HTTPで利用する
PORT=8080 TODO_MCP_TOKEN=$(openssl rand -hex 32) todo-mcpPOST /mcp- JSON-RPCリクエストGET /mcp- サーバー通知のSSEストリームDELETE /mcp- セッションを終了する
TODO_MCP_TOKEN を設定すると、この3つすべての操作に Authorization: Bearer <token> が必要になります。未設定にすると認証なしで通信でき、これはlocalhostでは問題ありませんが、それ以外の環境では許容できません。
設定
変数 | デフォルト | 意味 |
|
| ストアのパス。cwdから解決される |
| 未設定 |
|
|
| HTTPポート |
| 未設定 | bearerトークン。未設定は認証なし |
.env ファイルがあれば読み込まれます。.env.example を参照してください。
ストレージ
TODO.md はJSONブロブではなくストアです。ファイル自体が記録であり、読み取り可能で、手動編集でき、gitでdiffを取ることができます。
タスクは ## セクションです。サーバーが所有するフィールドは見出し直下のコメントブロックにあり、その下は人間が所有する散文です。
## Feature Idea version two: the new widget which tracks things
<!-- todo
id: feature-idea-version-two
area: inventory
status: next
refs: [./src/do_stuff.ts, ClassName.Method, OtherClassName]
created: 2026-08-19
updated: 2026-08-22
-->
**Next step:** close the ledger. ClassName.Method uses 0.25 and it needs 17.2%.
**Already known:** ...
### Log
- 2026-08-22 Slab_Wall_1x3 not started; parade places 24 of those to every 6 of the 3x3.IDは数字ではなくslugなので、並べ替えや削除があっても保たれます。ファイルの順序が優先順位なので、優先度フィールドはありません。
書き込みは バイト範囲スプライス です。mutationは自分が所有する範囲だけを書き換えます。手書きのテーブル、タブインデント、タスクセクション外の散文は決して再シリアライズされないため、並べ直されたり失われたりすることはありません。ハンドラーはロックにより直列化されています。というのも、read-modify-writeのサイクルが2回交錯すると、もはやファイルを表さないオフセットへスプライスしてしまうからです。
設計
リストは省略表現 —
list_todosは1行のインデックスを返し、タスク本文は返しません。get_todoは1つのセクション全体を返します。qとrefが想定される遷移路で、全件の一覧取得は例外です。捕捉は1フィールドでok — 必須なのは
titleだけ。新しいタスクのステータスはデフォルトでcapturedになります。何かに気づいた瞬間にエリアと次のステップを要求するツールは使用されません。ファイルが役に立つのは、気づいたことをそのまま書き留められる場合だけです。トリアージは後でcapturedをopen/next/parked/somedayへ移動させます。
ステータス値
ステータス | 意味 |
| 未加工・未トリアージ。新規タスクの既定。フィルタなしリストでは非表示 |
| 理解済みの実際の作業 |
| 次に行う |
| 意図的に延期。理由は本文に書く |
| いつかやりたい |
| 完了。記録としてファイルに残る。フィルタなしリストでは非表示 |
ツール
list_todos- 省略インデックス。area・status・ref・q・limitでフィルタget_todo- 1タスクの完全なマークダウン、本文を含むadd_todo- タスクを拾う。必須はtitleのみ。重複の可能性を報告update_todo- 任意のフィールドを変更。渡されたものだけ書き換えるappend_note- 日付入りの箇条書きをタスクのログに追加set_status- タスクをトリアージで進めるremove_todo- タスクとその散文を削除。できればset_status doneを使う
リソース
todos://list- 未完了タスクの1行インデックス
アーキテクチャ
src/todo.ts- マークダウンストア: パース、バイト範囲パッチ、クエリ、重複排除src/server.ts- MCPツール群。pure factoryでimportしても副作用なしsrc/http.ts- Streamable HTTPトランスポート、認証、セッションマップsrc/cli.ts-todo-mcpの実行ファイル。トランスポートを選んで起動する
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage feature requests, votes, roadmaps, and changelogs from any MCP client.
Create, update, and publish changelog entries on your Patchlog changelog from any MCP client.
Project management MCP for AI agents with safe task reads and writes.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/adrianhardy/todo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server