todo-mcp について
Docketは、複数のAIツールやプロジェクトをまたいで作業を記録したい人向けのローカル優先タスクサーバーです。項目をプロジェクト別に整理し、MCPインターフェースにウェブダッシュボード、担当中の追跡、ダイジェスト、自前ホストモードを備えています。
主な機能
- 01MCPホストからタスクを記録・管理
- 02項目をプロジェクト別に自動整理
- 03ワークスペース切り替え付きウェブダッシュボード
- 04担当、完了、変更履歴の追跡
- 05作業ダイジェストの作成と管理
- 06ローカルモードとセルフホストモード
活用シーン
- 01コーディング中にタスクを記録
- 02特定プロジェクトの未完了項目を確認
- 03ダイジェストの項目をエージェントに引き継ぐ
- 04外部の課題やページへのリンクをタスクに付ける
MCP 対応
タスクの作成、絞り込み、編集、担当登録、完了に加え、ダイジェストの公開と取得を行うMCPツールを提供します。READMEにはClaude Code、Codex、Cursor、Windsurf、Claude Desktop、Zed、Warpなどのホストが記載されています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Docket
使っているすべてのAIツールが書き込める、ひとつのリスト。Claude Code、Codex、Cursor、 Warpなど、あらゆるプロジェクトに対応し、チケットにするほどではない作業を記録できます。ローカル優先で、 セルフホスト可能。SaaSアカウントは不要です。
クイックスタート
必要なもの: Node.js 18+と、少なくとも1つのMCPホスト(Claude Code、 Codex、Cursor、Windsurf、Claude Desktop、Zed、Warp)。
npx -y @pasichdev/docket setup
このコマンドは、このマシンで見つかったすべてのホストを設定し、最後に対象のホストを知らせます。その後、エージェントを再起動して、*「todoを追加して:牛乳を買う」*と尋ねてください。エージェントが接続した瞬間に自動で起動したダッシュボード(**http://localhost:8787**)に表示されます。
Claude Codeだけを使い、ほかの場所には何も書き込みたくない場合は、
claude mcp add docket -- npx -y @pasichdev/docketを実行するだけです。
ほかのホストについては、対応ホストをご覧ください。
任意:セッション開始時にプロジェクトで未完了の項目を確認する
npm install -g @pasichdev/docket # the hook runs a command, so it needs one on PATH
docket hook install # then: docket hook doctor
グローバルインストールなしでもhook installを実行できます。この方法では、コマンドをこのdocketのコピーに固定したことが通知されます。一方、短い形式なら、移動や再インストールの後も使えます。また、npxはPATHに何も残しません。
理由
セッション中に浮かんだ考えは、記録する価値はあっても、手間をかけるほどではありません。NotionのテンプレートやGitLabの課題形式、わざわざ考え出さなければならないチケットIDなどは不要です。そのため、今はその考えが消えてしまいます。Docketはそのすべての下支えとなるレイヤーです。どのツールからでも、どのプロジェクトでも、エージェントが入力できる速さで作業を記録し、見合う価値が出た段階でNotion/GitLab/Obsidianに昇格させます。
この領域を占めるサービスはほかになく、それは偶然ではありません。AnthropicはClaude CodeをCursorと連携させず、CursorもCodexと連携させません。各ベンダーは自社の閉じたループを最適化します。ツール同士の「間」の領域は、構造上、誰のものでもありません。
1 つのリストで、複数のプロジェクトを管理
Docket は、各項目を自動的にキャプチャしたプロジェクトの下に保存します。エージェントが実行されている場所の git リモートからプロジェクトを特定するため、プロジェクトを入力する必要はなく、エージェントが覚えておく必要もありません。
~/work/backend claude-code, codex ─┐
~/side/tracker claude-code ─┼──▶ docket ──▶ one list, three scopes
~/side/notes codex, warp ─┘
~/work/backendのtodo_listには、3 つすべてのプロジェクトではなく、そのプロジェクトの未完了項目だけが 1 行ずつコンパクトに表示されます。- Web ダッシュボードには、プロジェクトごとの未完了項目数を表示するワークスペース切り替え機能があります。
- プロジェクトのコンテキストがない項目は 未分類 に保存され、推測で振り分けられることなく、常に表示されます。
パスではなく git リモート を使うため、ノート PC の ~/src/backend とデスクトップの /work/backend にクローンした同じリポジトリは、1 つのワークスペースとして扱われます。これは、同期があるからこそ重要です。完全な解決順序と .docket.json による上書きについては、docs/workspaces.md をご覧ください。
node docs/assets/demo-seed.mjs でこれらを再生成できます。表示されているワークスペースを構築するため、実際のダッシュボードをそのまま写した画像を保てます。
2.x からのアップグレード
既存の項目がある場合は、アップグレードする前にお読みください。
3.0 は初回実行時に、ストアのデータ形式を v7 から v8 に自動的に移行します。移行自体は安全で、リスクではありません。その後のダウングレードがリスクです。
docket 2.3.1 はストアを独自の v7 形式で書き込みます。v8 で追加されたフィールドを認識しないため、再インストール後に初めて書き込むと、すべての項目からそれらのフィールドが警告なしに削除されます。エラーは発生せず、その後再びアップグレードすると新しい連番が割り当てられ、ペアリング済みのデバイスが想定する番号と一致しなくなります。2.3.1 は公開済みで修正できないため、3.0 では、アップグレード前のストアのコピーを保持することで、できる限りの保護を行います。
~/.docket/todos.v7-pre-upgrade.enc
これは v8 への最初の書き込み前に一度だけ作成され、上書きされることはありません。作成時の実行で、アップグレードによって保存先が表示されます。
2.x に戻す場合は、まず復元してください。
docket restore --from-v7 # puts the v7 store back; moves the v8 one aside
npm install -g @pasichdev/[email protected]
必ずこの順序で実行してください。restore --from-v7 は何も削除しません。v8 のストアは別名に変更して退避されるため、後から再びアップグレードできます。
ポータブルなコピーも必要な場合は、アップグレード前に docket backup ./pre-v3.backup を実行すると、ID とペアリング済みのピアも含むバックアップを作成できます。
置き換えるのではなく、橋渡しする
Docket は、作業をいつまでも置いておく場所ではありません。作業がチケットに値するかどうかがわかる前に、まず受け止める場所です。ほとんどの項目は手動でクローズされ、残りは次の段階へ進みます。
sourceUrl は双方向の橋渡しになります。項目が URL のあるもの、たとえば GitLab のイシュー、Notion のページ、Obsidian の共有リンク、Slack のスレッド、GitHub の PR に対応する場合は、いつでも設定してください。カードからその項目に直接移動できるクリック可能なリンクが表示されます。
GitHub Issues をそのまま使わないのはなぜですか? イシューを作るには、読者に合わせたタイトルを考え、リポジトリを選び、ラベルを管理する必要があるからです。また、別のプロジェクトについて考えを巡らせている最中に、Cursor のセッションからイシューを作成することはできません。Docket なら、すでに開いているツールから一文で済みます。項目が重要だとわかったらイシューにし、
sourceUrlに移動先を記録します。
対応ホスト
どの MCP ホストでも動作します。ツールはどこでも同じです。
{
"mcpServers": {
"docket": { "command": "npx", "args": ["-y", "@pasichdev/docket"] }
}
}
| ホスト | 設定ファイル |
|---|---|
| Claude Code | claude mcp add docket -- npx -y @pasichdev/docket |
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)/%APPDATA%\Claude\claude_desktop_config.json(Windows) |
| Cursor | .cursor/mcp.json またはグローバル MCP 設定 |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| Codex | ~/.codex/config.toml(mcp_servers) |
| Zed | ~/.config/zed/settings.json — context_servers を使用します。下記を参照してください。 |
Zed の設定形式は少し異なります
{
"context_servers": {
"docket": { "command": { "env": {}, "path": "npx", "args": ["-y", "@pasichdev/docket"] } }
}
}
唯一のフック
Claude Code では、これに加えて SessionStart フックも利用できます。これだけです。
docket hook install # writes .claude/settings.json (--global for user-wide)
docket hook doctor # proves it fires, and reports measured latency
docket hook uninstall # removes only the entries docket owns
セッションが始まると、そのプロジェクトで開いている項目が挿入されます。簡潔で、最大 7 件、120 トークン未満です。プロジェクトで何も開いていない場合は、何も表示されません。フックの役割は継続性を保つことだけです。ターミナルに戻ると、すでにスレッドがそこにあります。
無効にしたい場合は? export DOCKET_HOOKS=off を実行すると、設定を編集したりアンインストールしたりせずに、すぐに無効になります。docket hook doctor は実際の往復時間を測定し、気づくほど遅い場合はその旨を伝えます。
常にフェイルオープンです。 サーバーが起動していない、リクエストがタイムアウトした、レスポンスが不正、DOCKET_HOOKS=off のいずれの場合も、終了コード 0 で何も出力しません。ツール自体が壊れたときにセッションの質を下げるツールはアンインストールされ、そうなれば誰の役にも立ちません。docket hook doctor は設定されたコマンドを実際に実行し、セッションで実際に表示される内容を報告します。そのため、フックが一度も実行されない場合も、ただ黙っているだけでなく把握できます。
PreToolUse も、ブロック機能も、他のホスト向けの機能もありません。このリリースにおけるフックの役割は、強制ではなく継続性の維持だけです。
Claude Code 以外のエージェント向けガイダンス
ツールはどこでも動作しますが、ガイダンスは Claude Code プラグインとして提供されます。他のエージェントで使う場合は、skills/docket/SKILL.md のうち、--- のフロントマターより後の内容を、エージェントが読み込むファイルにコピーしてください。Codex の AGENTS.md、Cursor の .cursor/rules/docket.mdc、Windsurf の .windsurfrules、Claude Desktop の CLAUDE.md、または Warp のカスタム指示設定などが該当します。
/plugin marketplace add pasichDev/docket
/plugin install docket@docket
ツール
| ツール | 説明 |
|---|---|
todo_add(title, description?, list?, category?, priority?, dueDate?, sourceUrl?, workspace?) | 項目を追加します。現在のプロジェクトに自動で登録されます。 |
todo_list(filter?, list?, category?, agent?, session?, inProgress?, workspace?, verbose?, limit?, offset?) | 現在のプロジェクトに絞り込み、デフォルトでは簡潔な形式で表示します。すべてを対象にするには workspace:"*" を指定します。 |
todo_edit(id, ...) | ID を指定して、任意のフィールドを編集します。省略可能なフィールドをクリアするには "" を渡します。 |
todo_claim(id) / todo_release(id) | 項目を作業中にするか、割り当てを解除します。15 分後に自動で期限切れになります。 |
todo_complete(id) | 完了としてマークします(割り当ても解除されます)。 |
todo_history(id) | 1 件の項目の変更履歴をすべて表示します。 |
todo_delete(id) | 項目を完全に削除します。 |
todo_version() / todo_check_update() | データ形式のバージョンを表示します。npm のバージョン確認は読み取り専用です。 |
digest_publish(title, summary, sections?, metrics?, highlights?, sources?, windowFrom?, windowTo?) | GitLab/GitHub/Notion/git からエージェントがまとめたダイジェストを保存します。詳しくは ダイジェスト を参照してください。 |
digest_list(limit?) / digest_get(id) / digest_delete(id) | 最近のダイジェストの一覧表示、1 件の全内容の取得、1 件の削除(同期済みのすべての場所から削除)を行います。 |
digest_take(item) | 項目 7(または D-7K2F9A/7)を呼び出し元のエージェントに引き渡します。概要と、そのエージェント名で割り当てられた docket タスクが渡されます。 |
digest_seen() | ユーザーが確認済みとマークした項目です。次のダイジェストではこれらが除外されます。 |
フィールドとワークフローの完全なリファレンス:skills/docket/SKILL.md。
ダイジェスト
エージェントに 「ダイジェストを作成して」(または 「зроби дайджест」)と頼んでください。docket:digest
スキルは、マージリクエスト、プルリクエスト、Notion チケット、ローカルのコミット、docket アイテムを読み取り、すべてのステータスをそれぞれのソースで確認して、結果を公開します。公開されたダイジェストはダッシュボードのホームページになります。対応が必要なもの、リリースされたもの、レビュー中のもの、停滞しているものが表示され、各アイテムから元の場所に戻ったり、ワンクリックでタスクにしたりできます。
Docket が GitLab、GitHub、Notion の認証情報を保持することはありません。エージェントはすでに利用している CLI や MCP サーバーを使ってそれらを読み取り、Docket は自身が書き込んだものだけを保持します。Local Mode ではこのマシン上に保存され、ペアリング済みデバイスと同期します。Self-hosted Mode では Docket Server に保存され、すべてのクライアントで共有されます。エージェントがアクセスできるものなら、Jira、Linear、Sentry の MCP サーバー経由のデータ、Obsidian の保管庫、プロジェクトのドキュメントフォルダーなどもソースとして追加できます。また、ダイジェストを仕事、学習、サイドプロジェクトなどのグループに分けることもできます。読み取り対象は各マシンの ~/.config/docket/digest.json で設定します(docket:digest-setup スキルがこのファイルを書き込みます)。ダイジェスト自体はペアリング済みデバイスと同期されます。詳細:docs/digests.md。
- 前回のダイジェストからの変更点は、公開時に計算されます。新しいアイテムやステータスの変更、表示対象から外れたアイテムなどを、エージェントの記憶に頼らず確認できます。
- **担当者ごとの作業:**各アイテムに担当者(あなた、チームメイト、エージェント)を指定できます。担当者別を選ぶと、担当者ごとの次のステップが番号付きで表示されます。
- **重要な項目は詳しく:**通常の項目は1行で表示され、ブロック中、失敗中、または古くなった項目には、実際の原因と次のステップに関するエージェントの分析が表示されます。
- **番号で引き継ぎ:**任意のエージェントに 「7番を引き受けて」 と伝えると、
digest_takeが概要と、そのエージェント名義で取得したタスクを渡します。エージェントは理由を添えてタスクを完了します。 - 確認済みにすると、ステータスが変わるまでアイテムが非表示になります。確認済みの印はデバイス間で同期されます。
- **自由にカスタマイズ:**グループ、担当者、プリセット(「仕事のダイジェスト」、「今週のダイジェスト」)、環境チェック、MCP 経由のメールやチャット、毎日の実行などを設定できます。スキルは、あなたが繰り返し修正する内容を簡潔なメモとして記録します。
CLI
docket list [-w <project>] [--all] What's open, scoped like the MCP default
docket workspaces Projects, with open counts and last activity
docket sessions Agent sessions open right now, and where
docket stats | export | import Inspection and round-tripping
docket hook install | uninstall | doctor Claude Code SessionStart hook
docket serve | pair | devices | status Self-hosted server & devices
docket backend use <url> | localize Switch deployment mode
docket backup <file> | restore <file> Encrypted full-device backup
docket web Ensure the Web UI is running
docket check-update | update Version management
docket help で、常に最新の正式な一覧を確認できます。完全なリファレンス:
docs/cli.md。
デプロイモード
| Local Mode | Self-hosted Mode | |
|---|---|---|
| デフォルト? | はい — 設定不要 | オプトイン |
| 状態の保存場所 | このマシン(~/.docket) | 実行する Docket Server |
| セットアップ | docket setup | docket setup で「Self-hosted」を選択するか、docket pair <url> を実行 |
| Web UI | このマシン上で実行 | Docket Server が提供 |
| 複数マシン | 任意のピアツーピア同期で自分のデバイス間を同期 | ペアリング済みのすべてのデバイスが1台のサーバーと通信 |
| 取得 | 助言的 — 取得済みの項目が他者に引き継がれることがあり、ピアツーピア同期では最大1回の取得間隔分、古い状態になる可能性があります | アトミック — 競合する取得は 409 となり、単一の権限元によって決定されます |
| 適した用途 | 1台のマシン、または自分で使う数台のマシン | 常時稼働の Raspberry Pi、ミニ PC、NAS、ホームサーバー、VPS |
| 接続が切れた場合 | 該当なし | すべての読み取り、書き込み、取得が明確に失敗します。ローカルに黙ってフォールバックすることはありません |
どちらのモードも同じパッケージからインストールでき、同じ MCP ツールを提供します。Self-hosted の完全なセットアップ方法と、意図的に対応していない機能については、以下をご覧ください。
docs/self-hosting.md。
**ピアツーピア同期は v3.0 で非推奨になりました。**引き続き使用でき、このリリースで削除される機能もありません。ただし、15秒間隔で取得するため、ピアツーピア同期では取得は助言的なものとなり、アトミックな保証は実現できません。複数マシンでの利用には Self-hosted Mode が推奨されます。詳しくは
docs/p2p-sync.mdをご覧ください。
Web UI
リアルタイムで読み書きできるダッシュボードです。Local
Mode ではデフォルトで http://localhost:8787(DOCKET_WEB_PORT で変更可能)、Self-hosted Mode では Docket Server 自身の URL を使用します。ホームページ(/)では、最新のダイジェストとタスクリストをひと目で確認できます。タスクリスト自体は /tasks にあります。プロジェクトごとのオープン数を表示するワークスペース切り替え機能、アクティブなセッションパネル、ライト/ダークテーマ、検索、並べ替え、インライン編集、削除の取り消し、画面サイズに応じたモバイルレイアウトを備えています。
Local Mode では自動的に起動します。まだリッスンしていない場合、最初に接続した MCP クライアントがバックグラウンドで切り離して起動します。更新は Server-Sent Events(/api/events)経由でリアルタイムに配信され、ポーリングは行いません。
LAN 上の別のデバイス(スマートフォン、タブレット)から開くには、まずホストマシンで明示的に Viewer Gate の承認を行う必要があります。詳しくはセキュリティをご覧ください。
セキュリティ
Docket には4 つの個別の脅威モデル(ローカルストレージの暗号化、P2P 同期、LAN Viewer Gate、セルフホストのクライアント/サーバー間通信)があり、あるモデルでの保証が別のモデルにも適用されるわけではありません。基本事項は次のとおりです。
- 保存データ:
todos.json.encとhistory.json.encは、ローカルで生成されたキーを使って AES-256-GCM で暗号化されます。これにより偶発的な漏えいは防げますが、ユーザーアカウントへの読み取りアクセスを持つ人からデータを守るものではありません。 - P2P 同期:X25519 ECDH + HKDF でペアごとに導出したシークレット、リプレイ保護付きの HMAC 署名リクエスト、AES-256-GCM で暗号化されたレスポンスを使用します。
- LAN Viewer Gate:ホストマシン以外のブラウザーでダッシュボードを開くには、事前に人による明示的な承認が必要です。ただし、そのローカルトラフィック自体は TLS ではなくプレーン HTTP です(見落としではなく、文書化されたトレードオフです)。
- セルフホストモード:タイムスタンプと nonce によるリプレイ保護付きの、デバイスごとの HMAC 署名を使用します。サーバーの運用者自身に対してエンドツーエンド暗号化されるわけではありません。
- 更新:各リリースは Sigstore による npm provenance とともに公開され、
npm audit signaturesで検証できます。
脅威モデル、正確な暗号プリミティブと制限事項については、**docs/security.md**をご覧ください。
データと暗号化
正本データは、Local Mode ではこのマシン上(~/.docket)、Self-hosted Mode では Docket Server 上に保存されます。いずれの場合も、お客様が管理するインフラストラクチャ上に保存され、ホスト型アカウントには保存されません。
todos.json.enc— ストア。AES-256-GCM で暗号化されますhistory.json.enc— 完全な監査ログ。ストアの書き込みパスとは分離して保持されますdigests.json.enc— ダイジェスト。AES-256-GCM で暗号化され、専用の同期カーソルを持ちますkey— ローカルで生成された 256 ビットキー。chmod 600device.json— このマシンの ID、名前、X25519 アイデンティティキーペアpeers.json.enc— ペアリング済みの P2P デバイスと、導出された同期シークレットsessions.json— 現在開いているエージェントセッション(プレーン形式、ローカル専用で、同期されません。コンテンツではなくプロセスメタデータを保持します)
ディレクトリの場所を変更するには DOCKET_DATA_DIR を設定してください。既存のストアを推測で分割するのではなく、起動時にそのような状態を検出すると処理を拒否します。
バックアップと更新
docket backup <file> は、データディレクトリ全体をパスワード保護された単一のファイルにまとめます(AES-256-GCM、scrypt で導出したキーを使用)。docket restore は、ディスク上のデータを上書きせずに別名へ変更して退避してから、バックアップを書き戻します。
docket check-update # read-only — reports current vs. latest
docket update # checks, confirms, installs, self-tests, rolls back on failure
テスト
npm test
完全な node:test スイートを実行します。同期の配信とページネーション、実際に競合が発生する状況でのプロセス間ファイルロック、ワークスペースの解決とスコープ設定、セッションレジストリ、エージェント向けトークン予算、フックのフェイルオープン動作をテストします。
ライセンス
MIT — LICENSEをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
