Skip to main content
Glama

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.

Licence: Apache 2.0 Swift Stars M-Pineapple/Dev-Project-Coordinator MCP server Buy Me a Coffee

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?"

get_desk_summary

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."

register_from_workspace

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."

add_card, move_card

A new card in the doing column of the current project

"Move the login fix to review, note commit 299b827."

move_card with note

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."

file_under_project

Finds or creates a project with no folder, for writing, legal, accounting or other non coding work

"Which projects need attention?"

get_project_health, get_activity_heatmap

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| M

Handoff 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| D

Who 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_desk is 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.

  • memoryRef is 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.md or docs/grok-bot/PROMPT.md) must tell the agent to call get_desk_summary at 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.

  1. Build:

    git clone https://github.com/M-Pineapple/Dev-Project-Coordinator.git
    cd Dev-Project-Coordinator
    swift build -c release
  2. Add the server. The binary name stays project-coordinator. dpc is an alias.

    {
      "mcpServers": {
        "project-coordinator": {
          "command": "/absolute/path/to/Dev-Project-Coordinator/.build/release/project-coordinator",
          "args": []
        }
      }
    }
  3. Restart the host. Ask: "What is on my desk?" The agent should call get_desk_summary first.

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:

  1. Ask the agent to start the desk server, or run dpc start_desk_server.

  2. 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.

  3. 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_BASE for data outside the git tree. CPC_KNOWLEDGE_BASE still works through v2.x.

  • Open KnowledgeBase/desk/index.html from 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

get_desk_summary, hard cap 800 tokens (~3,200 characters)

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. note is omitted when empty. No archive field is stored

Local page

Analytics tab + Kanban tab as KnowledgeBase/desk/index.html

Interactive board

Opt-in start_desk_server on 127.0.0.1:47821, 0600 write token, Safari Add to Dock

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

KnowledgeBase/projects/ and KnowledgeBase/desk/

Path allowlist

Compiled roots plus SecurityConfig.allowedPaths and DPC_ALLOWED_PATHS

Input limits

Name, path, notes, and search length capped

HTML

User strings escaped on the desk page

Env

DPC_KNOWLEDGE_BASE preferred, CPC_KNOWLEDGE_BASE until v3.0

Stdio-safe logs

Diagnostics go to stderr only, prefix [DPC]


All MCP tools

Tool

Parameters

Purpose

get_desk_summary

optional includeArchived

Compact desk. Use this first. Archived done cards are omitted unless includeArchived is true. The archived count is always reported

list_projects

none

Full roster. Deep dive only

get_project_status

projectName, optional includeArchived

Full detail for one project. The card list skips archived done cards unless includeArchived is true

add_project

name, optional path, description, kind

Manual add

update_project_status

projectName, optional status, notes

Update the desk entry

search_desk

pattern

Search notes, cards, kinds, markdown. Archived cards are included and marked

search_code_patterns

pattern

Deprecated alias of search_desk

get_project_timeline

projectName

Status history and time in each status

get_activity_heatmap

optional days (default 7)

Activity heat map (points, events, daily counts)

get_technology_trends

none

Framework share, emerging tags, adoption timeline (coding only)

get_project_health

none

0 to 100 scores, factors, recommendations

open_desk

none

Write desk/index.html and return its path

add_card

project, title, optional column, memoryRef, linkedPR, note

Add a card. note is a short evidence line

move_card

id, column, optional note

Move a card. Omit note to keep the current one

update_card

id, optional title, column, memoryRef, note

Edit a card. A blank note clears it

rename_column

from, to

Rename a board column

register_from_workspace

cwd, optional gitRemote, branch, openPR

Silent coding register

file_under_project

name, optional kind, description

Non coding find or create

rename_project

from, to

Fix a wrong name

merge_projects

source, target

Absorb a duplicate

start_desk_server

optional rotate

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 release

Executables:

.build/release/project-coordinator
.build/release/dpc

Claude 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-coordinator

Grok Bot

Create a Dev Project Coordinator bot in your Grok Bot:

  1. 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.

  2. 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.

  3. 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.md

Upgrading from v1.x

  1. Rebuild: swift build -c release

  2. Point your MCP host at the same project-coordinator binary

  3. Old project JSON still loads. kind defaults to coding when a path is present

  4. CPC_KNOWLEDGE_BASE still works. Prefer DPC_KNOWLEDGE_BASE. Removal is v3.0

  5. Open get_desk_summary before list_projects

  6. v1.4.x path matching is case-sensitive. If add_project rejects ~/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:


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 tools
add_cardB

Add a Kanban card. Optional memoryRef is an opaque id. DPC never copies memory prose.

NameRequiredDescriptionDefault
noteNoOptional short evidence line, such as a commit or URL. Blank clears it.
titleYesCard title
columnNoColumn (default backlog)
projectYesProject name
linkedPRNoOptional pull request URL or number
memoryRefNoOptional opaque memory id or tag

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
kindNocoding, writing, campaign, research, legal, accounting, business, personal, or other
nameYesProject name
pathNoOptional folder path
descriptionNoOptional description

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
kindNowriting, campaign, research, legal, accounting, business, personal, or other
nameYesProject name inferred from context
descriptionNoOptional description

TDQS

C2.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
daysNoDays to analyse (default 7)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
includeArchivedNoWhen true, list archived done cards as well. Default false.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose3/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
projectNameYesName of the project
includeArchivedNoWhen true, include archived done cards in the card list. Default false.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
projectNameYesName of the project

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

list_projectsB

Full project roster. Prefer get_desk_summary first. Use this for a deep dive only.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose3/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
sourceYesProject to absorb
targetYesProject to keep

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
idYesCard id
noteNoOptional short evidence line, such as a commit or URL. Omit to keep the current note. Blank clears it.
columnYesTarget column

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
cwdYesWorking directory
branchNoOptional current branch
openPRNoOptional open pull request to link as a card
gitRemoteNoOptional git remote URL

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
toYesNew column name
fromYesCurrent column name

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
toYesNew name
fromYesCurrent name

TDQS

C2.5/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
patternYesKeyword to search for

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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.

NameRequiredDescriptionDefault
patternYesKeyword to search for

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
rotateNoRotate the write token and mint a new sign-in code. Open the new sign-in URL once so the Dock app cookie updates.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
idYesCard id
noteNoOptional short evidence line, such as a commit or URL. Omit to keep the current note. Blank clears it.
titleNoNew title
columnNoNew column
memoryRefNoOpaque memory id or tag

TDQS

B3.1/5.0
Behavior3/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
notesNoNotes (replace, do not append)
statusNoNew status
projectNameYesName of the project

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

  1. 17 tool updatesv2.0.0
    • Addedadd_card
    • Changedadd_project4 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"Project description"New value: +"Optional description"
      • addedInput schema / properties / kind
        Added value: +{
        +  "description": "coding, writing, campaign, research, legal, accounting, business, personal, or other",
        +  "type": "string"
        +}
      • changedInput schema / properties / path / description
        Previous value: -"Path to project"New value: +"Optional folder path"
      • changedInput schema / required
        Previous value: -[
        -  "name",
        -  "path"
        -]New value: +[
        +  "name"
        +]
    • Addedfile_under_project
    • Changedget_activity_heatmap1 field changed
      • changedInput schema / properties / days / description
        Previous value: -"Number of days to analyze (default: 7)"New value: +"Days to analyse (default 7)"
    • Addedget_desk_summary
    • Changedget_project_status1 field changed
      • addedInput schema / properties / includeArchived
        Added value: +{
        +  "description": "When true, include archived done cards in the card list. Default false.",
        +  "type": "boolean"
        +}
    • Addedmerge_projects
    • Addedmove_card
    • Addedopen_desk
    • Addedregister_from_workspace
    • Addedrename_column
    • Addedrename_project
    • Changedsearch_code_patterns1 field changed
      • changedInput schema / properties / pattern / description
        Previous value: -"Code pattern or keyword to search for"New value: +"Keyword to search for"
    • Addedsearch_desk
    • Addedstart_desk_server
    • Addedupdate_card
    • Changedupdate_project_status1 field changed
      • changedInput schema / properties / notes / description
        Previous value: -"Additional notes"New value: +"Notes (replace, do not append)"
  2. 9 tool updatesv1.4.2
    • First observedadd_project
    • First observedget_activity_heatmap
    • First observedget_project_health
    • First observedget_project_status
    • First observedget_project_timeline
    • First observedget_technology_trends
    • First observedlist_projects
    • First observedsearch_code_patterns
    • First observedupdate_project_status

TDQS

B3.1/5.0

Scored across 21 tools

Disambiguation3/5

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.

Naming Consistency5/5

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.

Tool Count3/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    A 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.
    -
  • F
    license
    Not graded
    quality
    F
    maintenance
    MCP 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 PyPI
    126
    -
  • A
    license
    A
    quality
    A
    maintenance
    Code intelligence MCP server for Claude Code providing multi-project code graph, semantic search, session history, knowledge base, and web search.
    15
    4
    MIT