protogrid

Search / io.github.tldraw/tldraw

tldraw

R0· no sign-in

Draw and visually collaborate with your agents on tldraw's canvas.

v0.1.0 · active · repository · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality88good
Trust83of 100
Uptime, 30 days96%
Latency p50172 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "tldraw": {
      "type": "http",
      "url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
    }
  }
}
claude mcp add --transport http tldraw https://tldraw-mcp-app.tldraw.workers.dev/mcp
[mcp_servers.tldraw]
url = "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tldraw": {
      "type": "remote",
      "url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "tldraw": {
      "type": "http",
      "url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=tldraw&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vdGxkcmF3LW1jcC1hcHAudGxkcmF3LndvcmtlcnMuZGV2L21jcCJ9"
}
{
  "servers": {
    "tldraw": {
      "type": "http",
      "url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
    }
  }
}
{
  "mcpServers": {
    "tldraw": {
      "httpUrl": "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
    }
  }
}
extensions:
  "tldraw":
    enabled: true
    name: "tldraw"
    type: streamable_http
    uri: "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
    timeout: 300

Quality 88 / 100good

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene93 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length1 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations6 of 6 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • pass
    tools.token_costabout 1,190 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changesno tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

6 tools, about 1,190 tokens to load them all · tool set 42221eb757fc · checked 2026-10-19 15:48 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 83 / 100

provenance80
liveness99
freshness45
hygiene100

+repository +namespace-matches-repo +reachable +uptime-96% -stale-227d

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://tldraw-mcp-app.tldraw.workers.dev/mcp streamable-httpnoneyes96%172 ms2025-11-252026-10-19
https://tldraw-mcp-app.tldraw.workers.dev/sse ssenoneyes92%179 ms2025-11-252026-10-19

Tools (6)

execExecute JavaScript code on a tldraw canvas. The code runs in the widget with access to the live `editor` instance, helper functions, and normal js. Use the `search` tool first to discover available Editor methods and shape types. Each canvas has a unique `canvasId`. Omit `canvasId` to create a new blank canvas. To edit an existing canvas, pass the `canvasId` that was returned by a previous exec call. Shapes and text grow depending on the amount of text they have. Use clever scripting to ensure there are no unintended overlaps. Examples: - Create a rectangle: editor.createShape({ _type: 'rectangle', shapeId: 'box1', x: 200, y: 120, w: 320, h: 180, text: 'Hello' }) - Connect shapes with an arrow: editor.createShape({ _type: 'arrow', shapeId: 'a1', fromId: 'box1', toId: 'box2', x1: 0, y1: 0, x2: 100, y2: 0 }) - Select and zoom: editor.select('box1'); editor.zoomToSelection() - Read shapes: return editor.getCurrentPageShapes() - Distribute evenly: editor.distributeShapes(editor.getSelectedShapeIds(), 'horizontal') - Box around shapes: boxShapes(['box1', 'box2'], { text: 'Group label', color: 'blue' }) - Stack shapes dynamically: editor.createShape({ _type: 'rectangle', shapeId: 'a', x: 0, y: 0, w: 300, h: 200, text: 'First box\nwith wrapping text' }); const bounds = editor.getShapePageBounds('a'); editor.createShape({ _type: 'rectangle', shapeId: 'b', x: 0, y: bounds.maxY + 20, w: 300, h: 200, text: 'Below first' })
_exec_callbackApp-only: widget calls this to resolve a pending exec request.
_get_canvas_stateread-onlyApp-only: get the latest checkpoint for a canvas by its canvasId.
read_checkpointread-onlyApp-only: read shapes from a checkpoint by ID.
save_checkpointApp-only: save shapes to a checkpoint (from user edits). shapesJson and assetsJson must be JSON array strings.
searchread-onlySearch the tldraw Editor API spec by writing JavaScript that receives a `spec` object and returns a result. The spec contains: spec.members (all Editor methods/properties with name, kind, signature, description, category), spec.categories (category names), spec.types.shapes (focused shape type definitions with props), spec.types.shapeTypes (list of all shape type strings), spec.helpers (exec helper functions with descriptions, params, examples). Examples: - Find shape methods: return spec.members.filter(m => m.category === "shapes").map(m => ({ name: m.name, signature: m.signature })) - Get arrow shape props: return spec.types.shapes.find(s => s.shapeType === "arrow") - List all categories: return spec.categories - Find a helper: return spec.helpers.find(h => h.name === "createArrowBetweenShapes")

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "io.github.tldraw/tldraw",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp",
      "type": "streamable-http"
    },
    {
      "url": "https://tldraw-mcp-app.tldraw.workers.dev/sse",
      "type": "sse"
    }
  ],
  "version": "0.1.0",
  "repository": {
    "url": "https://github.com/tldraw/tldraw",
    "source": "github",
    "subfolder": "apps/mcp-app"
  },
  "description": "Draw and visually collaborate with your agents on tldraw's canvas."
}