Skip to main content
Glama

backlog-mcp MCP server

backlog-mcp

AIエージェントがストーリーベースのプロジェクトバックログに対して構造化された読み書きアクセスを行えるようにするMCPサーバーです。エージェントはストーリーの一覧表示、コンテンツの読み取り、ステータスの更新、メモの追加を行うことができ、これらはすべてプロジェクトリポジトリ内のプレーンなMarkdownファイルによって管理されます。

コラボレーションの仕組み

共有サーバーはありません。バックログファイルはリポジトリ内の requirements/ 配下に存在し、コードと一緒にコミットされ、バージョン管理されます。エージェント間、あるいはエージェントと人間の間のコラボレーションは、コードベースの他の部分と全く同じ方法、つまりgitを通じて行われます。2つのエージェントが異なるストーリーを同時に更新した場合、gitがそれらをマージします。同じ行を編集した場合は、他のマージコンフリクトと同様に解決します。

このMCPサーバーは、各エージェントが個別に実行するローカルプロセスです。サーバーはファイルの読み書きを行い、残りはgitが処理します。


Related MCP server: Jira MCP

インストール

Releases ページからお使いのプラットフォーム用の最新バイナリをダウンロードし、$PATH の通った場所に配置してください。

または、Goがインストールされている場合は以下を実行してください:

go install github.com/corbym/backlog-mcp@latest

ソースからビルド

go mod tidy
go build -o backlog-mcp .

セットアップ

プロジェクトのルートディレクトリに requirements/ フォルダを初期化します:

./backlog-mcp init /path/to/your/project/requirements

これにより以下が作成されます:

requirements/
  requirements-index.md   # master index — source of truth for epics and story status
  backlog.md              # priority-ordered list of not-done stories
  epic-001-example/
    story-001.md          # example story file

requirements/ フォルダをリポジトリにコミットしてください。ファイルを編集して、独自のエピックやストーリーを追加します。


実行

./backlog-mcp

サーバーは、起動された作業ディレクトリから相対的な requirements/ ディレクトリを探します。Claude Codeは作業ディレクトリをプロジェクトルートに設定するため、設定は不要です。

プランファイルの作成

./backlog-mcp plan [name]

requirements/ ディレクトリに新しいプランの雛形を作成します。名前を指定しない場合は plan.md となり、名前を指定した場合は plan-<name>.md となります。ファイルが既に存在する場合は数値のサフィックスが追加されます(plan-002.md など)。ファイルを開き、ストーリーを作成する前にエージェントと協力して内容を記入してください。

MCPクライアントの設定

プロジェクトルートにコミットする ローカル 設定ファイルの使用を推奨します。これによりサーバーのスコープがプロジェクトに限定され、リポジトリをクローンしたすべてのエージェントが自動的に正しい設定を取得できるようになります。プロジェクトごとの設定なしで全てのプロジェクトで backlog-mcp を利用したい場合にのみ、グローバル設定を使用してください。

VS Code / GitHub Copilot — プロジェクトルートに .mcp.json を追加します:

{
  "mcpServers": {
    "backlog-mcp": {
      "command": "/path/to/backlog-mcp"
    }
  }
}

Claude Code — プロジェクトルートに .claude/settings.json を追加します:

{
  "mcpServers": {
    "backlog-mcp": {
      "command": "/path/to/backlog-mcp"
    }
  }
}

グローバルなフォールバック(すべてのプロジェクトに適用)として設定する場合は、同じ設定を ~/.claude/settings.json (Claude Code) に配置するか、VS Codeのユーザー settings.jsonmcp.servers キーに追加してください。常にプロジェクトごとのローカルファイルを優先してください。


ツール

ツール

説明

list_stories

ストーリーを一覧表示します(epic_id または status でフィルタリング可能)

get_story

ストーリーの完全なMarkdownコンテンツとメタデータを取得します

set_story_status

インデックスとバックログ内のストーリーステータスを更新します

add_story_note

ストーリーファイルにタイムスタンプ付きのメモを追加します

complete_story

ストーリーを完了としてマークし、必須の完了サマリーを1回の呼び出しで追加します

create_epic

新しいエピックを作成します — 次の EPIC-NNN ID を割り当て、エピックファイルを作成し、インデックスに登録します

create_story

エピック配下に新しいストーリーを作成します — 次の STORY-NNN ID を割り当て、インデックスとバックログに登録します

set_acceptance_criteria

ストーリーの受け入れ条件セクションを置き換えます(冪等)

get_index_summary

ステータス別のエピック/ストーリー数の概要を取得します


環境変数

変数

必須

デフォルト

説明

BACKLOG_ROOT

いいえ

requirements

requirementsディレクトリへのパスを上書きします


ファイル形式

requirements-index.md — 見出しごとに1つのエピックセクション、テーブル行ごとに1つのストーリー:

## EPIC-001: Combat System — `draft`

| Story | Title | Status |
|-------|-------|--------|
| [STORY-001](./epic-001-combat-system/story-001.md) | Basic combat | draft |

backlog.md — 優先順位順の番号付きリスト:

1. **STORY-001** — Basic combat
2. **STORY-002** — Enemy AI *(in-progress)*

