MCP server intelligence profile

Excalidraw MCP Server

A Model Context Protocol server that enables LLMs to create, modify, and manipulate Excalidraw diagrams through a structured API

Local Onlyyctimlin
Awaiting current scanNpm · 2.0.0

The selected current version does not yet have completed public verification. Unknown does not mean clean or vulnerable.

1Distribution channel
26Independently observed tools
0Linked remote endpoints
AvailableVersion intelligence

Detailed security scan evidence is not public for this MCP yet. Public identity, registry metadata, and independently observed protocol inventory remain available.

Install and connect

Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.

Install mcp-excalidraw-server from npm

Install exact version 2.0.0. No verified executable entrypoint is available, so use the package documentation to launch it.

npm install --save-exact mcp-excalidraw-server@2.0.0

Identity

Canonical slugexcalidraw-mcp-server-7b48ff1eDeploymentLocal Only
Canonical packagenpm:mcp-excalidraw-serverRepositoryyctimlin/mcp_excalidraw
First publishedLatest release
Last security verificationClassification confidence90%
PublicationDraftOfficial distributionNot verified

Distributions

ChannelIdentifierCurrent versionVersionsSource
npmmcp-excalidraw-server2.0.010Repository

Current release

PackageVersionPublished / observedInventorySecurity scan
npmmcp-excalidraw-server2.0.0CurrentSep 5, 202626 toolsSucceeded · 0 resources · 0 promptsEvidence restricted
Enterprise protection

Continuously monitor this MCP for security risk

Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.

  • Independent exact-version security scans
  • Continuous release and vulnerability monitoring
  • Risk-change alerts with capability context
  • Historical evidence and API exports
Custom pricingContact salesTailored to your organization, integrations, data needs, and support requirements.

Current version evidence

No public current-version evidence is available yet.

Current protocol inventory

2025-06-18Negotiated protocol
mcp-excalidraw-serverServer-reported name
1Capability groups
Aug 19, 2026Observed

Tools 26

