MCP server providing tools for AI agents to interact with a visual diagram editor. Allows creating, modifying, and managing diagrams with nodes and edges through a REST API backend.
15 tools with consistent verb_noun naming (diagram_get, diagram_add, diagram_delete). All tools have descriptions (avg 120 chars, within baseline 34-392). Input schemas present with type definitions for all parameters. However, output schemas are NOT documented, critical gap for LLM planning. Parameter descriptions are present but generic; many lack constraints (enums, ranges, formats). Error handling and recovery guidance absent. No tool annotations (readOnlyHint, destructiveHint). Risk classifications provided in metadata but not in tool definitions themselves.
Connect two nodes with a directed edge. Args: from_node: ID of the source node to_node: ID of the target node label: Optional label for the edge Creates an arrow from source to target.
Create a new node on the canvas. Args: label: Display text for the node x: X coordinate on canvas y: Y coordinate on canvas node_type: Semantic type (component, service, database, user, external, process, decision, note) shape: Visual shape (rectangle, ellipse, diamond, pill) color: Hex color code (e.g. "#3478f6") width: Node width in pixels height: Node height in pixels tags: List of tags for categorization description: Optional longer description Returns the created node with its generated ID.
Align selected nodes along an edge or center. Args: node_ids: List of node IDs to align alignment: How to align them - "left": Align left edges - "right": Align right edges - "top": Align top edges - "bottom": Align bottom edges - "center_h": Align horizontal centers - "center_v": Align vertical centers
Automatically arrange all nodes based on a layout strategy. Args: strategy: Layout algorithm to use - "grid": Arrange nodes in a grid pattern - "tree": Hierarchical layout based on edge directions - "force": Force-directed layout (connected nodes attract) All nodes will be repositioned.
Output schemas not documented. LLMs cannot plan downstream calls or extract required fields (e.g., node_id from diagram_add_node, edge_id from diagram_add_edge). Breaks tool chaining.
Parameter constraints missing. 'node_type' accepts 8 values but no enum defined; 'shape' accepts 4 values but no enum; 'alignment' accepts 6 values but no enum. LLMs will hallucinate invalid values.
No error handling or recovery guidance. Tools lack descriptions of failure modes (e.g., 'node not found', 'invalid file path', 'circular edge'). LLMs cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Remove an edge. Args: edge_id: ID of the edge to delete
Remove a node and all its connected edges. Args: node_id: ID of the node to delete The node and any edges connected to it will be removed.
Distribute selected nodes evenly along an axis.
Get the full current diagram state. Returns the complete diagram including all nodes, edges, metadata, and current file path. Use this to understand what's in the diagram before making changes.
List available diagram files on disk. Args: directory: Directory to search for diagram JSON files Returns list of diagrams with their paths, names, and node/edge counts.
Create a new empty diagram. Args: name: Name for the new diagram Returns the new diagram's state.
Load a diagram from a file as the active diagram. Args: file_path: Full path to the diagram JSON file Returns the opened diagram's state.
Save the current diagram to a file. Args: file_path: Path to save to (uses current path if not specified) Returns the saved file path.
Find nodes by label, tag, or type. Args: label: Search for nodes containing this text in their label tag: Search for nodes with this tag node_type: Search for nodes of this type All criteria are AND'ed together.
Change an edge's label. Args: edge_id: ID of the edge to update label: New label text
Modify an existing node's properties or position. Args: node_id: ID of the node to update label: New display text (optional) x: New X coordinate (optional) y: New Y coordinate (optional) node_type: New semantic type (optional) shape: New visual shape (optional) color: New hex color (optional) width: New width (optional) height: New height (optional) tags: New tags list (replaces existing, optional) description: New description (optional) Only provided fields are updated; others remain unchanged.
Tool annotations missing. Destructive tools (diagram_delete_node, diagram_delete_edge) lack destructiveHint. Read-only tools lack readOnlyHint. Agents cannot distinguish safe from risky operations.
Parameter descriptions lack actionable constraints. 'x' and 'y' coordinates have no range (0-∞?). 'width' and 'height' have no min/max. 'color' accepts hex but no validation hint. LLMs will pass invalid values.