specmd-mcp
OfficialThis server is an MCP stdio server (JSON-RPC 2.0) exposing SPEC.md authoring, validation, inspection, tracing, and capability reporting tools.
create — scaffold a minimal
SPEC.md(core or core+optional profile), optionally forcing overwrite and selecting features.validate — run structural conformance and Trace Pair validation, with profile/trace/cognitive options; read-only except for analysis.
inspect — produce a read-only quality/measurement report on the spec.
blackbox — generate an outside-in Black-Box Contract inventory; can write a JSON report via
export, and supports cognitive/host-agent negotiation.trace_create — generate
TRACE.mdfrom the resolved Specification Set, optionally enabling optional features.trace_update — reconcile an existing
TRACE.mdwith the current specification set.validate_pair — perform Trace Pair alignment only, narrower than
validate(no structural findings).propose_patch — intended to request a proposed patch, but not implemented; always returns an error rather than fabricating output.
capabilities — report tool versions, supported standards, command availability, and integration status.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@specmd-mcpvalidate my SPEC.md and show me any conformance failures"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
specmd
A CLI for authoring, validating, inspecting, rendering, and tracing SPEC.md documents, implemented per the Specification Set rooted at SPEC.md.
Status: intentionally partial implementation
Implemented:
specmd init— create a minimal Core or Core+Optional SPEC.md.specmd validate— structural conformance + Trace Pair validation, plus the Version Alignment Process (SPEC.md §4.14, PORT-006/007/008): an unresolvable declared standards version always fails asindeterminatewith a proposed-spec-change remediation, never a silent substitution.specmd inspect— read-only quality/measurement report.specmd render— HTML rendering (PDF is not implemented; requesting it returns exit status4). Deliberately does not apply the Version Alignment Process — it makes no conformance claim and always displays the true declared version, whatever it is.specmd trace create/specmd trace update— generate and reconcileTRACE.md; also apply the Version Alignment Process.specmd blackbox— read-only Black-Box Contract inventory. Structural checks (interface-section inventory, named interface-element inventory, actor<->operation cross-reference) are fully deterministic.--cognitive off|auto|required(defaultauto, per the CLI ICD) is negotiated the same wayvalidate/inspectdo. The two genuinely semantic checks (interface I/O facilitation drafting, requirements <->interface cross-mapping) run via Host-Agent Mode (COG-001, SPECMD_CLI_ICD.md section 7.2) — no Direct-Provider Mode exists in this build (no credentials, no outbound network call anywhere on the path), so instead a call with no--cognitive-inputreturns a boundedcognitive_package; the calling agent reasons over it and resupplies the command with--cognitive-input(a file path, or-for stdin) or thecognitive_inputMCP argument. Every requirement-ID citation in that input is checked against IDs this tool already extracted deterministically — an unrecognized citation is dropped and reported (never silently trusted), and the rest of the entry is kept.--exportwrites a JSON report.specmd test— verification-coverage report (covered/uncovered requirement IDs, unreferenced acceptance criteria).--exportwrites a JSON test plan; fields that would require semantic extraction (preconditions/actions/expected outcomes) arenull, never invented.--run-integrationis accepted but returns exit4— no implementation-test integration is configured in this build.specmd adapt <target>— generates a thin adapter (codex,claude-code,cursor,github-copilot). Generation only;--installreturns exit4.specmd standards list|show|verify— reports only the bundled/local evidence this build actually has (Core/Optional0.4.2);fetchand any network/repository access are not implemented (SPEC.md Open Issue 1, the canonical standards registry, is unresolved).specmd capabilities— reports tool/CLI-ICD/JSON-schema versions, supported standards, every command's availability, and why anything is unavailable.specmd help [topic]— real per-command help (syntax-light: see gap below),--search,--allto include unavailable capabilities. Reads the same static registry (command_metadata.py)capabilitiesdoes.specmd-mcp— an MCP (Model Context Protocol) stdio server exposingcreate/validate/inspect/blackbox/trace_create/trace_update/validate_pair/propose_patch/capabilitiesas MCP tools (MCP-001..005). Hand-rolled protocol, not the official SDK: themcpPyPI package requires Python ≥3.10, and this build targets 3.9, sosrc/specmd/mcp_server.pyimplements the stdio JSON-RPC 2.0 wire protocol directly (pure stdlib, no new dependency). Every tool wraps the same command module the CLI uses and returns the identical JSON envelope.propose_patchis an honest stub — no patch-generation capability exists in this build, so it always returns an error rather than fabricate a diff. Run it asspecmd-mcp(installed entry point) orpython -m specmd.mcp_server.Deterministic-Only Mode by default (
--cognitive off|auto|requiredis negotiated truthfully);blackboxadditionally supports Host-Agent Mode (no Direct-Provider Mode or Reviewer Agent is implemented).
Known gaps, disclosed rather than silently claimed:
specmd --help/-his still argparse's native (low-fidelity) output; it is not made equivalent in information content tospecmd help(the ICD text calls for that equivalence). Usespecmd helpfor the real thing.specmd help's per-command detail doesn't print a full command-syntax grammar line or example invocations (HELP-001/HELP-005) — it lists options/defaults/safety markers instead.blackbox's deterministic checks are ID-, section-presence-, named- interface-element-, and actor-mention-level, not a full trigger/input/output/error/state-effect extraction. The actor-mention check only recognizes one convention (- **Name**: .../- **Name** — ...) and, being text matching rather than semantic understanding, cannot tell a person/system actor from a same-convention data entity — its findings say so explicitly and are reported atinformationseverity rather than asserted as a confident gap. The two checks that need real semantic understanding (interface I/O facilitation drafting, requirements<->interface cross-mapping) run only when the calling agent supplies--cognitive-input(Host-Agent Mode); without it, a call returns acognitive_packageand reports the checks as not yet performed rather than fabricating a result. Citation-verification is mechanical (ID must exist in what was already extracted deterministically) — it cannot verify that the reasoning content itself is correct, only that it isn't inventing IDs. Thecognitive_packagealso excludes Normative Module content (root spec only), which it discloses in-band rather than silently omitting.
Not implemented at all (left TBD/unclaimed in TRACE.md, not
silently assumed): standards fetch and any network access, the Cucumber
connector family, Direct-Provider Mode (PROV-001..009: no credentials, no
outbound network call anywhere in this build), and Reviewer Agents.
Host-Agent Mode is implemented for blackbox only.
Related MCP server: achmadya-dev/mcp-core
Core/Optional profile: reconciled against the authoritative standard
The Specification Set this tool implements declares conformance to SPEC.md
Core 0.4.2 and Optional 0.4.2. The structural rules this build
validates against were originally reconstructed from a single exemplar
(this tool's own SPEC.md), because the package this project was built from
did not include the authoritative standard text.
That gap has since been closed. The authoritative standard is published at
SPECmd-app/SPEC.md's
docs/standard/0.4.2.md
and
0.4.2-optional.md,
and src/specmd/core_profile.py has been
reconciled against that text directly. Four real discrepancies were found
and fixed:
"Specification Contract" is a SHOULD, not a MUST (Core §1) — its absence is now a warning, not a conformance error.
A missing required top-level section is now a warning, not an error — Core §2 lists the eight sections as what "a conforming SPEC.md uses," immediately followed by "Empty subsections MAY be omitted." Read as permitting a genuinely-empty section to be omitted too (a deliberate product decision, since the standard's wording doesn't fully settle it), a document missing one can still be
conforming.Module declarations can use a bare backtick-quoted path, not only a Markdown link — Optional §10's own example uses
- `spec/identity.md`with no link syntax at all.module_resolver.pynow recognizes both forms.optional_featuresis an open, extensible set, not a closed enum — Optional §44 explicitly frames its feature list as a "Suggested... Example." An unlisted feature name is now reported as informational, not a warning.
One figure remains unconfirmed: the 250 lines / 2,500 tokens Core
compactness target appears nowhere in the authoritative Core or Optional
text, or on the standard's own site — it came from this tool's own governing
spec prose. It's kept (still plausibly accurate) but explicitly flagged as
unconfirmed (CORE_COMPACTNESS_PROVENANCE in core_profile.py), separately
from the rest of the now-reconciled profile.
Every validate/inspect/trace create result still cites
core_profile.PROFILE_PROVENANCE explicitly, so this claim is checkable
rather than taken on faith.
License
Development
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/pip install pytest
.venv/bin/pytest.venv/bin/specmd --output-format json validate SPEC.md --trace auto# MCP server: reads/writes newline-delimited JSON-RPC 2.0 on stdio.
.venv/bin/specmd-mcpAvailable Tools
9 toolsblackboxC
Deterministic, outside-in Black-Box Contract inventory. May write a report if 'export' is given.
| Name | Required | Description | Default |
|---|---|---|---|
| trace | No | auto | |
| export | No | optional path to write a JSON report to | |
| root_spec | No | SPEC.md |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=false, and the description partially explains why by noting a report may be written when 'export' is supplied, which is a small useful addition. However, it never states what is otherwise mutated, what permissions are needed, or what the default non-export behavior does, leaving the non-read-only nature largely unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At two short sentences it is tight and front-loaded, but the opening phrase is dense jargon of unclear value, and the second sentence is the only operationally useful part. It is brief without being informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter tool with no output schema and only 33% schema coverage, the description should compensate by explaining the inventory concept, the trace/root_spec behavior, and the return/artifact shape. Instead it leaves the core workflow opaque, so an agent lacks what it needs to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%: 'export' is documented in the schema and the description adds that it triggers writing a JSON report. But 'trace' and 'root_spec' (both string with defaults) receive no explanation in either the schema or the description, so meaning is missing for two of three parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun phrase ('Deterministic, outside-in Black-Box Contract inventory') rather than a clear verb+resource, so an agent cannot confidently tell what action is performed or what artifact is produced. It also does nothing to distinguish this tool from siblings like inspect, validate, trace_create, or capabilities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the many siblings, nor any prerequisites or exclusions. The only conditional mentioned ('May write a report if export is given') describes a side effect, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capabilitiesARead-only
Report tool version, supported standards, commands, and available integrations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already establishes this is a safe, side-effect-free read, so the description's added detail about what gets reported (version, standards, commands, integrations) is modest incremental value. It does not mention any cost, auth requirement, or whether the payload is large/static, but for a zero-param read-only call that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the enumeration of reported content is packed efficiently into the verb phrase.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param, read-only, no-output-schema tool, the description names the categories of information returned, which is what the agent needs to decide to call it. It could be slightly stronger by stating this is the entry-point call, but it is essentially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to explain; the baseline for a parameterless tool is 4. Nothing in the description misleads about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Report) and enumerates the resources returned: tool version, supported standards, commands, and available integrations. An agent can tell this is a self-descriptive introspection tool, though it never contrasts itself with potentially overlapping siblings like inspect or blackbox.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus the sibling introspection tools (inspect, blackbox), and no prerequisites or exclusions are stated. The agent must infer that this is a discovery/version call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createC
Create the smallest useful starting SPEC.md (core or core+optional profile).
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| output | No | SPEC.md | |
| profile | No | core | |
| features | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Only readOnlyHint=false is provided, so the description must carry the behavior burden for a write operation. It says nothing about whether existing files are overwritten, what `force` does, or where output lands relative to the default 'SPEC.md'. The agent is left guessing about the destructive potential of the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler; the core intent comes first. It is efficient, though arguably too terse given how much else needs explaining.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with four undocumented parameters, no output schema, and only a readOnlyHint=false annotation, this one-line description is insufficient. An agent cannot confidently predict file paths, overwrite behavior, or how `features` shapes the generated SPEC.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so all four parameters rely on the description, which only alludes to the `profile` enum ('core or core+optional profile'). The `force`, `output`, and especially `features` parameters receive no explanation of their effect or accepted values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (SPEC.md) plus the scope nuance 'smallest useful starting' with a core/core+optional profile. It doesn't name or differentiate from any sibling tool, but the sibling list (validate, inspect, blackbox, trace_create...) contains no other SPEC-creation tool, so the intent is still unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to run this versus validate/inspect, no prerequisites, and no statement about what happens if SPEC.md already exists. The presence of a `force` parameter hints at overwrite semantics, but the description never addresses them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspectDRead-only
Read-only quality/measurement report.
| Name | Required | Description | Default |
|---|---|---|---|
| trace | No | auto | |
| profile | No | auto | |
| cognitive | No | auto | |
| root_spec | No | SPEC.md |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description's 'Read-only' only echoes that. It adds no new behavioral context such as what the report contains, whether it is expensive to run, or how the profile/cognitive modes affect output. Nothing beyond the annotation is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short fragment, but brevity here reflects under-specification rather than efficiency; the lead statement conveys almost no actionable information. There is no wasted sentence because there is barely a sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter tool with no output schema, no documented parameters, and ambiguous enum modes, the description is far too thin. An agent cannot determine what the tool returns or how the trace/profile/cognitive settings change behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters, including two enums (profile, cognitive) and a trace toggle whose semantics are entirely opaque. The description provides no clarification of any parameter, leaving their meaning undocumented everywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says it produces a 'quality/measurement report' but never states what is being inspected or measured, so the resource is unspecified. It also does not distinguish 'inspect' from plausible-report siblings like validate or blackbox. This is closer to a restatement of the tool name than a specific verb+resource statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of how this differs from validate, validate_pair, or blackbox, which are the obvious alternatives for a quality-report tool. An agent is left to guess which inspection tool to call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_patchARead-only
Request a Proposed Patch. Not implemented in this build (always returns an error).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the safety profile, and the description adds a critical behavioral fact beyond it: this tool is a non-functional stub that always errors. That single detail reliably prevents wasted invocations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the failure disclosure is placed immediately after the purpose so an agent sees it before deciding to call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param, no-output stub, the description conveys everything an agent needs to make the call/no-call decision: what it is and that it is guaranteed to fail. Only the absence of a recommended alternative keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing for the description to document; the baseline for a 0-param tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description expands the name ('propose_patch' → 'Request a Proposed Patch') and, more usefully, states that it is not implemented. However, it does not differentiate this tool from the sibling suite (create, validate, inspect, etc.) or explain what a Proposed Patch is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit 'when not to use' signal — 'always returns an error' tells the agent to avoid this call entirely, which is the most important routing guidance for a stub. It stops short of naming alternatives (create, validate) that might substitute.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_createC
Generate TRACE.md from the resolved Specification Set.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| output | No | ||
| root_spec | No | SPEC.md | |
| enable_optional | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=false annotation already conveys that this is a mutating operation, so the description's 'Generate' adds little. It says nothing about overwrite behavior when TRACE.md exists, what the 'force' flag changes, permission requirements, or side effects on the specification set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with no filler, well front-loaded with the verb. It is concise to a fault, omitting any guidance rather than being bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, one annotation, and four completely undocumented parameters, the description leaves the agent without enough to call this correctly. It should at minimum explain force/output/enable_optional behavior and the write implications of regenerating TRACE.md.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters (force, output, root_spec, enable_optional) have 0% schema description coverage, and the description explains none of them. The phrase 'resolved Specification Set' loosely gestures at root_spec but gives no format or semantics for output paths, force, or optional sections.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Generate') and resource ('TRACE.md') plus the input source ('resolved Specification Set'), so the action is clear. It does not, however, distinguish itself from the sibling trace_update beyond the create/update verb distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites, and no named alternative such as trace_update for the update case. The only hint is the word 'Generate', which implies first-time creation but leaves routing to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_updateC
Reconcile an existing TRACE.md with the current Specification Set.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | ||
| trace | No | ||
| root_spec | No | SPEC.md |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, so the agent knows this mutates state, but the description adds nothing about what the reconciliation actually does — whether TRACE.md is overwritten in place, whether changes are reversible, or what the 'force' flag overrides. For a mutation tool, that is a meaningful gap beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and object come first. It is efficient, though brevity here partly reflects under-specification rather than discipline.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with no output schema, 0% parameter documentation, and only a readOnlyHint=false annotation needs the description to carry behavioral and parameter detail, and it does not. An agent cannot predict the effect of this call or of 'force'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters, and the description only obliquely maps TRACE.md and the Specification Set to the 'trace' and 'root_spec' params. The 'force' parameter, the most behaviorally significant one, is entirely unexplained in both description and schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (reconcile) and resources (TRACE.md, Specification Set), so an agent knows this modifies an existing trace file rather than creating one. It does not explicitly name the sibling it contrasts with, trace_create, but the 'existing' qualifier does most of the differentiating work.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus trace_create, validate, or validate_pair, and no preconditions (e.g. TRACE.md must already exist). Usage can only be inferred from the word 'existing'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validateCRead-only
Structural conformance check plus Trace Pair validation.
| Name | Required | Description | Default |
|---|---|---|---|
| trace | No | auto | |
| strict | No | ||
| profile | No | auto | |
| cognitive | No | off | |
| root_spec | No | SPEC.md |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the safety profile is known. But the description does not explain how the two validations interact, what 'Trace Pair' means, what happens when strict is true, or whether the check is complete or partial. For a validation tool with two distinct advertised modes, this leaves substantial behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence is concise but too terse for a five-parameter validation tool with two advertised modes. It front-loads nothing useful and reads like a title restatement rather than a definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five undocumented parameters, no output schema, no annotations beyond readOnlyHint, and an unclear relationship to the validate_pair sibling, the description is insufficient for correct invocation. An agent would have to guess at parameter semantics and tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters including two enums (profile, cognitive) and a boolean (strict). The description mentions none of them, so an agent has no idea what 'cognitive', 'profile', 'root_spec', or 'strict' control. This actively fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states two operations (structural conformance check and Trace Pair validation) but is vague about what is being validated and what the tool actually examines. It overlaps with the sibling validate_pair, and the description does not define the distinction. An agent cannot confidently distinguish this from validate_pair based on the text alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus validate_pair or inspect, despite an obviously competing sibling named validate_pair. No prerequisites, no context about what kind of artifact is validated. Usage is only implied by the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_pairBRead-only
Trace Pair alignment only (narrower than 'validate' — no structural findings).
| Name | Required | Description | Default |
|---|---|---|---|
| trace | No | auto | |
| root_spec | No | SPEC.md |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds scope context: only Pair alignment, no structural findings. That is useful, but it does not describe return behavior, limitations, or other operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a parenthetical clarification. No words are wasted and the key distinguishing information is immediate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose and sibling differentiation, but with two parameters at 0% schema description coverage and no output schema, it leaves parameter meaning entirely unexplained. An agent would have to infer what 'trace' and 'root_spec' control.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions the 'trace' or 'root_spec' parameters, their defaults, or their meaning. The description does not compensate for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific operation (trace Pair alignment) and narrows it against the sibling validate tool by excluding structural findings. The resource 'Pair alignment' is domain-specific but clear enough to distinguish from validate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly contrasts with validate by stating it is narrower and omits structural findings, giving clear context for when to choose it. It does not spell out all when-not conditions, but the alternative is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
blackbox - First observed
capabilities - First observed
create - First observed
inspect - First observed
propose_patch - First observed
trace_create - First observed
trace_update - First observed
validate - First observed
validate_pair
TDQS
Scored across 9 tools
Most tools target distinct operations (create, inspect, blackbox, trace_create, trace_update, capabilities). However, 'validate_pair' is explicitly a narrower subset of 'validate', and 'inspect' vs 'blackbox' both produce reports, causing minor confusion. Descriptions clarify the boundaries, but two overlaps remain.
The server mixes single verbs ('create', 'validate', 'inspect') with compound snake_case names ('trace_create', 'validate_pair') and nouns ('blackbox', 'capabilities'). While all lowercase and underscore-separated, the pattern is inconsistent. It is still readable but lacks a predictable verb_noun structure.
Nine tools is well within the ideal 3–15 range for a spec and trace management server. Each tool appears to earn its place, aside from one nonfunctional tool. The count is appropriate and not bloated.
The surface covers creation, validation, inspection, and trace lifecycle, but lacks update/delete operations for the core SPEC.md file. Additionally, 'propose_patch' is not implemented, leaving a planned patch workflow incomplete. These are notable gaps for a complete spec management lifecycle.
Maintenance
Related MCP Connectors
MCP Spec Compliance MCP — audits any MCP server.json against the official Model Context Protocol
Search, inspect and invoke every public tool on Invokera through one MCP connection.
Remote MCP server exposing SMI Aware tools, resources, and skills over Streamable HTTP.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceExposes all CLI commands as MCP tools over stdio or HTTP transport.6 npmApache 2.0
- AlicenseNot gradedqualityCmaintenanceProvides a shared MCP SDK wrapper for building MCP servers with stdio transport, tool registration, JSON-safe responses, and environment helpers.15 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables turning any command-line tool into an MCP server with auto-generated JSON schema, supporting stdio, timeouts, and stderr capture.MIT
- FlicenseNot gradedqualityBmaintenanceEnables MCP clients to analyze call graphs, run Grover-ranked code searches, generate boundary test cases, get refactoring suggestions, and inspect quantum backends through stdio JSON-RPC tools.2-