Server definition
- Hash
- sha256:aadad9b16e8c5f796d88ee93d5b1d8b56613a77f67c643fcadcc145a85b3778f
- What it is
- What a remote MCP server returned when asked what it offers: 6 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Creates elements on a canvas. Creates a new canvas if room_id is omitted, or adds to the existing canvas if room_id is provided. Use cases: wireframes, UI mockups, freeform illustrations, standalone shapes, and manual layouts that Mermaid does not cover well. For diagrams Mermaid can express, use add_elements_from_mermaid instead. Element types: rectangle, ellipse, diamond, arrow, line, freedraw, text, image. Rich text: the text field supports limited HTML 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. TEXT IN SHAPES: use containerId on text element pointing to shape id. ARROWS: Position at EDGE of source shape. Auto-bound within 30px. Colors: strokeColor, backgroundColor (hex).",
"inputSchema": {
"properties": {
"elements": {
"description": "Array of element definitions to create",
"items": {
"description": "Per-type required fields: rectangle/ellipse/diamond → x, y (width/height default to 100). text → 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 → x, y, points (e.g. [[0,0],[100,0]]); optionally startBinding/endBinding instead of points. image → x, y, width, height, fileId. freedraw → x, y, points. type is inferred from fields if omitted (text field → text, points → line, fileId → image, else rectangle).",
"properties": {
"backgroundColor": {
"description": "Fill color in hex or 'transparent' (default: transparent)",
"type": "string"
},
"containerId": {
"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.",
"type": "string"
},
"endBinding": {
"description": "For type=arrow: binds the arrow end to a shape. Use instead of or alongside points.",
"properties": {
"elementId": {
"type": "string"
},
"focus": {
"type": "number"
},
"gap": {
"type": "number"
}
},
"required": [
"elementId",
"focus",
"gap"
],
"type": "object"
},
"fillStyle": {
"description": "Fill style: solid, hachure, cross-hatch (default: solid)",
"type": "string"
},
"fontFamily": {
"description": "Font family: 5=Excalifont, 6=Nunito, 7=Lilita One, 8=Comic Shanns (default: 5). Applies to text elements.",
"type": "number"
},
"fontSize": {
"description": "Font size (default: 20). Applies to text elements.",
"type": "number"
},
"height": {
"description": "Height (default: 100; omit for text — auto-sized)",
"type": "number"
},
"id": {
"description": "Unique element ID. IMPORTANT: Always set explicit IDs for shapes that arrows will connect to!",
"type": "string"
},
"label": {
"description": "For type=arrow: text label displayed on the arrow",
"type": "string"
},
"opacity": {
"description": "Opacity 0-100 (default: 100)",
"type": "number"
},
"points": {
"description": "Required for arrow/line/freedraw. Coordinates relative to element x,y. Example: [[0,0],[100,0]] for horizontal arrow.",
"items": {
"items": {
"type": "number"
},
"type": "array"
},
"type": "array"
},
"roughness": {
"description": "Roughness: 0=architect, 1=artist, 2=cartoonist (default: 1)",
"type": "number"
},
"startBinding": {
"description": "For type=arrow: binds the arrow start to a shape. Use instead of or alongside points.",
"properties": {
"elementId": {
"type": "string"
},
"focus": {
"type": "number"
},
"gap": {
"type": "number"
}
},
"required": [
"elementId",
"focus",
"gap"
],
"type": "object"
},
"strokeColor": {
"description": "Stroke color in hex (default: #1e1e1e)",
"type": "string"
},
"strokeWidth": {
"description": "Stroke width (default: 2)",
"type": "number"
},
"text": {
"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": "string"
},
"type": {
"description": "Element type. Inferred from fields if omitted: text field → text, points → line, fileId → image, else rectangle.",
"enum": [
"rectangle",
"ellipse",
"diamond",
"arrow",
"line",
"freedraw",
"text",
"image"
],
"type": "string"
},
"width": {
"description": "Width (default: 100; omit for text — auto-sized)",
"type": "number"
},
"x": {
"description": "X coordinate (defaults to 0 if omitted)",
"type": "number"
},
"y": {
"description": "Y coordinate (defaults to 0 if omitted)",
"type": "number"
}
},
"required": [
"x",
"y"
],
"type": "object"
},
"type": "array"
},
"room_id": {
"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.",
"type": "string"
}
},
"required": [
"elements"
],
"type": "object"
},
"name": "add_elements",
"outputSchema": {
"properties": {
"appState": {
"additionalProperties": true,
"description": "Canvas app state (viewBackgroundColor, etc.)",
"properties": {
"viewBackgroundColor": {
"type": "string"
}
},
"type": "object"
},
"collabUrl": {
"description": "Collaboration server URL for Socket.IO",
"type": "string"
},
"elements": {
"description": "All elements currently on the canvas",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"isNew": {
"description": "Whether a new canvas was created",
"type": "boolean"
},
"room_id": {
"description": "Canvas room ID",
"type": "string"
},
"url": {
"description": "Canvas room URL",
"type": "string"
}
},
"required": [
"url",
"isNew",
"collabUrl",
"elements",
"appState"
],
"type": "object"
}
},
{
"description": "Creates diagram elements from a Mermaid definition. Creates a new canvas if room_id is omitted, or adds to the existing canvas if room_id is provided. Preferred over add_elements for new diagrams and large changes to existing diagrams whenever the content can be represented in Mermaid. Supports: flowchart, graph, flowchart-elk, sequenceDiagram, classDiagram, classDiagram-v2, stateDiagram, stateDiagram-v2, erDiagram, journey, gantt, pie, gitGraph, mindmap, timeline, C4Context, C4Container, C4Component, C4Dynamic, C4Deployment, sankey, sankey-beta, quadrantChart, xychart, xychart-beta, requirement, requirementDiagram, kanban, architecture, block, block-beta, packet, packet-beta, radar-beta, treemap, info. Example: \"flowchart TD\\n A[Start] --> B{Decision}\\n B -->|Yes| C[OK]\\n B -->|No| D[Cancel]\"",
"inputSchema": {
"properties": {
"config": {
"description": "Optional Mermaid rendering config. flowchart.curve is handled automatically.",
"properties": {
"flowchart": {
"properties": {
"curve": {
"description": "Edge curve style (handled server-side; no need to set explicitly).",
"enum": [
"basis",
"linear"
],
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"mermaid": {
"description": "Mermaid diagram definition. Prefer converting compatible user requests into Mermaid instead of using add_elements.",
"type": "string"
},
"room_id": {
"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.",
"type": "string"
},
"timeout": {
"default": 3600,
"description": "Room lifetime in seconds (default: 3600, max: 86400). Only used when creating new canvas",
"type": "number"
}
},
"required": [
"mermaid"
],
"type": "object"
},
"name": "add_elements_from_mermaid",
"outputSchema": {
"properties": {
"appState": {
"additionalProperties": true,
"description": "Canvas app state (viewBackgroundColor, etc.)",
"properties": {
"viewBackgroundColor": {
"type": "string"
}
},
"type": "object"
},
"collabUrl": {
"description": "Collaboration server URL for Socket.IO",
"type": "string"
},
"elements": {
"description": "All elements currently on the canvas",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"isNew": {
"description": "Whether a new canvas was created",
"type": "boolean"
},
"pendingMermaid": {
"description": "Mermaid definition pending client-side rendering",
"properties": {
"config": {
"additionalProperties": true,
"type": "object"
},
"definition": {
"description": "Mermaid diagram source",
"type": "string"
}
},
"type": "object"
},
"room_id": {
"description": "Canvas room ID",
"type": "string"
},
"url": {
"description": "Canvas room URL",
"type": "string"
}
},
"required": [
"url",
"isNew",
"collabUrl",
"elements",
"appState"
],
"type": "object"
}
},
{
"description": "Delete elements from a canvas. Requires room_id from a previous Canvs tool result. Pass ids array of element IDs to delete.",
"inputSchema": {
"properties": {
"ids": {
"description": "Array of element IDs to delete",
"items": {
"type": "string"
},
"type": "array"
},
"room_id": {
"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": "string"
}
},
"required": [
"room_id",
"ids"
],
"type": "object"
},
"name": "delete_elements",
"outputSchema": {
"properties": {
"appState": {
"additionalProperties": true,
"description": "Canvas app state (viewBackgroundColor, etc.)",
"properties": {
"viewBackgroundColor": {
"type": "string"
}
},
"type": "object"
},
"collabUrl": {
"description": "Collaboration server URL for Socket.IO",
"type": "string"
},
"elements": {
"description": "All elements currently on the canvas",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"isNew": {
"description": "Whether a new canvas was created",
"type": "boolean"
},
"room_id": {
"description": "Canvas room ID",
"type": "string"
},
"url": {
"description": "Canvas room URL",
"type": "string"
}
},
"required": [
"url",
"isNew",
"collabUrl",
"elements",
"appState"
],
"type": "object"
}
},
{
"description": "Returns guidance on diagram-creation workflow and tool selection: how to choose between Mermaid and manual element creation, and the recommended iteration workflow. Consult before building complex diagrams.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_guide",
"outputSchema": {
"properties": {
"guide": {
"description": "Tool usage instructions text",
"type": "string"
}
},
"required": [
"guide"
],
"type": "object"
}
},
{
"description": "Query elements on a canvas. Requires room_id from a previous Canvs tool result. Returns elements matching optional filters. Use this before update_elements when making small edits to existing diagrams. If no browser has the canvas open, returns an error — ask the user to open the canvas URL in their browser and retry.",
"inputSchema": {
"properties": {
"filter": {
"description": "Additional key-value filters (e.g., {locked: true})",
"type": "object"
},
"room_id": {
"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": "string"
},
"type": {
"description": "Filter by element type",
"enum": [
"rectangle",
"ellipse",
"diamond",
"arrow",
"line",
"freedraw",
"text",
"image"
],
"type": "string"
}
},
"required": [
"room_id"
],
"type": "object"
},
"name": "query_elements",
"outputSchema": {
"properties": {
"count": {
"description": "Number of matching elements",
"type": "number"
},
"elements": {
"description": "Matching elements",
"type": "array"
}
},
"required": [
"count",
"elements"
],
"type": "object"
}
},
{
"description": "Update elements on a canvas. Requires room_id from a previous Canvs tool result. Pass elements array with id and fields to update. IMPORTANT: in each update object ONLY `id` is required; all other fields are optional patch fields. Include ONLY elements that need changes; elements omitted from the request remain unchanged on the board. Prefer this tool for SMALL edits to existing diagrams (rename/move/restyle a few elements), typically after query_elements.",
"inputSchema": {
"properties": {
"elements": {
"description": "Array of element updates (each must have id)",
"items": {
"description": "Patch object: only id is required. Include only the fields you want to change.",
"properties": {
"backgroundColor": {
"description": "New fill color (hex or 'transparent')",
"type": "string"
},
"fillStyle": {
"description": "New fill style (solid, hachure, cross-hatch)",
"type": "string"
},
"fontFamily": {
"description": "New font family (5=Excalifont, 6=Nunito, 7=Lilita One, 8=Comic Shanns)",
"type": "number"
},
"fontSize": {
"description": "New font size (for text elements)",
"type": "number"
},
"height": {
"description": "New height",
"type": "number"
},
"id": {
"description": "ID of the element to update (required)",
"type": "string"
},
"locked": {
"description": "Lock/unlock the element",
"type": "boolean"
},
"opacity": {
"description": "New opacity (0-100)",
"type": "number"
},
"points": {
"description": "New points array (for arrow/line/freedraw elements)",
"items": {
"items": {
"type": "number"
},
"type": "array"
},
"type": "array"
},
"roughness": {
"description": "New roughness (0=architect, 1=artist, 2=cartoonist)",
"type": "number"
},
"strokeColor": {
"description": "New stroke color (hex)",
"type": "string"
},
"strokeWidth": {
"description": "New stroke width",
"type": "number"
},
"text": {
"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": "string"
},
"type": {
"description": "New element type",
"enum": [
"rectangle",
"ellipse",
"diamond",
"arrow",
"line",
"freedraw",
"text",
"image"
],
"type": "string"
},
"width": {
"description": "New width",
"type": "number"
},
"x": {
"description": "New X coordinate",
"type": "number"
},
"y": {
"description": "New Y coordinate",
"type": "number"
}
},
"required": [
"id"
],
"type": "object"
},
"type": "array"
},
"room_id": {
"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": "string"
}
},
"required": [
"room_id",
"elements"
],
"type": "object"
},
"name": "update_elements",
"outputSchema": {
"properties": {
"appState": {
"additionalProperties": true,
"description": "Canvas app state (viewBackgroundColor, etc.)",
"properties": {
"viewBackgroundColor": {
"type": "string"
}
},
"type": "object"
},
"collabUrl": {
"description": "Collaboration server URL for Socket.IO",
"type": "string"
},
"elements": {
"description": "All elements currently on the canvas",
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
"isNew": {
"description": "Whether a new canvas was created",
"type": "boolean"
},
"room_id": {
"description": "Canvas room ID",
"type": "string"
},
"url": {
"description": "Canvas room URL",
"type": "string"
}
},
"required": [
"url",
"isNew",
"collabUrl",
"elements",
"appState"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:aadad9b16e8c5f796d88ee93d5b1d8b56613a77f67c643fcadcc145a85b3778f | sha256sum