Skip to main content
Glama
kao273183
by kao273183

Spec-driven testing over MCP. Turn Linear / JIRA / GitHub Issues / Notion / Figma / Markdown specs into runnable scenarios, hand off to any test runner via mk-qa-master, and keep a live spec ↔ test coverage matrix.

🟢 Alpha — v0.4: self-reinforcement. 18 tools + 6 adapters. Snapshots archived per get_optimization_plan call → trend analysis + chronic-spec detection + tool-usage telemetry. Full design in docs/prd.md.


What this is

An MCP server that turns specs — Linear tickets, JIRA stories, GitHub Issues, Notion pages, Figma annotations, plain Markdown — into structured test scenarios, hands them to any test runner (via mk-qa-master or directly), and maintains a live spec ↔ test coverage matrix.

Sibling to mk-qa-master in the mk-* family of opinionated AI-QA MCPs.

Related MCP server: Gigaspec

What this is NOT

It's not

Use this instead

A spec editor

Linear / JIRA / Notion / Markdown — keep writing specs where you already do

A test runner

mk-qa-master (pytest / Jest / Cypress / Go test / Maestro)

An issue tracker UI

Linear / JIRA / Notion's native interface

A spec → code generator

GitHub Spec Kit, AWS Kiro

An LLM

Leverages your AI client (Claude / Cursor / Codex / Gemini) for the reasoning

mk-spec-master sits between your spec source and your test runner — purely about the spec ↔ test link, the coverage matrix that lives on top, and the quality coach that grades both.


Tool surface (15 tools)

Grouped by role. Each group is a layer in the spec→test→coverage→coach loop.

Meta — orientation (1)

Tool

Purpose

get_spec_source_info

Active adapter + all available. Call first so the AI knows whether to expect Linear / JIRA / Notion / Figma / Markdown semantics

Discovery — find and load specs (3)

Tool

Purpose

list_specs

Enumerate specs from the active source (filter by status / label / limit)

fetch_spec

Pull a single spec's full content by id

parse_spec

Heuristic AC extraction (en + zh-TW + zh-CN headings supported); accepts spec_id or raw_text. Returns _meta.ac_hash for drift detection

Generation — specs → testable artifacts (2)

Tool

Purpose

extract_scenarios

AC → scenarios with happy / edge / error classification (negation-aware) and best-effort Given/When/Then split

generate_test_plan

One-shot fetch + parse + extract → markdown plan ready to feed to mk-qa-master.generate_test(business_context=...)

Coverage & drift — the traceability layer (4)

Tool

Purpose

link_test_to_spec

Record that a test verifies a spec (writes to SPEC_PROJECT_ROOT/.mk-spec-master/index.json). Stores title / source / url / ac_hash for the matrix and drift report

auto_link_tests

Scan a test directory for @spec: <ID> tags and link them automatically. Python / JS / TS / Go supported. dry_run previews without writing

get_coverage_matrix

Spec × test grid — answer "which specs have no tests" in one call

get_drift_report

Re-fetch each linked spec, recompute ac_hash, compare. Buckets into fresh / drifted / unknown / stranded

Coach — quality + prioritization (3)

Tool

Purpose

analyze_spec_quality

Heuristic findings on vague language, implementation-leak AC, unclear role refs (the differentiator vs Kiro / Spec Kit)

propose_spec_improvements

Take analyze output → PM-facing markdown with concrete rewrites

get_optimization_plan

Three-layer prioritized plan: coverage gaps (L1) + spec-quality (L2) + process drift (L3). The "what should we fix next" tool

Knowledge — domain methodology (2)

Tool

Purpose

init_spec_knowledge

