excalidraw-room-mcp
Server Quality Checklist
Latest release: v0.1.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/5Most 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/5Nine 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/5The 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.
Average 3.9/5 across 9 of 9 tools scored. Lowest: 3.2/5.
See the Tool Scores section below for per-tool breakdowns.
- No community issues in the last 6 months
- 2 commits in the last 12 weeks
- No stable releases found
- No critical vulnerability alerts
- No high-severity vulnerability alerts
- No code scanning findings
- CI is passing
This repository is licensed under MIT License.
This repository includes a README.md file.
No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.
Tip: use the "Try in Browser" feature on the server page to seed initial usage.
Add a glama.json file to provide metadata about your server.
If you are the author, simply .
If the server belongs to an organization, first add
glama.jsonto the root of your repository:{ "$schema": "https://glama.ai/mcp/schemas/server.json", "maintainers": [ "your-github-username" ] }Then . Browse examples.
Add related servers to improve discoverability.
How to sync the server with GitHub?
Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.
To manually sync the server, click the "Sync Server" button in the MCP server admin interface.
How is the quality score calculated?
The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).
Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.
Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).
Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.
Tool Scores
- 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/5Is 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/5Given 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/5Does 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/5Does 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/5Does 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.
- 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/5Is 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/5Given 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/5Does 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/5Does 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/5Does 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.
- 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/5Is 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/5Given 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/5Does 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/5Does 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/5Does 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.
- 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/5Is 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/5Given 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/5Does 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/5Does 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/5Does 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.
- 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/5Is 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/5Given 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/5Does 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/5Does 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/5Does 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.
- 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/5Is 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/5Given 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/5Does 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/5Does 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/5Does 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.
- 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/5Is 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/5Given 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/5Does 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/5Does 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/5Does 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.
- 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/5Is 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/5Given 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/5Does 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/5Does 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/5Does 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.
- 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/5Is 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/5Given 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/5Does 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/5Does 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/5Does 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.
GitHub Badge
Glama performs regular codebase and documentation scans to:
- Confirm that the MCP server is working as expected.
- Confirm that there are no obvious security issues.
- Evaluate tool definition quality.
Our badge communicates server capabilities, safety, and installation instructions.
Card Badge
Copy to your README.md:
Score Badge
Copy to your README.md:
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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