DoorstopMCP has 5 tools with basic structure but significant quality gaps. Tool naming follows verb conventions (get_, list_, create_, find_). However, descriptions are minimal and generic, parameter descriptions are trivial or absent, input schemas lack proper type definitions and constraints, and there is no documented output schema. The create_item tool is the only one with moderately detailed parameter descriptions, but even these lack validation rules, constraints, and format specifications. Error handling is absent, no recovery guidance, no error classification, no validation. The server uses fastmcp with HTTP transport (Streamable HTTP), which is current, but tool definitions lack LLM-optimization signatures like enums, defaults, and error recovery hints.
Create an item like a Requirement, Low Level Requirement or Test
Find a Folder by Short Prefix (e.g. REQ, LLR, TST)
Get the version of the underlying Doorstop Framework
List all defined documents
List all items in a document with details
No input schemas visible for 3 of 5 tools (get_doorstop_version, list_documents, list_items). Tool definitions show only docstrings and parameters, not explicit schema registration with JSON Schema types and constraints.
Parameter descriptions are trivial or missing. find_document prefix param says 'Description' (placeholder text, not a real description). No other parameters have non-empty descriptions explaining what they control or what values are valid.
No output schema documented. Tool docstrings describe return types informally (e.g., 'returns List of item dictionaries') but no formal response schema is visible. LLMs cannot plan downstream calls or extract data without knowing field names and types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 61 | - | v1 |
No enum constraints or validation rules. create_item expects req_type with values 'Functional, Non-Functional or Constraint' but these are free-form strings, not enums. No min/max on any numeric params. LLMs will hallucinate invalid values.
No error handling or recovery guidance. If create_item fails (invalid prefix, disk write error, missing document), there is no catch block, no error classification (retryable vs fatal), and no actionable error message for the agent.
create_item is a write/destructive tool but lacks confirmation or dry-run support. No idempotence documented. Agents invoking it multiple times with identical params will create duplicate items.
No per-request _meta logLevel or stateless request metadata. Server does not carry protocol version or capabilities in each request, contrary to current MCP spec (2026-07-28). fastmcp may handle this internally, but it is not visible in the tool code.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are missing. Risk field labels in source (READ_ONLY, WRITE) are metadata, not tool annotations. Current spec expects tool annotations in the response.