Tool tree
gradeNot graded
get_current_canvasAnswer
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.
View tool JSON
{
"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.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"page": "/webmcp-demo"
}get_selected_cardsAnswer
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.
View tool JSON
{
"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.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"page": "/webmcp-demo"
}find_cardsAnswer
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.
View tool JSON
{
"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.",
"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
},
"page": "/webmcp-demo"
}fetch_card_contentAnswer
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.
View tool JSON
{
"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.",
"inputSchema": {
"type": "object",
"properties": {
"itemId": {
"type": "string",
"description": "Material card/item id."
}
},
"required": [
"itemId"
],
"additionalProperties": false
},
"page": "/webmcp-demo"
}create_cardAction
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).
View tool JSON
{
"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).",
"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
},
"page": "/webmcp-demo"
}place_card_on_canvasAction
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).
View tool JSON
{
"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).",
"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
},
"page": "/webmcp-demo"
}place_cards_on_canvasAction
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).
View tool JSON
{
"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).",
"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
},
"page": "/webmcp-demo"
}edit_cardAction
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).
View tool JSON
{
"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).",
"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
},
"page": "/webmcp-demo"
}