MCP server for creating and manipulating BPMN diagrams using bpmn-js
Three tools with basic schemas and descriptions, but significant gaps in parameter documentation and output specification. Tool names follow verb_noun convention (create_, add_, connect_) which is good. However, descriptions are minimal (10-50 chars), most parameters lack descriptions, and no output schemas are documented. The server uses in-memory state (diagrams Map) with no persistence or error recovery guidance. No tool annotations (destructiveHint, idempotentHint) despite all three being WRITE operations. Error handling is absent, no guidance on what happens if a diagram ID is invalid or element addition fails.
Add an element (task, gateway, event, etc.) to a BPMN diagram
Connect two BPMN elements with a sequence flow
Create a new BPMN diagram. Returns a diagram ID that can be used with other tools.
No output schemas documented. LLMs cannot infer what create_bpmn_diagram returns (diagram ID format? XML? metadata?). Downstream tools (add_bpmn_element, connect_bpmn_elements) require diagramId but the response structure is opaque.
Parameter descriptions missing or trivial. 'name' in create_bpmn_diagram says 'Optional name for the diagram' but does not explain format, length limits, or uniqueness. 'elementType' enum is comprehensive but lacks guidance on when to use each type (e.g., when is UserTask vs ServiceTask appropriate?).
Tool descriptions too short (10-50 chars). 'Create a new BPMN diagram. Returns a diagram ID...' lacks context on when to use this vs modifying an existing diagram, what the diagram ID format is, or whether diagrams persist. Descriptions should be 50-200 chars with actionable context.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
No error handling or recovery guidance. What happens if diagramId is invalid? If elementType is unsupported? If coordinates are out of bounds? No error messages guide the LLM to retry or correct input.
All three tools are destructive (WRITE risk) but lack tool annotations (destructiveHint, idempotentHint). LLMs cannot determine if retrying a failed add_bpmn_element call will duplicate the element or safely resume. No confirmation pattern for irreversible operations.