Create SPEC_PROJECT_ROOT/spec-knowledge.md from a starter template (EARS, INVEST, AC quality rules + TODO sections for your team's rules / actors / glossary). Idempotent

get_spec_context

Read the spec-knowledge file (with built-in fallback). Optional section filter pulls one heading at a time. Call near the start of every session

Self-reinforcement — long-running view (3, v0.4)

Tool

Purpose

get_spec_history

Last N snapshots archived by get_optimization_plan, with trend deltas (current vs ~7d, vs ~30d) for spec / coverage / quality / drift counters. "Are we improving?"

get_drift_signature

Scan recent snapshots for specs that repeatedly land in drifted / unknown / low-quality buckets — chronic patterns. "Which specs keep causing trouble?"

get_telemetry

Aggregate the tool-usage log: which tools get called most, error rates, p50 / p95 latency, dead-surface (declared but never called)


Adapter status

SPEC_SOURCE

Source

Status

Auth

markdown_local

Local *.md with YAML-ish frontmatter

✅ since 0.1.0

none

github_issues

GitHub Issues via gh CLI

✅ since 0.1.0

gh auth login or GITHUB_TOKEN

linear

Linear API (GraphQL)

✅ since 0.2.2

LINEAR_API_KEY + SPEC_PROJECT_KEY=<team-key> (optional)

jira

JIRA Cloud (REST v3, ADF → markdown)

✅ since 0.2.3

JIRA_BASE_URL + JIRA_EMAIL + JIRA_API_TOKEN + SPEC_PROJECT_KEY=<project-key> (optional)

notion

Notion databases (REST v1, blocks → markdown)

✅ since 0.3.0

NOTION_TOKEN + SPEC_PROJECT_KEY=<database-id>

figma

Figma file frames (TEXT nodes + comments → markdown)

✅ since 0.3.1

FIGMA_TOKEN + SPEC_PROJECT_KEY=<file-key>


Common workflows

Four patterns cover ~90% of real use. Each is one sentence to the AI client; the tools chain automatically.

1. Spec → test → run → coverage (the main loop)

"Fetch LIN-123 from Linear, extract scenarios, generate Playwright tests with mk-qa-master, run them, and update the coverage matrix."

Chains: fetch_specparse_specextract_scenariosmk-qa-master.generate_test (×N) → link_test_to_spec (×N) → mk-qa-master.run_testsget_coverage_matrix.

2. Spec health check

"Review every in-progress spec for quality issues and give me a prioritized improvement plan."

Chains: list_specs(status="in-progress")analyze_spec_qualitypropose_spec_improvementsget_optimization_plan.

3. Rebuild traceability after a refactor

"Sync the spec ↔ test index from the test source — I just renamed a bunch of files."

Chains: auto_link_testsget_coverage_matrix. Tests need @spec: <ID> docstring tags for auto-link to work; comment-above-function and docstring-inside both supported.

4. Session warmup

"Before we work on specs today: load the spec-knowledge methodology and tell me which source is active."

Chains: get_spec_source_infoget_spec_context. Cheap, sets the methodology + adapter context for everything that follows.


Sample output

get_optimization_plan markdown (excerpt)

# Optimization plan

_Coverage matrix: 23 spec(s) tracked, 4 untested._
_Spec quality: 23 spec(s) analyzed, 17 finding(s)._
_Drift: 2 drifted, 0 stranded, 5 without ac_hash._

## 🔴 Layer 1 — Coverage gaps

**Specs with zero tests** (ranked first — every business risk lives here):
- `LIN-204` — Apply promo code at checkout
- `LIN-211` — Refund flow

## 🟡 Layer 2 — Spec quality

### `LIN-098` — Checkout latency  (score: 80/100, findings: 4)
- 🟡 `ac-1`: Quantify (e.g., 'response within 200 ms')  (evidence: `fast`)
- 🔴 `ac-3`: Rewrite to describe what the user observes  (evidence: `redis`)

## 🔵 Layer 3 — Process drift

**Drifted** (spec changed since link — review affected tests):
- `LIN-123` — Apply discount at checkout · 4 test(s) potentially stale

get_coverage_matrix markdown (excerpt)

# Coverage matrix

- Specs tracked: 23
- Specs shown (min_tests=0): 23
- Specs with zero tests: 4

| Spec    | Title                          | Tests | Last status |
|---------|--------------------------------|------:|-------------|
| `LIN-204` | Apply promo code at checkout |     0 | —           |
| `LIN-123` | Apply discount at checkout   |     4 | passed      |

Install

uvx mk-spec-master    # or: pip install mk-spec-master

Add to your MCP client config:

{
  "mcpServers": {
    "mk-spec-master": {
      "command": "uvx",
      "args": ["mk-spec-master"],
      "env": {
        "SPEC_SOURCE": "markdown_local",
        "SPEC_PROJECT_ROOT": "/path/to/your/project"
      }
    }
  }
}

Claude Desktop config lives at:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

Then in Claude / Cursor / Codex / Gemini CLI:

"Use mk-spec-master to parse SPEC-001, extract scenarios, and hand them to mk-qa-master so we can generate Playwright tests."


Why this is missing from the ecosystem

Tool

Lock-in

What we do differently

AWS Kiro

AWS IDE only, proprietary

MCP-native, multi-client, open source

Jama Connect MCP

$50k+/year, enterprise-only

SMB / indie / AI-native segment

GitHub Spec Kit

spec→code; runtime test coverage out of scope

We add runtime test coverage

testomat.io / JIRA MCPs

Single source (JIRA), SaaS lock

Multi-source, file-based index, no lock

See docs/prd.md §4 for the full positioning.

Walkthrough — spec → test → coverage (long form)

Given a Linear ticket LIN-123 "Apply discount at checkout" with 4 acceptance criteria:

You: Use mk-spec-master to fetch LIN-123, extract scenarios, generate
     Playwright tests with mk-qa-master, run them, and report coverage.

The AI client chains:

mk-spec-master.fetch_spec("LIN-123")
mk-spec-master.parse_spec(spec_id="LIN-123")        → 4 AC + ac_hash
mk-spec-master.extract_scenarios(...)                → 1 happy + 3 error
mk-spec-master.generate_test_plan(spec_id="LIN-123")

for scenario in plan:
  mk-qa-master.generate_test(business_context=scenario.gherkin)
  mk-spec-master.link_test_to_spec(spec_id="LIN-123", test_node_id=..., ac_hash=...)

mk-qa-master.run_tests
mk-spec-master.get_coverage_matrix

The traceability index now records all 4 links with their AC hashes. Next sprint, when the spec changes, get_drift_report flags every test whose linked spec has moved — re-run the chain only for those.


Status

Milestone

Target

Status

v0.1 (MVP — markdown_local + github_issues, 7 tools)

June 2026

✅ Shipped

v0.2 (Linear, JIRA, coverage matrix, spec-quality coach, drift report)

Aug 2026

✅ Complete (0.2.3)

v0.3 (Notion, Figma, auto-link, optimization plan)

Oct 2026

✅ Complete (0.3.3)

v1.0 (production-ready, docs, integration recipes)

Q4 2026

Family

  • mk-qa-master — AI 測試大師, the test-runner sibling. Tests run via mk-qa-master; coverage tracked here.

  • More mk-* MCPs in design (mk-perf-master, mk-a11y-master).

License

MIT © 2026 Jack Kao — see LICENSE (中文翻譯參考:LICENSE.zh-TW.md; the English version is authoritative).

Plain-English version: personal use, commercial use, modification, redistribution — all allowed. The only requirement is that you keep the copyright and license notice in your copy. No warranty: if it breaks something in production, you can't come after the author.

If this saved you time, a coffee goes a long way. ☕

Available Tools

18 tools
analyze_spec_qualityA

Run heuristic checks against a spec's body: vague language without measurable thresholds (fast / easy / intuitive / 現代 / 順暢 ...), implementation-detail leakage in AC ('uses Redis', '透過 X 服務'), and references to roles ('logged-in user', '管理員') without a Preconditions section. Pass spec_id for one spec, raw_text to analyze a freeform draft, or neither to sweep every spec from the active source. Returns {source, specs_analyzed, total_findings, results[]}. Each result has {spec_id, title, ac_count, score (0–100), findings[]} where each finding carries severity (info / warn / error), evidence, and a suggested rewrite. Pair with propose_spec_improvements for the markdown coach plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idNo
raw_textNo

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It transparently details the analysis types, return structure, and the fact that sweeping all specs is possible. It lacks mention of performance implications or read-only nature, but is adequate.

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 dense with information but remains coherent and front-loaded. It covers multiple modes, return fields, and severity levels in a single paragraph without excessive wordiness.

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 no output schema and moderate complexity, the description provides a complete picture: input modes, analysis types, return structure with fields, and linkage to a sibling tool. It answers the key questions an agent would have.

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 description coverage is 0%, so the description fully compensates. It explains the purpose of each parameter: spec_id for one spec, raw_text for a draft, omitting both to sweep all. This adds significant meaning 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 clearly states the tool runs heuristic checks on spec bodies, listing specific types of issues detected (vague language, implementation leakage, role references without preconditions). It distinguishes from siblings by explicitly mentioning pairing with propose_spec_improvements.

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 three clear usage modes (by spec_id, raw_text, or sweep all) and refers to a sibling tool for follow-up. However, it does not explicitly state when not to use this tool or compare with other analysis tools.

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

extract_scenariosA

Turn parsed acceptance criteria into testable scenarios. Each scenario is classified as happy / edge / error via keyword heuristics, and split into Given / When / Then where possible. Pass the acceptance_criteria array returned by parse_spec. Returns {count, scenarios[]} where each scenario has {id, ac_id, title, kind, given, when, then}. Best paired with generate_test_plan for a markdown handoff to mk-qa-master.

ParametersJSON Schema
NameRequiredDescriptionDefault
acceptance_criteriaYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It discloses that scenarios are classified via keyword heuristics and split into Given/When/Then where possible, and it details the output fields. However, it does not cover side effects, error behavior, or prerequisites beyond the input format. This partial disclosure is adequate but not comprehensive.

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 concise and well-structured: it opens with the purpose, then explains the method, output format, and a pairing suggestion. Every sentence adds value without redundancy or excessive length.

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 tool's moderate complexity and lack of output schema, the description provides a complete picture of inputs, outputs, and workflow position. It defines the scenario fields and suggests a next step. Minor missing details (e.g., handling of unscoped input) are acceptable for a processing 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?

The input schema has 0% description coverage, so the description compensates by explaining that the parameter is the acceptance_criteria array from parse_spec. It does not detail the array's structure beyond mentioning required text field, but it provides contextual linkage to another tool. This adds moderate value.

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 converts parsed acceptance criteria into testable scenarios, specifying the input source (from parse_spec) and output structure (Given/When/Then with classification). This distinguishes it from siblings like parse_spec (which likely produces the input) and generate_test_plan (which produces a markdown handoff).

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 instructs to pass the acceptance_criteria array from parse_spec, providing a clear before/after context. It also suggests pairing with generate_test_plan, reinforcing a workflow. Although it does not list exclusions or alternatives, the guidance is sufficient for correct usage.

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

fetch_specA

Pull a single spec by id from the active source. For markdown_local the id is either the id: field in frontmatter or the filename stem; for github_issues it's the issue number as string. Returns the full Spec record {id, title, body, url, status, labels, metadata}. Pair with parse_spec to extract structured acceptance criteria.

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes

TDQS

A4.5/5.0
Behavior4/5

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

The description explains the expected behavior (read operation with no side effects) and clarifies the ID interpretation per source type. However, it lacks details on error handling, permissions, or potential issues like missing IDs.

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 concise, with each sentence adding important information: purpose, ID clarification, return structure, and a practical pairing suggestion. No unnecessary words.

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 simple tool with one parameter and no output schema, the description covers the return fields explicitly. It is complete for a basic fetch, though it omits error handling and edge cases.

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?

The schema provides no description for spec_id, but the description compensates fully by explaining its meaning in different contexts (markdown_local vs github_issues), adding significant value beyond the raw 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 that the tool pulls a single spec by ID from the active source, specifies the ID format for markdown_local and github_issues, and distinguishes itself from siblings like list_specs by focusing on individual retrieval.

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 some usage guidance by suggesting pairing with parse_spec, but it does not explicitly state when to use this tool versus alternatives like list_specs or search tools, nor does it mention any prerequisites or exclusions.

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

generate_test_planA

One-shot: fetch + parse + extract for a spec, then emit a markdown test plan with a business_context block per scenario ready to hand to mk-qa-master.generate_test(business_context=...). The AI client typically reads this plan, loops the scenarios, and calls mk-qa-master once per scenario. Set target_runner to hint the desired output (pytest / jest / cypress / go / maestro). Returns {spec_id, target_runner, scenario_count, markdown, scenarios[]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idYes
target_runnerNopytest

TDQS

A4/5.0
Behavior3/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 describes the process steps (fetch, parse, extract, emit) and the return structure. However, it does not disclose behavioral traits such as side effects, idempotency, authentication needs, or rate limits. The 'one-shot' label hints at no side effects but lacks explicit safety guarantees.

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. It front-loads the key action ('One-shot: fetch + parse + extract') then covers usage and return values efficiently. Every sentence contributes valuable 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?

Given the low schema coverage and no output schema, the description provides process steps, return fields, and ties to another tool (mk-qa-master). It explains the workflow for an AI agent. However, it omits description of spec_id and does not address error scenarios or constraints, leaving minor gaps.

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

Parameters3/5

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

With 0% schema description coverage, the description must explain parameters. It explains target_runner as 'hint the desired output (pytest / jest / cypress / go / maestro)', adding meaning beyond the schema. However, it does not describe spec_id at all, leaving ambiguity about its format or constraints.

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: fetching, parsing, and extracting for a spec to emit a markdown test plan. It distinguishes itself from siblings by being a one-shot combined operation, unlike separate tools like fetch_spec, parse_spec, or extract_scenarios.

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 the usage context: it is a one-shot operation for generating a test plan ready for mk-qa-master.generate_test, and the AI client loops over scenarios. It implicitly contrasts with sibling tools but does not explicitly state when not to use it or provide alternatives, though the 'one-shot' keyword and mention of other tools in the workflow provide guidance.

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

get_coverage_matrixA

Snapshot of every spec ↔ test link recorded in the local index. Returns both structured rows and a ready-to-paste markdown table — call this when a user asks 'what's tested' or 'which specs have no tests'. Filters: min_tests (default 0; set to 0 to find untested specs, set to 1 to hide them) and include_orphans (default true). Returns {specs_total, specs_shown, specs_untested, orphan_count, rows[], markdown}.

ParametersJSON Schema
NameRequiredDescriptionDefault
min_testsNo
include_orphansNo

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description implies a read-only operation via 'snapshot' and describes the return shape. It does not mention destructive behavior or permissions, but the provided information is sufficient for an agent to understand the tool's safety profile.

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 concise, front-loaded with the core purpose, then provides usage triggers, parameter details, and return structure in a logical order. Every sentence adds value with no 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?

Given the lack of annotations and output schema, the description provides a complete picture: purpose, usage triggers, parameter semantics, and return structure. An agent has all necessary information to correctly select and invoke this tool.

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?

Despite 0% schema description coverage, the description fully explains both parameter defaults and effects: min_tests (set to 0 to find untested specs, set to 1 to hide them) and include_orphans (default true). This adds significant meaning beyond the plain 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 it returns a snapshot of spec-test links, with both structured rows and a markdown table. It specifies the exact user queries it addresses ('what's tested' or 'which specs have no tests'), distinguishing it from sibling tools like get_drift_report or get_spec_context.

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 tells when to call the tool (when a user asks about testing coverage), but does not mention when not to use it or alternatives. It is clear but lacks explicit exclusions.

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

get_drift_reportA

For every spec in the index that has a stored ac_hash, fetch the live spec via the active adapter and recompute its ac_hash to detect drift. Buckets the results into fresh (no drift), drifted (linked tests may be stale), unknown (no hash stored — re-link with ac_hash from parse_spec._meta.ac_hash to enable), and stranded (spec_id can no longer be fetched — deleted, closed, or source mismatch). Use when a user asks 'has anything changed' / 'what's out of sync' / 'is my test suite still aligned with specs'. Optional spec_id narrows the check to one spec. Returns counts + per-bucket details + markdown summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idNo

TDQS

A4.5/5.0
Behavior4/5

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

Despite no annotations, the description thoroughly explains the process (fetching live spec, recomputing hash, bucketing) and result meanings. It does not explicitly state read-only nature, but implies no writes.

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?

Every sentence contributes value: mechanism, buckets, use cases, optional parameter, output summary. Well-structured and front-loaded with main action.

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 no output schema, the description still provides sufficient context: return types (counts, details, markdown). Also explains the 'unknown' bucket and how to resolve it, enabling the agent to handle results.

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?

Single optional parameter spec_id is explained: it narrows the check to one spec. The description adds useful context beyond the bare schema, which had 0% 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?

Description clearly states the tool's purpose: detect drift in specs by comparing stored and live ac_hashes. It details the exact mechanism and output buckets, distinguishing it from sibling tools like 'get_drift_signature'.

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?

Explicitly states when to use ('has anything changed', 'what's out of sync') and explains the bucketing logic. Lacks explicit when-not or alternative tools, but context is clear.

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

get_drift_signatureA

Scan the recent snapshot history for chronic problems: same spec_id repeatedly appearing in drifted / unknown / low-quality buckets. Specs flagged as 'unstable' (drifts every cycle), 'chronic_low_quality' (vague every cycle), or 'chronic_unhashed' (never gets a hash recorded). Use when a user asks 'which specs keep causing trouble' / 'what's the long-running pain'. Args: window (snapshots to scan, default 5), threshold (min recurrence to flag, default 3). Returns {ready, snapshots_scanned, chronic[], markdown}.

ParametersJSON Schema
NameRequiredDescriptionDefault
windowNo
thresholdNo

TDQS

A4.4/5.0
Behavior4/5

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

Given that no annotations are provided, the description carries the full burden. It explains the scanning logic, the three flagging categories, and the return structure. It does not explicitly state that the tool is read-only or discuss side effects, but the action 'scan' and the return of a report imply no side effects. The description is transparent enough for safe use.

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 extremely concise, front-loading the purpose and then providing usage guidance, parameter details, and return format in a few sentences. Every sentence adds value, with 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 the tool's simplicity (2 parameters, no output schema, no nested objects), the description is complete. It covers the purpose, when to use, parameter explanations, and the structure of the return value. No additional information is needed for an agent to correctly select and invoke the tool.

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 0%, so the description must compensate. It fully explains both parameters: window (number of snapshots to scan, default 5) and threshold (minimum recurrence to flag, default 3). This adds crucial meaning beyond the schema's type and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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

Clearly states it scans recent snapshot history for chronic problems like unstable, chronic_low_quality, and chronic_unhashed. Provides example queries ('which specs keep causing trouble'). However, it does not explicitly distinguish this from its sibling tools such as get_drift_report or analyze_spec_quality.

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?

Explicitly advises when to use the tool: when a user asks about specs that repeatedly cause trouble or long-running pain. This provides clear context. It does not mention when not to use the tool or suggest alternatives, but the guidance is sufficient.

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

get_optimization_planA

Three-layer coach output that integrates coverage / quality / drift signals into one prioritized markdown plan. Layer 1 surfaces untested + thin-coverage specs; Layer 2 ranks specs by severity-weighted quality findings; Layer 3 surfaces drifted + stranded specs. Use this when a user asks 'what should we fix next' / 'show me the weekly plan' / 'review the suite'. Toggle layers via include_coverage / include_quality / include_drift booleans (all default true). top_n caps per-layer detail rows (default 10). Returns {specs_total, *_count, *[], markdown}.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_coverageNo
include_qualityNo
include_driftNo
top_nNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden. It discloses the return structure '{specs_total, *_count, *[], markdown}', explains layers and how toggles work, and implies a read-only nature. It does not mention destructive traits or auth needs, which is acceptable for a reporting tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph but front-loads the key purpose. Every sentence adds value, though it could be more scannable with bullet points. It is appropriately sized for the 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?

Given the complexity (3 layers, 4 params, no output schema), the description covers the output structure and layer behavior. It does not detail the markdown format, but that is acceptable. The tool is well-placed among siblings that handle individual signals.

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 0%, but the description fully compensates by explaining each parameter: include_coverage/quality/drift booleans (default true) toggle layers, top_n integer (default 10) caps rows. It adds context beyond the schema types, making parameter usage clear.

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 provides a 'Three-layer coach output' that integrates coverage/quality/drift signals into a prioritized markdown plan, with specific use cases like 'what should we fix next'. This distinguishes it from sibling tools that focus on individual signals (e.g., get_coverage_matrix, get_drift_report).

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 gives usage scenarios: 'when a user asks what should we fix next / show me the weekly plan / review the suite'. It also explains how to toggle layers via booleans. However, it does not mention when not to use or provide alternatives (e.g., for individual signals).

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

get_spec_contextA

Read SPEC_PROJECT_ROOT/spec-knowledge.md (or fall back to built-in defaults if missing). Call near the start of a session so the same methodology + domain glossary colours every spec interpretation that follows. Optional section filters to a single heading (partial-match, case-insensitive) — e.g. section='actors' returns just the actors block. Returns {source: 'file'|'builtin', content, ...}.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNoOptional heading filter (partial match, case-insensitive).

TDQS

A4.7/5.0
Behavior5/5

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

No annotations provided, so description fully discloses behavior: fallback to built-in defaults if file missing, returns source indicator, and content structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences covering core function, usage guidance, and parameter details with no wasted words. Well structured and front-loaded.

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, description explains return shape and fallback. For a simple tool with one optional parameter, all essential information is present.

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 100% of parameters. Description adds concrete example (section='actors') and clarifies partial-match and case-insensitivity, going 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?

States core function clearly ('Read SPEC_PROJECT_ROOT/spec-knowledge.md...'), explains when to use it, and differentiates from sibling tools by focusing on session initialization context.

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?

Explicitly advises 'Call near the start of a session' and explains rationale. Does not explicitly list when not to use or alternatives, but provides sufficient guidance.

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

get_spec_historyA

Return the last N snapshots archived by get_optimization_plan plus trend deltas (current vs ~7 days ago, vs ~30 days ago) for spec count, untested, quality findings, drift, stranded, and unknown-hash specs. Use when a user asks 'are we improving' / 'show me the trend' / 'how did we do this month'. Requires at least 2 snapshots for trend; degrades gracefully with fewer. Returns {snapshots_total, snapshots[], trend[], markdown}.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description provides behavioral context: it returns {snapshots_total, snapshots[], trend[], markdown} and degrades gracefully with fewer snapshots. It does not explicitly state read-only or permissions, but the use case implies no side effects.

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 wasted words. It front-loads the main output, then usage context, then return format and conditions. Every sentence adds 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?

The description covers the main purpose, conditions, and return structure. It lacks output schema but compensates by listing return fields. Minor gaps: no mention of error handling or specific format of 'trend deltas'.

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 single parameter 'limit' is explained as controlling the number of snapshots ('last N snapshots'), which adds meaning beyond the schema's default value. Schema coverage is 0%, but the description sufficiently clarifies the parameter's role.

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 returns last N snapshots and trend deltas for specific metrics (spec count, untested, etc.), and explicitly ties it to user queries about improvement or trends, distinguishing it from sibling tools like get_drift_report or get_optimization_plan.

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 says when to use: when a user asks 'are we improving', 'show me the trend', or 'how did we do this month'. It also notes the requirement of at least 2 snapshots for trend and graceful degradation. However, it does not mention when not to use or direct alternatives.

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

get_spec_source_infoA

Return the active spec source (selected via SPEC_SOURCE env var) plus all adapters built into this server. Call first in any session so the AI knows whether to expect markdown / GitHub / (future) Linear / JIRA / Notion semantics. Returns {active, available, version}.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/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 full burden. It discloses the return structure {active, available, version} and that it depends on SPEC_SOURCE env var. However, it does not mention potential failures, rate limits, or behavior if env var is not set.

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: first states core purpose, second gives usage guidance and return format. No redundant words, front-loaded with critical 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?

Given no parameters and no output schema, the description covers the essential: what is returned, when to call, and a brief note on env var. It could elaborate on 'adapters' but is sufficient for a simple informational 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% with zero parameters, so baseline is 3. The description adds no parameter details beyond stating no input needed, but it does mention the env var which is not a parameter.

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 'Return' and identifies the resource as 'active spec source' and 'all adapters'. It clearly distinguishes from sibling tools by specifying it returns source info and adapters, not spec content or analyses.

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?

Explicitly advises 'Call first in any session so the AI knows whether to expect markdown / GitHub / ... semantics', providing clear when-to-use guidance. It does not mention when not to use or alternatives, but the directive is direct and actionable.

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

get_telemetryA

Aggregate the tool-usage log written by this server. Surfaces: which tools are called most, which fail most (error rate), p50 / p95 latency per tool, and which declared tools have never been called in the window (dead surface). Records contain only tool name + timing + ok flag — argument values are never logged. Use when a user asks 'what's the AI actually using' / 'which tools are slow' / 'which tools are unused'. Args: days (window, default 30), include_inactive (bool, default true). Returns {records_total, window_days, tools[], inactive[], markdown}.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
include_inactiveNo

TDQS

A4.6/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that argument values are never logged and describes the return structure. However, it doesn't explicitly state it's read-only or non-destructive, though that's implied.

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 informative but concise; it front-loads the purpose and uses clear structure. Every sentence adds value, though it could be slightly more compact without losing clarity.

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 no output schema, the description explicitly outlines the return structure: 'records_total, window_days, tools[], inactive[], markdown'. It covers all necessary context for a telemetry aggregation 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%, but the description explains both parameters: 'days (window, default 30)' and 'include_inactive (bool, default true)'. This adds meaning beyond the schema, which only has type and default.

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 aggregates tool-usage logs and lists specific metrics (most called, error rates, latency, unused tools). It uses specific verbs and distinguishes itself from sibling tools, which are all about spec analysis and testing.

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: 'Use when a user asks what the AI is actually using / which tools are slow / which tools are unused'. Also explains default arguments and return format, covering usage context comprehensively.

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

init_spec_knowledgeA

Create SPEC_PROJECT_ROOT/spec-knowledge.md from a starter template. The file carries spec methodology (EARS, INVEST, AC quality rules) plus TODO sections for the team's domain rules / actors / glossary. Other mk-spec-master tools lean on this indirectly via get_spec_context. Idempotent — refuses to overwrite an existing file unless overwrite=true. Optional project_name labels the file.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_nameNo
overwriteNo

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses idempotency (refuses to overwrite unless overwrite=true) and the file's content purpose. It does not mention side effects or return values, but the key behavior is well-covered.

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: the first states the primary action and content, the second covers idempotency and optional parameter. It is front-loaded and contains no unnecessary words.

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 simple interface (2 optional params, no output schema, no annotations), the description covers the essential aspects: what it creates, its behavioral constraints, and parameter roles. It could mention the template origin or expected outcome, but is sufficiently complete for an init 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 description compensates by explaining both parameters: 'project_name' labels the file, and 'overwrite' controls idempotent behavior. This adds meaning beyond the schema's type definitions.

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 creates a specific file (SPEC_PROJECT_ROOT/spec-knowledge.md) from a starter template, and distinguishes from sibling tools by noting that others lean on it indirectly via get_spec_context.

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 the idempotent behavior and the role of the overwrite parameter, and implies its use as the initial setup step for spec knowledge. However, it does not explicitly state when not to use it or provide direct comparisons to siblings.

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

list_specsA

Enumerate specs from the active source. For markdown_local this globs SPEC_PROJECT_ROOT/specs/*.md and reads YAML frontmatter; for github_issues it queries the configured owner/repo (set via SPEC_PROJECT_KEY). Optional filters: status (string — adapter-specific: 'in-progress' for markdown, 'open'|'closed'|'all' for GitHub), label (string), limit (int, default 50). Returns {source, count, specs[]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
labelNo
limitNo

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 burden. It discloses the enumeration behavior, adapter-specific details, and filters. It is clearly a read operation, though it does not address authentication or error conditions.

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 concise (2 sentences), front-loaded with the main action, and uses no superfluous words. Every sentence contributes essential 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?

The description covers the source modes, filters, and return format. Without an output schema, it adequately describes the output. Missing details like error handling or performance are acceptable for a simple 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 coverage is 0%, so the description must explain parameters. It does so for all three: status with adapter-specific values, label as a string, and limit with a default. Label could have more detail, but overall adds significant 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 action (Enumerate specs) and the resource (active source), with specific behaviors for two source types (markdown_local and github_issues), making it distinct from sibling tools like fetch_spec or parse_spec.

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 versus alternatives. It lacks guidance on when not to use or compare to siblings like get_spec_context or fetch_spec.

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

parse_specA

Extract structured acceptance criteria from a spec body. Looks for headings matching 'Acceptance criteria' / 'AC' / '驗收條件' / '驗收標準' (case-insensitive, en + zh-TW + zh-CN) and pulls numbered or bulleted items beneath. Pass spec_id to use the active adapter, or raw_text to parse ad-hoc spec text without going through any source. Returns {spec_id, title, acceptance_criteria[], roles[], preconditions[], _meta}. Roles + preconditions are placeholders in v0.1 — filled by the v0.2 spec-quality coach.

ParametersJSON Schema
NameRequiredDescriptionDefault
spec_idNo
raw_textNo

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. It discloses parsing behavior: heading matching (case-insensitive, multiple languages), item extraction (numbered/bulleted), and return structure ({spec_id, title, acceptance_criteria[], roles[], preconditions[], _meta}). It also notes that 'roles + preconditions are placeholders in v0.1,' setting appropriate expectations. No contradictions with annotations (none exist).

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 concise and well-structured. The first sentence states the purpose, followed by parameter guidance, and then return fields. Every sentence adds value, and there is no redundant 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 parsing tool with no output schema, the description explains input parameters (both optional, with clear use cases) and the return structure. It mentions version limitations (placeholders in v0.1). It does not cover error cases (e.g., both parameters provided, neither provided) or rate limits, but these are minor for this tool.

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 description coverage is 0%, so the description compensates fully. It explains both parameters: spec_id (for active adapter) and raw_text (for ad-hoc parsing). It adds meaning beyond the schema by describing the return structure and the context of each parameter.

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: 'Extract structured acceptance criteria from a spec body.' It specifies the verb (extract), resource (acceptance criteria), and method (looks for headings matching given patterns). It distinguishes from sibling tools like fetch_spec (which retrieves raw spec) and analyze_spec_quality (which evaluates quality).

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 guidance on parameter usage: 'Pass spec_id to use the active adapter, or raw_text to parse ad-hoc spec text without going through any source.' This clarifies when to use each parameter. However, it does not explicitly state when NOT to use the tool or compare to alternatives like fetch_spec for raw retrieval.

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

propose_spec_improvementsA

Take analyze_spec_quality output and produce a PM-facing markdown coach plan grouping findings by spec and issue type, with concrete rewrite suggestions per finding. If analysis is not provided, runs analyze_spec_quality inline with the remaining arguments. Use this when a user says 'how do I improve this spec' or 'review my PRD'. Returns {markdown, actions[]}.

ParametersJSON Schema
NameRequiredDescriptionDefault
analysisNoOutput of analyze_spec_quality. If omitted, this tool runs the analysis itself.
spec_idNo
raw_textNo

TDQS

A3.8/5.0
Behavior2/5

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

No annotations exist. The description discloses that it can call analyze_spec_quality internally and returns {markdown, actions[]}, but lacks details on side effects, performance, error handling, or implications of running the analysis (e.g., cost, permissions).

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 core action, followed by usage guidance and output format. No redundant information; every sentence adds 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?

Given no output schema and moderate parameter count (3, one nested), the description sufficiently explains functionality, input flexibility, usage scenarios, and output structure. Minor gap: no details on error conditions or input validation.

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 33% (only 'analysis' described). The description adds context: if 'analysis' omitted, it uses 'spec_id' and 'raw_text' to run analysis inline. This clarifies parameter usage but doesn't detail each parameter's format or constraints.

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 function: taking analyze_spec_quality output to produce a PM-facing markdown coach plan with rewrite suggestions. It distinguishes from sibling tools like analyze_spec_quality by noting it can run the analysis itself if needed.

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 says 'Use this when a user says how do I improve this spec or review my PRD', providing clear when-to-use guidance. It also clarifies that missing analysis triggers inline execution, but does not mention 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.

TDQS

A4.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose, covering separate phases of the spec lifecycle (fetching, parsing, quality analysis, test generation, linking, coverage, drift, history, etc.). No two tools perform overlapping functions; related tools like analyze_spec_quality and propose_spec_improvements are designed to work sequentially without ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., fetch_spec, parse_spec, get_coverage_matrix). There are no deviations or mixed naming conventions, making the API predictable and easy to navigate.

Tool Count5/5

With 18 tools, the server covers the full spec management process without bloat. Each tool serves a unique and necessary function, and the count is well-scoped for the domain—neither too few to be useful nor too many to be overwhelming.

Completeness4/5

The tool set covers the core lifecycle: listing, fetching, parsing, quality analysis, test generation, linking (manual and auto), coverage, drift detection, optimization, history, context, source info, and telemetry. Minor gaps exist, such as no explicit tool for unlinking tests from specs or editing the spec-knowledge file, but these do not severely hinder typical workflows.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    QA Sphere MCP server that enables Large Language Models to interact directly with test management system test cases, supporting AI-powered development workflows and test case discovery.
    15
    345
    23
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An AI-native specification framework that enables deep requirements analysis and structured project planning through intelligent Q\&A workflows. The MCP server provides tools for project initialization, requirement analysis, and the generation of living documentation like development plans and architecture specs.
    16
    Apache 2.0
  • A
    license
    A
    quality
    F
    maintenance
    MCP server for API test case generation from Swagger/OpenAPI specs. Parses Swagger 2.0 and OpenAPI 3.x, generates test cases across 8 categories (positive, negative, boundary, auth, security, idempotency, pagination, business logic), and exports to Postman, TestRail, Allure, k6, pytest, Gherkin, and CSV. Supports internal corporate APIs with auth headers. Auto-saves export files to your working di
    10
    14
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kao273183/mk-spec-master'

If you have feedback or need assistance with the MCP directory API, please join our Discord server