{"ok":true,"site":{"host":"material.sc","url":"https://material.sc/webmcp-demo","type":"live","desc":"A live Material canvas that exposes WebMCP tools. Open it in an agent browser and ask your agent to read, create, and arrange cards with you.","tools":[{"name":"get_current_canvas","kind":"answer","impl":"imperative","description":"Return this Material canvas: its space, the canvas bounds, and EVERY card in the space with its placement ({x,y} or null when not yet placed). A blank canvas with unplaced cards is your cue to organize: read the cards, group them by theme, then place each theme as a spatial cluster (see place_cards_on_canvas). unplacedCardIds lists what still needs a home.","title":"Get current Material canvas","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp-demo","pages":["/webmcp-demo"]},{"name":"get_selected_cards","kind":"answer","impl":"imperative","description":"Return the cards the user selected on the current Material canvas. Use this when the user says these, this group, selected cards, or cards I pointed at.","title":"Get selected Material cards","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp-demo","pages":["/webmcp-demo"]},{"name":"find_cards","kind":"answer","impl":"imperative","description":"Search the user's Material cards by keyword. Scope to the current canvas by passing its spaceId when the user asks about this canvas only.","title":"Find Material cards","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Keyword query. Empty returns recent cards."},"spaceId":{"type":"string","description":"Optional Material space id. Use the current canvas id to search only here."},"limit":{"type":"number","minimum":1,"maximum":25,"default":10}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp-demo","pages":["/webmcp-demo"]},{"name":"fetch_card_content","kind":"answer","impl":"imperative","description":"Fetch one Material card with its full captured markdown when available. Use this after get_selected_cards or find_cards when excerpt, title, and metadata are not enough to answer the user.","title":"Fetch Material card content","annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"itemId":{"type":"string","description":"Material card/item id."}},"required":["itemId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp-demo","pages":["/webmcp-demo"]},{"name":"create_card","kind":"act","impl":"imperative","description":"Create a URL reference or an editable note in Material. Use a note for any synthesized or authored writing (it is editable by you and the user); use url for an external reference. When organizing a canvas by theme, create one note per theme as a cluster header and give it a placement above its cluster. Demo canvas — the change is visible live but ephemeral (resets on reload).","title":"Create Material card","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true},"inputSchema":{"type":"object","properties":{"kind":{"type":"string","enum":["url","note"]},"url":{"type":"string","description":"Required when kind is url."},"text":{"type":"string","description":"The note body. Required when kind is note."},"title":{"type":"string"},"annotation":{"type":"string"},"spaceId":{"type":"string","description":"Optional Material space id. Defaults should usually be the current canvas id."},"placement":{"type":"object","description":"Canvas coordinates for the new card. Omit to auto-place at a free spot below the board (the card ALWAYS appears on the canvas).","properties":{"spaceId":{"type":"string","description":"Optional; the demo has one canvas."},"x":{"type":"number"},"y":{"type":"number"}},"required":["x","y"],"additionalProperties":false}},"required":["kind"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp-demo","pages":["/webmcp-demo"]},{"name":"place_card_on_canvas","kind":"act","impl":"imperative","description":"Add an existing Material card to a canvas and place it at x/y coordinates. Use this to arrange search results or synthesis notes beside selected cards. Demo canvas — the change is visible live but ephemeral (resets on reload).","title":"Place card on Material canvas","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"itemId":{"type":"string"},"spaceId":{"type":"string","description":"Material space/canvas id."},"x":{"type":"number"},"y":{"type":"number"}},"required":["itemId","spaceId","x","y"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp-demo","pages":["/webmcp-demo"]},{"name":"place_cards_on_canvas","kind":"act","impl":"imperative","description":"Place multiple existing cards in one call — the efficient way to lay out a whole canvas. Each entry is {itemId, x, y} in canvas coordinates. Use after grouping cards into themes: put each theme's cards in a tight grid cluster, leave a gap between clusters, and add a note header above each cluster with create_card. Bounds, card width, and suggested gap come from get_current_canvas. Demo canvas — the change is visible live but ephemeral (resets on reload).","title":"Place many Material cards on the canvas","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"placements":{"type":"array","minItems":1,"items":{"type":"object","properties":{"itemId":{"type":"string","description":"The card's id from get_current_canvas (its `id` field, not `spaceCardId`)."},"x":{"type":"number"},"y":{"type":"number"}},"required":["itemId","x","y"],"additionalProperties":false}}},"required":["placements"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp-demo","pages":["/webmcp-demo"]},{"name":"edit_card","kind":"act","impl":"imperative","description":"Edit user-authored fields on a Material card. title and annotation work on any card; noteText only works on note cards and does not mutate captured source text. Demo canvas — the change is visible live but ephemeral (resets on reload).","title":"Edit Material card","annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":false},"inputSchema":{"type":"object","properties":{"itemId":{"type":"string"},"title":{"type":"string"},"annotation":{"type":"string"},"noteText":{"type":"string","description":"Plain text body for note cards only."}},"required":["itemId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/webmcp-demo","pages":["/webmcp-demo"]}],"category":"Productivity & Business","favicon":"/favicons/material.sc.png","apiSurface":"spec","toolCount":8}}