ストーリーファイルBACKLOG_ROOT 配下の epic-NNN-slug/story-NNN.md に配置されます。

ステータスの値: draft, in-progress, done, blocked


注意事項

  • ファイルの書き込みはアトミック(一時ファイル作成 + リネーム)に行われるため、書き込み中のクラッシュでファイルが破損することはありません。

  • ファイルシステムが信頼できる唯一の情報源です。MCPサーバーがデータを所有することはありません。

Available Tools

16 tools
add_story_noteA
Destructive

Append a timestamped note to a story file. Use to record progress, decisions made, or blockers encountered. Notes are appended under a '## Notes' section with an ISO 8601 timestamp. Returns {story_id, appended_at, path}.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYesThe note text to append. Can be multi-line. Will be stored with a UTC timestamp.
story_idYesStory ID to annotate, e.g. STORY-047

TDQS

A4.5/5.0
Behavior4/5

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

Description discloses behavior beyond annotations: notes appended under '## Notes' section with ISO 8601 timestamp, return structure {story_id, appended_at, path}. It is consistent with destructiveHint=true and idempotentHint=false.

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 efficient sentences cover action, use cases, and behavior/return. No wasted words, front-loaded with key 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?

Complete for a simple append tool with 2 params and no output schema. Could mention prerequisite (story must exist) but not essential given context signals and sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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

Schema covers both parameters with descriptions. Description adds meaning: notes are multi-line, stored with UTC timestamp, under specific section, and return fields. No ambiguity.

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?

Description clearly states the action 'append a timestamped note to a story file' and specifies resource (story file). It distinguishes from sibling tools which handle other operations like creating stories or updating statuses.

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?

Description explicitly says 'Use to record progress, decisions made, or blockers encountered', providing clear use cases. However, it does not explicitly state when not to use or mention alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_update_acceptance_criteriaA
Destructive

Update the checked state of individual acceptance criteria on a story in one operation. Only the criteria explicitly listed are modified; all others are left untouched. Criteria are matched by exact text. If any criterion text is not found, no changes are made and an error is returned. Returns {story_id, path, criteria_updated, errors}. Call get_story separately if you need to see the resulting content.

ParametersJSON Schema
NameRequiredDescriptionDefault
criteriaYesMap of criterion text to desired checked state. true = checked [x], false = unchecked [ ]. Criterion text must match exactly.
story_idYesStory ID to update, e.g. STORY-047

TDQS

A4.4/5.0
Behavior4/5

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

Discloses partial update behavior, exact match, atomicity (no changes on mismatch), and return shape. Annotations already indicate mutability and destructiveness, but description adds context beyond that.

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, each with distinct information. Front-loaded with main action. 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?

Adequately covers all aspects given no output schema. Return format specified. Could add more on success behavior but sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%, but description explains exact matching, boolean meaning, and partial update semantics. Adds value beyond 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?

Clear verb+resource: 'Update the checked state of individual acceptance criteria on a story'. Distinguishes from siblings like check_acceptance_criterion (single) and set_acceptance_criteria (setting list).

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?

Tells when to use (bulk update) and behavior: only listed criteria modified, exact match required, error if not found. Suggests using get_story to see results. Lacks explicit sibling differentiation but context permits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_update_epicsA
Destructive

Update multiple epics in one operation. Each entry may set status and/or append a note. Updates are applied atomically per file. If an epic does not exist, an error is recorded for that entry and processing continues. Returns an array of per-epic result objects with fields: epic_id, status_updated, old_status, new_status, note_appended, errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYesArray of epic update objects. Each must include epic_id; status and note are optional. status must be one of: draft, in-progress, done, blocked, deferred. note is appended, not replaced.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations indicate destructiveness, and the description adds valuable context: atomicity per file, error handling on missing epics, and structure of return results. This goes beyond what annotations provide.

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?

Description is concise with three sentences, front-loads purpose, and covers key behaviors. Efficient but could be slightly more streamlined.

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 no output schema, the description adequately explains return format. Annotations cover safety. Missing details on prerequisites or rate limits, but overall sufficient for a bulk update tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 100% and already explains parameter details (required fields, status enum, note behavior). The description merely echoes 'Each entry may set status and/or append a note', adding negligible new meaning.

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 clearly states the tool updates multiple epics in one operation, specifies actions (set status, append note), and addresses error handling. It distinguishes from single-epic tools like set_epic_status and create_epic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use case for bulk updates but does not explicitly state when to prefer this over single-update siblings (e.g., set_epic_status). Lacks when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_update_storiesA
Destructive

Update multiple stories in one operation. Each entry may set status, append a note, and/or patch acceptance criteria. Updates are applied atomically per file. If a story does not exist, an error is recorded for that entry and processing continues. Returns an array of per-story result objects with fields: story_id, status_updated, old_status, new_status, note_appended, criteria_updated, criteria_errors, errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYesArray of story update objects. Each must include story_id; status, note, and criteria are optional. status must be one of: draft, in-progress, blocked, deferred (use complete_story to mark done). note is appended, not replaced. criteria is a map of criterion text (or AC ID) to boolean checked state — true = checked, false = unchecked. Example: {"User can log in": true, "User sees error on bad password": false}. Keys are matched case-insensitively with tolerance for Unicode dash variants (em-dash, en-dash, etc.).

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare destructiveHint=true, and description adds that non-existent stories result in errors but processing continues. It also mentions atomicity per file. Does not contradict annotations; adds useful behavioral detail beyond what annotations provide.

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?

