excalidraw-mcp-obsidian
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NO_COLOR | No | 建议 1。 | |
| NODE_DISABLE_COLORS | No | 建议 1,避免 ANSI 污染 MCP JSON。 | |
| EXCALIDRAW_EXPORT_DIR | Yes | 必填。导出路径必须落在此目录下(沙箱)。例:E:/Notes 或 /home/you/vault-parent |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_elementA | Create a new Excalidraw element. ⚠️ BEFORE using this tool, call read_diagram_guide(template="...") to get design rules (colors, shapes, line types, anti-patterns). For arrows, use startElementId/endElementId to bind to shapes (auto-routes to edges). |
| update_elementC | Update an existing Excalidraw element |
| delete_elementC | Delete an Excalidraw element |
| query_elementsC | Query Excalidraw elements with optional filters |
| get_resourceD | Get an Excalidraw resource |
| group_elementsC | Group multiple elements together |
| ungroup_elementsB | Ungroup a group of elements |
| align_elementsC | Align elements to a specific position |
| distribute_elementsD | Distribute elements evenly |
| lock_elementsB | Lock elements to prevent modification |
| unlock_elementsB | Unlock elements to allow modification |
| batch_create_elementsB | Create multiple Excalidraw elements at once. ⚠️ BEFORE using this tool, call read_diagram_guide(template="...") to get design rules (colors, shapes, line types, anti-patterns). |
| bind_arrowsA | Bind arrows to shapes using actual rendered dimensions for precise edge-to-edge connections. Call this AFTER batch_create_elements (shapes only) — the shapes must be created first so the server can read their actual rendered sizes before computing arrow edge points. Each arrow needs startElementId/endElementId referencing existing shape IDs. |
| get_elementA | Get a single Excalidraw element by ID |
| clear_canvasB | Clear all elements from the canvas |
| export_sceneC | Export the current canvas to .excalidraw JSON format. |
| import_sceneB | Import elements from a .excalidraw JSON file or raw JSON data |
| duplicate_elementsC | Duplicate elements with a configurable offset |
| snapshot_sceneA | Save a named snapshot of the current canvas state |
| restore_snapshotC | Restore the canvas from a previously saved named snapshot |
| describe_sceneB | Get an AI-readable description of the current canvas |
| set_canvas_fontA | Set the global font for ALL elements on the canvas. Updates every existing element immediately and persists as the default for new elements. Excalifont (5) = hand-drawn, Helvetica (2) = clean standard, Virgil (1) = classic sketch. |
| list_style_presetsA | List all available style presets. Style presets define color palettes, shape defaults, and layout rules for specific diagram types. |
| apply_style_presetA | Apply a style preset to the canvas. Sets defaults (font, colors, roundness) for future element creation. Optionally updates all existing elements to match the preset. |
| lookup_style_tokensA | Resolve style preset token roles to hex colors for batch_create_elements. Accepts JSON paths (nodes.accent) or template shorthand (node:accent, surface:mid, arrow:muted). Defaults to activePreset from apply_style_preset, else clean-tech. |
| read_diagram_guideA | Returns a comprehensive design guide for creating beautiful Excalidraw diagrams. Available templates: base (general rules), flowchart, architecture-diagram, er-diagram, sequence-diagram, mind-map, org-chart, data-flow-diagram. Call this BEFORE any create_element or batch_create_elements call. |
| export_to_excalidraw_urlA | Export the current canvas to a shareable excalidraw.com URL. |
| get_selectionA | Read the Obsidian selection bridge file written by the "AI Edit Selected" EA script (.ai-selection.json). Returns a summary of selected elements (ids, type, text, bounds) and optional instruction. Pass fullJson=true for the raw payload. |
| get_element_contextC | Get detailed context for a specific element by ID. |
| export_to_obsidianB | Export the current canvas to an Obsidian-compatible .excalidraw.md file. |
| import_from_obsidianC | Import a diagram from an Obsidian .excalidraw.md file onto the canvas. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 31 tools
Several tools have overlapping purposes: get_element, get_element_context, and query_elements all retrieve element data; export_to_excalidraw_url, export_to_obsidian, and export_scene all export the scene. Descriptions clarify distinctions (by ID vs detailed context vs filtered query; URL vs file vs JSON), but agents may still conflate them. get_resource is vague and doesn't clearly fit the element/scene model.
Most tools follow a consistent verb_noun pattern (create_element, delete_element, group_elements). Minor deviations exist: export_to_excalidraw_url vs export_scene, snapshot_scene vs restore_snapshot, and the use of 'resource' in get_resource instead of 'element' or 'scene'. Overall readable and predictable.
With 31 tools, the server exceeds the 25+ threshold for 'too many'. While the domain is complex, the toolset could be consolidated (e.g., merging get_element/get_element_context, or unifying export/import variants). The high count adds cognitive load and selection risk.
The toolset provides full CRUD for elements, batch operations, layout controls (group, align, distribute), locking, multiple export/import formats, snapshots, style presets, and design guidance. No obvious dead ends; agents can accomplish a complete diagram lifecycle.