Skip to main content
Glama

excalidraw-room-mcp

An MCP server that joins a live Excalidraw collaboration room as a headless participant, so an AI agent can read what you draw and draw back, in the same canvas, in real time.

You draw on excalidraw.com as normal. The agent sees your boxes, arrows, text and freehand strokes, and its edits appear on your screen as it makes them. No credits, no export step, no browser automation.

Why

The official excalidraw-mcp renders a drawing inside the chat window. That is one-way: the agent draws, you look. This server is the other direction. It attaches to a drawing you already have open and keeps both sides in sync.

It works because Excalidraw's collaboration protocol is open. The relay server (excalidraw-room) forwards encrypted blobs between participants and never sees plaintext. The collaboration link carries the room id and the AES key, so anyone holding the link can join, decrypt, and take part. This server does exactly that.

Related MCP server: Excalidraw MCP Server

Install

Requires Node 22 or newer.

git clone https://github.com/bjcoombs/excalidraw-room-mcp.git
cd excalidraw-room-mcp
npm install
npm run build

Register with Claude Code:

claude mcp add excalidraw-room -- node /absolute/path/to/excalidraw-room-mcp/dist/index.js

Or with any other MCP client that speaks stdio, using the same command.

Use

  1. On excalidraw.com, click Live collaboration, then Start session, and copy the link. It looks like https://excalidraw.com/#room=<id>,<key>.

  2. Ask the agent to join it: "join this excalidraw room: ".

  3. Draw. Ask the agent what it sees, or ask it to add things.

Or the other way round: ask the agent to create a room, and open the link it gives you.

Tools

Tool

What it does

create_room

Make a new empty room, join it, return the link to open.

join_room

Join a room from its link. Loads the scene from a peer, or from the persisted copy if nobody else is there.

room_status

Connection state, peers, element counts.

read_scene

The drawing as one line per element (default), or the full element JSON. Freehand strokes come back as a sampled path so a scribble is legible.

add_elements

Add shapes, text, arrows, lines and freehand strokes from compact specs. Arrows bind to element ids; edge points are computed.

add_raw_elements

Add complete Excalidraw elements verbatim, for example from an .excalidraw file.

update_elements

Patch elements by id. Versions are bumped so peers accept the change.

delete_elements

Soft-delete by id.

leave_room

Disconnect.

Example

add_elements:
  - {type: rectangle, id: api, x: 0,   y: 0, width: 160, height: 80, label: "API"}
  - {type: ellipse,   id: db,  x: 320, y: 0, width: 160, height: 80, label: "Postgres"}
  - {type: arrow, start: api, end: db, label: "query"}

read_scene afterwards:

api rectangle @(0,0) 160x80 "API"
db ellipse @(320,0) 160x80 "Postgres"
Kp3... arrow 2 pts: (156,40) -> (324,40) from api to db "query"

How it works

  • Transport: socket.io to https://oss-collab.excalidraw.com, the relay excalidraw.com uses. The public relay rejects handshakes that do not carry an Origin: https://excalidraw.com header, so the client sends one. Override serverUrl and origin on join_room to point at a self-hosted excalidraw-room.

  • Encryption: AES-128-GCM with the key from the link, matching packages/excalidraw/data/encryption.ts upstream. Implemented on Node's WebCrypto so the server does not depend on the browser-oriented @excalidraw/excalidraw package.

  • Merging: Excalidraw's reconcile rule, per element id: higher version wins, ties go to the lower versionNonce. Local edits bump both, exactly as the web app does, so peers accept them.

  • Z-order: fractional indices via the same fractional-indexing library upstream uses. New elements go on top.

  • Persistence: excalidraw.com keeps each room's encrypted scene in a public Firestore document. On joining an empty room the server reads it. After every write it saves the reconciled scene back, conditional on the document's update time, so a stale copy never overwrites a newer one. On a conflict it reloads, reconciles, and retries once. If the save still fails, the change has already reached connected peers and their browsers persist it on their normal schedule.

Limits

  • Images and other file attachments are out of scope. They travel by a separate path and are not needed for diagrams.

  • Text is measured by approximation, not a real font. Labels may be slightly wider or narrower than the web app would make them; the app re-measures on the next edit.

  • The public relay is not a documented API for third parties. The protocol is open source and stable in practice, but nobody has promised to keep it that way.

  • One room per server process. Run a second instance for a second room.