Single paragraph, dense but well-organized. Front-loads purpose, then details. Slightly verbose in the criteria description, but overall efficient for the complexity.

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?

Covers all key aspects: what is updated, input format, atomicity, error handling, and return array structure. No output schema, but description adequately describes the per-story result objects. Given the tool's complexity, the description is fully adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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

Schema coverage is 100%, but description adds critical meaning: enumerates valid statuses (draft, in-progress, blocked, deferred) and notes 'complete_story' for done. For criteria, explains it's a map with case-insensitive matching and Unicode dash tolerance. This goes well beyond the schema's minimal descriptions.

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?

Clearly states 'Update multiple stories in one operation' and lists the fields that can be updated (status, note, criteria). Distinguishes from siblings like 'complete_story' by explicitly mentioning when to use that sibling. Also describes atomicity per file and error handling.

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 guidance on status values and directs to 'complete_story' for marking done. Implicitly indicates this tool is for bulk updates, but does not explicitly state when not to use it or provide alternatives for single story updates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_acceptance_criterionA
Destructive

Mark a single acceptance criterion as checked (- [ ] → - [x]) in a story file. Identify the target by criterion_index (0-based) or criterion_text (case-insensitive exact match). Exactly one must be provided. Returns {story_id, criterion, checked, path}. Errors if the story is not found, the criterion is not found, or it is already checked.

ParametersJSON Schema
NameRequiredDescriptionDefault
story_idYesStory ID to update, e.g. STORY-047
criterion_textNoExact text of the criterion to check (case-insensitive). Use when you know the text. Mutually exclusive with criterion_index.
criterion_indexNo0-based index of the criterion to check. Use when you know the position. Mutually exclusive with criterion_text.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (destructiveHint=true, idempotentHint=false), the description discloses specific error conditions (story not found, criterion not found, already checked) and the return format, adding concrete behavioral context.

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 concise sentences: first states action and transformation, second covers identification, return values, and errors. No redundant fluff; every sentence earns its place.

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?

The description, combined with annotations and schema, fully covers purpose, usage, parameters, behaviors, and error states. No additional information is needed 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?

The input schema already has 100% coverage with good descriptions. The description adds value by explicitly stating 'Exactly one must be provided' for the mutually exclusive parameters, reinforcing the constraint.

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 'Mark' and resource 'acceptance criterion' with a clear transformation '- [ ] → - [x]'. It distinguishes from sibling tools like bulk_update_acceptance_criteria and set_acceptance_criteria by focusing on a single criterion.

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 specifies how to identify the criterion (index or text, exactly one required) and lists error conditions. It implies single-criterion use but does not explicitly contrast with bulk alternatives; however, the context of sibling tools makes the distinction clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

complete_storyA
Destructive

Mark a story done and append a mandatory completion summary note in one atomic call. Validates acceptance criteria before completing: if the AC section has not been set (contains only the placeholder), completion is blocked — call set_acceptance_criteria first. IMPORTANT: if a criterion is actually done, mark it [x] in the story file via set_acceptance_criteria BEFORE calling this tool — do not leave it unchecked. If criteria remain unchecked (genuinely not done), incomplete_items is required with one explanation per unchecked item explaining WHY it was not completed (e.g. deferred, out of scope). incomplete_items is for unfinished work only — never use it to confirm completed work. On success, removes the story from backlog.md and returns {story_id, completed_at, backlog_removed}.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYesCompletion summary describing what was done. Appended as a timestamped note to the story file.
story_idYesStory ID to complete, e.g. STORY-047
incomplete_itemsNoRequired when the story has unchecked (genuinely unfinished) acceptance criteria. Each string must explain WHY that criterion was not met (e.g. 'Deferred to STORY-010 — rarity system not yet designed'). One entry per unchecked item, in the order they appear. DO NOT use this field to confirm items that are done — if a criterion is done, tick it [x] via set_acceptance_criteria first, then retry. Never prefix entries with 'Done:' — if it is done, it should not appear here at all.

TDQS

A4.6/5.0
Behavior4/5

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

While annotations already mark destructiveHint=true and readOnlyHint=false, the description adds critical context: removal from backlog.md, return fields, blocking behavior when AC not set, and conditional requirement for incomplete_items. Does not contradict annotations. Deduction for not explicitly stating error behavior beyond blocking.

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 concise (about 6 sentences) and front-loads the core action. Every sentence adds value, but it packs many conditional rules into a single paragraph. Slight improvement possible with structured list for key constraints.

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?

