{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"github_mcp-lgazo-drawio-mcp-server","slug":"mcp-lgazo-drawio-mcp-server","name":"drawio-mcp-server","type":"mcp","url":"https://github.com/lgazo/drawio-mcp-server","page_url":"https://unfragile.ai/mcp-lgazo-drawio-mcp-server","categories":["mcp-servers"],"tags":[],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"github_mcp-lgazo-drawio-mcp-server__cap_0","uri":"capability://tool.use.integration.mcp.protocol.bridge.for.draw.io.diagram.operations","name":"mcp protocol bridge for draw.io diagram operations","description":"Implements the Model Context Protocol (MCP) specification to expose Draw.io as a callable tool interface for LLM clients like Claude Desktop and oterm. The server receives structured tool calls from MCP clients, translates them into Draw.io operations via a WebSocket-connected browser extension, and returns structured responses back through the MCP protocol. Uses the @modelcontextprotocol/sdk (v1.10.1) for protocol implementation and event-driven message routing through Node.js EventEmitter.","intents":["Enable Claude or other LLM agents to programmatically create and modify diagrams without manual UI interaction","Integrate diagram generation into AI-driven workflows and automation pipelines","Allow LLMs to inspect diagram state and make decisions based on current diagram content"],"best_for":["AI engineers building LLM agents that need to generate technical diagrams","Teams automating documentation workflows with diagram generation","Developers integrating Draw.io into MCP-compatible AI applications"],"limitations":["Requires Draw.io MCP Browser Extension to be installed and running — cannot operate standalone","WebSocket communication adds ~100-200ms latency per operation due to browser extension round-trip","Limited to operations exposed through the tool system — arbitrary Draw.io API calls not supported"],"requires":["Node.js v18 or higher","Draw.io MCP Browser Extension installed in supported browser","Draw.io application (web or desktop) with extension active","@modelcontextprotocol/sdk v1.10.1"],"input_types":["structured JSON tool calls with schema validation (via zod v3.24.3)","diagram element specifications (rectangles, shapes, connections, text)"],"output_types":["structured JSON responses with operation results","diagram state snapshots","shape metadata and category listings"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_1","uri":"capability://tool.use.integration.websocket.based.real.time.browser.extension.communication","name":"websocket-based real-time browser extension communication","description":"Operates a uWebSockets.js server on port 3000 that maintains persistent WebSocket connections with the Draw.io MCP Browser Extension, enabling real-time bidirectional message exchange. Commands from MCP clients are queued and sent to the extension, which executes them in the Draw.io DOM context and returns results asynchronously. The event bus (Node.js EventEmitter) decouples incoming MCP requests from outgoing WebSocket messages, allowing multiple concurrent diagram operations.","intents":["Send diagram modification commands to Draw.io in real-time without polling","Receive immediate feedback on diagram operations from the browser context","Maintain persistent connection state across multiple LLM tool calls"],"best_for":["Interactive diagram generation workflows requiring sub-second feedback","Multi-step diagram construction where each step depends on previous results","Applications needing real-time synchronization between LLM decisions and diagram state"],"limitations":["WebSocket connection requires browser extension to be actively running — disconnection breaks all operations","Port 3000 must be available and accessible from the browser context","No built-in reconnection logic — connection loss requires manual restart","Single WebSocket connection per extension instance — no multiplexing support"],"requires":["uWebSockets.js v20.51.0","Draw.io MCP Browser Extension with WebSocket client implementation","Port 3000 available on localhost","Browser with WebSocket support"],"input_types":["JSON-serialized command messages from MCP protocol layer","diagram operation payloads (shape creation, property updates, deletions)"],"output_types":["JSON-serialized operation results from Draw.io extension","diagram state snapshots","error messages and operation status codes"],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_10","uri":"capability://automation.workflow.browser.extension.protocol.handshake.and.connection.management","name":"browser extension protocol handshake and connection management","description":"Manages WebSocket connection lifecycle with the Draw.io MCP Browser Extension, including initial handshake, connection validation, and graceful disconnection handling. When the extension connects, the server validates the connection, registers event listeners for incoming messages, and begins routing MCP requests to the extension. On disconnection, the server cleans up event listeners and queues pending operations for retry or failure notification to MCP clients.","intents":["Establish and maintain persistent connection with Draw.io browser extension","Validate extension identity and protocol compatibility on connection","Handle connection failures and notify MCP clients of unavailability"],"best_for":["Production deployments requiring reliable extension communication","Applications needing graceful degradation when extension is unavailable","Systems monitoring connection health and uptime"],"limitations":["No automatic reconnection — manual restart required if extension disconnects","No connection pooling — single WebSocket connection per extension instance","No heartbeat/keepalive mechanism — connection may silently drop without detection","Pending operations are lost on disconnection — no automatic retry queue"],"requires":["Draw.io MCP Browser Extension with WebSocket client","WebSocket server running on port 3000","Browser with active Draw.io application"],"input_types":["WebSocket connection from browser extension"],"output_types":["connection acknowledgment message","error notification if handshake fails"],"categories":["automation-workflow","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_11","uri":"capability://tool.use.integration.tool.registry.and.dynamic.tool.exposure.to.mcp.clients","name":"tool registry and dynamic tool exposure to mcp clients","description":"Maintains a registry of available tools (add-rectangle, update-cell-properties, delete-cell, etc.) with their schemas, descriptions, and input/output specifications. When an MCP client connects, the server exposes this tool registry through the MCP protocol, allowing clients to discover available operations and their parameters. Tools are dynamically loaded from the tool system and registered with their zod schemas, enabling MCP clients to understand tool capabilities without hardcoding.","intents":["Allow MCP clients to discover available diagram operations dynamically","Provide tool descriptions and parameter schemas to LLM agents for informed tool selection","Enable tool registry updates without redeploying MCP clients"],"best_for":["LLM agents that need to discover available tools at runtime","Systems where tool capabilities may change between versions","Multi-tenant deployments with different tool subsets per tenant"],"limitations":["Tool registry is static per server instance — no dynamic tool addition at runtime","Tool descriptions are fixed strings — no context-aware descriptions based on diagram state","No tool deprecation mechanism — old tools remain available even if superseded","Tool discovery requires MCP protocol support — not available through REST or other interfaces"],"requires":["MCP protocol implementation with tool registry support","Tool definitions with schemas and descriptions"],"input_types":["MCP client connection request"],"output_types":["JSON array of tool definitions with names, descriptions, and input schemas"],"categories":["tool-use-integration","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_2","uri":"capability://data.processing.analysis.diagram.element.inspection.and.metadata.retrieval","name":"diagram element inspection and metadata retrieval","description":"Provides tools to query the current state of a Draw.io diagram without modifying it: get-selected-cell retrieves properties of the currently selected element, get-shape-categories lists available shape libraries, get-shapes-in-category enumerates shapes within a category, and get-shape-by-name finds specific shapes by name. These tools execute read-only queries through the WebSocket connection to the browser extension, which accesses the Draw.io DOM to extract metadata and return structured JSON responses.","intents":["Inspect current diagram state to make informed decisions about next diagram modifications","Discover available shapes and categories for dynamic diagram generation","Retrieve properties of selected elements for conditional logic in diagram workflows"],"best_for":["LLM agents that need to understand diagram context before making modifications","Workflows requiring shape discovery and dynamic shape selection","Interactive diagram editing where each step depends on current diagram state"],"limitations":["get-selected-cell only returns properties of a single selected element — no bulk inspection","Shape metadata is limited to what Draw.io exposes through its DOM API","No support for querying diagram history or undo/redo state","Category and shape listings are static and depend on Draw.io version"],"requires":["Draw.io application with active diagram","Draw.io MCP Browser Extension running","WebSocket connection to MCP server established"],"input_types":["category name (string) for get-shapes-in-category","shape name (string) for get-shape-by-name","no input for get-selected-cell and get-shape-categories"],"output_types":["JSON object with cell properties (id, label, style, geometry)","JSON array of category names","JSON array of shape objects with metadata","JSON object with matching shape details or null if not found"],"categories":["data-processing-analysis","search-retrieval"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_3","uri":"capability://code.generation.editing.diagram.element.creation.with.schema.validated.properties","name":"diagram element creation with schema-validated properties","description":"Provides tools to create diagram elements (rectangles, circles, diamonds, text, connectors) with validated properties using zod schema validation. Tools like add-rectangle, add-circle, add-diamond, add-text, and add-connector accept structured input parameters (position, size, style, label, connections) that are validated against predefined schemas before being sent to the Draw.io extension. The extension executes the creation in the Draw.io DOM and returns the created element's ID and properties.","intents":["Programmatically create diagram elements with precise positioning and styling","Build complex diagrams step-by-step through sequential element creation","Ensure diagram elements conform to expected structure through schema validation"],"best_for":["Automated diagram generation from structured data (flowcharts, architecture diagrams)","LLM agents building diagrams through multi-step workflows","Applications requiring consistent element properties across generated diagrams"],"limitations":["Schema validation is strict — invalid property combinations will be rejected before sending to Draw.io","No batch creation API — each element requires a separate tool call, adding latency","Limited styling options compared to Draw.io's full style API — only common properties exposed","Element positioning is absolute (x, y coordinates) — no relative positioning or layout algorithms"],"requires":["zod v3.24.3 for schema validation","Draw.io MCP Browser Extension with element creation handlers","Valid x, y, width, height coordinates within Draw.io canvas bounds"],"input_types":["JSON object with validated properties: x, y, width, height, label, style, fillColor, strokeColor, fontSize","connector input includes source and target element IDs"],"output_types":["JSON object with created element ID, properties, and geometry","error response if validation fails or creation fails in Draw.io"],"categories":["code-generation-editing","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_4","uri":"capability://code.generation.editing.diagram.element.modification.and.property.updates","name":"diagram element modification and property updates","description":"Provides tools to modify existing diagram elements after creation: update-cell-properties changes properties of a selected or specified element (label, style, position, size), delete-cell removes elements from the diagram, and style-cell applies predefined or custom styling. Modifications are sent through the WebSocket connection to the browser extension, which updates the Draw.io DOM and returns confirmation with updated element state. Uses event-driven message routing to queue modifications and handle asynchronous responses.","intents":["Update diagram element properties after initial creation (label changes, repositioning, restyling)","Remove elements that are no longer needed in the diagram","Apply consistent styling to groups of elements for visual coherence"],"best_for":["Iterative diagram refinement workflows where elements are created then modified","Diagram generation from evolving data where properties change between steps","Styling and formatting diagrams after structural creation"],"limitations":["Modifications require element ID — no bulk update by selector or criteria","Style application is limited to predefined styles or simple property updates","No transaction support — partial failures in multi-element updates are not rolled back","Undo/redo state is managed by Draw.io, not by the MCP server"],"requires":["Element ID from previous creation or inspection tool","Draw.io MCP Browser Extension with modification handlers","Valid property values matching Draw.io's style and geometry constraints"],"input_types":["element ID (string)","property updates object with any of: label, x, y, width, height, fillColor, strokeColor, fontSize, style","style name (string) for style-cell"],"output_types":["JSON object with updated element properties and confirmation","error response if element not found or modification fails"],"categories":["code-generation-editing","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_5","uri":"capability://code.generation.editing.connector.and.relationship.creation.with.validation","name":"connector and relationship creation with validation","description":"Provides the add-connector tool to create connections between diagram elements with validated source and target element IDs. The tool accepts source element ID, target element ID, and optional label/style properties, validates the IDs exist, and sends the connector creation request through WebSocket to the Draw.io extension. The extension creates the connector in the DOM and returns the connector's ID and properties, enabling programmatic relationship mapping in diagrams.","intents":["Create relationships and connections between diagram elements (arrows, flows, dependencies)","Build flowcharts and process diagrams with validated element connections","Establish data flow or dependency relationships in architecture diagrams"],"best_for":["Flowchart and process diagram generation from structured workflow data","Architecture diagram creation with dependency relationships","LLM agents building connected diagram structures step-by-step"],"limitations":["Connector creation requires both source and target elements to exist — no forward references","Connector routing and path layout is handled by Draw.io — no control over connector path","Limited connector styling options — only basic line style and color properties exposed","No support for connector labels with dynamic positioning"],"requires":["Valid source element ID (must exist in diagram)","Valid target element ID (must exist in diagram)","Draw.io MCP Browser Extension with connector creation handler"],"input_types":["source element ID (string)","target element ID (string)","optional label (string)","optional style properties (strokeColor, strokeWidth, endArrow)"],"output_types":["JSON object with created connector ID, source, target, and properties","error response if source or target element not found"],"categories":["code-generation-editing","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_6","uri":"capability://automation.workflow.event.driven.message.bus.for.asynchronous.operation.coordination","name":"event-driven message bus for asynchronous operation coordination","description":"Implements a Node.js EventEmitter-based message bus with two primary event streams: bus_request_stream for commands flowing from MCP clients to Draw.io, and bus_reply_stream for results flowing back from the browser extension to MCP clients. This decouples the MCP protocol layer from WebSocket communication, allowing multiple concurrent tool calls to be queued and processed asynchronously without blocking. Requests are assigned unique IDs (via nanoid v5.1.5) to correlate responses with requests.","intents":["Handle multiple concurrent diagram operations without blocking MCP protocol processing","Decouple MCP client requests from WebSocket communication to the browser extension","Correlate asynchronous responses from the browser extension with original MCP requests"],"best_for":["High-concurrency scenarios with multiple simultaneous diagram operations","Applications requiring non-blocking async operation handling","Systems where MCP protocol and WebSocket layers need independent scaling"],"limitations":["Event bus is in-memory only — no persistence across server restarts","No built-in request timeout handling — long-running operations may accumulate in memory","Event ordering is not guaranteed across multiple concurrent operations","No backpressure mechanism — unbounded queue growth if WebSocket is slow"],"requires":["Node.js EventEmitter (built-in)","nanoid v5.1.5 for unique request ID generation","Proper event listener cleanup to prevent memory leaks"],"input_types":["MCP tool call objects with parameters","WebSocket messages from browser extension with request IDs"],"output_types":["queued request events with unique IDs","response events correlated to original request IDs"],"categories":["automation-workflow","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_7","uri":"capability://automation.workflow.structured.logging.with.request.tracing","name":"structured logging with request tracing","description":"Integrates pino v9.6.0 logging library to provide structured JSON logging with request ID correlation. Each MCP request and WebSocket message is logged with its unique ID, operation type, timestamp, and result status. Logs include both request entry points and response completion, enabling end-to-end tracing of diagram operations through the system. Logging is configurable and outputs to stdout/stderr with optional file rotation.","intents":["Debug diagram operation failures by tracing requests through MCP and WebSocket layers","Monitor server performance and operation latency across the system","Audit diagram modifications for compliance or troubleshooting"],"best_for":["Production deployments requiring operational visibility","Debugging complex multi-step diagram workflows","Teams needing audit trails of diagram modifications"],"limitations":["Structured logging adds ~5-10ms overhead per operation due to JSON serialization","Log volume can be high in high-concurrency scenarios — requires log rotation/archival","No built-in log aggregation — requires external tools (ELK, Datadog, etc.) for centralized logging","Request ID correlation only works within a single server instance — no distributed tracing"],"requires":["pino v9.6.0","stdout/stderr access for log output","optional: log rotation configuration"],"input_types":["MCP tool calls with parameters","WebSocket messages and responses","operation status and error details"],"output_types":["JSON-formatted log lines with request ID, operation type, timestamp, status","error logs with stack traces and context"],"categories":["automation-workflow","safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_8","uri":"capability://safety.moderation.tool.schema.definition.and.validation.with.zod","name":"tool schema definition and validation with zod","description":"Defines all MCP tool inputs using zod v3.24.3 schemas, providing runtime validation and type safety for tool parameters. Each tool (add-rectangle, update-cell-properties, etc.) has a corresponding zod schema that validates input types, required fields, and value constraints (e.g., numeric ranges for coordinates). Invalid inputs are rejected with detailed error messages before being sent to the Draw.io extension, ensuring only valid operations reach the browser.","intents":["Validate tool inputs at the server layer before sending to Draw.io","Provide clear error messages to LLM clients when tool parameters are invalid","Ensure type safety and prevent malformed diagram operations"],"best_for":["Systems where LLM agents may generate invalid tool parameters","Applications requiring strict input validation before diagram operations","Teams needing clear error feedback for debugging LLM-generated tool calls"],"limitations":["Schema validation adds ~2-5ms latency per tool call","Schemas are static — no dynamic validation based on diagram state","Error messages from zod may be verbose for LLM clients unfamiliar with validation errors","No support for conditional validation (e.g., required fields depending on other fields)"],"requires":["zod v3.24.3","schema definitions for each tool"],"input_types":["raw JSON tool parameters from MCP clients"],"output_types":["validated and typed parameters, or validation error with details"],"categories":["safety-moderation","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"github_mcp-lgazo-drawio-mcp-server__cap_9","uri":"capability://data.processing.analysis.unique.id.generation.for.diagram.elements","name":"unique id generation for diagram elements","description":"Uses nanoid v5.1.5 to generate unique, URL-safe IDs for diagram elements created through the MCP server. Each new element (rectangle, circle, connector, etc.) is assigned a unique ID that persists for the element's lifetime in the diagram. IDs are also used to correlate asynchronous MCP requests with WebSocket responses, enabling request-response matching in the event bus.","intents":["Generate unique identifiers for diagram elements without collisions","Correlate asynchronous requests and responses in the event-driven message bus","Enable element reference in subsequent modification or deletion operations"],"best_for":["Any diagram operation requiring unique element identification","High-concurrency scenarios where ID collisions must be avoided","Systems requiring URL-safe IDs for serialization or logging"],"limitations":["nanoid IDs are random — no semantic meaning or ordering","IDs are not persisted across server restarts — diagram element IDs may change if server is restarted","No built-in ID registry — no way to list all generated IDs or validate ID ownership"],"requires":["nanoid v5.1.5"],"input_types":["no input — IDs are generated internally"],"output_types":["URL-safe unique ID string (e.g., 'V1StGXR_Z5j3eK2L')"],"categories":["data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":40,"verified":false,"data_access_risk":"high","permissions":["Node.js v18 or higher","Draw.io MCP Browser Extension installed in supported browser","Draw.io application (web or desktop) with extension active","@modelcontextprotocol/sdk v1.10.1","uWebSockets.js v20.51.0","Draw.io MCP Browser Extension with WebSocket client implementation","Port 3000 available on localhost","Browser with WebSocket support","Draw.io MCP Browser Extension with WebSocket client","WebSocket server running on port 3000"],"failure_modes":["Requires Draw.io MCP Browser Extension to be installed and running — cannot operate standalone","WebSocket communication adds ~100-200ms latency per operation due to browser extension round-trip","Limited to operations exposed through the tool system — arbitrary Draw.io API calls not supported","WebSocket connection requires browser extension to be actively running — disconnection breaks all operations","Port 3000 must be available and accessible from the browser context","No built-in reconnection logic — connection loss requires manual restart","Single WebSocket connection per extension instance — no multiplexing support","No automatic reconnection — manual restart required if extension disconnects","No connection pooling — single WebSocket connection per extension instance","No heartbeat/keepalive mechanism — connection may silently drop without detection","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.4378234332232001,"quality":0.34,"ecosystem":0.39999999999999997,"match_graph":0.25,"freshness":0.75,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.15,"match_graph":0.23,"freshness":0.12}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-05-24T12:16:22.065Z","last_scraped_at":"2026-05-03T14:23:34.856Z","last_commit":"2026-05-01T19:27:33Z"},"community":{"stars":1189,"forks":108,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=mcp-lgazo-drawio-mcp-server","compare_url":"https://unfragile.ai/compare?artifact=mcp-lgazo-drawio-mcp-server"}},"signature":"/mBbefPQcsiDyvWMeIkiEZVOfza3sFUsrxDxEoVQCUoZXDXj56iKNDQvnROF2Ij3LPKLTE0Qdfq1NhuH5++WDw==","signedAt":"2026-06-21T07:58:50.467Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/mcp-lgazo-drawio-mcp-server","artifact":"https://unfragile.ai/mcp-lgazo-drawio-mcp-server","verify":"https://unfragile.ai/api/v1/verify?slug=mcp-lgazo-drawio-mcp-server","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}