primer-mcp
Allows exporting primer-mcp tickets to Jira and importing a Jira epic and its hierarchy into primer-mcp, mapping ticket types (Epic, Story, Task, ADR) to Jira concepts and tracking Jira keys via external refs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@primer-mcpI want to add user authentication"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
primer-mcp
Beta — the core workflow is stable and tested, but the tool is new. Expect rough edges.
A Jira-lite MCP server that guides planning-first workflows for AI-assisted development — tickets as markdown files, your AI agent as the interface.
Why
Getting real value from AI coding agents takes more than prompting — it takes shaping what they build, engineering the workflow around them, and deploying something that holds up in practice. Left to their own devices, agents jump straight to implementation. Primer-mcp makes them plan first: state why the work matters, record decisions and weigh trade-offs, break it into stories and tasks, then complete and verify each one. The tickets are plain markdown with YAML frontmatter, committed alongside your code — no external service, no database, fully visible in your repo and conveniently browsable with tools like Obsidian.
primer-mcp is designed for solo developers and small projects — one person (and their AI agent) working through a backlog. It doesn't have assignment, notifications, or multi-user coordination, and that's deliberate: it's a lightweight complement to the AI workflow, not a replacement for Jira.
Related MCP server: kanban-lite
Quick start
Requires Python 3.12+ and uv.
Add to your MCP client config (e.g. Claude Code settings.json, Claude Desktop claude_desktop_config.json):
{
"mcpServers": {
"primer-mcp": {
"command": "uvx",
"args": ["primer-mcp"]
}
}
}That's it — your MCP client downloads and runs primer-mcp automatically. You don't need to install anything manually.
Tell your AI agent what you want to build — it handles the rest. The server guides the agent through a planning-first workflow: why the work matters, decisions, stories, tasks, completion. Not sure what to do next? Ask your agent — it reads the current state and knows what comes next.
Manual install (optional)
If you prefer to install primer-mcp as a standalone tool (e.g. for the list-actionable CLI command):
uv tool install primer-mcp
# Update to latest
uv tool upgrade primer-mcp
# Uninstall
uv tool uninstall primer-mcpWhat it looks like
A typical session — you describe the work, the agent handles the planning:
You: I want to add user authentication.
Agent: You have EP-001: "Launch the app" — auth fits under that.
Or I can create a separate epic if this is a bigger initiative.
You: EP-001 is fine.
Agent: Before we build, we should decide on the auth approach.
A few common options:
1. JWT with refresh tokens — stateless, good for mobile/SPAs
2. Server-side sessions — simple, but needs sticky storage
3. OAuth2 only — delegates to a provider, less to maintain
...
You: Option 1 — we need mobile support.
Agent: I'll record that decision so we don't revisit it later.
→ Recorded ADR-003: "Use JWT with refresh tokens"
Rejected: server-side sessions (no mobile support),
OAuth2 only (need local accounts too)
Breaking this into stories.
→ Created ST-005: "Login and registration endpoints"
→ Created ST-006: "Token refresh and revocation"
And tasks for the first story:
→ Created TK-010: "Add /register endpoint with validation"
→ Created TK-011: "Add /login endpoint returning JWT pair"
→ Created TK-012: "Write integration tests for auth flow"
You: Let's start with TK-010.
Agent: → Started TK-010
[implements the register endpoint]
Done — added POST /register with email/password validation,
password hashing, and duplicate-email check.
→ Completed TK-010
You: Looks good, verify it.
Agent: → Verified TK-010 (evidence: "all tests pass — a1b2c3d")
TK-011 is next. Want me to continue?Every ticket is a markdown file in primer/, committed alongside your code. The export_graph tool visualises how they connect:

