Stdio MCP server providing write-time advisory verdicts for coding agents on spec file changes, with semantic governance gate enforcement
SpecGuard MCP server has 4 tools with clear governance-domain naming (specguard_*). All tools have descriptions (avg 120 chars, within baseline 34-392 range) and documented input schemas with type definitions. However, schemas lack depth: parameters have types but minimal constraint documentation (no enums, ranges, or format specs). Output schemas are not documented, LLMs cannot predict return structure. Error handling is absent from visible code; no recovery guidance or actionable error messages. Tool composition is sound (each does one thing), but descriptions could be more prescriptive about when to call each tool vs. alternatives.
Whether an identity may make a specific change class (edit or scope-change) to a file path based on role-based access control.
Classify a proposed change the agent is ABOUT to write — before any commit exists. Returns advisory verdict on whether the change would be blocked by governance rules.
Retrieve the locked governance frame (scope lock) that governs a file or the repo-root scope. Consult before drafting changes.
List which files are governed by the project's spec governance, and whether roles enforcement is configured.
Output schemas not documented. LLMs cannot predict return structure (fields, types, nested objects). Breaks downstream tool chaining and forces agents to guess at response shape.
Parameter constraints missing. 'change_class' accepts 'edit' or 'scope-change' but no enum declared; 'path' has no format/length constraints. Free-form strings invite hallucinated values.
No error handling guidance. Code shows no try-catch, error classification, or recovery hints. If a tool fails, LLM has no actionable next step.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Descriptions lack dependency hints. 'specguard_check_proposed_change' does not explain when to call it vs. 'specguard_check_permission', or whether to call 'specguard_get_scope_lock' first.
Parameter 'identity' in specguard_check_permission lacks format guidance. Is it an email, username, UUID, or role name? Ambiguity forces LLM to guess.