Security

The room key is the only secret, and it is in the link. The server uses it locally to encrypt and decrypt; it is never sent anywhere. Treat collaboration links as you would a password to that drawing.

Development

npm test          # build + unit tests
EXCALIDRAW_ROOM_DEBUG=1 node dist/index.js   # run with diagnostics on stderr

License

MIT. Excalidraw itself is MIT, and the protocol details here are derived from its source.

Available Tools

9 tools
add_elementsB

Add elements to the drawing from compact specs. Shapes take x, y, width, height and an optional label. Arrows take start/end element ids (edges are computed) or absolute points. Later specs may reference ids of earlier specs in the same call.

ParametersJSON Schema
NameRequiredDescriptionDefault
elementsYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavior disclosure and does add useful traits: shapes vs arrows, computed edges, and same-call id references. It doesn't cover side effects, return value, or error behavior, but it is not misleading.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, followed by compact usage rules. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the large element schema, sibling add_raw_elements, no annotations, and no output schema, this description is too thin to fully orient an agent. It omits return behavior, handling of other element types (text, diamond, freedraw), and when to prefer add_raw_elements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema coverage for the elements parameter is 0%, the description clarifies which properties apply to shapes and arrows and explains the id-reference mechanism. It does not explain the many styling/text/freedraw properties, leaving part of the semantics to the schema's inline property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear action ('Add elements to the drawing') and immediately explains the compact-spec concept. It doesn't explicitly differentiate from the sibling add_raw_elements, but the 'compact specs' phrasing hints at the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives no when-to-use guidance or alternatives; the only differentiation from add_raw_elements is implied by 'compact specs'. No prerequisites, exclusions, or conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_raw_elementsA

Add complete Excalidraw elements verbatim (the JSON shape from an .excalidraw file). Missing version fields are filled in; fractional indices are assigned if absent.

ParametersJSON Schema
NameRequiredDescriptionDefault
elementsYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral transparency burden. It usefully discloses two non-obvious behaviors: missing version fields are filled in and fractional indices are assigned when absent. It does not mention side effects like merge/replace behavior or return values, but the disclosed normalization details are valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence that front-loads the action and resource, followed by precise normalization details. Every clause adds information, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter action with no output schema, the description covers the essential input semantics and behavior. It lacks explicit sibling differentiation and return-value details, but the low complexity means the description is largely sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema only states that 'elements' is an array of objects. The description compensates strongly by specifying the exact expected format: complete Excalidraw elements as represented in an .excalidraw file, and by explaining how missing fields are handled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Add complete Excalidraw elements verbatim') and the expected source format ('.excalidraw file'), which is specific and unambiguous. It does not explicitly differentiate from the sibling add_elements, though the word 'raw' and 'verbatim' hint at the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for importing exact Excalidraw JSON shapes, but it does not explicitly state when to use add_raw_elements versus add_elements or other siblings. It gives enough context for a reasonable agent to infer the use case, but no direct alternatives or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_roomA

Create a new empty live-collaboration room, join it, and return the excalidraw.com link for a person to open. The link contains the encryption key; share it only with people who should see the drawing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral transparency burden. It discloses the side effects (creating, joining, returning a link), and adds a meaningful security caution about the embedded encryption key. It does not mention persistence or expiration, but that is not essential for an agent to invoke it correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences deliver the action, outcome, and an important security caveat. There is no filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and no output schema, the description covers the essential behavior, the return value, and the security consideration. Nothing critical is missing for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema coverage is 100%, so there are no parameter semantics to document. The description appropriately adds context about what the returned link is and how it should be handled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Create a new empty live-collaboration room'), what happens ('join it'), and the outcome ('return the excalidraw.com link'). This distinguishes it from sibling tools like join_room and room_status with no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Create a new empty...' clearly indicates when this tool is appropriate: when starting a fresh room is needed. It does not explicitly name alternatives or exclusions, but the contrast with siblings like join_room is clear enough for an agent to choose correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_elementsA

Soft-delete elements by id (Excalidraw keeps tombstones so peers converge).

