Skip to main content
Glama

show_room

Render the current Excalidraw collaboration room as a canvas in chat and return its link, connection state, peer and element counts, plus pending mentions with nearby element ids.

Instructions

Render the current room as a canvas in the chat. Returns a short summary as text - the room link, connection state, peer and element counts, and the pending mentions addressed to this agent with the ids of the elements around each. The canvas view fetches the elements for itself, so they never pass through this result unless you ask: pass include: "json" only if you need the element array in the text; read_scene with ids or near is the cheaper way to inspect elements. Pass link only to render a room this server is not in - it is read from a read-only viewer and the current room is untouched; without it the current room is used, which is what you want. The in-chat view depends on the host; prefer open_room to watch the canvas.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tagNoText a note must contain to count as a mention. Omit it and this server answers to its own handle - "@<handle>", the handle room_status reports - and to "@claude", the broadcast tag every agent in the room hears; matching is case-insensitive. Pass a tag to match that text alone, which is how you read notes addressed to someone else.
linkNoCollaboration link of the room to render. The canvas view sends the link it was seeded with, because some hosts route the view's calls to a server process other than the one its conversation uses. A link for another room is served from a read-only viewer: this server stays in the room it is working in, and room_status lists the viewers it holds. Leave it unset: the model's own calls should use the room already joined.
radiusNoHow far around each mention to look for related elements, in canvas px. Defaults to the room's nearbyRadius.
includeNoWhat the text content carries. 'summary' (default) is a few lines; 'json' is the whole payload, which for a 35-element scene is roughly 10k tokens. The canvas view asks for 'json' itself, so the default keeps the elements out of the conversation.summary

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.8.1
    • changedInput schema / properties / link / description
      Previous value: -"Collaboration link to join first if this server is in no room, or in a different one. The canvas view sends the link it was shown, because some hosts route the view's calls to a second server process that has joined nothing. Leave it unset: the model's own calls should use the room already joined."New value: +"Collaboration link of the room to render. The canvas view sends the link it was seeded with, because some hosts route the view's calls to a server process other than the one its conversation uses. A link for another room is served from a read-only viewer: this server stays in the room it is working in, and room_status lists the viewers it holds. Leave it unset: the model's own calls should use the room already joined."
  2. Changed4 schema fields changedv0.7.1
    • removedInput schema / properties / radius / default
      Removed value: -250
    • changedInput schema / properties / radius / description
      Previous value: -"How far around each mention to look for related elements, in canvas px."New value: +"How far around each mention to look for related elements, in canvas px. Defaults to the room's nearbyRadius."
    • removedInput schema / properties / tag / default
      Removed value: -"@claude"
    • addedInput schema / properties / tag / description
      Added value: +"Text a note must contain to count as a mention. Omit it and this server answers to its own handle - \"@<handle>\", the handle room_status reports - and to \"@claude\", the broadcast tag every agent in the room hears; matching is case-insensitive. Pass a tag to match that text alone, which is how you read notes addressed to someone else."
  3. Changed2 schema fields changedv0.5.3
    • changedInput schema / properties / include / description
      Previous value: -"What the text content carries. 'summary' (default) is a few lines; 'json' is the whole payload, which for a 35-element scene is roughly 10k tokens. Either way the full payload is in the result's structured content."New value: +"What the text content carries. 'summary' (default) is a few lines; 'json' is the whole payload, which for a 35-element scene is roughly 10k tokens. The canvas view asks for 'json' itself, so the default keeps the elements out of the conversation."
    • addedInput schema / properties / link
      Added value: +{
      +  "description": "Collaboration link to join first if this server is in no room, or in a different one. The canvas view sends the link it was shown, because some hosts route the view's calls to a second server process that has joined nothing. Leave it unset: the model's own calls should use the room already joined.",
      +  "type": "string"
      +}
  4. Changed1 schema field changedv0.5.1
    • addedInput schema / properties / include
      Added value: +{
      +  "default": "summary",
      +  "description": "What the text content carries. 'summary' (default) is a few lines; 'json' is the whole payload, which for a 35-element scene is roughly 10k tokens. Either way the full payload is in the result's structured content.",
      +  "enum": [
      +    "summary",
      +    "json"
      +  ],
      +  "type": "string"
      +}
  5. Addedv0.4.0

TDQS

A4.8/5.0
Behavior5/5

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

No annotations are provided, so the description carries the full behavioral burden and does so: it discloses the return shape (link, connection state, peer/element counts, pending mentions), that the canvas fetches elements itself, that link renders via a read-only viewer leaving the current room untouched, and that the in-chat view is host-dependent. This is exactly the context a mutation-free but side-effecting render tool needs.

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

Conciseness4/5

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

Dense but front-loaded and purpose-first, with each later sentence tying to a specific parameter decision. It is on the long side and slightly repetitive in restating the canvas-fetches-elements point, keeping it short of a 5.

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?

With no output schema, the description fully describes the returned text content and corrects the likely misconception that elements flow through the result. Combined with the sibling routing, an agent has everything needed to call 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?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-cutting meaning: it explains the practical tradeoff of include:'json' (~10k tokens), frames link as the 'read a foreign room' switch, and notes tag is how you read notes addressed to others. This goes slightly beyond the per-parameter schema text.

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 ('Render the current room as a canvas in the chat') and distinguishes itself from siblings by naming read_scene and open_room as the tools for related-but-different jobs. An agent can tell what this does versus open_room or read_scene without opening a schema.

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

Usage Guidelines5/5

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

Explicit when-to-use rules and alternatives: prefer open_room to watch the canvas, use read_scene with ids or near for cheaper inspection, pass include:'json' only when the element array is needed, and pass link only for a room this server is not in. Conditions and exclusions are all stated.

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