此 MCP 可以做什么
Creates and edits collaborative whiteboard diagrams, mind maps, flowcharts and freeform canvas elements using Mermaid or manual shapes.
工具
输入模式
{'type': 'object', 'required': ['elements'], 'properties': {'room_id': {'type': 'string', 'description': 'Room ID of an existing canvas to add to. If the user is continuing a canvas already referenced in this conversation (by room_id, or a URL like ?room=[room_id] or /gdrive?id=[room_id]), pass it here. Omit to create a new canvas.'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'required': ['x', 'y'], 'properties': {'x': {'type': 'number', 'description': 'X coordinate (defaults to 0 if omitted)'}, 'y': {'type': 'number', 'description': 'Y coordinate (defaults to 0 if omitted)'}, 'id': {'type': 'string', 'description': 'Unique element ID. IMPORTANT: Always set explicit IDs for shapes that arrows will connect to!'}, 'text': {'type': 'string', 'description': 'Text content. Required for type=text. For text elements and rectangle/ellipse/diamond shape labels, Supports the rich-text plugin HTML subset: <b>/<strong>, <i>/<em>, <u>, <br>, <div>/<p>, <ul>/<ol>/<li>, <a href>, <font color>, and <span style="color, background/background-color, font-size, font-family">. Use textAlign for left/center/right alignment; avoid unsupported HTML/CSS. Also used as arrow label when set on an arrow.'}, 'type': {'enum': ['rectangle', 'ellipse', 'diamond', 'arrow', 'line', 'freedraw', 'text', 'image'], 'type': 'string', 'description': 'Element type. Inferred from fields if omitted: text field â\x86\x92 text, points â\x86\x92 line, fileId â\x86\x92 image, else rectangle.'}, 'label': {'type': 'string', 'description': 'For type=arrow: text label displayed on the arrow'}, 'width': {'type': 'number', 'description': 'Width (default: 100; omit for text â\x80\x94 auto-sized)'}, 'height': {'type': 'number', 'description': 'Height (default: 100; omit for text â\x80\x94 auto-sized)'}, 'points': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'number'}}, 'description': 'Required for arrow/line/freedraw. Coordinates relative to element x,y. Example: [[0,0],[100,0]] for horizontal arrow.'}, 'opacity': {'type': 'number', 'description': 'Opacity 0-100 (default: 100)'}, 'fontSize': {'type': 'number', 'description': 'Font size (default: 20). Applies to text elements.'}, 'fillStyle': {'type': 'string', 'description': 'Fill style: solid, hachure, cross-hatch (default: solid)'}, 'roughness': {'type': 'number', 'description': 'Roughness: 0=architect, 1=artist, 2=cartoonist (default: 1)'}, 'endBinding': {'type': 'object', 'required': ['elementId', 'focus', 'gap'], 'properties': {'gap': {'type': 'number'}, 'focus': {'type': 'number'}, 'elementId': {'type': 'string'}}, 'description': 'For type=arrow: binds the arrow end to a shape. Use instead of or alongside points.'}, 'fontFamily': {'type': 'number', 'description': 'Font family: 5=Excalifont, 6=Nunito, 7=Lilita One, 8=Comic Shanns (default: 5). Applies to text elements.'}, 'containerId': {'type': 'string', 'description': 'For type=text: ID of the shape this text is bound to. Set x,y to 0,0 for auto-centering inside the shape.'}, 'strokeColor': {'type': 'string', 'description': 'Stroke color in hex (default: #1e1e1e)'}, 'strokeWidth': {'type': 'number', 'description': 'Stroke width (default: 2)'}, 'startBinding': {'type': 'object', 'required': ['elementId', 'focus', 'gap'], 'properties': {'gap': {'type': 'number'}, 'focus': {'type': 'number'}, 'elementId': {'type': 'string'}}, 'description': 'For type=arrow: binds the arrow start to a shape. Use instead of or alongside points.'}, 'backgroundColor': {'type': 'string', 'description': "Fill color in hex or 'transparent' (default: transparent)"}}, 'description': 'Per-type required fields: rectangle/ellipse/diamond â\x86\x92 x, y (width/height default to 100). text â\x86\x92 x, y, text (width/height auto-sized; omit or set to 0). rectangle/ellipse/diamond may also include text, which creates a bound label. arrow/line â\x86\x92 x, y, points (e.g. [[0,0],[100,0]]); optionally startBinding/endBinding instead of points. image â\x86\x92 x, y, width, height, fileId. freedraw â\x86\x92 x, y, points. type is inferred from fields if omitted (text field â\x86\x92 text, points â\x86\x92 line, fileId â\x86\x92 image, else rectangle).'}, 'description': 'Array of element definitions to create'}}}
输出模式
{'type': 'object', 'required': ['url', 'isNew', 'collabUrl', 'elements', 'appState'], 'properties': {'url': {'type': 'string', 'description': 'Canvas room URL'}, 'isNew': {'type': 'boolean', 'description': 'Whether a new canvas was created'}, 'room_id': {'type': 'string', 'description': 'Canvas room ID'}, 'appState': {'type': 'object', 'properties': {'viewBackgroundColor': {'type': 'string'}}, 'description': 'Canvas app state (viewBackgroundColor, etc.)', 'additionalProperties': True}, 'elements': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'All elements currently on the canvas'}, 'collabUrl': {'type': 'string', 'description': 'Collaboration server URL for Socket.IO'}}}
输入模式
{'type': 'object', 'required': ['mermaid'], 'properties': {'config': {'type': 'object', 'properties': {'flowchart': {'type': 'object', 'properties': {'curve': {'enum': ['basis', 'linear'], 'type': 'string', 'description': 'Edge curve style (handled server-side; no need to set explicitly).'}}}}, 'description': 'Optional Mermaid rendering config. flowchart.curve is handled automatically.'}, 'mermaid': {'type': 'string', 'description': 'Mermaid diagram definition. Prefer converting compatible user requests into Mermaid instead of using add_elements.'}, 'room_id': {'type': 'string', 'description': 'Room ID of an existing canvas to add to. If the user is continuing a canvas already referenced in this conversation (by room_id, or a URL like ?room=[room_id] or /gdrive?id=[room_id]), pass it here. Omit to create a new canvas.'}, 'timeout': {'type': 'number', 'default': 3600, 'description': 'Room lifetime in seconds (default: 3600, max: 86400). Only used when creating new canvas'}}}
输出模式
{'type': 'object', 'required': ['url', 'isNew', 'collabUrl', 'elements', 'appState'], 'properties': {'url': {'type': 'string', 'description': 'Canvas room URL'}, 'isNew': {'type': 'boolean', 'description': 'Whether a new canvas was created'}, 'room_id': {'type': 'string', 'description': 'Canvas room ID'}, 'appState': {'type': 'object', 'properties': {'viewBackgroundColor': {'type': 'string'}}, 'description': 'Canvas app state (viewBackgroundColor, etc.)', 'additionalProperties': True}, 'elements': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'All elements currently on the canvas'}, 'collabUrl': {'type': 'string', 'description': 'Collaboration server URL for Socket.IO'}, 'pendingMermaid': {'type': 'object', 'properties': {'config': {'type': 'object', 'additionalProperties': True}, 'definition': {'type': 'string', 'description': 'Mermaid diagram source'}}, 'description': 'Mermaid definition pending client-side rendering'}}}
输入模式
{'type': 'object', 'required': ['room_id', 'ids'], 'properties': {'ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Array of element IDs to delete'}, 'room_id': {'type': 'string', 'description': 'Room ID from a previous Canvs tool result. If you only have a URL, extract it from https://[host]/?room=[room_id] or https://[host]/gdrive?id=[room_id].'}}}
输出模式
{'type': 'object', 'required': ['url', 'isNew', 'collabUrl', 'elements', 'appState'], 'properties': {'url': {'type': 'string', 'description': 'Canvas room URL'}, 'isNew': {'type': 'boolean', 'description': 'Whether a new canvas was created'}, 'room_id': {'type': 'string', 'description': 'Canvas room ID'}, 'appState': {'type': 'object', 'properties': {'viewBackgroundColor': {'type': 'string'}}, 'description': 'Canvas app state (viewBackgroundColor, etc.)', 'additionalProperties': True}, 'elements': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'All elements currently on the canvas'}, 'collabUrl': {'type': 'string', 'description': 'Collaboration server URL for Socket.IO'}}}
输入模式
{'type': 'object', 'properties': {}}
输出模式
{'type': 'object', 'required': ['guide'], 'properties': {'guide': {'type': 'string', 'description': 'Tool usage instructions text'}}}
输入模式
{'type': 'object', 'required': ['room_id'], 'properties': {'type': {'enum': ['rectangle', 'ellipse', 'diamond', 'arrow', 'line', 'freedraw', 'text', 'image'], 'type': 'string', 'description': 'Filter by element type'}, 'filter': {'type': 'object', 'description': 'Additional key-value filters (e.g., {locked: true})'}, 'room_id': {'type': 'string', 'description': 'Room ID from a previous Canvs tool result. If you only have a URL, extract it from https://[host]/?room=[room_id] or https://[host]/gdrive?id=[room_id].'}}}
输出模式
{'type': 'object', 'required': ['count', 'elements'], 'properties': {'count': {'type': 'number', 'description': 'Number of matching elements'}, 'elements': {'type': 'array', 'description': 'Matching elements'}}}
输入模式
{'type': 'object', 'required': ['room_id', 'elements'], 'properties': {'room_id': {'type': 'string', 'description': 'Room ID from a previous Canvs tool result. If you only have a URL, extract it from https://[host]/?room=[room_id] or https://[host]/gdrive?id=[room_id].'}, 'elements': {'type': 'array', 'items': {'type': 'object', 'required': ['id'], 'properties': {'x': {'type': 'number', 'description': 'New X coordinate'}, 'y': {'type': 'number', 'description': 'New Y coordinate'}, 'id': {'type': 'string', 'description': 'ID of the element to update (required)'}, 'text': {'type': 'string', 'description': 'New text content. For text elements and rectangle/ellipse/diamond shape labels, Supports the rich-text plugin HTML subset: <b>/<strong>, <i>/<em>, <u>, <br>, <div>/<p>, <ul>/<ol>/<li>, <a href>, <font color>, and <span style="color, background/background-color, font-size, font-family">. Use textAlign for left/center/right alignment; avoid unsupported HTML/CSS. Shape text updates the bound label.'}, 'type': {'enum': ['rectangle', 'ellipse', 'diamond', 'arrow', 'line', 'freedraw', 'text', 'image'], 'type': 'string', 'description': 'New element type'}, 'width': {'type': 'number', 'description': 'New width'}, 'height': {'type': 'number', 'description': 'New height'}, 'locked': {'type': 'boolean', 'description': 'Lock/unlock the element'}, 'points': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'number'}}, 'description': 'New points array (for arrow/line/freedraw elements)'}, 'opacity': {'type': 'number', 'description': 'New opacity (0-100)'}, 'fontSize': {'type': 'number', 'description': 'New font size (for text elements)'}, 'fillStyle': {'type': 'string', 'description': 'New fill style (solid, hachure, cross-hatch)'}, 'roughness': {'type': 'number', 'description': 'New roughness (0=architect, 1=artist, 2=cartoonist)'}, 'fontFamily': {'type': 'number', 'description': 'New font family (5=Excalifont, 6=Nunito, 7=Lilita One, 8=Comic Shanns)'}, 'strokeColor': {'type': 'string', 'description': 'New stroke color (hex)'}, 'strokeWidth': {'type': 'number', 'description': 'New stroke width'}, 'backgroundColor': {'type': 'string', 'description': "New fill color (hex or 'transparent')"}}, 'description': 'Patch object: only id is required. Include only the fields you want to change.'}, 'description': 'Array of element updates (each must have id)'}}}
输出模式
{'type': 'object', 'required': ['url', 'isNew', 'collabUrl', 'elements', 'appState'], 'properties': {'url': {'type': 'string', 'description': 'Canvas room URL'}, 'isNew': {'type': 'boolean', 'description': 'Whether a new canvas was created'}, 'room_id': {'type': 'string', 'description': 'Canvas room ID'}, 'appState': {'type': 'object', 'properties': {'viewBackgroundColor': {'type': 'string'}}, 'description': 'Canvas app state (viewBackgroundColor, etc.)', 'additionalProperties': True}, 'elements': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': True}, 'description': 'All elements currently on the canvas'}, 'collabUrl': {'type': 'string', 'description': 'Collaboration server URL for Socket.IO'}}}
近期工具变更
类似的 MCP 服务器
cnvs.app
Creates and edits real-time collaborative whiteboards and kanban boards with text, links, images, drawings, columns, tasks, previ…
DocuQueue MCP
Creates templated PDFs and presentation decks, extracts branding, previews documents, and provides downloadable or shareable outp…
Renderball
Creates, edits, renders, previews, and shares presentation decks from outlines and submitted deck files.
getdeck
Searches slide layouts and themes, composes presentation decks, provides previews, and exports decks to PPTX.
tldraw
Creates, edits, searches, and persists collaborative diagrams and visual content on tldraw canvases.
slide-deck.io
Generates status and project reports or populates PowerPoint templates using connected data sources.
MindMap
Renders hierarchical outlines and notes as interactive mind maps.
IndianAppGuy-magicslide-mcp-actual-test
Generates formatted PowerPoint presentations from text prompts, YouTube videos, or structured outlines.