The Excalidraw MCP connector routes your AI agent's tool calls to Excalidraw's own MCP server through Scalekit. Each user connects their own Excalidraw access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 29 tools.
- Tools
- 29
- What they doRead · write · destructive
- 15 · 11 · 315 read11 write3 destructive
- Users sign in with
- Access token
Setup
Install the SDK
Terminal window npm install @scalekit-sdk/node dotenvTerminal window pip install scalekit-sdk-python python-dotenvSet your credentials
Add your Scalekit credentials to your
.envfile. Find values in app.scalekit.com > Developers > API Credentials..env SCALEKIT_ENVIRONMENT_URL=<your-environment-url>SCALEKIT_CLIENT_ID=<your-client-id>SCALEKIT_CLIENT_SECRET=<your-client-secret>Create the Excalidraw MCP connection
In AgentKit > Connections, create an Excalidraw MCP connection. The name you give it is the
connection_nameyour code passes. See Configure connections.Authorize a user and make your first call
quickstart.mts import { ScalekitClient } from '@scalekit-sdk/node'import 'dotenv/config'import { createInterface } from 'node:readline/promises'const scalekit = new ScalekitClient(process.env.SCALEKIT_ENVIRONMENT_URL,process.env.SCALEKIT_CLIENT_ID,process.env.SCALEKIT_CLIENT_SECRET,)const actions = scalekit.actionsconst connector = 'excalidrawmcp'const identifier = 'user_123'// Generate an authorization link for the userconst { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })console.log('Authorize Excalidraw MCP:', link)const rl = createInterface({ input: process.stdin, output: process.stdout })await rl.question('Press Enter after authorizing...')rl.close()// Make your first callconst result = await actions.executeTool({connector,identifier,toolName: 'excalidrawmcp_get_workspace',toolInput: {},})console.log(result)Terminal window npx tsx quickstart.mtsquickstart.py import osfrom scalekit import ScalekitClientfrom dotenv import load_dotenvload_dotenv()scalekit_client = ScalekitClient(env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),client_id=os.getenv("SCALEKIT_CLIENT_ID"),client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),)actions = scalekit_client.actionsconnection_name = "excalidrawmcp"identifier = "user_123"# Generate an authorization link for the userlink_response = actions.get_authorization_link(connection_name=connection_name,identifier=identifier,)print("Authorize Excalidraw MCP:", link_response.link)input("Press Enter after authorizing...")# Make your first callresult = actions.execute_tool(tool_input={},tool_name="excalidrawmcp_get_workspace",connection_name=connection_name,identifier=identifier,)print(result)Terminal window python quickstart.pyEach user opens the link once and enters their Excalidraw MCP server credentials there. See Authorize a user for the full flow and statuses.
Tools
Pass the exact name toexecute_toolexcalidrawmcp_get_collectionRetrieve detailed information about a specific collection by its ID.Read-onlyGet Collection
Retrieve detailed information about a specific collection by its ID.
Inputs
collectionIdstringrequired- The unique identifier of the collection to retrieve.
excalidrawmcp_get_inviteRetrieve details for a specific workspace invitation by its ID.Read-onlyGet Invite
Retrieve details for a specific workspace invitation by its ID.
Inputs
inviteIdstringrequired- The unique identifier of the workspace invitation to retrieve.
excalidrawmcp_get_sceneRetrieve metadata for a specific scene by its ID.Read-onlyGet Scene
Retrieve metadata for a specific scene by its ID.
Inputs
sceneIdstringrequired- The unique identifier of the scene to retrieve.
excalidrawmcp_get_scene_contentRetrieve the complete content of a scene including all drawing elements and files.Read-onlyGet Scene Content
Retrieve the complete content of a scene including all drawing elements and files. Use search_scene_content first if you only need to locate specific elements.
Inputs
sceneIdstringrequired- The unique identifier of the scene whose full content to retrieve.
excalidrawmcp_get_workspaceRetrieve workspace configuration and metadata for the current workspace.Read-onlyGet Workspace
Retrieve workspace configuration and metadata for the current workspace.
Inputs
This tool takes no inputs.
excalidrawmcp_get_workspace_userRetrieve details for a specific workspace member by their user ID.Read-onlyGet Workspace User
Retrieve details for a specific workspace member by their user ID.
Inputs
userIdstringrequired- The unique identifier of the workspace user to retrieve.
excalidrawmcp_list_collection_scenesRetrieve a paginated list of all scenes that belong to a specific collection.Read-onlyList Collection Scenes
Retrieve a paginated list of all scenes that belong to a specific collection.
Inputs
collectionIdstringrequired- The unique identifier of the collection whose scenes to list.
limitinteger- Maximum number of scenes to return per page (1-100).
offsetinteger- Number of items to skip before starting to collect results.
excalidrawmcp_list_collectionsRetrieve a paginated list of all collections in the workspace.Read-onlyList Collections
Retrieve a paginated list of all collections in the workspace.
Inputs
limitinteger- Maximum number of collections to return per page (1-100).
offsetinteger- Number of items to skip before starting to collect results.
excalidrawmcp_list_invitesRetrieve a paginated list of pending workspace invitations.Read-onlyList Invites
Retrieve a paginated list of pending workspace invitations.
Inputs
limitinteger- Maximum number of invitations to return per page (1-100).
offsetinteger- Number of items to skip before starting to collect results.
excalidrawmcp_list_logsRetrieve a paginated list of workspace activity and audit logs with filtering by user, action, operation, and date range.Read-onlyList Logs
Retrieve a paginated list of workspace activity and audit logs with filtering by user, action, operation, and date range.
Inputs
actionstring- Filter logs by a specific action type.
cursorstring- Sequence number for cursor-based pagination.
dateFromstring- ISO 8601 date filter start (inclusive).
dateTostring- ISO 8601 date filter end (inclusive).
limitinteger- Maximum number of log entries to return per page (1-100).
offsetinteger- Number of items to skip before starting to collect results.
operationstring- Filter logs by operation type (create, read, update, or delete).one of
createreadupdatedelete pagestring- Page number for offset-based pagination.
userstring- Filter logs by a specific user ID.
excalidrawmcp_list_scenesRetrieve a paginated list of all scenes in the workspace with their metadata.Read-onlyList Scenes
Retrieve a paginated list of all scenes in the workspace with their metadata.
Inputs
collectionIdstring- Filter scenes by a specific collection ID.
limitinteger- Maximum number of scenes to return per page (1-100).
offsetinteger- Number of items to skip before starting to collect results.
excalidrawmcp_list_workspace_usersRetrieve a paginated list of all members in the current workspace.Read-onlyList Workspace Users
Retrieve a paginated list of all members in the current workspace.
Inputs
limitinteger- Maximum number of workspace users to return per page (1-100).
offsetinteger- Number of items to skip before starting to collect results.
excalidrawmcp_read_excalidraw_formatReturns the Excalidraw element format reference with agent-facing rules for constructing valid diagram payloads.Read-onlyRead Excalidraw Format
Returns the Excalidraw element format reference with agent-facing rules for constructing valid diagram payloads. Call this before edit_scene_content if unfamiliar with the format.
Inputs
This tool takes no inputs.
excalidrawmcp_search_scene_contentSearch a scene's shapes and text without loading the full scene content.Read-onlySearch Scene Content
Search a scene's shapes and text without loading the full scene content. Returns matching Excalidraw element nodes filtered by type, frame, and text query.
Inputs
sceneIdstringrequired- ID of the scene to search within.
frameIdstring- Limit search to elements inside this frame.
includeDeletedboolean- Whether to include soft-deleted elements in results.
limitinteger- Maximum number of matching elements to return (1-100, default 25).
matchModestring- How the query string is matched against element text.one of
containsglobexact querystring- Text query to match against shape labels and text content.
typesarray- Element types to filter by.
excalidrawmcp_take_screenshotRender a scene, or a specific frame, as a PNG image so you can visually inspect the current Excalidraw content.Read-onlyTake Screenshot
Render a scene, or a specific frame, as a PNG image so you can visually inspect the current Excalidraw content. Use this after editing scene content to verify layout and visual correctness.
Inputs
sceneIdstringrequired- ID of the scene to render.
frameIdstring- Optional frame ID to render. If omitted, the full scene is rendered.
maxWidthinteger- Maximum output PNG width in pixels. Screenshots are capped at 1920x1080.
paddinginteger- Padding around the rendered scene or frame in scene pixels. Default: 20.
excalidrawmcp_create_collectionCreate a new collection in the workspace to organize scenes.WriteCreate Collection
Create a new collection in the workspace to organize scenes.
Inputs
namestringrequired- Name of the new collection.
excalidrawmcp_create_collection_sceneCreate a new scene within a specific collection.WriteCreate Collection Scene
Create a new scene within a specific collection.
Inputs
collectionIdstringrequired- The unique identifier of the collection in which to create the scene.
namestringrequired- Name of the new scene.
pinnedbooleanrequired- Whether to pin the scene to the top of the scene list.
excalidrawmcp_create_email_inviteCreate a workspace invite for a specific email address.WriteCreate Email Invite
Create a workspace invite for a specific email address.
Inputs
emailstringrequired- Email address to invite to the workspace.
rolestringrequired- Role to assign to the invited user.one of
memberadmin
excalidrawmcp_create_invite_linkCreate a reusable workspace invite link with optional usage and domain restrictions.WriteCreate Invite Link
Create a reusable workspace invite link with optional usage and domain restrictions.
Inputs
rolestringrequired- Role to assign to users who accept the invite link.one of
memberadmin maxUsesstring- Maximum number of times the link can be used. Use 'unlimited' for no limit.
restrictedDomainsarray- List of email domains allowed to use this invite link.
excalidrawmcp_create_sceneCreate a new scene in the workspace within a specified collection.WriteCreate Scene
Create a new scene in the workspace within a specified collection.
Inputs
collectionIdstringrequired- ID of the collection to place the new scene in.
namestringrequired- Name for the new scene.
pinnedbooleanrequired- Whether to pin the scene to the top of the scene list.
excalidrawmcp_edit_scene_contentAdd, update, and delete scene elements using valid Excalidraw element format.WriteEdit Scene Content
Add, update, and delete scene elements using valid Excalidraw element format. Before first use, call read_excalidraw_format. Do not include ids in add. Use tempId for same-request references. Bind arrows explicitly with startBinding/endBinding.
Inputs
sceneIdstringrequired- ID of the scene to edit.
addstring- JSON array string of new Excalidraw element skeletons to add. Do not include 'id'. Use tempId for same-request references.
deletearray- Array of element IDs to remove from the scene.
updatestring- JSON array string of element patches; each patch must include 'id' and the properties to change.
excalidrawmcp_update_collectionUpdate the name of an existing collection.WriteUpdate Collection
Update the name of an existing collection.
Inputs
collectionIdstringrequired- The unique identifier of the collection to update.
namestringrequired- New name for the collection.
excalidrawmcp_update_inviteModify the settings of an existing workspace invitation such as the email, role, or max uses.WriteUpdate Invite
Modify the settings of an existing workspace invitation such as the email, role, or max uses.
Inputs
inviteIdstringrequired- The unique identifier of the workspace invitation to update.
emailstring- Updated email address for the invitation.
maxUsesinteger- Maximum number of times this invite link can be used.
rolestring- The workspace role to assign to the invitee upon acceptance.one of
memberadmin
excalidrawmcp_update_sceneUpdate metadata fields of an existing scene such as its name, pinned status, or collection.WriteUpdate Scene
Update metadata fields of an existing scene such as its name, pinned status, or collection.
Inputs
sceneIdstringrequired- The unique identifier of the scene to update.
collectionIdstring- New collection ID to move the scene to.
namestring- New name for the scene.
pinnedboolean- Whether the scene should be pinned to the top of the scene list.
excalidrawmcp_update_workspaceModify workspace-level settings such as name and picture.WriteUpdate Workspace
Modify workspace-level settings such as name and picture.
Inputs
namestring- New name for the workspace.
picturestring- URI for the workspace picture, or null to remove the current picture.
excalidrawmcp_update_workspace_userModify workspace-level properties for a specific user such as their name, picture, or role.WriteUpdate Workspace User
Modify workspace-level properties for a specific user such as their name, picture, or role.
Inputs
userIdstringrequired- The unique identifier of the workspace user to update.
namestring- Updated display name for the user.
picturestring- URI for the user's picture, or null to remove the current picture.
rolestring- The workspace role to assign to the user.one of
memberadmin
excalidrawmcp_delete_collectionSoft-delete a collection by moving it to trash.DestructiveDelete Collection
Soft-delete a collection by moving it to trash. Scenes within the collection are not deleted.
- Idempotent
Inputs
collectionIdstringrequired- The unique identifier of the collection to delete.
excalidrawmcp_delete_inviteCancel and delete a pending workspace invitation.DestructiveDelete Invite
Cancel and delete a pending workspace invitation.
- Idempotent
Inputs
inviteIdstringrequired- The unique identifier of the workspace invitation to cancel and delete.
excalidrawmcp_remove_workspace_userRemove a user from the workspace.DestructiveRemove Workspace User
Remove a user from the workspace. This does not delete their Excalidraw+ account.
- Idempotent
Inputs
userIdstringrequired- The unique identifier of the workspace user to remove.
No tools match.