MCP server for creating and manipulating draw.io diagrams programmatically
DrawIO MCP server has 19 tools with complete input schemas and descriptions. Naming follows verb_noun convention (insert_vertex, batch_insert_edges, etc.). Descriptions are present but generic, most are 40-80 chars, below the 194-char baseline for A+ tools. Parameters have types and descriptions, but lack actionable constraints (enums, ranges, format hints). Output schemas are not documented, critical for LLM planning. Error handling and recovery guidance are absent. No tool annotations (readOnlyHint, destructiveHint) despite clear risk classifications. Batch tools are well-composed, but single-operation tools could be better integrated. Missing: pagination guidance, field-level output documentation, and error recovery patterns.
Insert multiple edges/connections in a single batch operation
Insert multiple vertices/shapes in a single batch operation
Remove multiple cells in a single batch operation
Update multiple cells (labels, geometry, styles) in a single batch operation
Remove all cells from the current diagram
Create a new empty diagram
Get information about a specific cell by ID
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does get_cell return? Does it include geometry, style, children?). Critical for tool chaining.
Descriptions are generic and under 100 chars. Baseline for A+ tools is 194 chars. Missing context on WHEN to use each tool, prerequisites, and what distinguishes similar tools (e.g., insert_vertex vs batch_insert_vertices).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (READ_ONLY, WRITE, DESTRUCTIVE). LLMs cannot infer safety properties without explicit hints.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | <=2025-11-25 | v2 |
Get all cells connected to a cell via edges
Get information about the current diagram (cell counts, stats)
Get the current diagram as XML string
Get the waypoints for an edge
Insert a new edge (connection) between two vertices
Insert a new vertex (shape) into the diagram
Load a diagram from a .drawio file
Load a diagram from an XML string
Remove a cell (and optionally its children) from the diagram
Save the current diagram to a .drawio file
Set intermediate waypoints for an edge to control its routing path
Update properties of an existing cell (vertex or edge)
Parameters lack actionable constraints. 'geometry' accepts x, y, width, height but no ranges or defaults documented. 'style' accepts string or object but no format guidance. LLMs will guess invalid values.
No error handling or recovery guidance. Tools return success/failure but do not guide LLM on what to do next (retry, ask user, try alternative). Missing pattern: recovery-guide.