ToolCategoryAnnotationsRisk
align_elementsAlign elements to a specific position
Input schema
{
  "type": "object",
  "properties": {
    "elementIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "alignment": {
      "type": "string",
      "enum": [
        "left",
        "center",
        "right",
        "top",
        "middle",
        "bottom"
      ]
    }
  },
  "required": [
    "elementIds",
    "alignment"
  ]
}
batch_create_elementsCreate multiple Excalidraw elements at once. For arrows, use startElementId/endElementId to bind arrows to shapes — Excalidraw auto-routes to element edges. Assign custom id to shapes so arrows can reference them.
Input schema
{
  "type": "object",
  "properties": {
    "elements": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Custom element ID. Arrows can reference this via startElementId/endElementId."
          },
          "type": {
            "type": "string",
            "enum": [
              "rectangle",
              "ellipse",
              "diamond",
              "arrow",
              "text",
              "freedraw",
              "line",
              "image"
            ]
          },
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "width": {
            "type": "number"
          },
          "height": {
            "type": "number"
          },
          "backgroundColor": {
            "type": "string"
          },
          "strokeColor": {
            "type": "string"
          },
          "strokeWidth": {
            "type": "number"
          },
          "strokeStyle": {
            "type": "string",
            "description": "Stroke style: solid, dashed, dotted"
          },
          "roughness": {
            "type": "number"
          },
          "opacity": {
            "type": "number"
          },
          "text": {
            "type": "string"
          },
          "fontSize": {
            "type": "number"
          },
          "fontFamily": {
            "type": [
              "string",
              "number"
            ],
            "description": "Font family: virgil/hand/handwritten (1), helvetica/sans/sans-serif (2), cascadia/mono/monospace (3), excalifont (5), nunito (6), lilita/lilita one (7), comic shanns/comic (8), or numeric ID"
          },
          "startElementId": {
            "type": "string",
            "description": "For arrows: ID of element to bind arrow start to"
          },
          "endElementId": {
            "type": "string",
            "description": "For arrows: ID of element to bind arrow end to"
          },
          "endArrowhead": {
            "type": "string",
            "description": "Arrowhead style at end: arrow, bar, dot, triangle, or null"
          },
          "startArrowhead": {
            "type": "string",
            "description": "Arrowhead style at start: arrow, bar, dot, triangle, or null"
          }
        },
        "required": [
          "type",
          "x",
          "y"
        ]
      }
    }
  },
  "required": [
    "elements"
  ]
}
clear_canvasClear all elements from the canvas
Input schema
{
  "type": "object",
  "properties": {}
}
create_elementCreate a new Excalidraw element. For arrows, use startElementId/endElementId to bind to shapes (auto-routes to edges).
Input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Custom element ID (optional, auto-generated if omitted). Use with startElementId/endElementId in batch_create_elements."
    },
    "type": {
      "type": "string",
      "enum": [
        "rectangle",
        "ellipse",
        "diamond",
        "arrow",
        "text",
        "freedraw",
        "line",
        "image"
      ]
    },
    "x": {
      "type": "number"
    },
    "y": {
      "type": "number"
    },
    "width": {
      "type": "number"
    },
    "height": {
      "type": "number"
    },
    "backgroundColor": {
      "type": "string"
    },
    "strokeColor": {
      "type": "string"
    },
    "strokeWidth": {
      "type": "number"
    },
    "strokeStyle": {
      "type": "string",
      "description": "Stroke style: solid, dashed, dotted"
    },
    "roughness": {
      "type": "number"
    },
    "opacity": {
      "type": "number"
    },
    "text": {
      "type": "string"
    },
    "fontSize": {
      "type": "number"
    },
    "fontFamily": {
      "type": [
        "string",
        "number"
      ],
      "description": "Font family: virgil/hand/handwritten (1), helvetica/sans/sans-serif (2), cascadia/mono/monospace (3), excalifont (5), nunito (6), lilita/lilita one (7), comic shanns/comic (8), or numeric ID"
    },
    "startElementId": {
      "type": "string",
      "description": "For arrows: ID of the element to bind the arrow start to. Arrow auto-routes to element edge."
    },
    "endElementId": {
      "type": "string",
      "description": "For arrows: ID of the element to bind the arrow end to. Arrow auto-routes to element edge."
    },
    "endArrowhead": {
      "type": "string",
      "description": "Arrowhead style at end: arrow, bar, dot, triangle, or null"
    },
    "startArrowhead": {
      "type": "string",
      "description": "Arrowhead style at start: arrow, bar, dot, triangle, or null"
    }
  },
  "required": [
    "type",
    "x",
    "y"
  ]
}
create_from_mermaidConvert a Mermaid diagram to Excalidraw elements and render them on the canvas
Input schema
{
  "type": "object",
  "properties": {
    "mermaidDiagram": {
      "type": "string",
      "description": "The Mermaid diagram definition (e.g., \"graph TD; A-->B; B-->C;\")"
    },
    "config": {
      "type": "object",
      "description": "Optional Mermaid configuration",
      "properties": {
        "startOnLoad": {
          "type": "boolean"
        },
        "flowchart": {
          "type": "object",
          "properties": {
            "curve": {
              "type": "string",
              "enum": [
                "linear",
                "basis"
              ]
            }
          }
        },
        "themeVariables": {
          "type": "object",
          "properties": {
            "fontSize": {
              "type": "string"
            }
          }
        },
        "maxEdges": {
          "type": "number"
        },
        "maxTextSize": {
          "type": "number"
        }
      }
    }
  },
  "required": [
    "mermaidDiagram"
  ]
}
delete_elementDelete an Excalidraw element
Input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    }
  },
  "required": [
    "id"
  ]
}
describe_sceneGet an AI-readable description of the current canvas: element types, positions, connections, labels, spatial layout, and bounding box. Use this to understand what is on the canvas before making changes.
Input schema
{
  "type": "object",
  "properties": {}
}
distribute_elementsDistribute elements evenly
Input schema
{
  "type": "object",
  "properties": {
    "elementIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "direction": {
      "type": "string",
      "enum": [
        "horizontal",
        "vertical"
      ]
    }
  },
  "required": [
    "elementIds",
    "direction"
  ]
}
duplicate_elementsDuplicate elements with a configurable offset
Input schema
{
  "type": "object",
  "properties": {
    "elementIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "IDs of elements to duplicate"
    },
    "offsetX": {
      "type": "number",
      "description": "Horizontal offset (default: 20)"
    },
    "offsetY": {
      "type": "number",
      "description": "Vertical offset (default: 20)"
    }
  },
  "required": [
    "elementIds"
  ]
}
export_sceneExport the current canvas to .excalidraw JSON format. Optionally write to a file; a path ending in .md is written in the Obsidian Excalidraw plugin format (.excalidraw.md).
Input schema
{
  "type": "object",
  "properties": {
    "filePath": {
      "type": "string",
      "description": "Optional file path to write the scene to (.excalidraw for raw JSON, .excalidraw.md for the Obsidian Excalidraw plugin format)"
    }
  }
}
export_to_excalidraw_urlExport the current canvas to a shareable excalidraw.com URL. The diagram is encrypted and uploaded; anyone with the URL can view it. Returns the shareable link.
Input schema
{
  "type": "object",
  "properties": {}
}
export_to_imageExport the current canvas to PNG or SVG image. Requires the canvas frontend to be open in a browser.
Input schema
{
  "type": "object",
  "properties": {
    "format": {
      "type": "string",
      "enum": [
        "png",
        "svg"
      ],
      "description": "Image format"
    },
    "filePath": {
      "type": "string",
      "description": "Optional file path to save the image"
    },
    "background": {
      "type": "boolean",
      "description": "Include background in export (default: true)"
    }
  },
  "required": [
    "format"
  ]
}
get_canvas_screenshotTake a screenshot of the current canvas and return it as an image. Requires the canvas frontend to be open in a browser. Use this to visually verify what the diagram looks like.
Input schema
{
  "type": "object",
  "properties": {
    "background": {
      "type": "boolean",
      "description": "Include background in screenshot (default: true)"
    }
  }
}
get_elementGet a single Excalidraw element by ID
Input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The element ID"
    }
  },
  "required": [
    "id"
  ]
}
get_resourceGet an Excalidraw resource
Input schema
{
  "type": "object",
  "properties": {
    "resource": {
      "type": "string",
      "enum": [
        "scene",
        "library",
        "theme",
        "elements"
      ]
    }
  },
  "required": [
    "resource"
  ]
}
group_elementsGroup multiple elements together
Input schema
{
  "type": "object",
  "properties": {
    "elementIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "elementIds"
  ]
}
import_sceneImport elements from a .excalidraw JSON file, an Obsidian .excalidraw.md file, or raw JSON data
Input schema
{
  "type": "object",
  "properties": {
    "filePath": {
      "type": "string",
      "description": "Path to a .excalidraw JSON or Obsidian .excalidraw.md file"
    },
    "data": {
      "type": "string",
      "description": "Raw .excalidraw JSON string (alternative to filePath)"
    },
    "mode": {
      "type": "string",
      "enum": [
        "replace",
        "merge"
      ],
      "description": "\"replace\" clears canvas first, \"merge\" appends to existing elements"
    }
  },
  "required": [
    "mode"
  ]
}
lock_elementsLock elements to prevent modification
Input schema
{
  "type": "object",
  "properties": {
    "elementIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "elementIds"
  ]
}
query_elementsQuery Excalidraw elements with optional filters
Input schema
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "rectangle",
        "ellipse",
        "diamond",
        "arrow",
        "text",
        "freedraw",
        "line",
        "image"
      ]
    },
    "filter": {
      "type": "object",
      "additionalProperties": true
    },
    "bbox": {
      "type": "object",
      "description": "Bounding box filter — only return elements whose origin (x, y) falls within the given coordinate range",
      "properties": {
        "x_min": {
          "type": "number"
        },
        "x_max": {
          "type": "number"
        },
        "y_min": {
          "type": "number"
        },
        "y_max": {
          "type": "number"
        }
      }
    }
  }
}
read_diagram_guideReturns a comprehensive design guide for creating beautiful Excalidraw diagrams: color palette, sizing rules, layout patterns, arrow binding best practices, diagram templates, and anti-patterns. Call this before creating diagrams to produce professional results.
Input schema
{
  "type": "object",
  "properties": {}
}
restore_snapshotRestore the canvas from a previously saved named snapshot
Input schema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Name of the snapshot to restore"
    }
  },
  "required": [
    "name"
  ]
}
set_viewportControl the canvas viewport (camera). Auto-fit all elements, zoom-to-fit a subset of elements, center on a specific element, or set zoom/scroll directly. Requires the canvas frontend open in a browser.
Input schema
{
  "type": "object",
  "properties": {
    "scrollToContent": {
      "type": "boolean",
      "description": "Auto-fit all elements in view (zoom-to-fit)"
    },
    "scrollToElementIds": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 1,
      "description": "Zoom-to-fit the bounding box of one or more elements by ID; every ID must exist"
    },
    "viewportZoomFactor": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1,
      "description": "Optional fit-to-viewport zoom factor in the range (0, 1] for scrollToContent or scrollToElementIds; lower values leave more padding"
    },
    "scrollToElementId": {
      "type": "string",
      "description": "Center the view on a specific element by ID"
    },
    "zoom": {
      "type": "number",
      "description": "Zoom level (0.1–10, where 1 = 100%)"
    },
    "offsetX": {
      "type": "number",
      "description": "Horizontal scroll offset"
    },
    "offsetY": {
      "type": "number",
      "description": "Vertical scroll offset"
    }
  }
}
snapshot_sceneSave a named snapshot of the current canvas state for later restoration
Input schema
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Name for this snapshot"
    }
  },
  "required": [
    "name"
  ]
}
ungroup_elementsUngroup a group of elements
Input schema
{
  "type": "object",
  "properties": {
    "groupId": {
      "type": "string"
    }
  },
  "required": [
    "groupId"
  ]
}
unlock_elementsUnlock elements to allow modification
Input schema
{
  "type": "object",
  "properties": {
    "elementIds": {
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "elementIds"
  ]
}
update_elementUpdate an existing Excalidraw element
Input schema
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "type": {
      "type": "string",
      "enum": [
        "rectangle",
        "ellipse",
        "diamond",
        "arrow",
        "text",
        "freedraw",
        "line",
        "image"
      ]
    },
    "x": {
      "type": "number"
    },
    "y": {
      "type": "number"
    },
    "width": {
      "type": "number"
    },
    "height": {
      "type": "number"
    },
    "backgroundColor": {
      "type": "string"
    },
    "strokeColor": {
      "type": "string"
    },
    "strokeWidth": {
      "type": "number"
    },
    "strokeStyle": {
      "type": "string"
    },
    "roughness": {
      "type": "number"
    },
    "opacity": {
      "type": "number"
    },
    "text": {
      "type": "string"
    },
    "fontSize": {
      "type": "number"
    },
    "fontFamily": {
      "type": [
        "string",
        "number"
      ],
      "description": "Font family: virgil/hand/handwritten (1), helvetica/sans/sans-serif (2), cascadia/mono/monospace (3), excalifont (5), nunito (6), lilita/lilita one (7), comic shanns/comic (8), or numeric ID"
    }
  },
  "required": [
    "id"
  ]
}

Resources 0

  • None observed.

Resource templates 0

  • None observed.

Prompts 0

  • None observed.

Remote endpoints

EndpointTransportAuthenticationHealthObserved
No verified remote endpoint is linked.

Excalidraw MCP Server questions

How do I install Excalidraw MCP Server?

Install the selected package version with: npm install --save-exact mcp-excalidraw-server@2.0.0

What tools does Excalidraw MCP Server provide?

Excalidraw MCP Server exposed 26 tools during independent protocol observation, including align_elements, batch_create_elements, clear_canvas, create_element, create_from_mermaid, delete_element, describe_scene, distribute_elements, and others.

Is Excalidraw MCP Server secure?

The selected current version does not yet have completed public verification. Unknown does not mean clean or vulnerable.

Explore related MCP server guides

Curated product and capability guides containing this catalog record.

Official vs Community MCP Servers

Let’s talk about MCP security.

Share your details and our security team will contact you.