Single tool 'describe_mermaid' has a well-structured JSON Schema with proper type definitions, required fields, and enum constraints. Description is clear and specific (145 chars). Input schema is explicit and comprehensive, covering the mermaid source and profile parameter with 7 enum options. Output structure (DescribeOutput) is documented with jsonschema tags. However, the tool lacks explicit error handling guidance, recovery hints, and parameter-level descriptions are minimal. No confirmation/dry-run pattern for a tool that processes user input. Overall solid foundation but missing LLM-optimized guidance for edge cases.
Compile a supported Mermaid diagram in strict mode and return deterministic agent-readable text plus hashes and contract metadata. Supports flowchart, sequence, class, state, and ER diagrams.
Missing parameter-level descriptions in schema. The 'mermaid' parameter has a description, but 'profile' enum values (compact, standard, exhaustive, readable-v1, interpreted-v1, interpreted-v2, interpreted-v3) lack guidance on when to use each. LLMs cannot infer semantic differences between profile variants.
No error handling guidance in tool description. The tool accepts up to 4 MiB input but does not document what happens on parse failure, unsupported diagram types, or malformed Mermaid syntax. LLMs need recovery hints like 'If compilation fails, check syntax with mermaid.live'.
Output schema documented via Go struct tags (jsonschema) but not exposed in the MCP tool definition. The DescribeOutput struct has rich metadata (DiagramKind, SourceSHA256, SemanticSHA256, Diagnostic array) but the MCP registration does not include an explicit output schema. LLMs cannot plan downstream operations without knowing the response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2025-06-18+ | v2 |
No input validation or constraint documentation for the 4 MiB size limit. The description states 'maximum 4 MiB as UTF-8 bytes' but the schema lacks a maxLength constraint. LLMs may pass oversized inputs without knowing they will fail.
Tool name 'describe_mermaid' is clear but could be more action-oriented. 'compile_mermaid' or 'analyze_mermaid' would better signal the transformation happening. Current name is acceptable but slightly generic.