ParametersJSON Schema
NameRequiredDescriptionDefault
idsYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It discloses that deletion is soft and that Excalidraw keeps tombstones for peer convergence. This is meaningful beyond simply saying 'delete', though it does not cover reversibility, permissions, or what happens to tombstoned elements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the action and target, and includes a concise parenthetical explanation of the tombstone behavior. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with no output schema, the description covers what the tool does, the target resource, and the important soft-delete side effect. It is mostly complete, though explicit usage exclusions and note about response/return behavior would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only defines an 'ids' array of strings; the description clarifies these are element ids being soft-deleted. Since schema description coverage is 0%, this is some compensation, but it does not explain id format, behavior for missing ids, or whether all ids must be valid.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Soft-delete elements by id'. It also clarifies the deletion mode (soft vs hard) and clearly differentiates itself from sibling tools like add_elements, update_elements, and read_scene.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for removing elements, and the 'soft-delete' phrasing hints that it should be used when tombstones/peer convergence are desired. However, it does not explicitly state when to use this tool versus alternatives, when not to use it, or any prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

join_roomA

Join an existing excalidraw.com live-collaboration room from its link (the URL with #room=,). Loads the current scene from a connected peer, or from the room's persisted copy if nobody else is present.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkYesCollaboration link, e.g. https://excalidraw.com/#room=abc...,key...
originNoOrigin header to present to the relay. Defaults to https://excalidraw.com, which the public relay requires.
serverUrlNoRelay URL. Defaults to excalidraw.com's public relay.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the transparency burden. It discloses that joining loads the scene from a connected peer or the room's persisted copy, and implicitly involves a relay. However, it does not mention connection lifetime, whether joining has side effects on the collaboration session, or failure behavior—gaps that matter for a tool without annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no fluff. The first sentence states purpose and required input, the second explains the loading behavior. Every word earns its place, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description partially explains what the tool produces by stating it loads the current scene. It covers the core input and behavior adequately. It lacks explicit return format and side-effect details, but for a joining tool with clear semantics this is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces the 'link' parameter with the #room=<id>,<key> format, but the schema already provides a similar example. No additional semantic value is added for origin or serverUrl beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the specific operation: joining an existing excalidraw.com live-collaboration room via its link. The description also differentiates from siblings by emphasizing 'existing' room, setting it apart from create_room, and by focusing on joining rather than leaving, reading, or modifying elements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context that this tool is for joining a room from its link and explains what happens on join (loads scene from peer or persisted copy). It does not explicitly name alternatives or give when-not-to-use guidance, but the behavior and link prerequisite effectively imply the intended use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leave_roomA

Disconnect from the current room.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It clearly states the core effect (disconnect from the current room), but does not disclose side effects such as whether the room is deleted, whether other members are notified, or whether the action is reversible. This is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: five words, no filler, and the action verb is front-loaded. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter tool with no output schema, the description covers the essential call behavior. However, it lacks context about when to use it relative to sibling tools and what happens after leaving, so it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description has no parameter meaning to add. Baseline for zero-parameter tools is 4, and no further parameter documentation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Disconnect') and resource ('the current room'), making the purpose clear. It is implicitly distinguishable from siblings like create_room and join_room, though it does not explicitly contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives. There is no mention of prerequisites such as needing to be in a room first, or that this tool should be called before ending a session.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_sceneA

Read the current drawing. 'summary' gives one line per element with position, size, text, and a sampled path for freehand strokes. 'json' returns the full Excalidraw element array.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNosummary
includeDeletedNo

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the burden of behavioral disclosure. It transparently explains the two output formats: 'summary' returns per-element one-line descriptions and 'json' returns the full element array. However, it does not mention prerequisites such as active room membership or explicitly state the read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the core purpose front-loaded and the format details following. Every sentence adds value, with no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a lightweight read tool with two optional parameters and no output schema, the description covers the primary invocation choice (format) and the return shape. The missing includeDeleted semantics is a minor gap since the parameter name is self-explanatory, but there is no mention of room context requirements. Overall it is adequate and mostly self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description alone must clarify parameters. It does so for 'format' by detailing exactly what 'summary' and 'json' return, but it never explains 'includeDeleted' or its default. Thus only half the parameters receive semantic enrichment.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Read the current drawing,' a specific verb and resource, and clearly distinguishes it from the sibling room-management and element-mutation tools. It unambiguously identifies the tool as the scene-reading operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool – whenever the agent needs to inspect the current drawing. It does not explicitly name alternatives, but no sibling performs a similar read operation, so exclusions are less critical. A clear invitation to read the drawing suffices.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

room_statusA

Connection state, peers, and scene counters for the current room.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. 'Status', 'state', and 'counters' strongly imply a read-only snapshot, but the description does not explicitly confirm side-effect-free behavior or mention prerequisites such as requiring an active room. This is adequate but not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is one short, front-loaded sentence with no filler. It immediately lists the key data categories and the scope ('current room'), so every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless status tool with no output schema, the description covers the essential return categories at a high level and the meaningful context ('current room'). It could additionally explain how the current room is determined or what the counters count, but the information needed to choose and invoke the tool is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty with zero parameters, so there is nothing for the description to explain. The baseline for a parameterless tool is 4, and the description correctly avoids inventing parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (current room) and the data categories returned (connection state, peers, scene counters), making it distinct from room lifecycle and scene mutation siblings. However, it is a noun phrase with no explicit verb such as 'returns' or 'gets,' so it stops short of the strongest purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The content implies the tool is for checking the current room's runtime status, but the description never states when to use it or contrasts it with alternatives like read_scene. There is no explicit when/when-not guidance, only an inferred use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_elementsA

Patch existing elements by id. 'set' is merged over the element; version and nonce are bumped. Changing 'text' or 'fontSize' on a text element re-measures it unless width/height are given.

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full disclosure burden and delivers: merge semantics ('set' is merged, not replaced), side effects (version and nonce are bumped), and the conditional re-measurement behavior when text/fontSize change without width/height. Minor gaps remain around error behavior and return values, but the core mutation traits are well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero filler. The primary action is front-loaded, and each behavioral caveat (version/nonce bump, re-measurement) earns its place as a side effect an agent must know before invoking.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Strong on the topics it covers, but with no output schema and no annotations the description omits the return value, behavior when an id does not exist, and any scene/room preconditions. For a mutation tool these are meaningful gaps, though the core call mechanics are adequately specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and largely does: it explains that 'set' is merged over the element and documents the special keys (text, fontSize, width, height) and their interaction. The id parameter's meaning is covered by 'by id'. Enumerating all valid set keys would be impractical since set is free-form.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Patch existing elements by id') and discloses the mechanism ('set' is merged). The patch semantics clearly distinguish it from siblings like add_elements and delete_elements without needing to inspect schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The word 'existing' implies the tool is for elements already present rather than new ones, giving implicit separation from add_elements. However, there is no explicit when-to-use or when-not-to-use guidance, and no alternative tools are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observedadd_elements
    • First observedadd_raw_elements
    • First observedcreate_room
    • First observeddelete_elements
    • First observedjoin_room
    • First observedleave_room
    • First observedread_scene
    • First observedroom_status
    • First observedupdate_elements

