Skip to main content
Glama

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

What 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:

Demo project graph

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

init_project

Create the primer/ ticket store and add the workflow section to CLAUDE.md

Planning

Tool

What it does

plan_epic

Create an epic — the top-level container for a body of work

record_adr

Record an architecture decision: context, decision, rejected alternatives, consequences

create_story

Create a story under an epic — a deliverable with acceptance criteria

create_task

Create a task under a story — a concrete unit of work with a testable outcome

create_spike

Create a spike — a timeboxed investigation to answer a question

Execution

Tool

What it does

start_task

Move a task to in-progress

complete_task

Mark a task completed with notes on what was done

verify_task

Verify a completed task with evidence (point at the commit)

complete_spike

Close a spike with findings

Query

Tool

What it does

list_actionable

List what can be acted on right now, with epic context and recommendations

get_ticket

Read a ticket by ID with its full body

list_tickets

List tickets, filterable by type or status

update_ticket

Amend a ticket's status, dependencies, body sections, or external refs

Export

Tool

What it does

export_graph

Generate a self-contained HTML file visualising the project as an interactive graph

Prompts

Prompt

What it does

plan_story

Walk through a planning conversation before creating a story

export_jira

Export primer-mcp tickets to Jira via a Jira MCP server

import_jira

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 why

  • primer/stories/ and primer/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 tools
complete_spikeA

Close a spike by recording its findings — the answer to the question it was investigating and any recommendations. Works from any status.

ParametersJSON Schema
NameRequiredDescriptionDefault
findingsYes
spike_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesYes
task_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: '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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
timeboxYes
questionYes
story_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create tool with 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
whatYes
titleYes
adr_idsNo
epic_idYes
definition_of_doneNo
acceptance_criteriaNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
story_idYes
what_to_doYes
testable_outcomeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: '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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ticket_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
output_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the 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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ticket_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_nameYes
jira_project_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('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.

Usage Guidelines4/5

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:

  1. Check whether the stories cover the epic's goals. If goals are uncovered, recommend more planning (create_story) before execution.

  2. Urgent items (unverified or in-progress tasks) should usually be finished before starting new work.

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

  4. If several items are genuinely equal, say so and explain why.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It 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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
parent_idNo
ticket_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
whyYes
goalsYes
titleYes
non_goalsNo
constraintsNo
success_criteriaNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
contextYes
epic_idYes
decisionYes
alternativesYes
consequencesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden — 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, and the schema 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
ticket_idYes
blocked_byNo
external_refNo
body_sectionsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
commitNo
task_idYes
evidenceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 17 tool updatesv0.1.4
    • First observedcomplete_spike
    • First observedcomplete_task
    • First observedcreate_spike
    • First observedcreate_story
    • First observedcreate_task
    • First observeddelete_ticket
    • First observedexport_graph
    • First observedget_ticket
    • First observedinit_project
    • First observedlist_actionable
    • First observedlist_tickets
    • First observedplan_epic
    • First observedrecord_adr
    • First observedstart_task
    • First observedsweep_blocked_by
    • First observedupdate_ticket
    • First observedverify_task

TDQS

A4.1/5.0

Scored across 17 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    An 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 code
    16
    3
    -
  • A
    license
    B
    quality
    F
    maintenance
    An 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.
    45
    83
    MIT