MCP server for creating and editing draw.io diagrams programmatically
Strong tool naming (verb_noun pattern throughout) and comprehensive parameter descriptions. All 13 tools have clear, actionable descriptions (avg ~120 chars). Input schemas are well-structured with type definitions and descriptions. However, output schemas are not explicitly documented in the visible code, only inferred from return types. Error handling is minimal; no recovery guidance or actionable error messages visible. Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications. Parameter constraints (e.g., limit 1-200) are documented in descriptions but not enforced via JSON Schema enums/min/max.
Release an open in-memory draw.io document. Unsaved changes require force=true.
Create a new in-memory draw.io document with one page.
Delete a shape, its descendants, and connected edges.
Find bundled draw.io shapes by stable ID, name, description, or tags.
Inspect the pages and placed vertices in an open draw.io document.
Return shapes in a rectangular page region and optionally their connected or crossing edges.
List bundled draw.io shapes, optionally filtered by source, category, or tags.
Output schemas not documented. Return types are inferred from Go struct definitions (drawio.Summary, shapesOutput, etc.) but not explicitly declared in tool metadata. LLMs cannot plan downstream calls or extract required fields without documented output structure.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are classified by risk (READ_ONLY, WRITE, DESTRUCTIVE, REVERSIBLE) but these are not exposed via MCP tool metadata. Agents cannot determine which tools are safe to retry or have side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2025-06-18+ | v2 |
Move a shape to an absolute page coordinate.
Open an existing compressed or uncompressed .drawio file for editing.
Place a bundled shape on a page at the requested coordinates.
Automatically create orthogonal edges on directed grid lanes; unlabeled same-direction edges may share lanes, while labeled edges reserve their routes exclusively.
Save an open draw.io document. The path may be omitted when the document already has one.
Change or clear a shape label.
Numeric parameter constraints (limit 1-200, grid_size, clearance) documented in descriptions but not enforced via JSON Schema min/max. LLMs may pass invalid values; validation happens at runtime with no guidance for self-correction.
Error handling lacks recovery guidance. Code shows basic error returns (e.g., 'path is required' in openDiagram) but no pattern for actionable error messages. Agents receive errors with no next-step guidance.
Pagination not visible for list_shapes and find_shapes. Both accept 'limit' but no offset/cursor or total_count in output. Large result sets may exceed context window; no mechanism to fetch next page.