todo-mcp
This server provides a shared, encrypted TODO list with MCP tools, a real-time web dashboard, claims, history, and optional multi-device sync.
Add todos to the
todoorbackloglist with optional description, category, priority, due date, and source URL.Edit existing todos by id (title, description, category, priority, due date, list).
Claim/release items to show who is actively working on them; claims auto-expire.
List and filter todos by status, list, category, agent, session, or in-progress state.
Complete or permanently delete todos.
View full change history per item (who did what and when).
Check server version and start time to verify the running process.
Real-time web dashboard (SSE) at http://localhost:8787 with search, sort, inline edit, undo-delete, and mobile-friendly UI.
Secure LAN Viewer Gate for phone access with host approval.
Encrypted at-rest storage, CLI export/import in JSON/Markdown, and optional device pairing for multi-machine sync.
Allows Warp's AI agent to participate in the same shared todo/workspace, adding, claiming, completing, and tracking work items alongside other connected agents.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@todo-mcpadd a todo: review pull request by Friday"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Docket
One list every AI tool you use can write to — Claude Code, Codex, Cursor, Warp — across every project, before the work is worth a ticket. Local-first, self-hostable, no SaaS account.
A thought that shows up mid-session is worth capturing but not worth the ceremony: a Notion template, a GitLab issue format, a ticket id you have to invent. So today it evaporates. Docket is the layer underneath all of that — work lands here at the speed an agent can type, from any tool, in any project, and graduates to Notion/GitLab/Obsidian when it's earned it.
Nobody else occupies this space, and it isn't an accident: Anthropic will not integrate Claude Code with Cursor, and Cursor will not integrate with Codex. Every vendor optimises its own closed loop. The space between the tools is structurally nobody's.
One list, many projects
Docket files every item under the project it was captured in, automatically — resolved from the git remote of wherever the agent is running. You never type it, and no agent has to remember to.
~/work/backend claude-code, codex ─┐
~/side/tracker claude-code ─┼──▶ docket ──▶ one list, three scopes
~/side/notes codex, warp ─┘todo_listin~/work/backendshows that project's open items, not all three projects' — compact, one line each.The web dashboard has a workspace switcher with per-project open counts.
Items with no project context land under Unfiled and stay visible, never guessed at.
Using the git remote rather than the path means the same repo cloned to
~/src/backend on a laptop and /work/backend on a desktop is one
workspace — which matters precisely because sync exists. Full resolution
order and the .docket.json override: docs/workspaces.md.
Related MCP server: sprinter
Quick start
You need: Claude Code (or another MCP host)
and Node.js 18+ (node --version; get it from nodejs.org).
npx -y @pasichdev/docket setup # one shared data dir, detected MCP hosts configured
claude mcp add docket -- npx -y @pasichdev/docketRestart Claude Code and ask it "add a todo: buy milk". The web dashboard is at http://localhost:8787 — it started itself the moment the first client connected.
Optionally, to see what's open in a project when a session starts:
npm install -g @pasichdev/docket # the hook runs a command, so it needs one on PATH
docket hook install # then: docket hook doctorhook install works without the global install too — it pins the command to
this exact copy of docket and tells you it did — but the short form survives
moving or reinstalling, and npx leaves nothing on PATH.
Using Claude Desktop, Cursor, Windsurf, Zed, or Warp instead? Same MCP config shape — see Supported hosts.
Upgrading from 2.x
Read this before you upgrade if you have existing items.
3.0 migrates your store from data format v7 to v8 on first run, automatically. The migration itself is safe and is not the risk. Downgrading afterwards is.
docket 2.3.1 writes the store from its own v7 shape: it has never heard of the fields v8 adds, so its very first write after a reinstall silently strips them from every item. Nothing errors, and a later re-upgrade hands out fresh sequence numbers that no longer mean what your paired devices think they mean. 2.3.1 is published and cannot be patched, so 3.0 defends the only way it can — by keeping a copy of your pre-migration store:
~/.docket/todos.v7-pre-upgrade.encIt is written once, before the first v8 write, and never overwritten. The upgrade prints its path on the run that creates it.
To go back to 2.x, restore it first:
docket restore --from-v7 # puts the v7 store back; moves the v8 one aside
npm install -g @pasichdev/docket@2.3.1In that order. restore --from-v7 deletes nothing — your v8 store is renamed
aside, so you can come forward again later.
If you would rather have a portable copy as well, docket backup ./pre-v3.backup
before upgrading gives you one that includes your identity and paired peers.
Bridges, not replaces
Docket is deliberately not where work lives forever. It's where work lands first, before anyone knows whether it deserves a ticket. Most of it doesn't and gets closed by hand; the rest graduates.
sourceUrl is the bridge in both directions. Set it whenever an item maps to
something with a URL — a GitLab issue, a Notion page, an Obsidian
share link, a Slack thread, a GitHub PR — and the card carries a clickable
link straight back to it.
Why not just use GitHub Issues? Because an issue costs a title you have to phrase for an audience, a repo you have to pick, and labels you have to maintain — and because your Cursor session can't write one for you while you're mid-thought in a different project. Docket costs one sentence, from whichever tool you already have open. When the item turns out to matter, it becomes an issue, and
sourceUrlremembers where it went.
Supported hosts
Any MCP host works — the tools are identical everywhere:
{
"mcpServers": {
"docket": { "command": "npx", "args": ["-y", "@pasichdev/docket"] }
}
}Host | Config file |
Claude Code |
|
Claude Desktop |
|
Cursor |
|
Windsurf |
|
Codex |
|
Zed |
|
{
"context_servers": {
"docket": { "command": { "env": {}, "path": "npx", "args": ["-y", "@pasichdev/docket"] } }
}
}The one hook
Claude Code additionally gets a SessionStart hook, and only that one:
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 ownsWhen a session starts it injects the items open in that project — compact, at most 7, under 120 tokens. Nothing at all when the project has nothing open. Its whole job is continuity: you come back to a terminal and the thread is already there.
Don't want it? export DOCKET_HOOKS=off disables it immediately, without
editing any config or uninstalling anything. docket hook doctor measures the
real round trip and says so if it is slow enough to notice.
It fails open, always. Server not running, request timed out, malformed
response, DOCKET_HOOKS=off — every one of those exits 0 and prints nothing.
A tool that degrades your session when the tool itself is broken gets
uninstalled, at which point it helps nobody. docket hook doctor runs the
configured command for real and reports what a session would actually see, so
a hook that never fires is visible rather than merely silent.
No PreToolUse, no blocking, no other hosts — the hook's only job in this
release is continuity, not enforcement.
Guidance for non-Claude-Code agents
The tools work everywhere; the guidance ships as a Claude Code plugin. For
any other agent, copy skills/docket/SKILL.md
(everything below the --- frontmatter) into whichever file your agent reads
— AGENTS.md for Codex, .cursor/rules/docket.mdc for Cursor,
.windsurfrules for Windsurf, CLAUDE.md for Claude Desktop, or Warp's
custom-instructions setting.
/plugin marketplace add pasichDev/docket
/plugin install docket@docketTools
Tool | Description |
| Capture an item. Filed under the current project automatically. |
| Scoped to the current project and compact by default. |
| Edit any subset of fields by id. Pass |
| Mark an item in progress, or drop the claim. Auto-expires after 15 minutes. |
| Mark done (also clears any claim). |
| Full change log for one item. |
| Permanently remove an item. |
| Data-format version; read-only npm version check. |
Full field and workflow reference: skills/docket/SKILL.md.
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 managementdocket help prints the canonical, always-current list. Full reference:
docs/cli.md.
Deployment modes
Local Mode | Self-hosted Mode | |
Default? | Yes — zero config | Opt-in |
Where state lives | This machine ( | The Docket Server you run |
Setup |
|
|
Web UI | Runs on this machine | Served by the Docket Server |
Multi-machine | Optional P2P sync between your own devices | Every paired device talks to one server |
Claims | Advisory — a claim can be taken over, and across P2P it can be up to one pull interval stale | Atomic — a racing claim gets a |
Good for | A single machine, or a few you personally use | An always-on Raspberry Pi, mini PC, NAS, home server, or VPS |
If the connection drops | N/A | Every read/write/claim fails clearly — never a silent local fallback |
Both modes install from the same package and expose the same MCP tools. Full
self-hosted setup and what it deliberately doesn't do:
docs/self-hosting.md.
P2P sync is deprecated as of v3.0. It still works, and nothing is removed in this release — but its 15-second pull interval means claims are advisory across it, so it cannot deliver an atomic guarantee. Self-hosted Mode is the supported multi-machine path. See
docs/p2p-sync.md.
Web UI
A real-time read/write dashboard — http://localhost:8787 by default in Local
Mode (override with DOCKET_WEB_PORT), or the Docket Server's own URL in
Self-hosted Mode. Workspace switcher with per-project open counts, an active-
sessions panel, light/dark theme, search, sort, inline edit, undo-delete,
responsive mobile layout.
In Local Mode it starts itself: the first MCP client to connect spawns it
detached in the background if nothing's listening yet. Updates push live over
Server-Sent Events (/api/events), no polling.
Opening it from another device on your LAN (phone, tablet) requires an explicit Viewer Gate approval from the host machine first — see Security.
Security
Docket has four separate threat models (encrypted local storage, P2P sync, the LAN Viewer Gate, and self-hosted client/server traffic) — a guarantee from one does not apply to another. The basics:
At rest:
todos.json.encandhistory.json.encare AES-256-GCM encrypted with a locally generated key — protects against accidental exposure, not against someone with read access to your own user account.P2P sync: X25519 ECDH + HKDF-derived per-pair secrets, HMAC-signed requests with replay protection, AES-256-GCM encrypted responses.
LAN Viewer Gate: any browser other than the host machine needs explicit human approval before it can open the dashboard; that local traffic itself is plain HTTP, not TLS (documented tradeoff, not an oversight).
Self-hosted mode: per-device HMAC signatures with timestamp+nonce replay protection. The server is not end-to-end encrypted against its own operator.
Updates: every release is published with Sigstore-backed npm provenance, verifiable with
npm audit signatures.
Full threat model, exact primitives and limitations:
docs/security.md.
Data & encryption
Authoritative data lives on this machine (~/.docket) in Local Mode, or on
the Docket Server in Self-hosted Mode — either way on infrastructure you
control, never a hosted account.
todos.json.enc— the store, AES-256-GCM encryptedhistory.json.enc— the full audit log, kept off the store's write pathkey— a locally generated 256-bit key,chmod 600device.json— this machine's id, name, and X25519 identity keypairpeers.json.enc— paired P2P devices and their derived sync secretssessions.json— which agent sessions are open right now (plain, local-only, never synced; it holds process metadata, not content)
Set DOCKET_DATA_DIR to relocate the directory; startup refuses to silently
split an existing store rather than guessing.
Backup & updating
docket backup <file> bundles the whole data directory into one
password-protected file (AES-256-GCM, scrypt-derived key); docket restore
writes it back, renaming what's on disk aside rather than overwriting.
docket check-update # read-only — reports current vs. latest
docket update # checks, confirms, installs, self-tests, rolls back on failureTesting
npm testRuns the full node:test suite — sync delivery and pagination, the
cross-process file lock under real contention, workspace resolution and
scoping, the session registry, agent-facing token budgets, and the hook's
fail-open behaviour.
License
MIT — see LICENSE.
Available Tools
9 toolstodo_addAdd todoA
Add a new item to the shared global TODO list. Use list="backlog" for things to park and not hold in context (deferred findings, low-priority follow-ups); list="todo" (default) for near-term actionable items.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | Which list this item belongs to | todo |
| title | Yes | Short one-line title/summary | |
| dueDate | No | Optional due date, YYYY-MM-DD | |
| category | No | Optional free-form category/tag, e.g. a ticket id like "VPQ-834" | |
| priority | No | Optional priority | |
| description | No | Optional longer body text — details, context, links |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations correctly indicate a non-read-only, non-destructive write operation, and the description aligns with that. The description adds valuable context beyond annotations by noting the list is 'shared global', which implies that adding affects a common resource visible to others. Minor gap: no mention of what happens on success or failure (e.g., return value), but this is relatively minor for a non-destructive add operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler. The core action is front-loaded, and the key usage distinction follows immediately. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters and full schema coverage, the description covers the major decision point (which list to use). The only notable gap is that the description doesn't mention the return value (e.g., created item, ID, confirmation), which could matter since there is no output schema. Overall, it's still complete enough for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description goes beyond the schema by giving each list meaningful purpose ('park' versus 'near-term actionable'), which is semantic guidance the schema doesn't provide. This additional distinction justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Add a new item') on a specific resource ('the shared global TODO list'). It clearly distinguishes this from siblings like todo_edit and todo_delete, and it even clarifies the semantics of the two lists, leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides exemplary routing guidance: explicitly states when to use list='backlog' (deferred findings, low-priority follow-ups) versus list='todo' (near-term actionable items). This directly helps an agent decide which list to use, going beyond what the schema's default value alone would convey.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_claimClaim todoA
Mark an item as actively being worked on by you (the calling agent). Advisory, not a lock — check todo_list(inProgress: true) before starting new work to avoid duplicating another agent's active item. Call todo_release or todo_complete when you stop.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The todo id, e.g. 3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond annotations by stating that the claim is advisory, not a lock, and by specifying the actions that should follow. Combined with readOnlyHint=false and destructiveHint=false, the agent understands this is a non-destructive state-change operation. It does not detail edge cases like claiming an already-claimed item, but the advisory framing mitigates that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and every sentence adds value. It fits the essential guidance into two sentences without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation tool, the description covers the action, the advisory nature, the pre-check workflow, and the follow-up calls. There is no output schema, so the description could theoretically mention the return value, but that is not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the id parameter is adequately described as 'The todo id, e.g. 3'. The description does not add extra parameter semantics, but none are needed because the schema already handles the documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair: 'Mark an item as actively being worked on by you' clearly identifies what the tool does and which resource it affects. It further distinguishes itself from related operations by calling out todo_release and todo_complete, and by emphasizing that claiming is advisory rather than a lock.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear operational context: check todo_list with inProgress:true before starting new work to avoid duplicating someone else's active item, and call todo_release or todo_complete when stopping. It does not enumerate all alternatives or explicitly state when not to use the tool, but the workflow guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_completeComplete todoA
Mark a todo as done by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The todo id, e.g. 3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the operation is neither read-only nor destructive; the description adds that the todo transitions to a 'done' state. It does not disclose whether completing is idempotent, reversible via todo_release, or what happens if the id is missing or invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single action-first sentence with no filler. It delivers the core operation and the required identifier without wasting tokens.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter mutation with annotations covering safety, the description is mostly sufficient, but it does not clarify the todo lifecycle relationship to release/claim or the result of successful completion. Given the sibling set, a short lifecycle note would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'id' already has a complete schema description including an example, and the tool description only repeats the concept of 'by id'. With schema coverage at 100%, the baseline of 3 applies without needing additional explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('mark'), the resource ('a todo'), and the target state ('done'), and identifies the selection key ('by id'). This clearly sets it apart from siblings like todo_delete, todo_edit, and todo_claim.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use todo_complete versus alternatives. With eight siblings including todo_release and todo_claim, the description does not state conditions or exclusions, such as not for re-opening or not for editing details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_deleteDelete todoADestructive
Permanently remove a todo by id.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The todo id, e.g. 3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds the nuance of permanence, but it does not disclose side effects like whether related history or version records are affected, or whether any preconditions apply. This is acceptable given the annotation coverage, but not richly informative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with no filler. The core action and object are front-loaded, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive operation with annotations already flagging the destructive nature, the description is nearly complete. It clearly states the input requirement and behavior. The only minor gap is not mentioning what the operation returns or whether it is reversible beyond 'permanently,' but this does not block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the sole parameter 'id' is already documented with an example. The description's phrase 'by id' adds no semantic information beyond the schema. Baseline of 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('remove'), a resource ('todo'), and the exact scope ('by id'). The word 'permanently' clearly distinguishes this from state-changing siblings like todo_complete or todo_release, which alter status rather than delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over alternatives, such as whether todo_complete or todo_release would be more appropriate for non-destructive status changes. The description implies only that this is for permanent removal, but it does not explicitly rule out or redirect to any sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_editEdit todoA
Edit an existing item's title/description/category/priority/dueDate/list by id. Only fields you pass are changed. Pass an empty string ("") for description/category/priority/dueDate to clear that field.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The todo id, e.g. 3 | |
| list | No | Move to this list | |
| title | No | New title | |
| dueDate | No | New due date YYYY-MM-DD, or "" to clear | |
| category | No | New category, or "" to clear | |
| priority | No | New priority, or "" to clear | |
| description | No | New description, or "" to clear |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only state readOnlyHint=false and destructiveHint=false, so they do not convey how the edit behaves. The description adds valuable non-obvious behavior: updates are partial rather than full replacements, and passing """ clears fields instead of setting invalid values. It does not cover invalid id or response behavior, but the key side effects are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the entire definition: the first front-loads the core purpose and fields, the second captures the update and clearing semantics. There is no filler or redundant elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter partial update with full schema coverage and annotations, the description plus schema is enough for an agent to select and invoke the tool correctly. It could additionally mention return value or error behavior for non-existent ids, but those are minor gaps for a simple edit operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter, including the empty-string clear behavior, is documented in the schema itself. The description provides a useful high-level summary but does not add per-parameter meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Edit'), a resource ('an existing item'), and the exact affected fields (title/description/category/priority/dueDate/list) by id. This sharply distinguishes it from sibling tools like todo_add (creation) and todo_delete (destruction) without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when to use this tool: editing existing todos by id. It also adds essential partial-update guidance ('Only fields you pass are changed') and explain how to clear fields with empty strings. It does not explicitly name when not to use it relative to siblings, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_historyTodo historyARead-only
Show the change history (create/edit/claim/release/complete) for one item, who made each change and when.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The todo id, e.g. 3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable context beyond annotations by specifying exactly which change events are included and indicating the returned data (who made the change and when), which is useful given there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the main purpose and supplies the key details (change types, actor, timestamp) without any filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with a single integer parameter, the description is complete: it explains what the tool shows, what events are included, and what information is returned. The lack of an output schema is compensated by the description's clarity about the return contents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter already has a clear description ('The todo id, e.g. 3'). The tool description adds no new parameter-level meaning beyond implying that the id refers to 'one item,' so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Show') and a clear resource ('change history for one item'), and it enumerates the change types (create/edit/claim/release/complete). This makes it easy to distinguish from sibling tools like todo_add or todo_edit, which perform mutations rather than display history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for one item' clearly signals that this tool is for per-item history, not for listing todos or viewing aggregate state. It does not explicitly name alternatives or exclusion criteria, but the context is clear enough for an agent to select it appropriately among the sibling mutation and list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_listList todosARead-only
List items from the shared global TODO list, formatted as a checklist.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | Restrict to the todo list, the backlog, or both (default) | all |
| agent | No | Restrict to items added by this MCP client name, e.g. "claude-code" | |
| filter | No | Which todos to return | open |
| session | No | Restrict to items added during this connection's session token (see the 'via' suffix on listed items) | |
| category | No | Restrict to items with this exact category/tag | |
| inProgress | No | If true, restrict to items currently claimed via todo_claim (see the '▶working' suffix) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful context beyond that: the list is 'shared' and 'global', clarifying scope, and 'formatted as a checklist' gives the agent an idea of the return presentation despite no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that states the resource, the action, and the output format with no filler. Every element earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no required parameters and a rich schema, the description covers the shared-global nature and checklist output. Without an output schema, more detail about returned fields could help, but this is adequate for correct invocation and interpretation of the core intent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are already documented with defaults and enum constraints. The description adds no additional parameter-level meaning, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a clear verb ('List') and resource ('items from the shared global TODO list'), and adds output formatting ('as a checklist'). It distinguishes this as the read-only listing tool among sibling mutation tools like todo_add and todo_edit, though it does not explicitly name a sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for viewing items on the shared TODO list, and the sibling names make it obvious this is the read path. However, it does not state when to prefer todo_list over todo_history or mention exclusions such as 'use todo_history for past versions'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_releaseRelease todoA
Clear the in-progress claim on an item without completing it (e.g. you're pausing this work).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The todo id, e.g. 3 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly states the behavioral effect: the claim is cleared and the item is not completed. This adds useful context beyond the annotations, and it does not contradict readOnlyHint=false or destructiveHint=false. It also helps the agent understand the tool is a state change but non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence delivers the core action, the crucial exclusion, and a concrete use case. There is no wasted text and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, this description is largely sufficient: it names the action, gives an example scenario, and prevents confusion with completion. It does not mention prerequisites like whether the item must already be claimed, but that is a minor gap for such a simple operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% parameter description coverage for 'id', so the description does not need to add parameter-level detail. The description's use of 'item' instead of 'todo' is slightly loose but not confusing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Clear' and resource 'in-progress claim on an item' make the action concrete. The qualifier 'without completing it' explicitly distinguishes it from the sibling todo_complete, so an agent can tell them apart at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'e.g. you're pausing this work' gives a practical scenario for when to use this tool. It implies this is for temporary pauses rather than finishing work, though it does not explicitly name sibling alternatives such as todo_claim or todo_complete as routing options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_versionServer versionARead-only
Report this todo-mcp process's data format version and start time. Use to sanity-check whether your MCP connection is running stale code (e.g. right after an update) — if todo_list output looks wrong (missing/undefined fields), check this first and reconnect if the process looks old.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, destructiveHint=false), so the description isn't burdened with that. It adds valuable behavioral context beyond annotations: the tool exposes version and start time precisely so the agent can detect stale code, and it explains how to interpret the result. It doesn't disclose the output format, but for a simple version/start-time report this is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both earning their place: the first states the core function, the second states the usage scenario. The purpose is front-loaded and there is zero filler or repetition of schema/annotation content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only diagnostic tool with no output schema, the description is fully sufficient. It states what is returned (version and start time), when to call it (stale-code suspicion), and what to do with the result (reconnect if old). An agent has everything needed to invoke and act on this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage (empty schema), so there is nothing for the description to clarify about inputs. The baseline of 4 applies, and the description appropriately spends no space on parameters it doesn't have.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource — 'Report this todo-mcp process's data format version and start time' — stating exactly what the tool outputs. It clearly differentiates from the sibling tools (todo_add, todo_claim, etc.), which all operate on todo items, whereas this is a diagnostic version-check tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the trigger condition: 'if todo_list output looks wrong (missing/undefined fields), check this first.' It also prescribes the follow-up action ('reconnect if the process looks old'), giving the agent a complete decision procedure with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v1.0.0- First observed
todo_add - First observed
todo_claim - First observed
todo_complete - First observed
todo_delete - First observed
todo_edit - First observed
todo_history - First observed
todo_list - First observed
todo_release - First observed
todo_version
TDQS
Each tool maps to a distinct action in the todo lifecycle: add, list, edit, claim, release, complete, delete, history, and version. Even close concepts like release and complete are clearly differentiated in their descriptions, so there is little risk of an agent selecting the wrong tool.
All tools share the consistent todo_ prefix and use snake_case with single-word command names. Most are verb-based (add, edit, claim, release, complete, list, delete), but history and version are noun-based, which is a minor deviation from the otherwise predictable pattern.
Nine tools is well within the ideal range for this domain and each tool serves a clear, non-redundant purpose. The count feels neither too thin nor bloated for a shared todo-list server.
The tool set provides full CRUD coverage (add/list/edit/delete) plus lifecycle actions for claiming, releasing, and completing items. The history and version tools add useful diagnostics, and there are no obvious missing operations that would block an agent from managing todos end-to-end.
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
Shared task queue for humans and AI agents: leases, handoffs, approvals and signed receipts.
The team layer for AI coding agents: shared contracts, collision alerts, E2EE sessions.
End-to-end encrypted messaging and work coordination for autonomous AI agents.
271The shared task board for teams and their AI agents — connect over OAuth, every action signed.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA persistent todo list server that enables AI assistants to manage tasks across different platforms using the Model Context Protocol. It provides tools for creating, listing, updating, and deleting todos with support for priorities, tags, and due dates.MIT
- AlicenseNot gradedqualityDmaintenanceA self-hosted backlog tracker with priority scoring and an MCP server, enabling AI agents to autonomously pull, work on, and update tasks via JSON-RPC tools.MIT
- FlicenseAqualityCmaintenanceA small Model Context Protocol (MCP) server that lets an AI assistant manage a to-do list on your behalf.4-
- AlicenseNot gradedqualityAmaintenanceLocal-first MCP server providing a shared, AES-256-GCM encrypted SQLite ledger of structured user state (stack, projects, preferences) that any MCP-aware tool can read/write, with user-held keys and optional zero-knowledge sync.1Apache 2.0
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/pasichDev/docket'
If you have feedback or need assistance with the MCP directory API, please join our Discord server