Given the tool's complexity (validation, conditional parameter, destructive side effects, no output schema), the description covers: purpose, preconditions (AC set, proper tick marking), conditional field usage, success effects (backlog removal, return values). No output schema, but return values are described. Completeness ensures an agent can use it correctly.

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 has 100% coverage with descriptions, but the description adds significant meaning: explains when incomplete_items is required vs prohibited, and that summary is timestamped. Goes beyond baseline of 3 by clarifying conditional logic and constraints not fully captured in 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 clearly states the tool's purpose: 'Mark a story done and append a mandatory completion summary note in one atomic call.' It specifies the verb, resource, and action. It also distinguishes itself from siblings by mentioning validation of acceptance criteria and the need to call set_acceptance_criteria first.

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?

Provides explicit guidance: explains when to use set_acceptance_criteria first, when incomplete_items is required, and what constitutes proper usage. Contrasts with sibling tools like set_acceptance_criteria. Clearly states when-not-to-use for incomplete_items field.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_epicA
Destructive

Create a new epic. Assigns the next EPIC-NNN ID, creates the epic directory and epic.md file, and registers it in requirements-index.md with status draft. Returns {epic_id, path}.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTitle of the epic, e.g. 'User Authentication'
descriptionNoOptional description or goal for the epic. Written into the epic.md file.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate destructive hint true; description adds detail on side effects: ID assignment, directory/file creation, index registration. Adds context beyond annotations without contradiction.

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: purpose then action sequence and return value. No fluff, front-loaded with key 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?

Covers return value and side effects comprehensively for a create operation. Lacks error conditions but acceptable given annotations and schema richness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100%; description adds value by noting the description parameter is written into epic.md file. Otherwise aligns with schema descriptions.

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?

Clearly states the action 'Create a new epic' and the resource. Distinguishes from siblings like 'create_story' and 'bulk_update_epics' by specifying it creates a single epic with ID assignment and file creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no explicit when-to-use or alternatives. Implicitly for creating a single epic, but no guidance on when to use this versus sibling tools like 'create_story'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_storyA
Destructive

Create a new story under an existing epic. Assigns the next STORY-NNN ID, writes the story file, and registers it in requirements-index.md and backlog.md with status draft. The story is appended to the end of the backlog. Returns {story_id, path}.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTitle of the story, e.g. 'User can reset password'
epic_idYesEpic ID the story belongs to, e.g. EPIC-003. The epic must already exist.
story_typeNoType of story. Valid values: feature, bug, chore, spike. Defaults to 'feature' if not provided.
descriptionNoOptional description or goal for the story. Written into the story.md file.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true), the description explains the exact side effects: ID assignment, file writes, registration in two files, and appending to backlog. No contradiction with annotations.

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, front-loaded with the main action, followed by essential details. Every sentence is informative and no fluff.

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 the return value, preconditions (epic exists), process steps, and side effects. It does not address error handling or constraints on title/description length, but it is sufficient for most use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

Schema coverage is 100% with parameter descriptions. The description adds value by explaining that the description parameter is written into story.md and that epic_id must already exist. It also reveals the ID assignment mechanism not present in 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 clearly states the verb 'create', the resource 'story', and the context 'under an existing epic'. It distinguishes from sibling tools like create_epic by specifying the parent requirement. The details on ID assignment and file registration further clarify the action.

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 implies the epic must exist and the story will be placed into the backlog. It does not explicitly say when not to use this tool or mention alternatives, but the name and context make it clear this is the primary tool for creating stories.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_index_summaryA
Destructive

Get a high-level summary of all epics and their story counts broken down by status. Useful for situational awareness at the start of a session, without reading every file. Returns an array of {epic_id, title, status, counts: {status: n}, stories: [{story_id, status}]}.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior1/5

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

The description describes a read-only operation ('Get a high-level summary'), but the annotation destructiveHint=true indicates the tool may cause destructive side effects. This is a direct contradiction. Additionally, no other behavioral traits (e.g., authentication requirements, side effects) are disclosed beyond what annotations provide, which is insufficient for a tool with contradictory annotations.

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, front-loaded with the core functionality, and includes both usage context and return format. Every sentence is informative and concise, with no waste.

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 description details the return format, compensating for the lack of an output schema. It also provides usage context. However, it does not address the contradiction with the destructiveHint annotation, leaving uncertainty about side effects. For a simple zero-parameter tool, this is a noticeable gap that impacts completeness.

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?

There are no parameters, so the input schema is fully covered. The baseline score of 4 applies as per the rule for 0 parameters. The description does not need to add parameter information, and it does not attempt to.

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 clearly states the tool provides a high-level summary of all epics with story counts by status. It specifies the action (Get), the resource (epics summary), and the scope (all epics, broken down by status), which distinguishes it from sibling tools that focus on individual items or mutations.

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 states it is 'useful for situational awareness at the start of a session, without reading every file,' providing clear guidance on when to use it. However, it does not mention alternatives or explicitly state when not to use it, which would strengthen the guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_storyA
Destructive

Get the full markdown content and metadata for a single story. Returns {story_id, title, status, epic_id, path, content} where content is the raw markdown of the story file. Set include_notes=false to omit the '## Notes' section (and everything after it) from content — use this when you only need current status, goal, or acceptance criteria and want to avoid paying for a long accumulated note history.

