Dev Project Coordinator
Summary: This server exposes project tracking, search, and analytics capabilities for tracked Xcode projects, but not the fuller card/Kanban toolset described in the README.
List all tracked projects
Get current status and details for a specific project
Search code patterns or keywords across projects
Add new Xcode projects with name, path, and description
Update a project's status and notes
View a project's status timeline and time spent in each status
View activity heat maps for recent days, defaulting to 7
Analyze technology usage trends across projects
Get project health scores and recommendations
Allows adding and tracking Xcode projects, listing tracked projects, viewing project status and timelines, analyzing technology usage across projects, and searching code patterns.
Dev Project Coordinator
Local desk for agents. Track coding and non coding work as JSON on your machine. Agents keep the board. You open a local Analytics tab and Kanban tab.
Formerly Claude Project Coordinator.
Give your AI a project board it reads at the start of every chat, so work survives between sessions and between agents.
What this does
Your AI agents keep a small Kanban of every project you run, coding or not: what is in progress, what is blocked, what is waiting for review, and the commit or link that proves something shipped. When a new chat starts, the agent asks the desk for a summary of under 800 tokens and gets back on track, instead of guessing or rereading your repo. You do not need a memory or RAG tool for this. It works on its own, provided the agent's rules tell it to read the desk at the start of each session. If you do use a memory tool, the two sit side by side: memory keeps the why, DPC keeps the what and where. Everything stays as JSON on your own disk, and you get a local Analytics and Kanban page where you can drag cards yourself.
Related MCP server: sl-test
What you can ask
Type these as you would to any assistant. Each one maps to a real DPC tool.
You type | Tool | What happens |
"What is on my desk?" |
| The compact state of every project. Ask this first in each session so the agent starts from the truth, not from memory |
"I am in this repo. Register it." |
| Reads the folder and git remote, detects the language, and adds a starter card. It never creates folders |
"Add a card for the failing tests and put it in doing." |
| A new card in the doing column of the current project |
"Move the login fix to review, note commit 299b827." |
| The card moves and carries a short evidence line, so the next session or agent sees what was done |
"File this under a legal project called Q4 review." |
| Finds or creates a project with no folder, for writing, legal, accounting or other non coding work |
"Which projects need attention?" |
| Health scores with reasons, and where activity has gone quiet |
How it works
Everyday flow. You talk to your AI, the AI reads and updates the desk, and the desk is plain JSON you can also open as a page.
flowchart LR
U[You] --> A[Your AI<br/>Claude, Cursor or Grok]
A -->|reads the desk first| D[DPC]
A -->|adds and moves cards| D
D --> J[(JSON on your disk)]
J --> K[Kanban and Analytics page]Beside a memory or RAG tool. DPC holds the live board, memory holds the reasons. The only link is a memoryRef id on a card. DPC never calls the memory tool. With no memory tool, leave memoryRef empty and DPC works alone.
flowchart LR
A[Your AI] -->|what and where<br/>cards, columns, counts| D[DPC]
A -->|why<br/>decisions, context| M[Memory or RAG tool]
D -.->|memoryRef id only| MHandoff between sessions or agents. One session or agent leaves a card in review with a note, the next one reads the desk summary and carries on. To share one desk across machines, sync its folder with git (see the shared board guide).
flowchart LR
S1[Session 1 or Agent A] -->|card to review<br/>with commit note| D[(Shared desk)]
D -->|desk summary| S2[Session 2 or Agent B]
S2 -->|card to done| DWho this is for
People who run AI agents across several projects and are tired of each new chat starting cold. People who mix code with writing, legal, accounting or campaign work in the same chat. Anyone running several agents who needs one truthful board they all read and update. And anyone who wants this kept local, with no account and no telemetry.
How it fits with memory and RAG
DPC | Memory / RAG | |
Job | Live structured state: column, counts, board | Durable why, decisions, people |
Shape | Exact rows and a Kanban | Similar chunks |
Ask | "What is blocked right now?" | "Why did we choose X last month?" |
Put only a memoryRef (opaque id or tag) on a card. DPC never calls a memory service and never copies the prose. If you use RAG only, exact counts and a current board are not available. If you use neither, DPC still keeps your agents on track between sessions.
What it is not
Not a memory or RAG product. There are no embeddings and no semantic search.
search_deskis a plain text match over notes, cards, kinds and markdown.No live sync. Sharing a board uses git push and pull. Merges are a union by card id.
No Trello, Asana or Jira sync. Use those vendors' own MCPs beside DPC.
memoryRefis only an id. DPC cannot fetch the decision it points to.Nothing reads the desk automatically. Your host's rules or prompt (for example
CLAUDE.md,AGENTS.mdor docs/grok-bot/PROMPT.md) must tell the agent to callget_desk_summaryat the start.The desk server is local only, bound to
127.0.0.1. Cloud agents reach a desk through the shared board route, not the Dock app.
DPC is a local stdio MCP server. It stores live project state (column, kind, counts, cards) as JSON. It does not host your data. It does not replace a memory or RAG product.
v2.0.0 · official Swift MCP SDK · Apache 2.0 · local JSON knowledge base
Quick start
Needs macOS 13+, Swift 6.0+ (Xcode 16+) and an MCP host (Claude Desktop, Cursor, Claude Code, or Grok Build). Linux runs through the Dockerfile.
Build:
git clone https://github.com/M-Pineapple/Dev-Project-Coordinator.git cd Dev-Project-Coordinator swift build -c releaseAdd the server. The binary name stays
project-coordinator.dpcis an alias.{ "mcpServers": { "project-coordinator": { "command": "/absolute/path/to/Dev-Project-Coordinator/.build/release/project-coordinator", "args": [] } } }Restart the host. Ask: "What is on my desk?" The agent should call
get_desk_summaryfirst.
Coding folders must sit under an allowed root. Non coding work can have no path.
Open it as a Mac app
The desk page is a local file by default. For drag-and-drop, and to pin it in the Dock like an app:
Ask the agent to start the desk server, or run
dpc start_desk_server.Open the sign-in URL once in Safari. It carries a one-time code, valid once, for 10 minutes. That sets a session cookie (the write token) and redirects to
http://127.0.0.1:47821/with no code in the address bar.Safari: File > Add to Dock. The Dock shortcut is the plain URL. It does not store the code or the write token.
The port is fixed at 47821. Change it with DPC_DESK_PORT or deskPort in security-config.json. If that port is busy, start fails with a clear error. It does not pick a random port.
Call start_desk_server again while it is running to mint a fresh sign-in code without rotating the write token. Rotate the write token with start_desk_server rotate=true, or dpc start_desk_server --rotate. Open the new sign-in URL once so the Dock app cookie updates.
Starting points by setup
1. Agent user with several repos
You already have coding agents. You do not want a second project-management SaaS.
Start with:
"I am in this repo. Register it."
"What is blocked right now?"
"Add a card for the failing tests and put it in doing."
What you get: silent register from cwd and git remote, a compact desk under 800 tokens, cards linked to a PR when you pass one.
2. Mixed coding and non coding desk
You also run accounting, legal, writing, or campaign work in the same chat.
Start with:
"File this under a legal project called Q4 review."
"Rename that to Autumn review."
"Merge Duplicate Campaign into Autumn review."
What you get: find-or-create with no folder, a one-line notice Filed under new project: …, and rename/merge when the guess is wrong.
3. Privacy first local setup
You will not send a board to a hosted PM tool.
Start with:
Build from source. Point the host at
.build/release/project-coordinator.Optional:
DPC_KNOWLEDGE_BASEfor data outside the git tree.CPC_KNOWLEDGE_BASEstill works through v2.x.Open
KnowledgeBase/desk/index.htmlfrom disk.
What you get: JSON on your disk, path allowlisting, no account, no telemetry.
4. Already using a memory or RAG product
You store decisions in a memory MCP. You do not want that text copied here.
How they fit together: see How it fits with memory and RAG. Put only a memoryRef on a card. DPC never copies the prose.
5. Grok Bot user
You want a specialised desk operator.
Start with: paste docs/grok-bot/PROMPT.md, then add this MCP by hand. Templates cannot carry a custom MCP.
What you get: the same JSON desk. An optional private Grok Bot Page is a view, not a second store. Never auto-share.
Full feature list
Desk
Capability | Detail |
Compact summary |
|
Any language | Shallow detector: swift, python, javascript, typescript, node, go, rust, ruby, php, java, kotlin, csharp, dotnet, cpp, docker, web, plus spm / xcode-project / xcode-workspace / swiftui from top-level files |
Non coding kinds | writing, campaign, research, legal, accounting, business, personal, other. Path optional |
Auto-register | From cwd + git remote + optional open PR. Never creates folders. Adds a starter card |
Find or create | Normalised name match, near-duplicate guard, rename and merge. Adds a starter card |
Kanban | Columns backlog, doing, review, done, parked. Users may rename |
Cards | id, project, title, column, order, due, optional memoryRef, optional note. |
Local page | Analytics tab + Kanban tab as |
Interactive board | Opt-in |
Done cards whose updated time is older than 14 days are hidden on the Done column. Show archived (N) reveals them, muted. The Done in 7 days stat and the analytics tab still count every card. Nothing is deleted, and cards.json does not gain an archive field, so a shared-board merge stays a union by card id. Set the window with DPC_ARCHIVE_DAYS or archiveDays in security-config.json. get_desk_summary and get_project_status skip archived cards and still report the count. Pass includeArchived to list them. search_desk still finds them and marks them archived. Moving a card out of done, or any edit that refreshes updated, brings it back.
A card may also carry an optional note, a short evidence line such as Tech: commit 299b827 or a URL. Set it with add_card, update_card, or move_card. The board shows it in small muted text, and search_desk matches it. Leaving note off a move keeps the current line. A blank note clears it.
Analytics tab
The same JSON the MCP tools read, rendered as a local dashboard (file and live modes):
Section | What you see |
Attention | Five items that need a look, ranked |
Board flow | Column mix, stale cards (14 days), 7-day throughput into done, parked count |
Kind mix | Coding vs writing, legal, accounting, and the rest |
Project health | 0 to 100 score per project, factors, recommendations, grouped critical / needs attention / healthy. Non coding projects are not scored down for missing code docs or a tech stack |
Activity heat map | Per project, last 14 days, CSS intensity cells and a sparkline. Total events. No emoji |
Technology trends | Share bars, emerging tags (1 or 2 coding projects), adoption timeline. Coding projects only |
Project timeline | Created date, current status, time in each status. Collapsible per project |
No emoji as data. No remote fonts or assets. Light and dark follow the system.
Safety and storage
Capability | Detail |
Local JSON |
|
Path allowlist | Compiled roots plus |
Input limits | Name, path, notes, and search length capped |
HTML | User strings escaped on the desk page |
Env |
|
Stdio-safe logs | Diagnostics go to stderr only, prefix |
All MCP tools
Tool | Parameters | Purpose |
| optional | Compact desk. Use this first. Archived done cards are omitted unless |
| none | Full roster. Deep dive only |
|
| Full detail for one project. The card list skips archived done cards unless |
|
| Manual add |
|
| Update the desk entry |
|
| Search notes, cards, kinds, markdown. Archived cards are included and marked |
|
| Deprecated alias of |
|
| Status history and time in each status |
| optional | Activity heat map (points, events, daily counts) |
| none | Framework share, emerging tags, adoption timeline (coding only) |
| none | 0 to 100 scores, factors, recommendations |
| none | Write |
|
| Add a card. |
|
| Move a card. Omit |
|
| Edit a card. A blank |
|
| Rename a board column |
|
| Silent coding register |
|
| Non coding find or create |
|
| Fix a wrong name |
|
| Absorb a duplicate |
| optional | Opt-in loopback Kanban. Returns a bookmark URL and a one-time sign-in URL (valid once, for 10 minutes). Call again to mint a new code without rotating |
You talk in natural language. The host maps your words onto these tools.
Example workflow
You: I am in ~/Developer/widget-kit on branch main, PR 42. Register it.
Agent: calls register_from_workspace. Detected javascript.
You: What needs me?
Agent: calls get_desk_summary. Compact table, no notes dump.
You: File the invoice chase under a new accounting project.
Agent: calls file_under_project. "Filed under new project: Invoice chase"
You: Open the desk.
Agent: calls open_desk. You open KnowledgeBase/desk/index.html from disk.Prerequisites
macOS 13+ for the default path
Swift 6.0+ (Xcode 16+)
An MCP host
Optional: Docker for the Linux image
Installation
Build from source
git clone https://github.com/M-Pineapple/Dev-Project-Coordinator.git
cd Dev-Project-Coordinator
swift build -c releaseExecutables:
.build/release/project-coordinator
.build/release/dpcClaude Desktop
Settings → Developer → Model Context Protocol. Use the JSON in Quick start. No --port flag. This is stdio, not HTTP.
Cursor
Add the same server entry to your Cursor MCP settings JSON.
Claude Code
Register the same command path.
Grok Build
grok mcp add dpc -- /absolute/path/to/Dev-Project-Coordinator/.build/release/project-coordinatorGrok Bot
Create a Dev Project Coordinator bot in your Grok Bot:
Create a new bot, or ask the bot you use to create bots to make one, and give it the prompt below as its instructions.
Add this server to that bot as a custom MCP (see the install notes in the prompt). Bot templates cannot carry a custom MCP, so this step is always manual.
Tell the bot what you are working on. It registers projects for you, keeps the board current, and can show the Analytics and Kanban views as a private Page.
## Identity
You are a desk operator for Dev Project Coordinator (DPC). You keep a local JSON board truthful. You do not write code in the user's repos. You do not host user data. You do not replace a memory or RAG product.
## Session start
1. Call `get_desk_summary` first.
2. Do not call `list_projects` unless the user asks for a deep dive.
3. If this is a coding session and you have a working directory, call `register_from_workspace` with cwd, git remote, current branch, and the open PR if you have it. Never create folders on disk.
4. If this is non-coding work, call `file_under_project`. If the tool says `Filed under new project: <name>`, tell the user that line. If the guess is wrong, call `rename_project` or `merge_projects` once.
## Board rules
- One card, one owner, one column.
- Columns default to backlog, doing, review, done, parked. Rename only when the user asks.
- Done cards older than the archive window (14 days unless configured) are hidden on the board and left out of `get_desk_summary` and `get_project_status`. They are not deleted. `search_desk` still finds them. Move one out of done to bring it back.
- A card may have an optional `note`: a short evidence line (a commit or a URL), not a memory dump. Set it with `add_card`, `update_card`, or `move_card`.
- After any card or status write, call `open_desk` so `KnowledgeBase/desk/index.html` is current.
- Ask before deleting or merging.
## Memory
If the user has a memory or RAG product, write the decision there. Set `memoryRef` on the DPC card. Put no prose from memory into DPC. If they have no memory product, leave `memoryRef` empty. DPC still works.
## Grok Bot Pages
You may refresh a **private** Page from `get_desk_summary` as an Analytics view and a Kanban view. The Page is a view, not a store. Do not auto-share. Project names and card titles are private. A public `pages.grok.bot` link is a publish action and needs an explicit user sentence that names that action. Local `index.html` remains the view for every other host.
## MCP install (tell the user)
Templates do not carry this server. After import, add a custom MCP named `dpc` (or `project-coordinator`) that runs the local binary:
```text
/absolute/path/to/Dev-Project-Coordinator/.build/release/project-coordinator
```
On Grok Bot's cloud computer, sibling bots can read files. Prefer local-computer execution, or the Linux Docker image with `DPC_KNOWLEDGE_BASE` on that disk.
## Shared board (optional)
If the user wants one board shared between your computer and their desktop, or readable by another assistant, offer the optional shared-board setup: a private GitHub repo as transport, a locked wrapper on your side, a two-way mirror on their desktop, and an optional read-only viewer. Follow docs/shared-board/README.md in the DPC repo step by step and do not improvise your own sync. Never put a token or key in a card, note, or message.
## Anti-jobs
- Do not implement Trello, Asana, or Jira.
- Do not copy memory prose into cards or notes.
- Do not start `start_desk_server` unless the user asks for drag-and-drop.
- Do not claim the template "just works" without the MCP.The matching skill is in docs/grok-bot/SKILL.md.
Templates cannot include this server. After you paste docs/grok-bot/PROMPT.md, tell the bot to add a custom MCP that runs the binary. On the bot cloud computer, sibling bots can read files. Prefer local execution, or the Docker image with DPC_KNOWLEDGE_BASE on that disk.
Optional: set DPC_KNOWLEDGE_BASE (or legacy CPC_KNOWLEDGE_BASE) to a custom KnowledgeBase directory.
Optional: to share one board between a Linux host (such as a Grok Bot's computer) and your desktop, see the shared board guide.
Restart the host after changing the config.
Security configuration
Defaults live in Sources/ProjectCoordinator/SecurityValidator.swift (compiled in) and are merged with KnowledgeBase/security-config.json allowedPaths and DPC_ALLOWED_PATHS (colon-separated).
KnowledgeBase/security-config.json is trusted input. An agent that can write it can change the allowlist and enableValidation. Treat the file like other KnowledgeBase state: keep it private, and do not point DPC_KNOWLEDGE_BASE at a shared or world-writable directory.
Allowed roots: ~/Developer, ~/Documents, ~/GitHub, ~/Projects, ~/Desktop/Development, ~/Xcode
Config and env roots of /, the home directory, ~/Library, ~/.ssh, ~/.gnupg, and ~/.aws are ignored. Path checks expand a leading ~ only, then resolve symlinks on the path and on each root before the prefix test.
Limits: project name 100 · path 500 · description 2,000 · notes 10,000 · search pattern 300 characters
The home directory itself is rejected. Rebuild after changing the compiled list.
The optional desk server binds 127.0.0.1 only, default port 47821 (DPC_DESK_PORT or security-config.json deskPort). A random write token is stored in KnowledgeBase/desk/.write-token with mode 0600. The sign-in URL carries a one-time code, held in memory, valid once, for 10 minutes. It is not the write token. A used or expired code returns 401 and sets no cookie. GET /?token= is rejected. The session cookie is the write token (HttpOnly, SameSite=Strict). Writes accept that cookie or the X-DPC-Token header. Origin and Host must match the loopback URL with the port. There is no CORS wildcard. Every response includes Content-Security-Policy, X-Content-Type-Options, and Referrer-Policy: no-referrer.
Browsers do not scope cookies by port. A cookie set for 127.0.0.1 is sent to any port on that host. The desk port is fixed and fails closed if it is busy, so a squatter cannot take 47821 while DPC is running. The single-use sign-in code limits what a squatter can get from a URL in history or a log: it is not the long-lived write token, and a used or expired code cannot mint a cookie.
Not in v2.0
Pass-through to Trello, Asana, or Jira is out of this release. Use those vendors' own MCPs beside DPC if you need them. Two-way sync is a later conflict engine, not a DPC feature.
Project structure
Dev-Project-Coordinator/
├── Sources/
│ ├── ProjectCoordinator/ # Library
│ ├── project-coordinator/ # Executable
│ └── dpc/ # Alias executable
├── Tests/ProjectCoordinatorTests/
├── KnowledgeBase/ # Patterns, templates, local JSON
├── docs/grok-bot/ # Paste-in prompt and skill
├── docs/images/ # Logo, favicon, icons, screenshots
├── scripts/
├── Package.swift
└── README.mdUpgrading from v1.x
Rebuild:
swift build -c releasePoint your MCP host at the same
project-coordinatorbinaryOld project JSON still loads.
kinddefaults to coding when a path is presentCPC_KNOWLEDGE_BASEstill works. PreferDPC_KNOWLEDGE_BASE. Removal is v3.0Open
get_desk_summarybeforelist_projectsv1.4.x path matching is case-sensitive. If
add_projectrejects~/Github/..., pass~/GitHub/...(same folder on macOS). v2.0 resolves the on-disk path, so either spelling works when they are the same directory
More MCP servers by M-Pineapple
Other MCP servers in this portfolio:
CryptoAnalysisMCP. Cryptocurrency technical analysis for Claude Desktop.
Warp Command Runner. Give any chat AI a real terminal.
Msty Admin MCP. Administer Msty Studio Desktop.
Member Berries. Apple Calendar, Notes and Reminders with personality.
SeaShell. Talk to Claude from any terminal block.
TextEdit MCP. Formatted RTF documents via macOS TextEdit.
HubSpot Auditor. Read-only HubSpot portal audit.
Support this project
If Dev Project Coordinator has helped you keep a local desk for your agents, consider supporting its development:
Your support helps me:
Maintain and improve DPC with new features
Keep the project open source and free for everyone
Spend more time on user requests and bug fixes
Explore new tools for developers
Thank you for considering supporting my work.
Contributing
Contributions are welcome. Report bugs, suggest features, open pull requests, or share patterns and templates under KnowledgeBase/.
Licence
Apache License 2.0. See LICENSE and NOTICE. Releases before v2.0.0 were MIT.
Acknowledgments
Built for the MCP ecosystem. Protocol stack: modelcontextprotocol/swift-sdk.
Made by Pineapple
Available Tools
21 toolsadd_cardB
Add a Kanban card. Optional memoryRef is an opaque id. DPC never copies memory prose.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional short evidence line, such as a commit or URL. Blank clears it. | |
| title | Yes | Card title | |
| column | No | Column (default backlog) | |
| project | Yes | Project name | |
| linkedPR | No | Optional pull request URL or number | |
| memoryRef | No | Optional opaque memory id or tag |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one non-obvious trait: memoryRef is a reference only and 'DPC never copies memory prose,' clarifying that no content is duplicated onto the card. However, it says nothing about duplicate handling, ordering, permissions, or what happens when project/title collide, which matters for a mutation tool with zero annotation coverage.
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?
Three short sentences, front-loaded with the purpose, with no filler. The final clause is slightly terse and uses the undefined acronym 'DPC,' which costs a bit of clarity but not length.
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 6-parameter mutation tool with no annotations and no output schema, the description is thin: it never indicates what is returned (e.g., the new card id) or how the default column behaves, relying entirely on the schema for the rest. It is minimally adequate rather than 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?
Schema coverage is 100%, with every parameter including note, column defaults, and linkedPR already documented in the schema, so baseline is 3. The description only elaborates on memoryRef's non-copy semantics, adding slight value beyond the schema's own 'opaque memory id or tag' wording.
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 first sentence states a specific verb and resource ('Add a Kanban card'), which is enough to distinguish it from siblings like move_card, update_card, and add_project. It stops short of naming those siblings or explicitly delimiting scope, so it is clear but not fully differentiated.
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?
There is no guidance on when to use this tool versus move_card, update_card, or add_project, and no prerequisites or exclusions are stated. The agent must infer that this is the creation path from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_projectA
Manually register a project. Path is optional for non-coding work. Coding projects need a folder. Prefer register_from_workspace when an agent is already in a repo.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | coding, writing, campaign, research, legal, accounting, business, personal, or other | |
| name | Yes | Project name | |
| path | No | Optional folder path | |
| description | No | Optional description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden, and it does disclose a useful conditional rule: path is required for coding projects but optional otherwise. It says nothing about what happens on duplicate registration, required permissions, or what the call returns.
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?
Three short sentences, front-loaded with the core action, then constraints, then the alternative routing. Every sentence earns its place with no 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 create tool with no output schema and no annotations, the description covers the action, the key conditional constraint, and the preferred alternative. Minor gaps remain around duplicate handling and return behavior, but nothing essential for correct invocation is missing.
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, but the description adds meaning the schema lacks: the path field is labeled merely 'Optional folder path' in the schema while the description makes it conditionally required for coding projects. The kind field's enumeration and the name field's role are left entirely to the schema.
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 and resource ('Manually register a project') and immediately distinguishes this tool from the sibling register_from_workspace, so an agent can tell them apart without reading either schema.
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 routing guidance ('Prefer register_from_workspace when an agent is already in a repo') and conditional usage ('Path is optional for non-coding work. Coding projects need a folder'). It does not address edge cases such as duplicate names or when to use it versus list_projects, so it falls just short of fully explicit when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_under_projectC
Find the closest existing non-coding project or create one with no path. Reply includes Filed under new/existing project.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | writing, campaign, research, legal, accounting, business, personal, or other | |
| name | Yes | Project name inferred from context | |
| description | No | Optional description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does disclose that the tool may create a project if none exists and that the reply labels the result as new or existing. However, it omits permissions, matching logic, side effects, and what 'no path' means.
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 two short sentences with no wasted text and the find-or-create behavior is front-loaded. The phrase 'with no path' is slightly unclear but does not undermine the overall concision.
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 find-or-create mutation with no annotations and no output schema, the description is too thin. It does not explain what is being filed, how matching works, or the full return shape beyond the 'Filed under new/existing project' label.
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 schema already documents all three parameters. The description adds no parameter-level meaning beyond the schema, which is the baseline case for full coverage.
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 find-or-create action for non-coding projects, but it never says what is being filed under the project. The name implies assignment, yet the object of the assignment is missing, so the purpose is only partially clear.
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 implies use when you need to find or create a project, but gives no explicit when-to-use guidance versus siblings like add_project or list_projects. There are no exclusions or alternative-selection rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_heatmapC
Activity heat map for recent days. Scores and event counts. Prefer get_desk_summary first.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Days to analyse (default 7) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It mentions scores and event counts but does not disclose aggregation behavior, output shape, read-only safety, or any other operational trait an agent would need before invoking it.
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 short and front-loads the resource and output hints. The three fragments are efficient, though the final guidance sentence is slightly disconnected from the preceding output summary.
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 read tool with no output schema, the description gives a minimal but adequate picture. It still leaves the return format and aggregation behavior implicit, which is a noticeable gap given the absence of annotations.
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 has 100% schema description coverage, so the schema already explains 'days'. The description adds only 'recent days', which is consistent but does not extend parameter meaning beyond the schema.
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 identifies the resource as an activity heat map for recent days and mentions it returns scores and event counts. However, it is a noun phrase rather than a specific action verb, and the scope is only loosely defined ('recent days').
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 says 'Prefer get_desk_summary first', which gives a useful ordering hint and names a sibling. But it does not explain when this tool should be used instead of get_desk_summary or other analysis tools, nor does it state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_desk_summaryA
Use this first. Compact desk under 800 tokens. Done cards older than the archive window are left out of the list. The archived count is still reported. Pass includeArchived to list those cards. Skip list_projects unless the user asks for a deep dive.
| Name | Required | Description | Default |
|---|---|---|---|
| includeArchived | No | When true, list archived done cards as well. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the most important behavioral surprise: done cards older than the archive window are silently excluded from the list, yet the archived count is still reported, and includeArchived overrides the omission. It also caps output expectations under 800 tokens. It does not state read-only semantics or error behavior, but the truncation/filtering disclosure is substantive.
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?
Five short sentences, front-loaded with the call-priority instruction, and nothing is padding. The clipped fragments ('Compact desk under 800 tokens') are slightly telegraphic, but every sentence carries a distinct instruction.
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-required-param, no-output-schema, no-annotation tool this is mostly adequate: size budget, archive filtering, and sibling routing are all covered. It never says what sections the summary actually returns (projects? card counts? statuses?), which is the main remaining gap for a summarization tool.
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 includeArchived already has a clear schema description, so the schema does the heavy lifting. The description reinforces it with the consequence (archived cards will be listed) and the reason to use it (the count already reveals their existence), which is modest added value over the schema. Baseline 3 applies.
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 establishes that this returns a compact/bounded summary of the desk and routes the agent away from list_projects for shallow needs. The verb is implicit rather than stated ('Compact desk under 800 tokens'), and it never enumerates what the summary contains, but an agent can tell it apart from siblings like get_project_status or search_desk.
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?
'Use this first' gives an explicit default-entry-point instruction, and 'Skip list_projects unless the user asks for a deep dive' names the alternative plus the exact condition that selects it. This is exactly the when/when-not/alternative structure the dimension rewards.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_healthB
0-100 health scores with factors and recommendations. Prefer get_desk_summary and the Analytics tab.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It reveals the return shape (scores, factors, recommendations) but says nothing about computation cost, latency, freshness of data, or scope of projects covered — meaningful gaps for an unannotated tool.
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 short sentences with no filler, and the output shape is front-loaded. It is slightly too clipped — the lack of a verb or scope makes the first sentence read as a fragment rather than a definition.
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?
With no annotations, no output schema, and no parameters, the description is the only source of context, and it supplies the return contents but not the scope of what is scored or how the score is derived. Adequate to call, but thin for a health-metric tool.
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 takes zero parameters and the schema is an empty object, so there is nothing to document; per the baseline for 0-param tools this scores a 4. The description adds no parameter information, but none is needed.
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 fragment '0-100 health scores with factors and recommendations' conveys the resource and its payload, but never states a verb or scope (one project vs. all projects). It does partially distinguish itself by naming get_desk_summary as the preferred sibling, which helps an agent place it.
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?
'Prefer get_desk_summary and the Analytics tab' names alternatives, which is more than most tools do, but gives no positive condition for when this tool is the right call. The agent is told what not to use rather than when to use this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_statusA
Full detail for one project, including notes and cards. Archived done cards are omitted from the card list. The archived count is still reported. Pass includeArchived to list them. Prefer get_desk_summary first.
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | Yes | Name of the project | |
| includeArchived | No | When true, include archived done cards in the card list. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose meaningful behavior: archived done cards are omitted from the card list, the archived count is still reported, and includeArchived changes that. It does not explicitly state that the operation is read-only, nor does it mention permissions, side effects, or response shape.
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 short and front-loaded: purpose first, then archived-card behavior, then the includeArchived escape hatch, then sibling routing. Every sentence contributes useful information without repetition.
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 two-parameter read tool with full schema coverage, the description provides enough context to select and invoke it: it states the returned content at a high level, explains archived-card filtering, and points to the summary tool first. It lacks a detailed return shape, but no output schema exists and the high-level return description is adequate for the tool's complexity.
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 both parameters are already documented. The description adds useful meaning for includeArchived by explaining that archived done cards are omitted by default but still counted. It does not add anything beyond the schema for projectName.
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 clearly identifies the resource and scope: full detail for one project, including notes and cards. It also distinguishes itself from the sibling summary tool by saying to prefer get_desk_summary first. The only slight weakness is that it does not use an explicit retrieval verb and the tool name says 'status' while the description promises broader detail.
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 one useful routing hint: 'Prefer get_desk_summary first.' However, it does not specify the exact conditions for choosing this tool over get_desk_summary or other siblings, nor does it state when not to use it. The includeArchived note is parameter guidance rather than tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_timelineB
Status timeline for one project. Prefer get_desk_summary first.
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | Yes | Name of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It implies a read operation through the name and 'timeline' phrasing, but it does not explicitly confirm read-only behavior, permissions, pagination, or return format.
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 two short, front-loaded sentences with no wasted wording. The purpose comes first, followed by a direct usage preference.
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 tool with no output schema and no annotations, the description is minimally adequate. It omits return-value context and sibling differentiation that would help an agent invoke it confidently.
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?
There is one parameter with 100% schema description coverage, so the schema fully documents projectName. The description adds only 'for one project,' which confirms scope but adds no syntax or format meaning beyond the schema.
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 clear resource and scope: a status timeline for one project. However, it does not explicitly distinguish this timeline tool from the sibling get_project_status tool, leaving overlap 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 a routing hint by saying to prefer get_desk_summary first, but it does not explain when to use this tool instead of get_project_status or what conditions make the timeline appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_technology_trendsA
Framework usage, emerging tags, and adoption timeline for coding projects. Prefer get_desk_summary first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full behavioral burden. It lists returned data categories but does not disclose whether the operation is read-only, what scope or time range applies, whether results are cached or aggregated, or any authentication/rate-limit considerations.
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 two short sentences with no waste. The main content is front-loaded, and the routing hint follows as a secondary instruction.
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?
With no input parameters, no output schema, and no annotations, the description must carry more context. It identifies the general data returned but leaves significant gaps around time range, project scope, aggregation level, and result format.
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, which sets the baseline at 4 per the rubric. There are no parameter semantics to clarify, and the description does not need to compensate for an incomplete schema.
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 clearly identifies the resource dimensions the tool returns: framework usage, emerging tags, and adoption timeline for coding projects. It does not explicitly contrast its scope with every sibling, but its focus on technology trends is distinct from tools like get_project_status or list_projects.
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 routes the agent to get_desk_summary as a preferred first step, which is useful sequencing guidance. However, it does not state when this tool should be used instead of that summary or other siblings once the summary has been consulted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsB
Full project roster. Prefer get_desk_summary first. Use this for a deep dive only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden of behavioral disclosure, and it says almost nothing. It does not reveal how many projects might be returned, whether results are paginated, whether the response is expensive or slow, or what fields each roster entry contains. The word "Full" hints at unbounded volume but never confirms or bounds it.
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?
Three short sentences with no filler, and the routing advice is front-loaded after the one-line purpose. It is arguably over-compressed: the terse fragments leave real gaps rather than trimming 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?
With no parameters and no output schema, the description is the only place an agent can learn what a "project roster" entry looks like or what "deep dive" yields. It establishes routing but not the shape, size, or cost of the result, which is the main remaining question for a bulk-list tool.
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 takes zero parameters, so the baseline is 4. There is nothing for the description to clarify, and it correctly presents this as an argument-free call.
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?
"Full project roster" names the resource and implies a complete listing, but there is no explicit verb and the phrase is a fragment rather than a stated action. It partially distinguishes itself from get_desk_summary by positioning this as the exhaustive variant, yet an agent must infer that this returns all projects.
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?
"Prefer get_desk_summary first. Use this for a deep dive only" explicitly names the sibling alternative and sets a clear ordering: start with the summary, escalate here. What is missing is any criterion for what makes a deep dive warranted (e.g., needing every project's metadata vs. an overview).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_projectsA
Merge a duplicate project into another. Cards move to the target.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Project to absorb | |
| target | Yes | Project to keep |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral-disclosure burden. It mentions that cards move to the target, but it does not say whether the source project is deleted or archived, whether the merge is irreversible, or what permissions are required.
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 short sentences are front-loaded and contain no wasted text. The purpose comes first, followed by the key side effect.
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 two-parameter mutation, the description covers the core action and card movement. It still leaves out important operational context, such as the fate of the source project and irreversibility, with no annotations or output schema to fill those gaps.
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 parameter meanings are already documented in the input schema. The description reinforces the source-to-target flow but adds no format or constraint details beyond the schema's "absorb" and "keep" wording.
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 and resource: "Merge a duplicate project into another." It also clarifies the outcome, "Cards move to the target," which makes the operation distinct from siblings such as rename_project or update_project_status.
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 a clear use case: merging a duplicate project. However, it does not explicitly state when not to use it, whether the operation is reversible, or what alternatives exist for non-duplicate cleanup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_cardA
Move a card to another column, then regenerate the desk page. Leaving done brings an archived card back onto the board.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Card id | |
| note | No | Optional short evidence line, such as a commit or URL. Omit to keep the current note. Blank clears it. | |
| column | Yes | Target column |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses two important side effects: moving a card regenerates the desk page, and leaving 'done' unarchives the card. It does not cover permissions, error conditions, or return behavior, but the key non-obvious behaviors are surfaced.
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 two tight sentences with the core action front-loaded and a valuable caveat second. There is no redundant or filler text.
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 mutation tool with a fully described schema and no output schema, the description covers the purpose and key side effects. It does not explain return value or edge-case handling, but it is largely sufficient 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 description coverage is 100%, so the parameters are already well documented in the schema. The description reinforces the meaning of 'column' but adds no details beyond what the schema provides for id, note, or column.
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 and resource: moving a card to another column. It clearly differentiates the operation from generic card updates, though it does not explicitly name or contrast sibling tools like update_card.
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?
Usage is implied by the purpose, and the note about leaving 'done' provides a useful caveat. However, it does not explicitly say when to use this tool versus update_card or other alternatives, nor does it state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_deskB
Write KnowledgeBase/desk/index.html and return its path. Open the file from disk.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for a mutating tool. It discloses that it writes a fixed file and opens it, but does not state whether it overwrites an existing file, what content is written, what permissions are needed, or what happens on failure.
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 two short sentences with no filler, and the main action is front-loaded. It could be slightly clearer about whether 'open' is a side effect after writing, but it is efficiently structured.
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 no annotations, no output schema, and a mutating file-write behavior, the description omits important context: overwrite behavior, content source, error conditions, and prerequisites. The zero-parameter schema simplifies the call, but the behavioral gaps remain significant.
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, so there are no parameter semantics for the description to clarify. The baseline score of 4 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 names specific actions and a concrete resource: writing KnowledgeBase/desk/index.html, returning its path, and opening the file from disk. This is clearer than a vague 'open desk' description, though it does not distinguish the tool from siblings such as start_desk_server or get_desk_summary.
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 provides no guidance on when to use this tool versus alternatives like start_desk_server, get_desk_summary, or search_desk. The agent must infer the context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
register_from_workspaceA
Silently register or update a coding project from the agent's working directory and git remote. Never creates folders.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Working directory | |
| branch | No | Optional current branch | |
| openPR | No | Optional open pull request to link as a card | |
| gitRemote | No | Optional git remote URL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose meaningful behavior — 'Silently' (no user-facing notification), upsert semantics ('register or update'), and the negative guarantee 'Never creates folders.' It stops short of saying what happens on conflicts, what permissions are needed, or what is returned.
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 short sentences, both front-loaded with the operation and the key safety constraint. No filler and nothing that could be cut without losing information.
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?
There is no output schema and no annotations, so the description is the only behavioral source; it covers purpose and one side-effect boundary but omits the outcome of the call, error behavior, and how 'update' merges with existing project data. Adequate but with clear gaps for a 4-parameter mutation tool.
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 schema already documents all four parameters, making 3 the baseline. The description adds only the mapping that cwd/gitRemote are auto-derived from the workspace, with no extra detail on branch or openPR semantics.
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?
States a specific verb ('register or update') and resource ('a coding project') plus the source of the data (working directory and git remote). It implicitly differentiates from add_project by being workspace-derived rather than manually specified, but it never names that sibling, so an agent must infer the distinction.
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 'from the agent's working directory and git remote' implies the context in which this applies, and 'Never creates folders' is a useful exclusion. However, there is no explicit guidance on when to prefer this over add_project or update_project_status, and no stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_columnB
Rename a Kanban column. Cards in that column follow the new name.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | New column name | |
| from | Yes | Current column name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a real side effect: cards in the column follow the new name. It does not state what happens if 'from' doesn't exist, whether renaming is reversible, whether names must be unique, or what permissions are required for this mutation.
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 short sentences, zero waste, with the core action front-loaded and the side effect immediately after. Nothing redundant is included.
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 two-parameter mutation with no annotations and no output schema, the description covers the action and its cascade effect but omits failure modes, idempotency, and permission context. Adequate but with clear gaps for a write 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% — 'from' is documented as 'Current column name' and 'to' as 'New column name' — so the description adds no parameter meaning beyond the schema. Baseline 3 applies.
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?
States a specific verb and resource ('Rename a Kanban column'), which is clearly distinct from card-level siblings like move_card and update_card. It does not explicitly contrast itself with update_card or update_project_status, but the object of the operation leaves little 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?
The description never says when to use this versus update_card or move_card, nor does it state prerequisites (does the column need to exist, must names be unique?). The second sentence is behavioral, not usage guidance, so an agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_projectC
Rename a project after a wrong guess.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | New name | |
| from | Yes | Current name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not say whether renaming is reversible, what happens if `from` does not match an existing project, whether other references to the project break, or whether permissions are required — significant gaps for a mutation tool.
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?
It is short and front-loaded with the action, but the second half ("after a wrong guess") is speculative framing that consumes space without informing invocation.
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 two-parameter mutation with no annotations and no output schema, the definition should state failure behavior and side effects. Neither is covered, leaving the agent unable to predict outcomes.
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% (both `from` and `to` are documented as current/new name), so the baseline is 3. The description adds no additional meaning about naming constraints, uniqueness, or case sensitivity.
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+resource ("Rename a project") is identifiable, but the trailing clause "after a wrong guess" is cryptic and reframes the tool as an error-correction action rather than a general rename. It does not distinguish it from siblings like rename_column or merge_projects, which are the nearest alternatives.
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?
"After a wrong guess" loosely implies a corrective scenario but gives no explicit when-to-use or when-not-to-use guidance, and never mentions the adjacent alternatives (rename_column for columns, merge_projects for consolidation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_code_patternsA
Deprecated alias of search_desk. Prefer search_desk. Use get_desk_summary first.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Keyword to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden; it does disclose the critical trait that this tool is deprecated. However, it doesn't say what actually happens on invocation – whether it still executes, transparently redirects, or errors out – nor whether results may be stale or the endpoint will be removed.
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?
Three short sentences, front-loaded with the deprecation warning and the preferred alternative. Every clause carries directive value and there is no padding.
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 deprecated alias, the description covers the essentials: it's deprecated, what to use instead, and what to run first. The one residual gap is whether calling it still works – minor, but relevant if an agent encounters it in an older workflow.
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?
With a single parameter at 100% schema description coverage, the schema already documents 'pattern' as the keyword to search for, so baseline 3 applies. The description adds nothing about the parameter – notably, since this aliases search_desk, it's unclear whether 'pattern' is interpreted as a code pattern or a plain keyword.
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 identifies the tool as a deprecated alias of search_desk, which lets an agent place it relative to siblings without opening either schema. It stops short of stating the actual operation (what is searched or what a 'desk' is), deferring that entirely to the target tool's own definition.
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?
Explicitly instructs 'Prefer search_desk' and names the prerequisite 'Use get_desk_summary first' – an alternative, an exclusion, and a sequencing rule in one line. An agent needs no inference to decide what to do.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_deskA
Search notes, card titles, kinds, and KnowledgeBase markdown. Archived done cards are included and marked archived. Prefer get_desk_summary first.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Keyword to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that archived done cards are included and marked archived, which is a meaningful result-set trait, but it does not describe result limits, matching behavior, or return structure.
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 three short, front-loaded sentences with no filler. Each sentence contributes either scope, behavioral context, or usage ordering.
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 search tool with no output schema and no annotations, this covers the essentials: what is searched, archived behavior, and a preferred ordering. It could be more complete by clarifying matching semantics, such as substring versus pattern matching.
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%, so the lone 'pattern' parameter is already documented. The description still adds meaning by specifying the content types the pattern applies to: notes, card titles, kinds, and KnowledgeBase markdown.
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 gives a specific verb, 'Search', and enumerates the searchable resources: notes, card titles, kinds, and KnowledgeBase markdown. It is clear what the tool does, though it does not explicitly distinguish itself from the sibling search_code_patterns 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 includes a useful sequencing instruction: 'Prefer get_desk_summary first,' which tells the agent when this tool should be considered. However, it does not explicitly state when to use this instead of search_code_patterns or other search-like siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_desk_serverA
Opt-in localhost Kanban server bound to 127.0.0.1 on a fixed port (default 47821). Returns a bookmark URL with no token plus a one-time sign-in URL (valid once, for 10 minutes). Calling again while running mints a new sign-in code without rotating the write token. Token file mode 0600. Static index.html still works without it.
| Name | Required | Description | Default |
|---|---|---|---|
| rotate | No | Rotate the write token and mint a new sign-in code. Open the new sign-in URL once so the Dock app cookie updates. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses the loopback-only binding, the default port, that the bookmark URL carries no token, that the sign-in URL is single-use and expires in 10 minutes, that re-calling does not rotate the write token, and the 0600 token file mode. Gaps remain around server lifecycle (how to stop it, whether it survives the session) and failure behavior.
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?
Four short sentences, front-loaded with the core fact (what the server is and where it binds), then return values, then re-call semantics. 'Token file mode 0600' is terse to the point of being cryptic, a minor deduction.
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?
No output schema exists, and the description compensates by describing exactly what is returned (bookmark URL plus one-time sign-in URL) and their lifetimes. For a zero-required-parameter tool this is nearly sufficient; only lifecycle and shutdown behavior are absent.
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% for the single optional parameter, so the baseline would be 3. The description adds value beyond the schema by describing the default path — calling again without rotate mints a fresh sign-in code while preserving the write token — which clarifies what the parameter actually changes.
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 and resource — an opt-in localhost Kanban server bound to 127.0.0.1 on a fixed port — so an agent immediately knows what is being started. It does not name the closely related sibling (open_desk) or state how it differs, which keeps it from a 5.
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?
'Opt-in' and 'Static index.html still works without it' imply this is an optional enhancement rather than a required step, and 'Calling again while running mints a new sign-in code' implies repeat calls are safe. However, there is no explicit statement of when to call this versus open_desk, nor of any prerequisites, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_cardB
Update card title, column, or memoryRef. Leaving done, or any edit that refreshes updated, brings an archived card back onto the board.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Card id | |
| note | No | Optional short evidence line, such as a commit or URL. Omit to keep the current note. Blank clears it. | |
| title | No | New title | |
| column | No | New column | |
| memoryRef | No | Opaque memory id or tag |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one genuinely non-obvious side effect: editing an archived card returns it to the board. That is valuable. However, it omits permissions, whether unspecified fields are preserved (only implied by the note param), error behavior, and how the 'done'/updated refresh interacts with the update.
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 first sentence is well front-loaded. The second sentence is compressed to the point of ambiguity ('Leaving done, or any edit that refreshes updated'), making a real behavioral rule hard to parse.
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 mutation tool with no annotations and no output schema, the description partially compensates by disclosing the unarchive side effect, but it lacks usage boundaries against move_card/add_card and leaves the phantom 'done' reference unexplained. It is adequate but with clear gaps.
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%, so each parameter is already documented in the schema, giving a baseline of 3. The description restates three of the five fields but adds no syntax, format, or constraint detail, and it mentions a 'done' concept absent from the schema, which adds confusion rather than meaning.
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?
States a specific verb and resource ('Update card') and enumerates the mutable fields (title, column, memoryRef), which lets an agent distinguish it from read-only siblings like get_desk_summary. It does not differentiate itself from move_card or rename_column, which also manipulate columns, so the boundary is blurred.
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?
There is no statement of when to use this versus alternatives, despite siblings move_card and add_card covering adjacent operations. The phrase about 'leaving done' hints at a condition but is not explained, and it references a 'done' field that does not exist in the input schema, leaving the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_project_statusA
Update status or notes for a project. Prefer get_desk_summary first.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Notes (replace, do not append) | |
| status | No | New status | |
| projectName | Yes | Name of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It says the tool updates status or notes but does not disclose permissions, reversibility, whether omitted fields are preserved, or any side effects of the mutation.
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 short sentences, front-loaded with the action and followed by a useful routing hint. There is no wasted text.
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?
The schema fully covers the parameters and the description gives enough to invoke the tool. However, for a mutation tool with no annotations and no output schema, it should explain the effect of the update more fully, such as whether notes replace existing content and what status values are acceptable.
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 three parameters are already documented in the schema. The description adds only the high-level idea that status and notes are updatable, not any syntax or meaning beyond what the schema 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 uses a clear verb+resource ("Update status or notes for a project") and names the mutable fields. It does not explicitly distinguish this tool from siblings like get_project_status or update_card, so it falls short of a 5.
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 a concrete prerequisite/alternative: "Prefer get_desk_summary first." That is clear context for when to use this tool, though it does not state when not to use it or name other alternatives.
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.
17 tool updates
v2.0.0- Added
add_card - Changed
add_project4 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Project description"New value: +"Optional description" - added
Input schema / properties / kindAdded value: +{ + "description": "coding, writing, campaign, research, legal, accounting, business, personal, or other", + "type": "string" +} - changed
Input schema / properties / path / descriptionPrevious value: -"Path to project"New value: +"Optional folder path" - changed
Input schema / requiredPrevious value: -[ - "name", - "path" -]New value: +[ + "name" +]
- Added
file_under_project - Changed
get_activity_heatmap1 field changed- changed
Input schema / properties / days / descriptionPrevious value: -"Number of days to analyze (default: 7)"New value: +"Days to analyse (default 7)"
- Added
get_desk_summary - Changed
get_project_status1 field changed- added
Input schema / properties / includeArchivedAdded value: +{ + "description": "When true, include archived done cards in the card list. Default false.", + "type": "boolean" +}
- Added
merge_projects - Added
move_card - Added
open_desk - Added
register_from_workspace - Added
rename_column - Added
rename_project - Changed
search_code_patterns1 field changed- changed
Input schema / properties / pattern / descriptionPrevious value: -"Code pattern or keyword to search for"New value: +"Keyword to search for"
- Added
search_desk - Added
start_desk_server - Added
update_card - Changed
update_project_status1 field changed- changed
Input schema / properties / notes / descriptionPrevious value: -"Additional notes"New value: +"Notes (replace, do not append)"
9 tool updates
v1.4.2- First observed
add_project - First observed
get_activity_heatmap - First observed
get_project_health - First observed
get_project_status - First observed
get_project_timeline - First observed
get_technology_trends - First observed
list_projects - First observed
search_code_patterns - First observed
update_project_status
TDQS
Scored across 21 tools
Most tools have recognizable distinct purposes, but there is meaningful overlap among the summary/detail/analytics tools: get_desk_summary, list_projects, get_project_status, and the various project analytics tools all read related project data. Project creation is split across add_project, register_from_workspace, and file_under_project, and search_code_patterns is explicitly a deprecated alias of search_desk, which creates avoidable confusion.
Tool names consistently use snake_case with a verb_noun or verb_object pattern, such as get_desk_summary, add_card, move_card, rename_project, and merge_projects. The convention is predictable throughout the set, with only benign variations like file_under_project and start_desk_server.
Twenty-one tools is on the heavy side for a project/desk coordinator, especially because several tools cover closely related summary and analytics views. The deprecated search alias and the repeated 'prefer get_desk_summary first' guidance suggest some tools do not fully earn their place.
The server covers project registration, status updates, Kanban card creation/movement/update, search, analytics, and desk serving. However, lifecycle coverage is incomplete: there is no delete_project, delete_card, or column creation/deletion, and card operations rely on summaries rather than a dedicated get_card tool.
Maintenance
Related MCP Connectors
Shared memory MCP server for Claude Code, Codex, Gemini CLI and Cursor. Cited, editable.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceA server that acts as a bridge between Claude and local Xcode projects, enabling AI-powered code assistance, project management, and automated development tasks without exposing your code to the internet.-
- AlicenseBqualityDmaintenanceA Model Context Protocol (MCP) server that provides Xcode-related tools for integration with AI assistants and other MCP clients.54135,406 npm1MIT
- FlicenseNot gradedqualityFmaintenanceMCP server that provides semantic-level analysis of Swift codebases to AI agents by integrating with Apple's SourceKit-LSP, enabling compiler-grade code understanding and cross-file navigation.76 PyPI126-
- AlicenseAqualityAmaintenanceCode intelligence MCP server for Claude Code providing multi-project code graph, semantic search, session history, knowledge base, and web search.154MIT