TDQS

A3.8/5.0
Disambiguation4/5

Room lifecycle tools and scene editing tools are clearly separated, and each operation has a distinct role. The only minor overlap is between add_elements and add_raw_elements, but their descriptions make the input-format distinction clear.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern: create_room, join_room, leave_room, read_scene, add_elements, update_elements, delete_elements. The outlier is room_status, which uses a noun-only name instead of something like get_room_status.

Tool Count5/5

Nine tools is well-scoped for a room-based live collaboration server. Each tool covers a necessary lifecycle or scene-editing action without unnecessary redundancy or bloat.

Completeness4/5

The toolset covers room creation, joining, status, leaving, and full scene read/add/update/delete operations. Minor gaps exist, such as no explicit room-close or clear-scene operation, but the core collaboration workflow is complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI agents to programmatically control a live Excalidraw canvas through element-level CRUD operations and real-time synchronization. It allows agents to iteratively build, inspect, and refine diagrams while providing visual feedback via screenshots and scene descriptions.
    1,972
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to programmatically control a live Excalidraw canvas with element-level CRUD operations and real-time synchronization. It supports iterative diagramming through scene descriptions, screenshots, and advanced layout tools for collaborative AI-human workflows.
    1,972
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bjcoombs/excalidraw-room-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server