ParametersJSON Schema
NameRequiredDescriptionDefault
story_idYesStory ID to retrieve, e.g. STORY-047
include_notesNoSet to false to exclude the '## Notes' section from the returned content. Defaults to true (full content, unchanged behaviour).

TDQS

A4.2/5.0
Behavior3/5

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

The description explains that the tool returns content and how include_notes alters the returned content. However, the annotations indicate destructiveHint:true, implying potential modification, which contradicts the read-only nature described. This mismatch reduces transparency.

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, front-loaded with purpose. Every sentence adds value without redundancy. Concise and well-structured.

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?

Provides return structure and behavior of include_notes. No output schema, so description compensates. However, the destructiveHint annotation inconsistency is not addressed, leaving a gap in completeness about the tool's true effect.

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 covers both parameters (100% coverage). The description adds context for include_notes: omitting the '## Notes' section and everything after it, which is not evident from the schema alone. This enhances understanding of the parameter's effect.

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 clearly states the tool's purpose: 'Get the full markdown content and metadata for a single story.' It also lists the return fields (story_id, title, status, epic_id, path, content), making it distinct from sibling tools like list_stories or add_story_note.

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?

Describes when to set include_notes=false ('when you only need current status, goal, or acceptance criteria and want to avoid paying for a long accumulated note history'). Provides clear context for using this parameter, though no explicit when-not-to-use or alternative tools are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

groom_epicA
Destructive

Reconcile the ## Stories section in an epic.md file with the story files on disk and the requirements index. Adds missing entries, removes entries for story files that no longer exist, and refreshes titles and done/undone markers. Returns {epic_id, added, removed, updated, unchanged}.

ParametersJSON Schema
NameRequiredDescriptionDefault
epic_idYesEpic ID to groom, e.g. EPIC-003

TDQS

A4.2/5.0
Behavior4/5

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

Annotations mark the tool as destructive, and the description confirms modifications (adds, removes, refreshes). It provides context beyond annotations by detailing what is changed (epic.md sections) and the return object. No contradictions.

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, front-loaded with the main action, and uses precise language. Every sentence adds value 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?

For a single-parameter tool with no output schema, the description adequately covers the operation and return structure. It could mention prerequisites (e.g., file existence) but is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

The schema covers 100% with a description for epic_id. The tool description does not add additional semantics beyond reiterating the parameter's use. Since schema coverage is high, the baseline of 3 is appropriate.

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 clearly states the tool's purpose: reconciling the Stories section in an epic.md file with story files on disk and the requirements index. It specifies exactly what it does (add, remove, refresh) and the return value, which distinguishes it from all 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (to synchronize epic file with disk state) but does not explicitly state when not to use it or mention alternatives. However, given the unique purpose, the agent can infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_storiesA
Destructive

List stories from the project index, optionally filtered by epic, status, or type. Returns an array of {story_id, title, status, epic_id, story_type} objects. With no filters, returns all stories across all epics. Other tools in this server: get_story, get_index_summary, create_epic, create_story, set_story_status, set_epic_status, add_story_note, set_acceptance_criteria, check_acceptance_criterion, complete_story, bulk_update_stories, bulk_update_epics, bulk_update_acceptance_criteria, groom_epic, reorder_backlog.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoOptional status to filter by. Valid values: draft, in-progress, done, blocked. When provided, only stories with this status are returned.
epic_idNoOptional epic ID to filter by (e.g. EPIC-003). When provided, only stories belonging to this epic are returned.
story_typeNoOptional story type to filter by. Valid values: feature, bug, chore, spike. When provided, only stories of this type are returned.

TDQS

A3.9/5.0
Behavior1/5

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

The description describes a read operation (list stories), but annotations mark destructiveHint=true, suggesting potential mutation. This contradiction is critical and not addressed.

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 a single sentence with a clear structure, front-loading purpose and adding return format and sibling tools efficiently.

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?

Despite no output schema, the description specifies the return format and covers all necessary information for a filtering list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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

The description adds default behavior context (returns all stories when no filters) beyond the schema, which already covers parameters well (100% coverage).

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 clearly states the tool lists stories from the project index with optional filters, and distinguishes from siblings like get_story and get_index_summary.

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 indicates when to use (listing stories, with or without filters) but does not explicitly exclude alternative tools or provide guidance on when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reorder_backlogA
Destructive

