{"ok":true,"site":{"host":"relay-research-canvas.carlid-dev.chatgpt.site","url":"https://relay-research-canvas.carlid-dev.chatgpt.site/b/bf03061315de47dca9fb3935","type":"live","desc":"An agent-native collaborative canvas built with tldraw and WebMCP.","tools":[{"name":"join_board","kind":"act","impl":"imperative","description":"Identify the agent collaborating on this board. Call this before inspecting or changing the canvas so every later action has durable, visible provenance.","title":"Join Relay board","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"Human-readable collaborator name, such as Canvas agent."},"id":{"type":"string","description":"Optional stable agent id reused across calls."},"color":{"type":"string","description":"Optional CSS color for collaborator presence."}},"required":["name"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/b/bf03061315de47dca9fb3935"},{"name":"inspect_canvas","kind":"act","impl":"imperative","description":"Read structured shape, text, bounds, selection, and connection data plus workflow-agnostic composition diagnostics. Use selection for the user’s active context, viewport for visible work, or page for the whole board. After changing a board, inspect again and resolve overlap or connector-crossing warnings before presenting it.","title":"Inspect Relay canvas","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"scope":{"type":"string","enum":["selection","viewport","page"],"default":"viewport","description":"Which part of the canvas to inspect."}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/b/bf03061315de47dca9fb3935"},{"name":"create_shapes","kind":"act","impl":"imperative","description":"Create up to 40 notes, text labels, rectangles, ellipses, or diamonds on the Relay canvas. Returns exact ids, actual rendered bounds, and immediate full-board composition diagnostics. Visible text can make notes and structured cards grow beyond requested dimensions, so always use the returned bounds for the next placement. For a readable composition, keep one idea per shape, keep new clusters near the existing board, use short text labels for hierarchy, use rectangles for structured cards, and reserve notes for compact annotations. If a connected group grows beyond four cards, arrange it before adding more.","title":"Create canvas shapes","inputSchema":{"type":"object","properties":{"shapes":{"type":"array","minItems":1,"maxItems":40,"items":{"type":"object","properties":{"id":{"type":"string","description":"Optional stable id without the shape: prefix."},"kind":{"type":"string","enum":["note","text","rectangle","ellipse","diamond"],"description":"Visual shape kind. Notes and text are content-sized; rectangles, ellipses, and diamonds accept explicit dimensions but may grow to keep text visible."},"x":{"type":"number","description":"Horizontal page coordinate."},"y":{"type":"number","description":"Vertical page coordinate."},"width":{"type":"number","minimum":40,"maximum":2000,"description":"Requested width for rectangles, ellipses, and diamonds. Read the returned bounds before placing nearby content."},"height":{"type":"number","minimum":40,"maximum":2000,"description":"Requested height for rectangles, ellipses, and diamonds. Text may increase the rendered height."},"text":{"type":"string","description":"Visible text inside the shape."},"textSize":{"type":"string","enum":["s","m","l","xl"],"description":"Visible text size. Use s for dense overviews and m for ordinary cards."},"color":{"type":"string","enum":["black","grey","blue","light-blue","green","light-green","yellow","orange","red","light-red","violet","light-violet"]}},"required":["kind","x","y"],"additionalProperties":false}}},"required":["shapes"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/b/bf03061315de47dca9fb3935"},{"name":"update_shapes","kind":"act","impl":"imperative","description":"Change position, size, text, or color for up to 40 existing unlocked shapes. Locked shapes are preserved and reported as skipped. Text edits can change rendered bounds even when dimensions are supplied. Returns immediate full-board composition diagnostics; use them to repair fit, spacing, and connector problems before continuing.","title":"Update canvas shapes","inputSchema":{"type":"object","properties":{"updates":{"type":"array","minItems":1,"maxItems":40,"items":{"type":"object","properties":{"id":{"type":"string","description":"A tldraw shape id returned by inspect_canvas, such as shape:abc123."},"x":{"type":"number","description":"Horizontal page coordinate."},"y":{"type":"number","description":"Vertical page coordinate."},"width":{"type":"number","minimum":40,"maximum":2000},"height":{"type":"number","minimum":40,"maximum":2000},"text":{"type":"string"},"textSize":{"type":"string","enum":["s","m","l","xl"]},"color":{"type":"string"}},"required":["id"],"additionalProperties":false}}},"required":["updates"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/b/bf03061315de47dca9fb3935"},{"name":"connect_shapes","kind":"act","impl":"imperative","description":"Create bound arrows between existing shapes. Connections stay attached when people move the shapes. Inspect existing relationships first and keep the graph sparse: preserve only relationships needed to explain the structure, remove obsolete or redundant arrows, and leave the label empty when direction or sequence is already clear. When a label adds meaning, use one short verb (ideally eight characters or fewer). Returns created ids plus immediate full-board composition diagnostics; resolve warnings before adding more relationships.","title":"Connect canvas shapes","inputSchema":{"type":"object","properties":{"connections":{"type":"array","minItems":1,"maxItems":30,"items":{"type":"object","properties":{"fromId":{"type":"string","description":"A tldraw shape id returned by inspect_canvas, such as shape:abc123."},"toId":{"type":"string","description":"A tldraw shape id returned by inspect_canvas, such as shape:abc123."},"label":{"type":"string","description":"Optional relationship label. Prefer one short verb; labels under eight characters remain legible in a board overview."},"color":{"type":"string"}},"required":["fromId","toId"],"additionalProperties":false}}},"required":["connections"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/b/bf03061315de47dca9fb3935"},{"name":"arrange_shapes","kind":"act","impl":"imperative","description":"Align, distribute, stack, pack, grid, or relationship-layout existing unlocked shapes while preserving content. Use layout-grid for balanced unconnected collections and layout-hierarchy for connected flows. Returns immediate full-board composition diagnostics so you can repair the layout before continuing.","title":"Arrange canvas shapes","inputSchema":{"type":"object","properties":{"shapeIds":{"type":"array","minItems":2,"items":{"type":"string","description":"A tldraw shape id returned by inspect_canvas, such as shape:abc123."}},"operation":{"type":"string","enum":["align-left","align-right","align-top","align-bottom","align-center-horizontal","align-center-vertical","distribute-horizontal","distribute-vertical","stack-horizontal","stack-vertical","pack","layout-grid","layout-hierarchy"]},"gap":{"type":"number","minimum":0,"maximum":500,"description":"Gap between peer shapes for stack, pack, grid, and hierarchy operations."},"columns":{"type":"number","minimum":1,"maximum":12,"description":"Column count for layout-grid. Defaults to a balanced square grid."},"direction":{"type":"string","enum":["right","down"],"description":"Reading direction for layout-hierarchy. Defaults to right."},"layerGap":{"type":"number","minimum":40,"maximum":800,"description":"Gap between relationship levels for layout-hierarchy."}},"required":["shapeIds","operation"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/b/bf03061315de47dca9fb3935"},{"name":"focus_shapes","kind":"act","impl":"imperative","description":"Move the Relay viewport to show specific shapes. If no ids are provided, fit the complete board in view.","title":"Focus canvas shapes","inputSchema":{"type":"object","properties":{"shapeIds":{"type":"array","items":{"type":"string","description":"A tldraw shape id returned by inspect_canvas, such as shape:abc123."},"default":[]}},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/b/bf03061315de47dca9fb3935"},{"name":"delete_shapes","kind":"transact","impl":"imperative","description":"Delete specified unlocked shapes from the Relay canvas. Bound unlocked arrows are removed with deleted content so the board does not retain dangling relationships. Locked shapes are never deleted. Returns removed connection ids and immediate full-board composition diagnostics. The action appears in Relay’s activity history and can be undone by the person.","title":"Delete canvas shapes","inputSchema":{"type":"object","properties":{"shapeIds":{"type":"array","minItems":1,"maxItems":40,"items":{"type":"string","description":"A tldraw shape id returned by inspect_canvas, such as shape:abc123."}}},"required":["shapeIds"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/b/bf03061315de47dca9fb3935"},{"name":"add_research_card","kind":"act","impl":"imperative","description":"Optional research workflow: add a labeled question, claim, source, or uncertainty card. Source cards may include a URL and concise evidence notes.","title":"Add a research card","inputSchema":{"type":"object","properties":{"kind":{"type":"string","enum":["question","claim","source","uncertainty"]},"title":{"type":"string","description":"Concise card headline."},"body":{"type":"string","description":"Evidence, rationale, or notes."},"url":{"type":"string","description":"Source URL when kind is source."},"x":{"type":"number","description":"Horizontal page coordinate."},"y":{"type":"number","description":"Vertical page coordinate."}},"required":["kind","title","x","y"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/b/bf03061315de47dca9fb3935"},{"name":"connect_evidence","kind":"act","impl":"imperative","description":"Optional research workflow: connect two cards with a visible supports, contradicts, context, or raises-question relationship.","title":"Connect research evidence","inputSchema":{"type":"object","properties":{"fromId":{"type":"string","description":"A tldraw shape id returned by inspect_canvas, such as shape:abc123."},"toId":{"type":"string","description":"A tldraw shape id returned by inspect_canvas, such as shape:abc123."},"relationship":{"type":"string","enum":["supports","contradicts","context","raises-question"]}},"required":["fromId","toId","relationship"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/b/bf03061315de47dca9fb3935"}],"category":"Productivity & Business","favicon":"/favicons/relay-research-canvas.carlid-dev.chatgpt.site.png","apiSurface":"spec","toolCount":10}}