Clone the repo and open assets/demo-graph.html for the interactive version — click any node to see its full ticket.
Since tickets are plain markdown with wikilinks, you can also open primer/ as an Obsidian vault for a live graph that updates as tickets change — no need to re-export.
Tools
Your AI agent calls these tools automatically — you don't need to invoke them directly. You can also ask your agent to call a specific tool if you want more control.
Setup
Tool | What it does |
| Create the |
Planning
Tool | What it does |
| Create an epic — the top-level container for a body of work |
| Record an architecture decision: context, decision, rejected alternatives, consequences |
| Create a story under an epic — a deliverable with acceptance criteria |
| Create a task under a story — a concrete unit of work with a testable outcome |
| Create a spike — a timeboxed investigation to answer a question |
Execution
Tool | What it does |
| Move a task to in-progress |
| Mark a task completed with notes on what was done |
| Verify a completed task with evidence (point at the commit) |
| Close a spike with findings |
Query
Tool | What it does |
| List what can be acted on right now, with epic context and recommendations |
| Read a ticket by ID with its full body |
| List tickets, filterable by type or status |
| Amend a ticket's status, dependencies, body sections, or external refs |
Export
Tool | What it does |
| Generate a self-contained HTML file visualising the project as an interactive graph |
Prompts
Prompt | What it does |
| Walk through a planning conversation before creating a story |
| Export primer-mcp tickets to Jira via a Jira MCP server |
| Import a Jira epic and its hierarchy into primer-mcp |
Agent instructions
When your project is initialized (automatically on first use, or via init_project), this section is appended to your agent config file (CLAUDE.md, AGENTS.md) to guide the agent. If you prefer to add it manually:
## primer-mcp
This project uses primer-mcp for planning-first development.
Tickets are markdown files under `primer/` — they are yours to read and edit.
Prefer the tools for creating and updating them: they allocate IDs, follow the templates
and guide the workflow. Hand-edit where the tools fall short.
- Plan before code. Recommended flow: Epic -> ADR -> Story -> Task,
suggest rather than enforce — skip steps when it makes sense.
- Unsure what to do next? Call `list_actionable`.
- Completion is two-phase: `complete_task` with notes, then `verify_task`
with evidence (point at the commit, not the output). Both are
recommended — the tools will nudge you if you skip a step.
- After tickets creation or changes, offer to regenerate the project graph with `export_graph`.
- Before committing, check that completion notes on finished tickets
still reflect the actual work — update both the frontmatter
`completed_notes` and the `## Completion Notes` section if needed.
- Before implementing new work, propose a ticket and parent. Small fixes (1–2
tasks) go under the standing bug-fix story; larger efforts get their
own story. The user can decline.Graduating to Jira (experimental)
primer-mcp tickets map directly to Jira concepts (Epic, Story, Task, ADR). When a project outgrows local markdown files, use the export_jira prompt with any Jira MCP server to push tickets to Jira. The external_ref field on each ticket tracks the Jira key, so re-exports update existing issues instead of creating duplicates. import_jira goes the other direction. Both prompts are experimental and have not been tested end-to-end.
This repo dogfoods itself
The primer/ directory in this repo is the project's own backlog, created with the tools in src/ and committed deliberately — a tool that tells you to commit your ticket store should commit its own. Browse it on GitHub to see what a real store looks like before installing:
primer/adrs/— design decisions, including rejected alternatives and whyprimer/stories/andprimer/tasks/— what is done, what is next, and verification evidence
It is project management, not part of the package. The wheel ships src/primer_mcp only, and primer/ is excluded from the distribution. Your own primer/ is created automatically when you start planning.
License
MIT
Available Tools
17 toolscomplete_spikeA
Close a spike by recording its findings — the answer to the question it was investigating and any recommendations. Works from any status.
| Name | Required | Description | Default |
|---|---|---|---|
| findings | Yes | ||
| spike_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It reveals a genuinely useful behavior — the tool can be invoked from any status, so no state preparation is needed — and defines the content contract for findings. It doesn't disclose reversibility or downstream effects on related items, but for a narrow 2-param mutation the core workflow behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The action is front-loaded and the em-dash clarification of findings earns its place, as does the status note. Every sentence adds 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 2-parameter tool with an output schema carrying return-value info, the description is nearly complete: it covers the action, the content of findings, and status flexibility. The only gap is the post-condition — what state the spike ends in and whether the action is reversible.
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 0%, so the description must compensate. It adds real meaning to findings ('the answer to the question it was investigating and any recommendations'), which is the parameter most likely to confuse an agent. But spike_id receives no semantic guidance beyond its name, and findings has no format or structure details, so compensation is only partial.
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 and resource — 'Close a spike by recording its findings' — and further clarifies findings as 'the answer to the question it was investigating and any recommendations.' This clearly distinguishes the tool from siblings like complete_task without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Works from any status' is an explicit precondition note telling the agent that no status prerequisite check is required before calling. However, it doesn't name alternatives or state when-not-to-use it (e.g., when to prefer complete_task), so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_taskA
Mark a task as completed with notes on what was done. The notes parameter is a terse one-liner for the frontmatter field; write a fuller summary (approach, key changes, decisions) into the
Completion Notes body section of the ticket separately.
Ideally call start_task first, but this works from any status. After this, call verify_task with evidence to finalise.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | Yes | ||
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains that notes is a terse frontmatter one-liner and that a fuller summary should be written into the '## Completion Notes' body section separately. It also clarifies that the tool works from any status, which proactively prevents the agent from assuming a prerequisite. It does not detail side effects beyond status change, but it covers the key behavioral nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler. The primary purpose is front-loaded, followed by parameter nuance and workflow guidance. Every sentence earns its place without redundant restatement of the tool name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with an output schema present, the description is complete: it defines the action, explains the notes parameter, clarifies the optional prerequisite, and tells the agent the next step. No critical context for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for notes by specifying it is a 'terse one-liner for the frontmatter field' and directing fuller details elsewhere. task_id is left to inference, but its purpose is obvious from the name and the required-parameter context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Mark a task as completed with notes on what was done.' It clearly distinguishes this from sibling workflow tools by framing itself as the middle step between start_task and verify_task, so an agent can identify its role without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit sequencing context: 'Ideally call start_task first, but this works from any status' and 'After this, call verify_task with evidence to finalise.' This tells the agent when in the workflow to use the tool, but it does not explicitly state when not to use it relative to complete_spike or update_ticket.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_spikeA
Create a Spike under a story — a timeboxed investigation to answer a specific question before committing to an implementation approach. The parent story must already exist. When done, call complete_spike with your findings.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| timebox | Yes | ||
| question | Yes | ||
| story_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It discloses that this creates a persistent spike entity under an existing story, that the story must already exist, and that the spike has a lifecycle ending with complete_spike. It doesn't detail failure modes or authentication, but the essential behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The core action and definition are front-loaded, and the second sentence adds the essential prerequisite and follow-up step. Every sentence contributes useful 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 create tool with four scalar required parameters and an output schema, the description covers the key context: what a spike is, that it belongs under an existing story, and what to do after completion. Minor gaps such as the expected format for timebox are not critical given the output schema and self-explanatory parameter names.
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 0%, so the description must compensate. It maps well to the parameters: 'under a story' implies story_id, 'timeboxed' implies timebox, and 'answer a specific question' implies question. Title is less explicitly addressed but is self-explanatory as a parameter name. The semantic mapping is sufficient for an agent to construct valid arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Create a Spike under a story', and defines what a Spike is ('a timeboxed investigation to answer a specific question'). This clearly distinguishes it from create_story and other sibling tools, and the phrase 'under a story' establishes the hierarchy.
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 clear invocation context: the parent story must already exist, and when the spike is done, complete_spike should be called with findings. It does not explicitly name alternatives or when-not-to-use cases, but the prerequisite and follow-up provide enough guidance for correct use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_storyA
Create a Story under an epic — a deliverable with acceptance criteria. The epic must exist — if one hasn't been created yet, call plan_epic first. The user will have described their goals; use that to create the epic, asking for clarification if needed. If no ADR has been recorded, the response will suggest capturing decisions first, but the story is still created.
Pass adr_ids to link the story to the architectural decisions that govern it. Each ADR must exist and belong to the same epic.
After creating stories, present the plan to the user and wait for their agreement before creating tasks or starting work.
| Name | Required | Description | Default |
|---|---|---|---|
| what | Yes | ||
| title | Yes | ||
| adr_ids | No | ||
| epic_id | Yes | ||
| definition_of_done | No | ||
| acceptance_criteria | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and delivers: prerequisite validation (epic must exist), a non-blocking warning behavior for missing ADRs, a hard validation constraint ('Each ADR must exist and belong to the same epic'), and the post-creation contract to pause for user agreement. This goes well beyond the generic 'Create a Story' phrase.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight paragraphs with no filler; each sentence carries operational value and the core purpose is front-loaded. The final paragraph is more agent-workflow instruction than tool description, but it earns its place by preventing premature task creation. Slightly long, but justified for the tool's workflow complexity.
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?
An output schema exists, so return values need no explanation. The description covers prerequisites, validation, parameter semantics for the most complex param, and follow-up workflow. Remaining gaps: the meaning of `what` and `definition_of_done`, and no explicit contrast with create_spike for when a spike is the right artifact instead of a story.
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 0%, so the description must compensate. It explains adr_ids well (purpose plus existence/same-epic validation) and lightly covers epic_id and acceptance_criteria. However, the required `what` parameter and optional `definition_of_done` are completely unexplained, leaving an agent to guess their content.
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 opening sentence, 'Create a Story under an epic — a deliverable with acceptance criteria,' states a specific verb plus resource and defines what a Story is. This clearly differentiates it from siblings like plan_epic, create_task, and create_spike with minimal effort.
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 explicit routing: 'if one hasn't been created yet, call plan_epic first.' It also discloses the conditional when ADRs are missing ('the story is still created') and the required follow-up workflow (present plan, wait for agreement before creating tasks). An agent knows exactly when and in what sequence to call this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskA
Create a Task under a story — a concrete unit of implementation work with a testable outcome. The parent story must already exist.
After breaking a story into tasks, present the task list to the user before starting work — don't create tasks and immediately begin implementing.
For small bug fixes (1-2 tasks), prefer adding a task under the standing bug-fix story rather than creating a new story. Suggest a dedicated story only when the fix spans 3+ tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| story_id | Yes | ||
| what_to_do | Yes | ||
| testable_outcome | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that the parent story must already exist and that task creation should be followed by presenting the task list, not immediate implementation. However, it does not mention possible side effects beyond creation, failure behavior, permissions, or whether results are persisted, which a state-changing tool with no annotations could usefully state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short paragraphs with no filler. The core purpose is front-loaded, followed by the prerequisite, workflow constraint, and bug-fix policy—each sentence adds operational value.
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 creation tool with four required parameters and no parameter descriptions, the description covers the essential context: what a task is, that a story must already exist, the expected workflow, and when to prefer a task over a new story. Because an output schema exists, return-value detail is not required. It could be more complete by explicitly contrasting with create_spike, but the implementation-focused definition largely covers that.
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 0%, so the description must compensate. It indirectly clarifies story_id (parent story must exist), what_to_do (implementation work), and testable_outcome (testable outcome), but it never maps these concepts to the parameter names or explains expected formats. Title is left entirely to its self-evident name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a Task under a story.' It adds a precise definition—'a concrete unit of implementation work with a testable outcome'—which clearly distinguishes tasks from stories and spikes among the sibling 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?
The description gives an explicit prerequisite ('The parent story must already exist'), a workflow directive (present the task list before starting work), and a clear alternative policy for bug fixes (prefer bug-fix story for 1-2 tasks, suggest a dedicated story for 3+). This tells an agent when and how to use the tool versus creating a new story.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ticketA
Delete a ticket. Non-todo tickets are deleted with a warning. Children are reported but not deleted — call delete_ticket on each to cascade. After all deletions, call sweep_blocked_by to clean up dangling references. Recoverable from git history.
| Name | Required | Description | Default |
|---|---|---|---|
| ticket_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it succeeds. It discloses that non-todo tickets produce a warning, children are reported but not deleted, dangling references need a follow-up sweep, and the deletion is recoverable from git history. This gives the agent essential behavioral expectations before invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, then adds only high-value behavioral caveats. Every sentence earns its place, and the procedural instructions are logically ordered without excessive detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter deletion tool with an output schema, the description is complete. It covers the main operation, edge-case behavior for non-todo tickets, child handling, required follow-up cleanup, and reversibility. No critical operational context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needs to compensate for parameter meaning, but it does not explain ticket_id beyond the schema's own string type and title. The connection between 'a ticket' and ticket_id is implicit rather than explicit, leaving format, source, and linkage behavior undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Delete a ticket.' It further differentiates behavior for non-todo tickets and distinguishes itself from sibling tools by clarifying that child ticket deletion is not automatic. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit procedural guidance: call delete_ticket on each child to cascade, and call sweep_blocked_by after all deletions. It does not state when not to use this tool versus alternatives, but since no sibling tool performs the same deletion operation, the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_graphA
Generate a self-contained HTML file visualising the project as an interactive graph. Opens in any browser with no external requests. Nodes are coloured by type and status; edges show both hierarchy (epic -> story -> task) and dependencies (blocked_by). Click a node to see its details. On-demand — call when you want a snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does disclose useful traits: self-contained HTML, no external requests, browser-compatible, node/edge styling, and interactivity. However, it does not clarify whether the tool writes a file to disk, whether it overwrites an existing file, or whether exporting has any side effects on project data.
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 five short, information-dense sentences with no filler. It front-loads the primary purpose and then adds distinguishing characteristics and usage context. Every sentence contributes useful 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?
The tool is simple and an output schema exists, so return value details are covered. However, the only parameter is left completely unexplained, and file-output behavior is ambiguous. These are real gaps for an agent deciding whether to pass output_path or rely on the default.
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 0%, and the only parameter, output_path, is not mentioned anywhere in the description. The description does nothing to explain what output_path controls, what its null default means, or how it should be supplied. This is a significant gap because the description must compensate for the schema's lack of documentation.
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: 'Generate a self-contained HTML file visualising the project as an interactive graph.' It is clearly distinct from the sibling project-management tools such as create_task, list_tickets, and init_project, which do different things. The description also explains graph features, making the purpose unmistakable.
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 clear usage context: 'On-demand — call when you want a snapshot.' This tells the agent when the tool is appropriate. It does not explicitly name alternatives or state when not to use it, but the sibling tools are sufficiently different that this is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ticketA
Read one ticket by ID, with its full body. Also reports which tickets it blocks — that direction is not stored on the ticket itself, so this is the only way to see it.
| Name | Required | Description | Default |
|---|---|---|---|
| ticket_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the safety and behavior burden. It clearly says 'Read' (non-mutating), mentions the full body, and reveals the derived blocking info. It does not detail errors or permissions, but for a read tool with an output schema, the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no waste. The core action is front-loaded in the first sentence, and the second sentence adds one valuable distinguishing behavior. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-ID read tool with an output schema and no annotations, the description covers the purpose, scope, and the one non-obvious behavior (blocking direction). It does not mention what happens if the ticket ID is missing or invalid, but the output schema and common read-tool semantics likely cover that. Slightly more context about how ticket_id relates to other tools could improve completeness.
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 schema has one required parameter, ticket_id, with 0% description coverage. The description's 'by ID' reinforces the obvious purpose of the parameter but adds no extra detail about format, source, or representation. This is acceptable for a single self-evident parameter but does not go beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Read one ticket by ID, with its full body' — a specific verb, resource, and scope. It also adds the unique blocking-report behavior, which immediately distinguishes it from siblings like list_tickets and update_ticket.
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 explains that the blocking direction is not stored on the ticket itself and that this is 'the only way to see it,' giving a clear context for when this tool is needed. It stops short of explicitly naming alternatives or stating when not to use it, so it gets a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_projectA
Initialise this project for primer-mcp: creates the primer/ ticket store and adds the workflow section to CLAUDE.md (and AGENTS.md if it exists). Non-destructive and idempotent. Call this once per project, before any other tool. Optionally pass jira_project_key if tickets may later be exported to Jira.
| Name | Required | Description | Default |
|---|---|---|---|
| project_name | Yes | ||
| jira_project_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full disclosure burden and performs well: 'Non-destructive and idempotent' states the safety profile, and it names exactly what side effects occur (creates primer/ store, modifies CLAUDE.md, conditionally AGENTS.md). This is precisely the kind of behavioral context annotations would otherwise provide. Minor gap: no mention of what is returned on completion, though an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, zero filler. The purpose and concrete effects come first, safety follows, then the one-time ordering constraint, then the optional-parameter guidance. Every sentence carries distinct information, and the most critical scoping constraint ('before any other tool') is prominently placed.
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 project-initialization tool with no annotations and an output schema to cover return values, the description covers everything needed: what gets created or modified, idempotency/safety, the once-and-first invocation rule, and when to supply the optional parameter. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain jira_project_key's conditional purpose ('if tickets may later be exported to Jira'), which is genuinely additive beyond the schema's bare 'Jira Project Key' title. However, project_name receives no semantic treatment beyond its schema title 'Project Name', which is trivial but still undocumented at the description level. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Initialise this project for primer-mcp') followed by concrete actions: 'creates the primer/ ticket store and adds the workflow section to CLAUDE.md (and AGENTS.md if it exists)'. This clearly differentiates it from all 16 siblings, which are ticket lifecycle and planning operations.
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 explicit usage context: 'Call this once per project, before any other tool.' It states the ordering constraint relative to every sibling tool, and the jira_project_key line adds a conditional-use guideline. It does not name specific alternatives or when-not conditions, but given that the sibling list contains only post-initialization tools, the intended usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_actionableA
List what can be acted on right now, with epic context.
Returns the epic's goals, story coverage, and a table of actionable items. Always show the full table to the user first, then add your recommendation below it. The table is the primary output — the user needs to see all options to make their own call.
After showing the table, recommend what to do next:
Check whether the stories cover the epic's goals. If goals are uncovered, recommend more planning (create_story) before execution.
Urgent items (unverified or in-progress tasks) should usually be finished before starting new work.
For the remaining items, read the tickets that look relevant (get_ticket) and recommend based on impact — what unblocks the most work, what aligns with current momentum, why now.
If several items are genuinely equal, say so and explain why.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 discloses what the tool returns (goals, story coverage, actionable items table) and prescribes presentation behavior (show the full table first, add recommendation below). It does not discuss side effects, but 'List' and 'Returns' imply a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and output summary, then uses a clear numbered checklist for recommendations. It is longer than strictly necessary, but each section earns its place by guiding the agent's behavior after invoking the tool.
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 listing tool with no annotations, the description is remarkably complete. It explains the output, the required presentation order, how to interpret coverage, when to recommend planning, how to prioritize urgent items, and how to handle ties.
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 the baseline is 4. There is no parameter semantic burden for the description to carry, and it appropriately focuses on output and usage behavior instead.
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 starts with a specific verb and resource: 'List what can be acted on right now, with epic context.' It clearly differentiates this from a generic ticket listing by emphasizing epic goals, story coverage, and an actionable table. The output contents are enumerated, making the tool's purpose concrete.
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 strong context on how to use the tool's output: present the table first, then recommend next steps, and it names related tools like create_story and get_ticket for follow-up actions. It does not explicitly contrast itself with list_tickets or say when not to use it, so it falls short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ticketsA
List tickets one per line, newest work last. Filter by type (epic, adr, story, task, spike), status, or parent_id (show only children of that ticket). Use this to find an ID before calling another tool.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| parent_id | No | ||
| ticket_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden of behavioral disclosure. It does disclose output format ('one per line'), ordering ('newest work last'), and available filters. However, it does not clarify whether filters can be combined or whether status accepts specific enumerated values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the main action, and every clause earns its place. It states behavior, filters, and intended use without any filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers ordering, output format, filter fields, and the intended pre-call use case. An output schema is present, so return-value structure is handled elsewhere. The main gaps are status value enumeration and explicit statement that filters may be combined, but overall the description is adequate for a simple optional-parameter list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is essential. It provides acceptable values for ticket_type (epic, adr, story, task, spike) and defines parent_id semantics ('show only children of that ticket'). Status is only named without allowed values, and the phrase 'or' leaves filter combination ambiguous, but the core meaning of each parameter is conveyed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List tickets') and adds concrete output formatting ('one per line, newest work last'). It also states the intended role ('Use this to find an ID before calling another tool'), which distinguishes it from singular retrieval or mutation tools like get_ticket, update_ticket, or delete_ticket.
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 a clear usage directive: 'Use this to find an ID before calling another tool.' It also explains the filter options, providing enough context for selecting this tool over alternatives, though it does not name sibling tools or explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_epicA
Create an Epic — the top-level container for a body of work. Start here: state why the work matters, its goals, and how you'll know it's done. Consider recording decisions (record_adr) before creating stories — it captures reasoning that gets lost once implementation starts.
| Name | Required | Description | Default |
|---|---|---|---|
| why | Yes | ||
| goals | Yes | ||
| title | Yes | ||
| non_goals | No | ||
| constraints | No | ||
| success_criteria | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 states that the tool creates an epic, but does not disclose side effects, persistence behavior, required preconditions, permissions, or what response to expect. This is a meaningful gap for a state-changing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences that front-load the core action, then give workflow context and a useful cross-reference. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Gives a clear role, usage sequence, and relationship to record_adr while an output schema exists for return values. The main gap is not addressing whether init_project is a prerequisite, but overall the description is adequate for this planning tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It usefully maps 'why the work matters' to why, 'goals' to goals, and 'how you'll know it's done' to success_criteria. However, non_goals and constraints are left unexplained, and title is only implicit.
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?
Describes a clear action and resource: 'Create an Epic — the top-level container for a body of work.' This distinguishes it from story/task-level sibling tools and immediately clarifies its position in the planning hierarchy.
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?
Gives strong contextual guidance with 'Start here' and suggests using record_adr before creating stories. However, it does not explicitly state when not to use plan_epic or name create_story as the alternative for story-level work.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_adrA
Record an Architecture Decision Record under an epic: the context forcing a choice, the decision, alternatives rejected (with reasons), and consequences accepted. Recording decisions before creating stories is recommended — it captures reasoning that gets lost once implementation starts.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| context | Yes | ||
| epic_id | Yes | ||
| decision | Yes | ||
| alternatives | Yes | ||
| consequences | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 explains the record's contents but does not state that this creates a persistent artifact, whether it is idempotent, what side effects occur on the associated epic, or any permission/ordering constraints beyond the timing recommendation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and every sentence earns its place. The first sentence defines the action and content; the second adds a valuable workflow recommendation without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and six required parameters, the description provides enough semantic coverage for the main fields and ties the tool into the broader planning workflow via the 'before creating stories' guidance. It falls just short of full completeness because it does not clarify the title/epic_id relationship or describe any behavioral constraints.
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 0%, so the description must compensate. It adds meaning for context, decision, alternatives, and consequences ('alternatives rejected (with reasons)', 'consequences accepted'). However, it does not explicitly explain epic_id or title, though 'under an epic' implies epic_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 uses a specific verb and resource: 'Record an Architecture Decision Record under an epic.' It also enumerates the content of the ADR (context, decision, alternatives, consequences), making it clearly distinct from sibling tools like create_story or plan_epic.
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 explicitly recommends using this tool before creating stories: 'Recording decisions before creating stories is recommended.' This gives clear contextual timing for use, though it does not explicitly state when not to use the tool or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_taskA
Transition a task to in-progress — call this when you begin working on a task. Works from any status; you'll get a note if the transition is unusual. After finishing, call complete_task.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 — and it delivers. It discloses the permissive transition behavior ('Works from any status') and the unusual-transition feedback ('you'll get a note if the transition is unusual'). Minor omissions like permissions and audit logging are acceptable for a simple status change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: purpose plus trigger, behavioral nuance, and the next lifecycle step. Front-loaded with the verb and resource, with zero fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema, everything an agent needs is present: purpose, trigger condition, prerequisite behavior, unusual-case feedback, and the next step. The output schema covers return values, so no description of those is needed.
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 0%, and the description adds no format or source for task_id (e.g., that it comes from create_task or list_tickets). However, task_id is a single self-explanatory string within an obvious lifecycle, so the practical harm of the missing detail is minimal.
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: 'Transition a task to in-progress.' The target state is explicit and clearly distinguishes the tool from lifecycle siblings like complete_task, verify_task, and create_task without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the trigger condition: 'call this when you begin working on a task.' It also names the follow-up alternative ('After finishing, call complete_task') and removes prerequisite ambiguity with 'Works from any status.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sweep_blocked_byA
Remove blocked_by references that point to tickets that no longer exist. Call once after finishing a batch of delete_ticket calls.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states that the tool mutates data by removing references and clarifies the trigger condition. It doesn't mention reversibility or the exact scope (whether it sweeps all stale references globally or only those related to the recent batch), but the core behavior is transparent enough for an agent to use it safely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The action is front-loaded, and the usage timing follows immediately. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description is largely complete: it explains what it does and when to call it. A minor gap is whether the sweep affects only references created by the current batch or all historical stale references, but this is not critical given the simple action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, and the schema has 100% coverage with an empty properties object. There is no need for parameter explanation. The baseline for zero-parameter tools is 4, and the description appropriately focuses on behavior rather than arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Remove') and resource ('blocked_by references that point to tickets that no longer exist'). It clearly distinguishes this as a cleanup operation for orphaned references, which is distinct from sibling tools like delete_ticket or update_ticket.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to invoke the tool: 'Call once after finishing a batch of delete_ticket calls.' This gives unambiguous temporal context and implies the intended workflow, even though it doesn't name alternative tools. No alternative is needed for such a specialized cleanup action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ticketA
Amend a ticket after creation; anything left out is left alone. status sets todo, in-progress or blocked — for finished states, prefer complete_task, verify_task or complete_spike as they also record notes. blocked_by replaces the dependency list and is refused if a referenced ticket does not exist or the edge would create a cycle. To say "A blocks B", set blocked_by on B. body_sections replaces whole markdown sections by heading.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| ticket_id | Yes | ||
| blocked_by | No | ||
| external_ref | No | ||
| body_sections | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains partial-update semantics, the allowed status values, that blocked_by replaces the whole dependency list, validation failures for nonexistent tickets or cycles, the direction convention ('A blocks B' means setting blocked_by on B), and that body_sections replaces whole sections by heading. This is unusually thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the most important behavior ('anything left out is left alone'). Every sentence earns its place, covering replacement semantics, validation, direction, and sibling alternatives without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is nearly complete for a 5-parameter tool with no annotations and no schema descriptions. The only real gap is the unexplained external_ref parameter; everything else needed to call the tool correctly is present. Return values need not be covered since an output schema exists.
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 0%, so the description must clarify parameters. It does well for status (allowed values, finished-state routing), blocked_by (replacement, validation, direction), and body_sections (replacement by heading). However, external_ref is never mentioned, leaving its semantics to inference. ticket_id is self-evident from its name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Amend') and resource ('a ticket') and immediately clarifies the update model: partial amendments where unspecified fields are untouched. It also distinguishes itself from siblings by explicitly naming complete_task, verify_task, and complete_spike as the right tools for finished states.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to prefer complete_task, verify_task, or complete_spike when handling finished states, with the reason that they also record notes. This gives an agent a concrete decision rule for when to avoid update_ticket and pick a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_taskA
Verify a task with evidence that the work holds (e.g. "218 passed, mypy clean"). Pass the short commit hash in the commit parameter so it is labelled consistently. Ideally call complete_task first to capture notes, but this works from any status. Sets the task to verified.
| Name | Required | Description | Default |
|---|---|---|---|
| commit | No | ||
| task_id | Yes | ||
| evidence | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses the state mutation ('Sets the task to verified'), the prerequisite flexibility ('works from any status'), and the evidence requirement. It does not discuss reversibility or side effects, but core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The purpose, example, parameter guidance, and sequencing advice are all front-loaded and each sentence contributes useful 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 three-parameter state-transition tool with an output schema, the description covers purpose, evidence semantics, commit labelling, call ordering, and the resulting state. Minor omissions include reversibility and side effects, but they are not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning for commit ('short commit hash... labelled consistently') and evidence with a concrete example. task_id is left implicit, though its purpose is self-evident from the parameter name and required status.
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 and resource ('Verify a task with evidence that the work holds') and gives a concrete example. It also states the resulting state change ('Sets the task to verified'), which clearly distinguishes it from the sibling complete_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly advises 'Ideally call complete_task first to capture notes, but this works from any status,' giving sequencing and an alternative. It also explains why the commit hash should be passed, though it does not enumerate exclusions or every alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
17 tool updates
v0.1.4- First observed
complete_spike - First observed
complete_task - First observed
create_spike - First observed
create_story - First observed
create_task - First observed
delete_ticket - First observed
export_graph - First observed
get_ticket - First observed
init_project - First observed
list_actionable - First observed
list_tickets - First observed
plan_epic - First observed
record_adr - First observed
start_task - First observed
sweep_blocked_by - First observed
update_ticket - First observed
verify_task
TDQS
Scored across 17 tools
Each planning entity has a dedicated creation/lifecycle tool and the descriptions clarify boundaries, but `update_ticket` can also set status to `in-progress`, which overlaps with `start_task`; `list_tickets` and `list_actionable` could also be confused at a glance. Overall, tools are mostly distinct.
All tools use lowercase snake_case imperative verb + object names such as `create_story`, `complete_spike`, and `delete_ticket`, and even less common names like `sweep_blocked_by` follow the same pattern. There are no mixed conventions or vague generic verbs.
Seventeen tools is slightly above the typical 3–15 sweet spot, but nearly every tool covers a genuine lifecycle stage or query/cleanup need. The count is reasonable for a planning/ticketing server, though it could feel heavy to an agent.
The surface covers project init, epic/ADR/story/task/spike creation, task and spike completion, verification, dependency cleanup, and graph export. A notable gap is that epics and stories have no finished/closed status or dedicated completion tool, so the top-level planning items cannot be explicitly closed out.
Maintenance
Related MCP Connectors
Minimal issue tracker: projects, objectives and trackable plans, written by agents over MCP.
11Task & board management for AI agents + humans. Kanban, comments, digests via MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Work management where AI agents are first-class members: tasks, projects, memory over hosted MCP
Related MCP Servers
- AlicenseAqualityBmaintenanceAn MCP server that gives AI agents structured read/write access to a story-based project backlog. Agents can list stories, read content, update status, and append notes — all backed by plain markdown files that live inside your project repository. There is no shared server. The backlog files live in your repo under requirements/, committed and versioned alongside your code163-
- AlicenseNot gradedqualityCmaintenanceMCP server for AI agents to manage a lightweight kanban board stored as markdown files, enabling task creation, updates, and column movements.7MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that equips AI agents with dev workflow tools including GitHub project management, conventional commits, visual regression testing, Jira/Confluence integration, and a persistent memory knowledge graph.1 npmMIT
- AlicenseBqualityFmaintenanceAn MCP server that provides a database-backed kanban board with 40+ tools for AI agents to track issues, features, todos, epics, and diary entries across projects, including status workflows, relationships, and semantic search.4583MIT