Reorder the active backlog by supplying the desired story ID sequence. Entries present in story_ids are placed first in that order; any backlog entries omitted from the list are appended at the end so nothing is silently dropped. IDs not found in the backlog (e.g. already done) are reported in not_found but do not cause a failure. Returns {placed: [ordered story IDs written], not_found: [IDs absent from backlog], appended: [IDs moved to end because they were omitted]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
story_idsYesOrdered list of story IDs representing the desired backlog priority, highest priority first.

TDQS

A4.5/5.0
Behavior5/5

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

The description goes beyond annotations by detailing that entries omitted from story_ids are appended at the end, that not-found IDs are reported without causing failure, and that the response includes placed, not_found, and appended lists. This adds significant context to the destructiveHint=true and readOnlyHint=false annotations.

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 first sentence states the action, the second explains details and return values. Information is front-loaded and every sentence contributes.

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?

Given the single parameter, no output schema, and existing annotations, the description fully explains the tool's behavior and return format. It covers what happens to all backlog entries, handling of not-found IDs, and the structure of the response.

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 input schema describes story_ids as an ordered list of story IDs for backlog priority. The description adds that entries listed are placed first and omitted ones are appended, enhancing the semantic understanding beyond the schema description.

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 clearly states it reorders the active backlog by supplying a desired story ID sequence. It specifies the verb 'reorder' and the resource 'backlog', and details the behavior with omitted and not-found IDs, distinguishing it from siblings like 'set_story_status' or 'complete_story'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but does not explicitly state when to use it or when not to use it, nor does it mention alternatives among siblings. Usage is implied by the purpose, but no explicit guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_acceptance_criteriaA
Destructive

Replace the acceptance criteria section of a story file. Each string in the criteria array becomes a checklist line. Plain text is written as an unchecked - [ ] ... item. A string may also be passed as a full checklist line (e.g. - [x] text, [x] text, or the full stored line including an existing AC-ID) — the leading checkbox marker is stripped and its checked state is preserved, and any existing AC-ID in the input is kept rather than regenerated. Idempotent: calling again replaces the previous AC entirely. Acceptance criteria must be set before a story can be completed with complete_story. Returns {story_id, criteria_count, path}.

ParametersJSON Schema
NameRequiredDescriptionDefault
criteriaYesList of acceptance criteria strings. Plain text becomes an unchecked `- [ ] ...` item. To mark a criterion as already checked, prefix it with `[x] ` or `- [x] ` (e.g. `- [x] User can log in`) — the checked state is preserved and any leading AC-ID in the string is kept rather than regenerated. Must contain at least one item.
story_idYesStory ID to update, e.g. STORY-007

TDQS

A3.6/5.0
Behavior1/5

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

The description claims the tool is 'Idempotent', but the annotations set idempotentHint to false, creating a direct contradiction. Additionally, the description discloses behavioral details (checkmark preservation, AC-ID handling) beyond the annotations, but the contradiction severely undermines transparency.

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 well-structured, starting with the main action, then explaining the checklist format, idempotency, and a prerequisite. While it packs a lot of information, it remains clear and efficient, with each sentence serving a distinct purpose.

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 description covers key aspects: what the tool does, how to format criteria, idempotency, prerequisite, and return value. However, the annotation contradiction (idempotentHint mismatch) introduces confusion, reducing overall completeness for a reliable agent decision.

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 input schema provides 100% parameter descriptions, but the description adds significant value by explaining the checklist behavior: plain text becomes unchecked `- [ ] ...` items, and how to pass pre-checked items or preserve AC-IDs. This goes beyond the schema's basic description.

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 clearly states the tool's purpose: 'Replace the acceptance criteria section of a story file.' It elaborates on the format of criteria strings, idempotency, and the prerequisite relationship with complete_story, making the function unambiguous and distinct from 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'Acceptance criteria must be set before a story can be completed with complete_story.' It also notes idempotency. However, it does not provide explicit exclusions or guidance on when not to use it versus alternative tools like bulk_update_acceptance_criteria or check_acceptance_criterion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_epic_statusA
Destructive

Update the lifecycle status of an epic. Use this tool to manage the epic's own status — not the status of individual stories within it (use set_story_status for that). Typical progression: draft → in-progress (when the first story starts) → done (when all stories are complete) or deferred (if the epic is postponed). Status meanings: 'draft' = epic created but no work started; 'in-progress' = actively being worked on; 'done' = all stories complete and the epic is closed; 'blocked' = progress prevented by an external dependency; 'deferred' = postponed indefinitely. Guards: (1) Setting 'done' requires a summary and checks all stories are done. If any are not done, the call fails — set override_incomplete=true only after the user explicitly confirms this is acceptable. (2) Moving backwards (e.g. done → in-progress, in-progress → draft) asks you to create new stories to justify the regression first. Set confirm_regression=true only if the user explicitly insists on skipping story creation. Returns {epic_id, old_status, new_status}.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesNew status to assign. Must be one of: draft, in-progress, done, blocked, deferred.
epic_idYesEpic ID to update, e.g. EPIC-003
summaryNoRequired when setting status to 'done'. Describes what was accomplished by this epic. Appended as a timestamped note to the epic file.
confirm_regressionNoSet to true to allow a backwards status transition (e.g. done → in-progress) without first creating new stories. Only set if the user explicitly insists on skipping story creation.
override_incompleteNoSet to true to mark the epic 'done' even when some stories are not done. Only set after the user explicitly confirms the incomplete stories are intentionally omitted.

TDQS

A5/5.0
Behavior5/5

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

Beyond annotations (destructiveHint: true), description details mutation behavior, guards for backwards transitions and incomplete stories, required summary for 'done', and return object.

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?

Well-structured with front-loaded purpose, then progression, status meanings, and guards. Every sentence adds essential information without redundancy.

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?

Comprehensively covers conditional logic (required summary for done, guards for incomplete and regression), return structure, and all edge cases despite lacking output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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

Adds meaning beyond schema by explaining status meanings, typical progression, and contextual use of override_incomplete and confirm_regression.

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 clearly states the tool updates epic lifecycle status, distinguishes from set_story_status, and provides typical status progression.

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 states when to use this tool vs alternatives (set_story_status) and provides detailed guards for override_incomplete and confirm_regression with user confirmation requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_story_statusA
Destructive

Update the status of a story to draft, in-progress, blocked, or deferred. To mark a story done, use complete_story instead — it enforces acceptance criteria, appends a summary note, and removes the story from the backlog. Returns {story_id, old_status, new_status, backlog_updated}.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesNew status to assign. Must be one of: draft, in-progress, blocked, deferred. To mark done, use complete_story.
story_idYesStory ID to update, e.g. STORY-047

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate destructiveness and non-idempotence; description elaborates on behavior (return values, backlog update) without contradiction.

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 concise sentences, critical info front-loaded, no wasted words.

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?

Given full schema, annotations, and description covering return format, no gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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

Schema coverage is 100% with good descriptions; description adds minimal extra meaning beyond what schema already provides.

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?

Description clearly states it updates story status to four specific values and distinguishes from complete_story, making the tool's 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 Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use this tool vs complete_story, including rationale for the 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. 1 tool updatev1.2.0
    • Changedget_story1 field changed
      • addedInput schema / properties / include_notes
        Added value: +{
        +  "description": "Set to false to exclude the '## Notes' section from the returned content. Defaults to true (full content, unchanged behaviour).",
        +  "type": "boolean"
        +}
  2. 1 tool updatev1.1.2
    • Changedset_acceptance_criteria1 field changed
      • changedInput schema / properties / criteria / description
        Previous value: -"List of acceptance criteria strings. Each entry becomes a checklist item (- [ ] ...) in the story file. Must contain at least one item."New value: +"List of acceptance criteria strings. Plain text becomes an unchecked `- [ ] ...` item. To mark a criterion as already checked, prefix it with `[x] ` or `- [x] ` (e.g. `- [x] User can log in`) — the checked state is preserved and any leading AC-ID in the string is kept rather than regenerated. Must contain at least one item."
  3. 2 tool updatesv1.1.0
    • Changedbulk_update_stories1 field changed
      • changedInput schema / properties / updates / description
        Previous value: -"Array of story update objects. Each must include story_id; status, note, and criteria are optional. status must be one of: draft, in-progress, blocked, deferred (use complete_story to mark done). note is appended, not replaced. criteria is a map of criterion text to boolean checked state."New value: +"Array of story update objects. Each must include story_id; status, note, and criteria are optional. status must be one of: draft, in-progress, blocked, deferred (use complete_story to mark done). note is appended, not replaced. criteria is a map of criterion text (or AC ID) to boolean checked state — true = checked, false = unchecked. Example: {\"User can log in\": true, \"User sees error on bad password\": false}. Keys are matched case-insensitively with tolerance for Unicode dash variants (em-dash, en-dash, etc.)."
    • Addedreorder_backlog
  4. 4 tool updatesv1.0.3
    • Addedbulk_update_acceptance_criteria
    • Addedbulk_update_epics
    • Addedbulk_update_stories
    • Changedset_epic_status3 fields changed
      • addedInput schema / properties / confirm_regression
        Added value: +{
        +  "description": "Set to true to allow a backwards status transition (e.g. done → in-progress) without first creating new stories. Only set if the user explicitly insists on skipping story creation.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / override_incomplete
        Added value: +{
        +  "description": "Set to true to mark the epic 'done' even when some stories are not done. Only set after the user explicitly confirms the incomplete stories are intentionally omitted.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / summary
        Added value: +{
        +  "description": "Required when setting status to 'done'. Describes what was accomplished by this epic. Appended as a timestamped note to the epic file.",
        +  "type": "string"
        +}
  5. 3 tool updatesv1.0.1
    • Changedcomplete_story1 field changed
      • changedInput schema / properties / incomplete_items / description
        Previous value: -"Required when the story has unchecked acceptance criteria. Provide one explanation string per unchecked item, in the order they appear in the story file."New value: +"Required when the story has unchecked (genuinely unfinished) acceptance criteria. Each string must explain WHY that criterion was not met (e.g. 'Deferred to STORY-010 — rarity system not yet designed'). One entry per unchecked item, in the order they appear. DO NOT use this field to confirm items that are done — if a criterion is done, tick it [x] via set_acceptance_criteria first, then retry. Never prefix entries with 'Done:' — if it is done, it should not appear here at all."
    • Addedset_epic_status
    • Changedset_story_status1 field changed
      • changedInput schema / properties / status / description
        Previous value: -"New status to assign. Must be one of: draft, in-progress, blocked. To mark done, use complete_story."New value: +"New status to assign. Must be one of: draft, in-progress, blocked, deferred. To mark done, use complete_story."
  6. 10 tool updatesv1.0.0
    • Changedadd_story_note2 fields changed
      • changedInput schema / properties / note / description
        Previous value: -"The note text to append."New value: +"The note text to append. Can be multi-line. Will be stored with a UTC timestamp."
      • changedInput schema / properties / story_id / description
        Previous value: -"Story ID, e.g. STORY-047"New value: +"Story ID to annotate, e.g. STORY-047"
    • Addedcheck_acceptance_criterion
    • Changedcomplete_story3 fields changed
      • addedInput schema / properties / incomplete_items
        Added value: +{
        +  "description": "Required when the story has unchecked acceptance criteria. Provide one explanation string per unchecked item, in the order they appear in the story file.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / story_id / description
        Previous value: -"Story ID, e.g. STORY-047"New value: +"Story ID to complete, e.g. STORY-047"
      • changedInput schema / properties / summary / description
        Previous value: -"Required completion summary that will be appended to the story notes."New value: +"Completion summary describing what was done. Appended as a timestamped note to the story file."
    • Changedcreate_epic2 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"Optional description / goal for the epic"New value: +"Optional description or goal for the epic. Written into the epic.md file."
      • changedInput schema / properties / title / description
        Previous value: -"Title of the epic"New value: +"Title of the epic, e.g. 'User Authentication'"
    • Changedcreate_story4 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"Optional description / goal for the story"New value: +"Optional description or goal for the story. Written into the story.md file."
      • changedInput schema / properties / epic_id / description
        Previous value: -"Epic ID to create the story under, e.g. EPIC-003"New value: +"Epic ID the story belongs to, e.g. EPIC-003. The epic must already exist."
      • addedInput schema / properties / story_type
        Added value: +{
        +  "description": "Type of story. Valid values: feature, bug, chore, spike. Defaults to 'feature' if not provided.",
        +  "type": "string"
        +}
      • changedInput schema / properties / title / description
        Previous value: -"Title of the story"New value: +"Title of the story, e.g. 'User can reset password'"
    • Changedget_story1 field changed
      • changedInput schema / properties / story_id / description
        Previous value: -"Story ID, e.g. STORY-047"New value: +"Story ID to retrieve, e.g. STORY-047"
    • Addedgroom_epic
    • Changedlist_stories3 fields changed
      • changedInput schema / properties / epic_id / description
        Previous value: -"Optional epic ID to filter by, e.g. EPIC-003"New value: +"Optional epic ID to filter by (e.g. EPIC-003). When provided, only stories belonging to this epic are returned."
      • changedInput schema / properties / status / description
        Previous value: -"Optional status to filter by, e.g. draft, in-progress, done"New value: +"Optional status to filter by. Valid values: draft, in-progress, done, blocked. When provided, only stories with this status are returned."
      • addedInput schema / properties / story_type
        Added value: +{
        +  "description": "Optional story type to filter by. Valid values: feature, bug, chore, spike. When provided, only stories of this type are returned.",
        +  "type": "string"
        +}
    • Changedset_acceptance_criteria3 fields changed
      • addedInput schema / properties / criteria
        Added value: +{
        +  "description": "List of acceptance criteria strings. Each entry becomes a checklist item (- [ ] ...) in the story file. Must contain at least one item.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / story_id / description
        Previous value: -"Story ID, e.g. STORY-007"New value: +"Story ID to update, e.g. STORY-007"
      • changedInput schema / required
        Previous value: -[
        -  "story_id"
        -]New value: +[
        +  "story_id",
        +  "criteria"
        +]
    • Changedset_story_status2 fields changed
      • changedInput schema / properties / status / description
        Previous value: -"New status: draft, in-progress, done, or blocked"New value: +"New status to assign. Must be one of: draft, in-progress, blocked. To mark done, use complete_story."
      • changedInput schema / properties / story_id / description
        Previous value: -"Story ID, e.g. STORY-047"New value: +"Story ID to update, e.g. STORY-047"
  7. 9 tool updates
    • First observedadd_story_note
    • First observedcomplete_story
    • First observedcreate_epic
    • First observedcreate_story
    • First observedget_index_summary
    • First observedget_story
    • First observedlist_stories
    • First observedset_acceptance_criteria
    • First observedset_story_status

TDQS

A4/5.0

Scored across 16 tools

Disambiguation4/5

Most tools target distinct resources/actions, but there is some overlap between single-item and bulk operations (e.g., set_story_status vs. bulk_update_stories; check_acceptance_criterion vs. bulk_update_acceptance_criteria). The descriptions mitigate this by clarifying scope and validation behavior, so an agent could usually select correctly with careful reading.

Naming Consistency5/5

Tool names consistently follow a verb_noun snake_case pattern (get_story, create_epic, set_story_status, bulk_update_epics, reorder_backlog). Even less common verbs like groom_epic and complete_story fit the same pattern, making the naming convention predictable and coherent.

Tool Count4/5

Sixteen tools is slightly above the typical well-scoped range, but the server covers epics, stories, statuses, acceptance criteria, notes, batching, and backlog ordering. A few bulk operations feel redundant with single-item variants, but overall the count is still appropriate for the domain.

Completeness3/5

The set covers creation, reading, status updates, acceptance criteria management, note-taking, completion, grooming, and reordering. However, there are notable gaps: no way to delete or truly edit an epic/story, no dedicated tool to fetch a single epic's full content, and no direct story content update beyond status/AC/notes, which agents may need for full lifecycle management.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers