Dev Project Coordinator
A local project-tracking MCP server for listing projects, checking status, searching patterns, updating state, and viewing activity/trends/health.
List all tracked projects.
Get current status and details for a specific project.
Search for code patterns/keywords across projects.
Add a project with name and path, plus an optional description.
Update a project's status or notes.
Get a project's status timeline and time-in-status.
Generate an activity heat map for a configurable recent-day window (default 7 days).
Analyze technology usage and trends across projects.
Get health scores and recommendations for all projects.
Note: this schema is narrower than the README and lacks desk summaries, Kanban/card tools, workspace registration, non-coding filing, rename/merge, and desk-server tools.
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.
DPC is a local stdio MCP server. It stores live project state (column, kind, counts, cards) as JSON. It does not host your data. It does not replace a memory or RAG product.
v2.0.0 · official Swift MCP SDK · Apache 2.0 · local JSON knowledge base
Quick start
Needs macOS 13+, Swift 6.0+ (Xcode 16+) and an MCP host (Claude Desktop, Cursor, Claude Code, or Grok Build). Linux runs through the Dockerfile.
Build:
git clone https://github.com/M-Pineapple/Dev-Project-Coordinator.git cd Dev-Project-Coordinator swift build -c releaseAdd the server. The binary name stays
project-coordinator.dpcis an alias.{ "mcpServers": { "project-coordinator": { "command": "/absolute/path/to/Dev-Project-Coordinator/.build/release/project-coordinator", "args": [] } } }Restart the host. Ask: "What is on my desk?" The agent should call
get_desk_summaryfirst.
Coding folders must sit under an allowed root. Non-coding work can have no path.
Related MCP server: sl-test
Open it as a Mac app
The desk page is a local file by default. For drag-and-drop, and to pin it in the Dock like an app:
Ask the agent to start the desk server, or run
dpc start_desk_server.Open the sign-in URL once in Safari. It carries a one-time code, valid once, for 10 minutes. That sets a session cookie (the write token) and redirects to
http://127.0.0.1:47821/with no code in the address bar.Safari: File > Add to Dock. The Dock shortcut is the plain URL. It does not store the code or the write token.
The port is fixed at 47821. Change it with DPC_DESK_PORT or deskPort in security-config.json. If that port is busy, start fails with a clear error. It does not pick a random port.
Call start_desk_server again while it is running to mint a fresh sign-in code without rotating the write token. Rotate the write token with start_desk_server rotate=true, or dpc start_desk_server --rotate. Open the new sign-in URL once so the Dock app cookie updates.
Who is this for?
1. Agent user with several repos
You already have coding agents. You do not want a second project-management SaaS.
Start with:
"I am in this repo. Register it."
"What is blocked right now?"
"Add a card for the failing tests and put it in doing."
What you get: silent register from cwd and git remote, a compact desk under 800 tokens, cards linked to a PR when you pass one.
2. Mixed coding and non-coding desk
You also run accounting, legal, writing, or campaign work in the same chat.
Start with:
"File this under a legal project called Q4 review."
"Rename that to Autumn review."
"Merge Duplicate Campaign into Autumn review."
What you get: find-or-create with no folder, a one-line notice Filed under new project: …, and rename/merge when the guess is wrong.
3. Privacy-first local setup
You will not send a board to a hosted PM tool.
Start with:
Build from source. Point the host at
.build/release/project-coordinator.Optional:
DPC_KNOWLEDGE_BASEfor data outside the git tree.CPC_KNOWLEDGE_BASEstill works through v2.x.Open
KnowledgeBase/desk/index.htmlfrom disk.
What you get: JSON on your disk, path allowlisting, no account, no telemetry.
4. Already using a memory or RAG product
You store decisions in a memory MCP. You do not want that text copied here.
How they fit together:
DPC | Memory / RAG | |
Job | Live structured state: column, owner, 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.
5. Grok Bot user
You want a specialised desk operator.
Start with: paste docs/grok-bot/PROMPT.md, then add this MCP by hand. Templates cannot carry a custom MCP.
What you get: the same JSON desk. An optional private Grok Bot Page is a view, not a second store. Never auto-share.
Full feature list
Desk
Capability | Detail |
Compact summary |
|
Any language | Shallow detector: swift, python, javascript, typescript, node, go, rust, ruby, php, java, kotlin, csharp, dotnet, cpp, docker, web, plus spm / xcode-project / xcode-workspace / swiftui from top-level files |
Non-coding kinds | writing, campaign, research, legal, accounting, business, personal, other. Path optional |
Auto-register | From cwd + git remote + optional open PR. Never creates folders. Adds a starter card |
Find or create | Normalised name match, near-duplicate guard, rename and merge. Adds a starter card |
Kanban | Columns backlog, doing, review, done, parked. Users may rename |
Cards | id, project, title, column, order, due, optional memoryRef |
Local page | Analytics tab + Kanban tab as |
Interactive board | Opt-in |
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–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–2 coding projects), adoption timeline. Coding projects only |
Project timeline | Created date, current status, time in each status. Collapsible per project |
No emoji as data. No remote fonts or assets. Light and dark follow the system.
Safety and storage
Capability | Detail |
Local JSON |
|
Path allowlist | Compiled roots plus |
Input limits | Name, path, notes, and search length capped |
HTML | User strings escaped on the desk page |
Env |
|
Stdio-safe logs | Diagnostics go to stderr only, prefix |
All MCP tools
Tool | Parameters | Purpose |
| — | Compact desk. Use this first |
| — | Full roster. Deep dive only |
|
| Full detail for one project |
|
| Manual add |
|
| Update the desk entry |
|
| Search notes, cards, kinds, markdown |
|
| Deprecated alias of |
|
| Status history and time in each status |
| optional | Activity heat map (points, events, daily counts) |
| — | Framework share, emerging tags, adoption timeline (coding only) |
| — | 0–100 scores, factors, recommendations |
| — | Write |
|
| Add a card |
|
| Move a card |
|
| Edit a card |
|
| Rename a board column |
|
| Silent coding register |
|
| Non-coding find or create |
|
| Fix a wrong name |
|
| Absorb a duplicate |
| optional | Opt-in loopback Kanban. Returns a bookmark URL and a one-time sign-in URL (valid once, for 10 minutes). Call again to mint a new code without rotating |
You talk in natural language. The host maps your words onto these tools.
Example workflow
You: I am in ~/Developer/widget-kit on branch main, PR 42. Register it.
Agent: calls register_from_workspace. Detected javascript.
You: What needs me?
Agent: calls get_desk_summary. Compact table, no notes dump.
You: File the invoice chase under a new accounting project.
Agent: calls file_under_project. "Filed under new project: Invoice chase"
You: Open the desk.
Agent: calls open_desk. You open KnowledgeBase/desk/index.html from disk.Prerequisites
macOS 13+ for the default path
Swift 6.0+ (Xcode 16+)
An MCP host
Optional: Docker for the Linux image
Installation
Build from source
git clone https://github.com/M-Pineapple/Dev-Project-Coordinator.git
cd Dev-Project-Coordinator
swift build -c releaseExecutables:
.build/release/project-coordinator
.build/release/dpcClaude Desktop
Settings → Developer → Model Context Protocol. Use the JSON in Quick start. No --port flag. This is stdio, not HTTP.
Cursor
Add the same server entry to your Cursor MCP settings JSON.
Claude Code
Register the same command path.
Grok Build
grok mcp add dpc -- /absolute/path/to/Dev-Project-Coordinator/.build/release/project-coordinatorGrok Bot
Create a Dev Project Coordinator bot in your Grok Bot:
Create a new bot, or ask the bot you use to create bots to make one, and give it the prompt below as its instructions.
Add this server to that bot as a custom MCP (see the install notes in the prompt). Bot templates cannot carry a custom MCP, so this step is always manual.
Tell the bot what you are working on. It registers projects for you, keeps the board current, and can show the Analytics and Kanban views as a private Page.
## Identity
You are a desk operator for Dev Project Coordinator (DPC). You keep a local JSON board truthful. You do not write code in the user's repos. You do not host user data. You do not replace a memory or RAG product.
## Session start
1. Call `get_desk_summary` first.
2. Do not call `list_projects` unless the user asks for a deep dive.
3. If this is a coding session and you have a working directory, call `register_from_workspace` with cwd, git remote, current branch, and the open PR if you have it. Never create folders on disk.
4. If this is non-coding work, call `file_under_project`. If the tool says `Filed under new project: <name>`, tell the user that line. If the guess is wrong, call `rename_project` or `merge_projects` once.
## Board rules
- One card, one owner, one column.
- Columns default to backlog, doing, review, done, parked. Rename only when the user asks.
- 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-coordinatorOn 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.
Anti-jobs
Do not implement Trello, Asana, or Jira.
Do not copy memory prose into cards or notes.
Do not start
start_desk_serverunless the user asks for drag-and-drop.Do not claim the template "just works" without the MCP.
</details>
The matching skill is in [docs/grok-bot/SKILL.md](docs/grok-bot/SKILL.md).
Templates cannot include this server. After you paste [docs/grok-bot/PROMPT.md](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.
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
```text
Dev-Project-Coordinator/
├── Sources/
│ ├── ProjectCoordinator/ # Library
│ ├── project-coordinator/ # Executable
│ └── dpc/ # Alias executable
├── Tests/ProjectCoordinatorTests/
├── KnowledgeBase/ # Patterns, templates, local JSON
├── docs/grok-bot/ # Paste-in prompt and skill
├── docs/images/ # Logo, favicon, icons, screenshots
├── scripts/
├── Package.swift
└── README.mdUpgrading from v1.x
Rebuild:
swift build -c releasePoint your MCP host at the same
project-coordinatorbinaryOld project JSON still loads.
kinddefaults to coding when a path is presentCPC_KNOWLEDGE_BASEstill works. PreferDPC_KNOWLEDGE_BASE. Removal is v3.0Open
get_desk_summarybeforelist_projectsv1.4.x path matching is case-sensitive. If
add_projectrejects~/Github/..., pass~/GitHub/...(same folder on macOS). v2.0 resolves the on-disk path, so either spelling works when they are the same directory
More MCP servers by M-Pineapple
Other MCP servers in this portfolio:
CryptoAnalysisMCP. Cryptocurrency technical analysis for Claude Desktop.
Warp Command Runner. Give any chat AI a real terminal.
Msty Admin MCP. Administer Msty Studio Desktop.
Member Berries. Apple Calendar, Notes and Reminders with personality.
SeaShell. Talk to Claude from any terminal block.
TextEdit MCP. Formatted RTF documents via macOS TextEdit.
HubSpot Auditor. Read-only HubSpot portal audit.
💖 Support This Project
If Dev Project Coordinator has helped you keep a local desk for your agents, consider supporting its development:
Your support helps me:
Maintain and improve DPC with new features
Keep the project open-source and free for everyone
Dedicate more time to addressing user requests and bug fixes
Explore new tools that enhance developer productivity
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/.
License
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 with ❤️ from 🍍 Pineapple
Available Tools
9 toolsadd_projectC
Add a new Xcode project to track
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Project name | |
| path | Yes | Path to project | |
| description | No | Project description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and mostly fails: it doesn't say whether the path must already exist, whether duplicate project names are rejected, whether any files are touched, or what the tool returns. The only behavioral signal is 'to track', implying read-only registration rather than project creation, which is useful but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the verb and scope front-loaded and zero filler. Its economy is appropriate, though it is arguably so brief that it leaves the gaps noted in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter mutation with no annotations and no output schema, the description is minimally adequate but omits outcome information an agent needs — what happens on success, duplicate handling, and whether the path is validated. A sentence on side effects and return would complete it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name, path, and description are already documented in the schema. The description adds nothing about formats (e.g. absolute vs relative path) or the optional description field, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a new Xcode project') plus a scoping purpose ('to track'), which clearly separates it from the read-oriented siblings like list_projects and get_project_status. It does not explicitly name any sibling, so it falls short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives. The 'to track' phrase hints that this registers a project rather than creating one, but the agent gets no instruction on when to call this versus update_project_status or what conditions must hold first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_activity_heatmapC
Show project activity heat map for recent days
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to analyze (default: 7) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses nothing about read-only behavior, permissions, aggregation unit, or return shape. It doesn't even state whether the heat map is scoped to all projects or a single one, which is a meaningful gap for a reporting tool with no safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no filler, and the core resource is front-loaded. It is efficient, though its brevity comes at the cost of the missing scope information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a sibling set of overlapping analytics tools, the description should at minimum state scope and that it is a read-only aggregate report. Instead it leaves both unspecified, so an agent cannot confidently distinguish or invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'days' parameter is fully documented with its default, so the schema does the work. The description's phrase "recent days" only loosely echoes it and adds no format or range guidance, so this is the baseline case rather than an above-baseline one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase "Show project activity heat map" names a concrete resource (activity heat map) and verb (show), so the agent knows the general output. However, it doesn't clarify scope — whether the heat map covers one project or all projects, or what 'activity' means (commits, events, tickets) — and gives no differentiation from the adjacent get_project_timeline or get_project_health tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus get_project_timeline, get_project_health, or get_technology_trends, all of which overlap in reporting project activity over time. No prerequisites or exclusions are given, so the agent must guess from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_healthB
Get health scores and recommendations for all projects
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the return content generally but does not say whether the operation is read-only, what permissions are needed, how scores are computed, how fresh the data is, or whether pagination applies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It efficiently communicates the action and the scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no parameters, no output schema), but the description only vaguely says 'health scores and recommendations' without explaining the return shape or per-project structure. With no annotations and no output schema, it should provide slightly more context for correct interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty input schema, so there is no parameter semantics to explain. The baseline for a zero-parameter tool is 4, and the description does not need to compensate for missing schema detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get health scores and recommendations for all projects.' It is clear what the tool returns, but it does not explicitly differentiate itself from close siblings like get_project_status, which also deals with project health/status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance, no exclusions, and no named alternatives. It only implies that the tool is used to retrieve health scores for all projects, without explaining when to choose it over list_projects or get_project_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_statusC
Get the current status and details of a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | Yes | Name of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read but discloses nothing about what 'details' include, whether the lookup fails for unknown projects, or what permissions are needed — leaving the agent guessing about behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It is efficient but thin rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool this is minimally viable, but with no annotations and no output schema the description should say what status/details are returned and how failures behave. Those gaps leave it just adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter and 100% schema description coverage, the schema already documents projectName fully. The description adds no extra semantics such as accepted formats or lookup behavior, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('status and details of a specific project'), which is clearly distinct from siblings like list_projects and add_project. However, 'details' is undefined, and it does not distinguish itself from adjacent readers such as get_project_health or get_project_timeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_project_health, get_project_timeline, or list_projects. The agent must infer the boundary from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_timelineB
Get status timeline and duration for a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectName | Yes | Name of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; 'Get' signals a read-only operation and 'status timeline and duration' discloses the shape of the result. It says nothing about ordering, date ranges, how duration is computed, or whether the timeline is truncated, which are the details that matter for interpreting the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It is efficiently written, though the brevity is closer to under-specification than to dense information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool, this is minimally adequate, but with no output schema the description should explain what a 'timeline' entry contains and how 'duration' is measured. Those omissions leave an agent unsure of what it will actually receive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter with 100% schema description coverage, so the schema already documents projectName fully. The phrase 'for a project' merely restates that parameter and adds no format or lookup guidance (e.g., exact name vs. ID).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get') and resource ('status timeline and duration for a project'), and it even states what the response contains. However, it does not distinguish itself from the closely related sibling get_project_status, leaving the agent to guess which tool yields which view of project status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus get_project_status or get_project_health, and no mention of prerequisites or exclusions. The only implied context is that a project name is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_technology_trendsB
Analyze technology usage across all projects
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It implies a read-only analysis but says nothing about what data source is scanned, whether results are cached or costly, or what the analysis output contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. It is efficient, though also thin enough that it leaves obvious questions unanswered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description must describe return values, but it never says what an 'analysis' produces — counts, rankings, per-project breakdowns — nor how 'technology' is detected. For a zero-param tool this is the only source of that information, and it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. There is nothing the description needs to compensate for on the parameter side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Analyze') and resource ('technology usage') with an explicit scope ('across all projects'), which distinguishes it from project-scoped siblings like get_project_health and get_activity_heatmap. However, it never names a sibling or clarifies exactly what 'technology' means (languages, frameworks, dependencies).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'across all projects' implies this is the cross-project aggregation tool, giving an agent an implicit reason to pick it over per-project tools. There is no explicit when-to-use, when-not-to-use, or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsB
List all Xcode projects being tracked
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden, but it does not state whether the list is paginated, sorted, filtered by tracking status, or what access is required. The phrase 'being tracked' hints at scope but leaves most operational behavior undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the key action and resource front-loaded. There is no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool, the description is minimally adequate, but with no annotations or output schema it does not describe the returned project fields, ordering, or whether empty results are possible. It covers the core purpose but leaves some relevant context implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter semantics are inherently complete. The description does not need to explain inputs beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb (List) and resource (Xcode projects) with scope (being tracked). It clearly differs from mutation siblings like add_project and update_project_status, though it does not explicitly differentiate from read-oriented siblings such as get_project_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no explicit guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The intended use as a broad enumeration tool is only implied by the wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_code_patternsC
Search for code patterns across all projects
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | Code pattern or keyword to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden, yet it says nothing about what comes back (matches, files, line numbers), result limits, or whether 'across all projects' respects permissions. The pattern semantics (regex vs literal, case sensitivity) are also undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with zero waste and no filler, though the brevity contributes to the specification gaps noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no annotations and no output schema, the description should at least hint at return shape and pattern format. As written, an agent knows only that it searches projects, not how to phrase the pattern or what to expect back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single parameter ('Code pattern or keyword to search for'), so the schema already establishes meaning. The description only adds the 'across all projects' scoping, and doesn't clarify pattern syntax or matching behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb+resource ('Search for code patterns') with scope ('across all projects'), which is more than the title alone conveys. It doesn't explicitly distinguish from any sibling, though the sibling list contains only project-management tools, so ambiguity risk is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, no alternatives. The description never says whether this is for finding definitions, usages, or whether it complements any of the listed project tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_project_statusC
Update the status or notes for a project
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Additional notes | |
| status | No | New status | |
| projectName | Yes | Name of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It signals that this is a mutation tool, but it does not disclose permission requirements, reversibility, valid status values, side effects, or what happens to existing notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with no wasted words. It is front-loaded with the core action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is too thin. While the simple schema covers parameters, an agent still lacks context about status constraints, authorization needs, and the effect of updating notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents projectName, status, and notes. The description adds no parameter meaning beyond the schema and does not clarify allowed status values or notes replacement behavior, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: updates a project's status or notes. It is clear enough to distinguish a mutation from sibling reads like get_project_status, but it does not explicitly name or differentiate itself from those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool is relevant by saying it updates status or notes, but it gives no explicit when-to-use guidance, no exclusions, and no comparison to siblings such as get_project_status or add_project.
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.
9 tool updates
v1.4.2- First observed
add_project - First observed
get_activity_heatmap - First observed
get_project_health - First observed
get_project_status - First observed
get_project_timeline - First observed
get_technology_trends - First observed
list_projects - First observed
search_code_patterns - First observed
update_project_status
TDQS
Scored across 9 tools
The tools mostly target distinct concerns: project CRUD, status, code search, timeline, activity heatmap, technology trends, and health. There is slight potential confusion among get_project_status, get_project_timeline, and get_project_health because they all report project state from different angles, but descriptions make the distinctions reasonably clear.
All tool names follow a consistent snake_case verb_noun pattern: list_projects, get_project_status, add_project, update_project_status, search_code_patterns, etc. No mixed casing or inconsistent verb styles are present.
Nine tools is well-scoped for a project coordination server. Each tool covers a meaningful operation without obvious redundancy or excessive granularity.
The surface covers creation, listing, status updates, code search, timeline, activity, trends, and health analytics. A delete/archive/remove-project operation appears to be the main lifecycle gap, but core workflows are otherwise well supported.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceA server that acts as a bridge between Claude and local Xcode projects, enabling AI-powered code assistance, project management, and automated development tasks without exposing your code to the internet.-
- AlicenseBqualityDmaintenanceA Model Context Protocol (MCP) server that provides Xcode-related tools for integration with AI assistants and other MCP clients.5489,697 npm1MIT
- FlicenseNot gradedqualityFmaintenanceMCP server that provides semantic-level analysis of Swift codebases to AI agents by integrating with Apple's SourceKit-LSP, enabling compiler-grade code understanding and cross-file navigation.410 PyPI126-
- AlicenseAqualityAmaintenanceCode intelligence MCP server for Claude Code providing multi-project code graph, semantic search, session history, knowledge base, and web search.154MIT