Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.datadef/mcp

REMOTE · DATADEF.IO

Generate, edit, and export data-architecture diagrams from your AI. Column lineage, PNG in chat.

Available components

0 this week 92 Trust /100

Last scanned (2 hours ago)

Scores higher than 99% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Data and Analytics

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security94
Transport & Reachability100
Schema Quality & AI Usability79
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 9730 tokens (~249/item across 39 items; 39 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage94
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 82% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 40 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities60
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 29 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • New tool “canvas_batch”, which the server declares destructive security
    • New tool “canvas_remove_lineage”, which the server declares destructive security
    • Tool “canvas_add_flow_arrow” rewrote its description, which is the text the model reads security
    • Tool “canvas_add_lineage” rewrote its description, which is the text the model reads security
    • Tool “canvas_add_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_add_region” rewrote its description, which is the text the model reads security
    • Tool “canvas_add_shape” rewrote its description, which is the text the model reads security
    • Tool “canvas_add_standalone_node” rewrote its description, which is the text the model reads security
    • Tool “canvas_add_text” rewrote its description, which is the text the model reads security
    • Tool “canvas_align_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_collapse_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_connect_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_describe_canvas” rewrote its description, which is the text the model reads security
    • Tool “canvas_disconnect_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_group_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_inspect_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_layout_canvas” rewrote its description, which is the text the model reads security
    • Tool “canvas_measure_canvas” rewrote its description, which is the text the model reads security
    • Tool “canvas_move_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_move_to_group” rewrote its description, which is the text the model reads security
    • Tool “canvas_remove_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_replace_node” rewrote its description, which is the text the model reads security
    • Tool “canvas_resize_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_search_icons” rewrote its description, which is the text the model reads security
    • Tool “canvas_set_columns” rewrote its description, which is the text the model reads security
    • Tool “canvas_suggest_simplifications” rewrote its description, which is the text the model reads security
    • Tool “canvas_update_edges” rewrote its description, which is the text the model reads security
    • Tool “canvas_update_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_validate_canvas” rewrote its description, which is the text the model reads security
    • Tool “create_blank_diagram” rewrote its description, which is the text the model reads security
    • Tool “create_diagram” rewrote its description, which is the text the model reads security
    • Tool “edit_diagram” rewrote its description, which is the text the model reads security
    • Tool “export_diagram” rewrote its description, which is the text the model reads security
    • Tool “get_design_guide” rewrote its description, which is the text the model reads security
    • Tool “get_diagram” rewrote its description, which is the text the model reads security
    • Tool “list_diagrams” rewrote its description, which is the text the model reads security
    • Tool “canvas_add_flow_arrow” no longer declares itself destructive security
    • Tool “canvas_add_lineage” no longer declares itself destructive security
    • Tool “canvas_add_nodes” no longer declares itself destructive security
    • Tool “canvas_add_region” no longer declares itself destructive security
    • Tool “canvas_add_shape” no longer declares itself destructive security
    • Tool “canvas_add_standalone_node” no longer declares itself destructive security
    • Tool “canvas_add_text” no longer declares itself destructive security
    • Tool “canvas_connect_nodes” no longer declares itself destructive security
    • Tool “canvas_group_nodes” no longer declares itself destructive security
    • Schema quality: 135 → 249 ▼ functional
    • Server version: 1.0.0 → 1.1.0 functional
    • New tool “canvas_view” functional
    • “canvas_group_nodes” added an optional parameter “color” cosmetic
    • “canvas_layout_canvas” added an optional parameter “direction” cosmetic
    • “canvas_layout_canvas” added an optional parameter “fit” cosmetic
    • “canvas_layout_canvas” added an optional parameter “mode” cosmetic
    • “canvas_layout_canvas” added an optional parameter “spacing” cosmetic
    • “canvas_layout_canvas” added an optional parameter “zone” cosmetic
    • “canvas_remove_nodes” added an optional parameter “keepChildren” cosmetic
    • “canvas_search_icons” added an optional parameter “queries” cosmetic
    • “canvas_set_columns” added an optional parameter “mode” cosmetic
    • “canvas_validate_canvas” added an optional parameter “scope” cosmetic
    • “canvas_add_flow_arrow” reworded the description of “diagram_id” cosmetic
    • “canvas_add_lineage” reworded the description of “diagram_id” cosmetic
    • “canvas_add_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_add_region” reworded the description of “diagram_id” cosmetic
    • “canvas_add_shape” reworded the description of “diagram_id” cosmetic
    • “canvas_add_standalone_node” reworded the description of “diagram_id” cosmetic
    • “canvas_add_text” reworded the description of “diagram_id” cosmetic
    • “canvas_align_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_collapse_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_connect_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_describe_canvas” reworded the description of “diagram_id” cosmetic
    • “canvas_disconnect_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_group_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_group_nodes” reworded the description of “family” cosmetic
    • “canvas_group_nodes” reworded the description of “nodes” cosmetic
    • “canvas_group_nodes” reworded the description of “parentGroup” cosmetic
    • “canvas_inspect_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_layout_canvas” reworded the description of “diagram_id” cosmetic
    • “canvas_layout_canvas” reworded the description of “full” cosmetic
    • “canvas_measure_canvas” reworded the description of “diagram_id” cosmetic
    • “canvas_move_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_move_to_group” reworded the description of “diagram_id” cosmetic
    • “canvas_move_to_group” reworded the description of “group” cosmetic
    • “canvas_move_to_group” reworded the description of “nodes” cosmetic
    • “canvas_remove_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_remove_nodes” reworded the description of “nodes” cosmetic
    • “canvas_replace_node” reworded the description of “diagram_id” cosmetic
    • “canvas_replace_node” reworded the description of “keepColumns” cosmetic
    • “canvas_resize_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_search_icons” reworded the description of “diagram_id” cosmetic
    • “canvas_search_icons” reworded the description of “limit” cosmetic
    • “canvas_search_icons” reworded the description of “query” cosmetic
    • “canvas_set_columns” reworded the description of “diagram_id” cosmetic
    • “canvas_suggest_simplifications” reworded the description of “diagram_id” cosmetic
    • “canvas_update_edges” reworded the description of “diagram_id” cosmetic
    • “canvas_update_nodes” reworded the description of “diagram_id” cosmetic
    • “canvas_validate_canvas” reworded the description of “diagram_id” cosmetic
    • “edit_diagram” reworded the description of “diagram_id” cosmetic
    • “edit_diagram” reworded the description of “include_image” cosmetic
    • “canvas_search_icons” made “diagram_id” optional cosmetic
    • “canvas_search_icons” made “query” optional cosmetic
    • Tool “canvas_add_flow_arrow” changed its title: add flow arrow → Add a flow arrow cosmetic
    • Tool “canvas_add_lineage” changed its title: add lineage → Record column lineage cosmetic
    • Tool “canvas_add_nodes” changed its title: add nodes → Add nodes cosmetic
    • Tool “canvas_add_region” changed its title: add region → Add a region cosmetic
    • Tool “canvas_add_shape” changed its title: add shape → Add a shape cosmetic
    • Tool “canvas_add_standalone_node” changed its title: add standalone node → Add one node at a fixed spot cosmetic
    • Tool “canvas_add_text” changed its title: add text → Add a note cosmetic
    • Tool “canvas_align_nodes” changed its title: align nodes → Align nodes by hand cosmetic
    • Tool “canvas_collapse_nodes” changed its title: collapse nodes → Collapse nodes into one cosmetic
    • Tool “canvas_connect_nodes” changed its title: connect nodes → Connect nodes cosmetic
    • Tool “canvas_describe_canvas” changed its title: describe canvas → List every node (flat) cosmetic
    • Tool “canvas_disconnect_nodes” changed its title: disconnect nodes → Remove edges cosmetic
    • Tool “canvas_group_nodes” changed its title: group nodes → Create a zone cosmetic
    • Tool “canvas_inspect_nodes” changed its title: inspect nodes → Inspect nodes in full cosmetic
    • Tool “canvas_layout_canvas” changed its title: layout canvas → Lay out the diagram cosmetic
    • Tool “canvas_measure_canvas” changed its title: measure canvas → Measure exact geometry cosmetic
    • Tool “canvas_move_nodes” changed its title: move nodes → Move nodes by hand cosmetic
    • Tool “canvas_move_to_group” changed its title: move to group → Move nodes into a zone cosmetic
    • Tool “canvas_remove_nodes” changed its title: remove nodes → Remove nodes cosmetic
    • Tool “canvas_replace_node” changed its title: replace node → Replace a node in place cosmetic
    • Tool “canvas_resize_nodes” changed its title: resize nodes → Resize nodes by hand cosmetic
    • Tool “canvas_search_icons” changed its title: search icons → Find vendor icon ids cosmetic
    • Tool “canvas_set_columns” changed its title: set columns → Change a table's columns cosmetic
    • Tool “canvas_suggest_simplifications” changed its title: suggest simplifications → Suggest simplifications cosmetic
    • Tool “canvas_update_edges” changed its title: update edges → Update edges cosmetic
    • Tool “canvas_update_nodes” changed its title: update nodes → Update nodes, zones and notes cosmetic
    • Tool “canvas_validate_canvas” changed its title: validate canvas → Validate the diagram cosmetic
    • Tool “edit_diagram” changed its title: Edit an existing diagram → Edit a diagram with Datadef's agent cosmetic
    • Tool “get_diagram” changed its title: Read a diagram → Read a diagram, with a picture cosmetic
  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 24 Sept 26 0
    • Tool “create_diagram” rewrote its description, which is the text the model reads security
  • 15 Sept 26 0
    • Stability: 0.97 → pass security
  • 26 Aug 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 22 Aug 26 0
    • Tool “canvas_add_nodes” rewrote its description, which is the text the model reads security
    • Tool “canvas_describe_canvas” rewrote its description, which is the text the model reads security
    • Tool “canvas_group_nodes” rewrote its description, which is the text the model reads security
    • Tool “create_blank_diagram” rewrote its description, which is the text the model reads security
    • Tool “create_diagram” rewrote its description, which is the text the model reads security
    • Tool “edit_diagram” rewrote its description, which is the text the model reads security
    • Tool “export_diagram” rewrote its description, which is the text the model reads security
    • Tool “get_design_guide” rewrote its description, which is the text the model reads security
    • “create_diagram” reworded the description of “detailed” cosmetic
    • “create_diagram” reworded the description of “scope” cosmetic
  • 17 Aug 26 0
    • Stability: unverified → 0.03 ▲ functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://datadef.io/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=datadef.io CN=WE1,O=Google Trust Services,C=US 19 Oct 2026 17 Jan 2027 ECDSA 256 ECDSA-SHA256 c7474f2081df91e00e4f6dc79d570b8e
SANs: datadef.io, *.datadef.io
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of datadef.io. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
io. present 38690 8 Verified
datadef.io. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://datadef.io/.well-known/oauth-protected-resource"

Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://datadef.io/.well-known/oauth-protected-resource"
Header Value
strict-transport-security max-age=63072000; includeSubDomains
x-content-type-options nosniff
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(), geolocation=(), browsing-topics=()

Protected resource metadata

Document https://datadef.io/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://datadef.io/mcp
Authorisation server https://datadef.io

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://datadef.io/mcp Verified 200
http (plaintext) http://datadef.io/mcp HTTPS enforced 301 https://datadef.io/mcp
MCP tools · 39 exposed · ~9,513 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
canvas_add_flow_arrow ~220

When: Use after the final layout, where one arrow should stand for a bundle of identical flows (zone to zone). Draw one large labelled arrow SHAPE between two areas of the diagram — "ingest", "serve", "publish". It is a drawing, not a connection: it links nothing and moves with nothing. To connect nodes use canvas_connect_nodes; never replace existing edges with this. Position it in the gap between the two areas using canvas_measure_canvas. Batch: `arrows` (up to 12) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
arrowsarrayyes–
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.

No output schema declared.

No examples provided.

canvas_add_lineage ~187

When: Use to record which source columns produce which target columns. No line is drawn. Record column-level lineage: which source column produces which target column, and how. This is what makes the diagram queryable for impact analysis, so add it for every real transformation. canvas_remove_lineage undoes it. Batch: `links` (up to 100) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_validate_canvas before you finish.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
linksarrayyes–

No output schema declared.

No examples provided.

canvas_add_nodes ~230

When: Use to add components (tables, pipelines, sources, consumers, service icons), each placed in its zone with `group`. Add one or more nodes to the canvas. Batch every node you want in a single call. Positions are assigned by canvas_layout_canvas afterwards — never set them yourself. Batch: `nodes` (up to 40) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. If you have not already, call get_design_guide first: it carries Datadef's size, edge and zone standard, and diagrams built without it read poorly. Next: canvas_connect_nodes for the real flows, then canvas_layout_canvas once when the structure is complete.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
nodesarrayyes–

No output schema declared.

No examples provided.

canvas_add_region ~241

When: Use after the final layout to mark nodes that belong together without moving them into a zone. Regions do not move with layout. Draw a labelled translucent area behind existing nodes to show they belong together, without reparenting them. Use this when the grouping is a reading aid rather than real containment, when areas would need to overlap, or when a node belongs to two ideas at once — canvas_group_nodes cannot express any of those because it moves nodes into the zone. Call canvas_measure_canvas first and size the region to enclose the nodes with roughly 24px of margin. Batch: `regions` (up to 12) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
regionsarrayyes–

No output schema declared.

No examples provided.

canvas_add_shape ~198

When: Use rarely: a pointer or highlight the user asked for. Never as a backdrop; zones are the containers. Place a rectangle, circle, arrow, or line as a visual annotation — a divider, a highlight. Shapes are drawings: they connect nothing (use canvas_connect_nodes for arrows between nodes) and they are not zones (use canvas_group_nodes). Batch: `shapes` (up to 20) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
shapesarrayyes–

No output schema declared.

No examples provided.

canvas_add_standalone_node ~243

When: Use only when the user wants a node at a specific position, outside the automatic layout. Otherwise use canvas_add_nodes. Add a single data node at an exact position, without connecting it to anything. Use when the user wants something placed somewhere specific, or when you will wire it up yourself afterwards. For building out a connected diagram, canvas_add_nodes is better — it batches and lets layout position everything. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
descriptionstring––
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
iconstring–Icon id from search_icons.
labelstringyes–
technologystring––
typestringyes–
xnumber–Absolute x. Omit to place clear of the existing diagram.
ynumber–Absolute y.

No output schema declared.

No examples provided.

canvas_add_text ~259

When: Use for a note that tells the diagram's reader a decision, constraint or gotcha. Pass `anchor` (the node or zone it explains) and it is placed beside it, no coordinates needed. To edit a note's text use canvas_update_nodes. Add a text note: a caption, a callout, a note explaining a decision. Give `anchor` (the node or zone it explains) and the note is placed beside it, clear of other content, without coordinates. Use x/y only for a note that belongs to no particular element. Notes are annotations: they take no edges. To change an existing note's text use canvas_update_nodes. Batch: `texts` (up to 20) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
textsarrayyes–

No output schema declared.

No examples provided.

canvas_align_nodes ~198

When: Use only when the user asked for alignment that layout does not give. Align nodes to a shared edge or centre line, or space them evenly. Cleaner and far more reliable than computing coordinates by hand. Batch: `nodes` (up to 40) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
modestringyesleft/right/top/bottom align edges; center-* align centre lines; distribute-* space evenly between the outermost two.
nodesarrayyesNode ids or labels.

No output schema declared.

No examples provided.

canvas_batch ~274

When: use whenever you would otherwise make several canvas_* write calls in a row, above all with tools that take one item per call: create every zone (group_nodes), convert many nodes (replace_node), set several tables' columns (set_columns). Eighteen zone creations or thirty-five replacements become one call and one save. Each operation is {"tool": "<canvas tool, with or without the canvas_ prefix>", "args": {<that tool's arguments, without diagram_id>}}. Operations run in order on the same diagram, so a later one can use what an earlier one created by its exact label (create a zone in operation 1, add nodes with that zone as their group in operation 2). All or nothing: if one operation fails, nothing is saved and the result names the failing operation. Write tools only; read with canvas_view. Returns compact JSON: one line per operation, the ids created, changed or removed, and the new revision. Next: canvas_layout_canvas once if the structure changed (or end the batch with a layout_canvas operation), then canvas_view.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
operationsarrayyesApplied in order, all or nothing. Up to 50.

No output schema declared.

No examples provided.

canvas_collapse_nodes ~268

When: Use to merge several similar nodes into one while keeping their connections, usually after canvas_suggest_simplifications. Merge several nodes into one summary node, keeping every connection. Use when a set of near-identical objects adds length without adding meaning — eight staging models that all behave the same become "stg_* (8)". Do not use when the individual objects are what the reader came for. Batch: `nodes` (up to 40) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_layout_canvas once, then canvas_view.

NameTypeReqDescription
descriptionstring–What the merged node stands for. Defaults to listing what was collapsed.
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
labelstring–Label for the merged node. Omit to generate one such as "stg_* (8)".
nodesarrayyesNode ids or labels to merge. They should be genuinely similar.

No output schema declared.

No examples provided.

canvas_connect_nodes ~220

When: Use to draw the flows that genuinely move data between two nodes. Never connect a zone: connect a node inside it. Draw edges (arrows) between nodes to show how data flows. Label an edge only when the reader could not guess what it does ("CDC", "hourly batch"); obvious flows and dimensional joins read better unlabelled. Edges always render with an arrowhead at the target; bidirectional adds one at the source. Batch: `edges` (up to 60) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_layout_canvas once, when the structure is complete.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
edgesarrayyes–

No output schema declared.

No examples provided.

canvas_describe_canvas ~221

When: Use when you want a flat list of every node, edge and zone. canvas_view shows the same ids as a zone tree with positions and defects, and is usually the better first read. Get an overview of the current canvas: zones as a nested tree in reading order, every node with its id, type, icon and family, all connections with labels, and every note in full. Call this first, before any edit, so you work from real node ids instead of guesses. Operates on one Datadef diagram, named by diagram_id. If you have not already, call get_design_guide first: it carries Datadef's size, edge and zone standard, and diagrams built without it read poorly. Next: canvas_inspect_nodes for a node's full fields, or the write tool you need.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
includeColumnsboolean–Include a short column list for each table node. Default false.

No output schema declared.

No examples provided.

canvas_disconnect_nodes ~154

When: Use to delete specific edges between two nodes. Remove edges, given as source and target, or as an edge id / "Source -> Target" string in `edge`. Batch: `edges` takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
edgesarrayyes–

No output schema declared.

No examples provided.

canvas_group_nodes ~419

When: Use to create a zone (a layer, domain, stage or boundary), nested with `parentGroup`, optionally moving existing nodes into it: the zone is drawn around them where they are, inside the zone they already share. Create a labelled zone (e.g. "Bronze Layer", "Ingestion") and optionally move nodes into it. The zone is drawn around the nodes where they already are, so nothing moves on screen; it nests inside their shared zone unless parentGroup says otherwise. Zones are what turn a tangle of boxes into a readable architecture — use them for layers, domains, or environments. Batch: One zone per call. Create all zones in a single canvas_batch call, outermost first, instead of one call per zone. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. If you have not already, call get_design_guide first: it carries Datadef's size, edge and zone standard, and diagrams built without it read poorly. Next: canvas_add_nodes with `group` set to the zone.

NameTypeReqDescription
colorstring–A colour instead of a family, e.g. "green".
descriptionstring––
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
familystring–Accent hue encoding the zone role. Zones with different roles get different families.
labelstringyesZone name, e.g. "Silver Layer".
nodesarray–Node or zone ids or labels to place inside.
parentGroupstring–Existing zone to nest this one inside, e.g. "Databricks Workspace". Default: the zone the nodes already share, if any.
stylestring–layer = horizontal band (default), cluster = box, swimlane = vertical lane.

No output schema declared.

No examples provided.

canvas_inspect_nodes ~172

When: Use before changing a node's fields or columns, to see everything it carries: columns, metadata, owners, neighbours. Get full detail for specific nodes: all columns with types and keys, metadata, schedule, formula, owners. Use before modifying a node so you preserve fields you are not changing. Batch: `nodes` (up to 10) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Next: canvas_update_nodes, canvas_set_columns or canvas_replace_node.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
nodesarrayyesNode ids or exact labels. Up to 10 at a time.

No output schema declared.

No examples provided.

canvas_layout_canvas ~551

When: Use once, after the structure (zones, nodes, edges) is complete, not after each change. With no arguments it only places what was added or changed; nothing else moves. Set mode "full", direction (LR/TB/RL), spacing (compact/normal/airy), fit (page-portrait/page-landscape/slide-16:9/square) or zone only when the user asked for a different layout. Position what you added or moved, or re-arrange the diagram. Default (no arguments): places new and moved nodes next to what they connect to, in the reading direction, and grows their zone if needed; nothing else moves. Call it once after structural edits. Re-arranging (mode "full", or any of direction / spacing / fit / zone) redraws the layout the way a generated diagram is drawn, so only do it when the user asks for a different layout: "make it vertical" → direction TB; "more breathing room" / "less cramped" → spacing airy; "fit a Word doc / paper / A4" → fit page-portrait; "for a slide" → fit slide-16:9; "tidy this zone" → zone. Notes and flow arrows follow what they annotate. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result, then notes and flow arrows, then canvas_validate_canvas.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
directionstring–Reading direction for a re-arrange: LR left-to-right, TB top-to-bottom, RL right-to-left. Default: the direction the diagram reads in now.
fitstring–Shape the diagram for a format: page-portrait = A4 / Word / paper; slide-16:9 = presentation.
fullboolean–Same as mode "full". Prefer `mode`.
modestring–"place" (default) positions only new or moved nodes and moves nothing else. "full" re-arranges everything (or just `zone`) — only when the user asked for a different layout.
spacingstring–Gaps between things for a re-arrange. "airy" when the user wants more whitespace, "compact" to save space.
zonestring–Re-arrange only this zone (id or label); it keeps its place and neighbours make room.

No output schema declared.

No examples provided.

canvas_measure_canvas ~186

When: Use only for a precise manual placement the user asked for: exact x/y/width/height per node. To check a layout, canvas_view is faster and already reports overlaps. Get exact geometry: every node's position and size in canvas units, the overall canvas bounds, and any nodes that overlap each other. Call this before moving, resizing, or placing anything precisely — positions are meaningless without it. Batch: `nodes` takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Next: canvas_move_nodes, canvas_resize_nodes or canvas_align_nodes.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
nodesarray–Limit to specific node ids or labels. Omit to measure everything.

No output schema declared.

No examples provided.

canvas_move_nodes ~225

When: Use only when the user asked for a specific placement. Moving a zone moves its children; never move the children as well. Set node positions precisely. Use absolute x/y to place something exactly, or dx/dy to nudge it. Coordinates are absolute canvas units (same space canvas_measure_canvas reports). Moving a group moves its children with it — do not also move those children in the same call. Call canvas_measure_canvas first. Batch: `moves` (up to 60) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check. Do not run canvas_layout_canvas afterwards: it would undo the placement.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
movesarrayyes–

No output schema declared.

No examples provided.

canvas_move_to_group ~252

When: Use to move existing nodes or zones into another zone (they are placed inside it and the zone grows to fit), or out of every zone with group null. A zone cannot move into its own sub-zone. Move existing nodes or zones into an existing zone, or out of every zone (group: null). They keep their place on screen when they already sit inside the zone; otherwise they are placed inside it and the zone grows to fit. A zone cannot move into its own sub-zone. Batch: `nodes` takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
groupstring|nullyesTarget zone id or label. Pass null to take the nodes out of their zones.
nodesarrayyesNode or zone ids or labels to move.

No output schema declared.

No examples provided.

canvas_remove_lineage ~198

When: Use to delete lineage rows between two nodes (one column pair, or all rows between them). Lineage pointing at deleted nodes or columns is cleaned automatically. Delete lineage rows between two nodes: one column pair, or every row between the two nodes when no column is given. Lineage pointing at deleted nodes or columns is cleaned automatically and never needs this. Batch: `links` (up to 100) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
linksarrayyes–

No output schema declared.

No examples provided.

canvas_remove_nodes ~270

When: Use to delete nodes and their edges. Removing a zone keeps its contents (they move up to the parent, same place on screen): that is how to ungroup. Pass keepChildren:false only to delete the zone with everything inside it. Delete nodes, notes or zones, with every edge and lineage row touching them. Removing a zone keeps its contents by default: they move up to the zone's parent and stay where they are on screen (this is how to ungroup a zone). Pass keepChildren:false only when the user wants the zone AND everything inside it deleted. Batch: `nodes` takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
keepChildrenboolean–For zones: true (default) moves the contents up to the parent; false deletes everything inside too.
nodesarrayyesNode or zone ids or exact labels.

No output schema declared.

No examples provided.

canvas_replace_node ~330

When: Use when one component changes identity or type (Redshift becomes Snowflake, a card becomes a service icon). The node keeps its id, connections, lineage, zone, position and fields. Turn a node into a different component in place — Redshift becomes Snowflake, a batch job becomes streaming. It keeps its id, every connection and lineage row, its zone, position, owners, schedule, colours and columns; only what you pass changes (a new label with no icon picks the new product's icon). canvas_update_nodes does the same for many nodes at once. Batch: One node per call. To convert many nodes, use canvas_update_nodes with `type` (and `label`, `icon`) for each, in one call. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
descriptionstring––
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
iconstring–Icon id from search_icons.
keepColumnsboolean–Keep the existing columns (table to table). Default true; false clears them.
labelstringyesNew label.
nodestringyesNode id or exact label to replace.
technologystring––
typestring–New type. Omit to keep the current type.

No output schema declared.

No examples provided.

canvas_resize_nodes ~173

When: Use only when the user asked for a specific size. Set the width and height of nodes. Mostly for shapes, text boxes, and group zones — data nodes size themselves from their content, and resizing one can clip what it displays. Batch: `resizes` (up to 40) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
resizesarrayyes–

No output schema declared.

No examples provided.

canvas_search_icons ~283

When: Use before adding nodes that should show a vendor logo (Snowflake, Kafka, Power BI) and you are unsure of the icon id. Find icon ids in Datadef's library (2000+ cloud and data-tool logos) by product name, e.g. "Amazon Aurora PostgreSQL", "k8s", "Azure Event Hubs". Pass `queries` to look up many names in one call (best id per name); pass `query` for the top matches of one name. Scores: 90+ sure, 75+ good. A name with no match has no icon; leave the icon field out rather than guessing. Batch: Pass `queries` with every vendor at once (up to 40, best id per name) instead of one call per vendor. Next: canvas_add_nodes (or canvas_update_nodes) with icon set to a returned id; omit icon when nothing matched.

NameTypeReqDescription
diagram_idstring–Not needed for icon search; accepted for compatibility.
limitinteger–Matches per name. Default 5 for `query`, 1 for `queries`.
queriesarray–Several names at once, e.g. ["Snowflake", "Fivetran", "Power BI"]. Returns the best icon for each.
querystring–One product or tool name.

No output schema declared.

No examples provided.

canvas_set_columns ~306

When: Use `mode: "merge"` to add or update (renameTo) a few columns, `mode: "remove"` to drop some, or the default replace for the full list. Columns that stay keep their ids and lineage. Change a table's columns. mode "merge" adds new columns and updates (or renames, with renameTo) the ones you name, leaving the rest alone — use it to add one column. mode "remove" deletes the named columns only. mode "replace" (default) makes the list exactly what you pass. Columns are matched by name, so a column that stays keeps its id, its lineage and the edges anchored to it; lineage and anchors of removed columns are cleaned up. Mark primary and foreign keys. Batch: One table per call. For several tables, send one set_columns operation per table in a single canvas_batch call. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_add_lineage for column-level mappings, if there are any.

NameTypeReqDescription
columnsarrayyes–
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
modestring–Default "replace".
nodestringyesTable node id or exact label.

No output schema declared.

No examples provided.

canvas_suggest_simplifications ~163

When: Use when the diagram feels dense or the user asks to simplify. It changes nothing; it reports what could collapse. Report where this canvas could be collapsed — groups of similar nodes that could become one summary node — without changing anything. Use it to decide whether the diagram is denser than it needs to be. Density is not automatically a problem: keep the detail when the detail is the point. Operates on one Datadef diagram, named by diagram_id. Next: canvas_collapse_nodes to apply a suggestion the user wants.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
minGroupSizeinteger–Smallest group worth reporting. Default 3.

No output schema declared.

No examples provided.

canvas_update_edges ~265

When: Use to relabel, retype, restyle (dashed, colour), reverse, put arrowheads on both ends, or re-point an existing edge, instead of disconnecting and reconnecting it. Change existing connections in place: relabel, retype, restyle (solid/dashed/dotted, colour), reverse the direction, put arrowheads on both ends, or re-point one end to another node. Identify each edge by source and target, or by `edge` (an id or "Source -> Target"). Change only the edges the user asked about: a request and its response are two edges on purpose, never merge them into one two-headed edge to tidy the drawing. Batch: `updates` (up to 60) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
updatesarrayyes–

No output schema declared.

No examples provided.

canvas_update_nodes ~309

When: Use for any in-place change: rename a node or zone (it keeps its size and contents), edit a note's text, recolour (`color: "green"`, `fill`, `family`), change a zone's style, swap an icon, or change a data node's type; fields you do not pass stay as they are. Many nodes in one call. Change existing nodes, zones or notes in place: rename (a zone keeps its size and contents), edit a note's text, recolour ("color": "green" or "#16a34a"; "fill" for the background; "family" for a layer hue), change a zone's style, swap an icon, change a data node's type. Only the fields you pass change; id, position, size, edges and everything else are kept. Batch many nodes in one call. For columns use canvas_set_columns. Batch: `updates` (up to 60) takes a list; put every item in one call rather than one call per item. Operates on one Datadef diagram, named by diagram_id. Returns compact JSON: the ids it created, changed or removed, the diagram revision, a one-line summary and the next step. A viewer-role account is refused. Next: canvas_view to check the result.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
updatesarrayyes–

No output schema declared.

No examples provided.

canvas_validate_canvas ~183

When: Use before you finish: broken references and icons, nodes outside their zone, overlapping zones or nodes. Loops are reported as information only. Check your work: broken references, broken icons, nodes sticking out of their zone, overlapping zones or nodes, unconnected or unfed nodes. By default it reports only issues in what you changed in this session (scope "changed"); scope "all" checks the whole canvas. Fix errors; judge warnings; info needs no action. Operates on one Datadef diagram, named by diagram_id. Next: Fix errors. Warnings are observations; ignore the ones that do not apply.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
scopestring–"changed" (default when you have changed something) or "all".

No output schema declared.

No examples provided.

canvas_view ~338

When: use to see a diagram before you edit it and after each round of changes; this is how you check your work. It answers in milliseconds from the saved diagram, where export_diagram starts a browser for 6-10 s. Returns a text map: the zones as a tree, each with its place on a coarse grid (r1 = top row, c1 = left column) and its nodes (label, type, icon, #id), then the edges, then the checks a render would reveal: overlapping nodes, overlapping sibling zones, nodes sticking out of their zone, nodes not laid out yet, empty zones, and the validator's error and warning counts. Every #id works as a node reference in the canvas_* tools. It also says when an edit_diagram run or a generation is still in progress on the diagram, and gives a preview image link that renders only if opened. For a large diagram, pass zone to look at one zone. include_image also renders a PNG (slow: only when you need to see styling). Next: fix what the checks report with the targeted canvas_* tool, then canvas_view again.

NameTypeReqDescription
diagram_idstringyesDiagram id, from list_diagrams, create_diagram or create_blank_diagram.
include_columnsboolean–List column names under each table. Default false.
include_edgesboolean–List the edges. Default true.
include_imageboolean–Also render a PNG, 6-10 s. Default false.
zonestring–Zone id or exact label: show only that zone and what it contains.

No output schema declared.

No examples provided.

create_blank_diagram ~180

When: use when you will build the diagram yourself with the canvas_* tools, because you want control over the result or already know the architecture from the conversation. Use create_diagram instead when Datadef's model should design the whole thing from a prompt. Creates an empty diagram and returns its diagram_id. No AI generation runs: you draw it. Call get_design_guide first: it is the standard Datadef's own generator follows, and building without it produces the diagrams this tool exists to avoid. Next: canvas_search_icons (all vendors in one call), then one canvas_batch with every zone (group_nodes) and node (add_nodes), canvas_connect_nodes, canvas_layout_canvas once, canvas_view.

NameTypeReqDescription
descriptionstring–Optional short description.
namestring–Diagram name. Defaults to "Untitled diagram".

No output schema declared.

No examples provided.

create_diagram ~732

When: use when Datadef's own model should design a whole new diagram from a description or a pasted schema. To build it yourself step by step, use create_blank_diagram; to change an existing diagram, canvas_view and the canvas_* tools, or edit_diagram. Generates a professional data architecture diagram from a description and saves it to the user's Datadef account. Use it for any data-shaped diagram: medallion and lakehouse architectures, ETL/ELT pipelines, streaming topologies, data mesh, star and snowflake schemas, ER diagrams, lineage maps, cloud architectures, and data platform designs. EXISTING SCHEMAS: if the conversation or the repository has the schema itself (SQL DDL, a MySQL or pg_dump export, migrations, schema.prisma), pass the file contents as the prompt, unedited. Datadef parses it instead of asking a model: every table, column, type, primary key and foreign key comes out exactly as written, in seconds. Warehouse DDL with no declared foreign keys (fact_sales.customer_key → dim_customer.customer_key) gets its links from key names, drawn dashed. Add a sentence only if you want something other than a picture of that schema; "turn these tables into a star schema" or "design the pipeline that loads them" goes to the model instead. Write a specific prompt. Name the actual technologies (Snowflake, dbt, Airflow, Kafka, Fivetran), the layers or zones you want, and the tables that matter, the diagram is only as detailed as the description. Zone names you give are treated as a specification, not a suggestion. SCOPE: if the user's request is open-ended ("diagram our platform", "show me something"), ask them how much detail they want before calling this, or say which scope you chose. Default to scope "overview". A dense 40-node diagram is impressive and usually not what someone wanted from a one-line request; they can always ask you to expand it. TIMING: this waits up to ~35 seconds; fast generations come back finished, with a preview image and a markdown line…

NameTypeReqDescription
detailedboolean–Use a higher-tier model. Slower and roughly 10x the cost, only when the user explicitly asks for maximum quality. Independent of `scope`.
namestring–Title for the diagram. Defaults to an AI-chosen title.
promptstringyesWhat to diagram. Include technologies, data sources, transformations, layers, and destinations.
scopestring–overview (default): ~12-20 nodes, the shape of the system, right for almost every open-ended request. detailed: every object itemised, denser and harder to read. Ask the user rather than assuming the…

No output schema declared.

No examples provided.

edit_diagram ~317

When: use for a large change you can describe in words better than you can make it tool by tool: "reorganise this into bronze, silver and gold", "rebuild the consumption side from this spec", "add owners and schedules everywhere". For a precise change (rename, add a node, rewire an edge), the canvas_* tools are faster and exact. Datadef's own editing agent carries out the instruction: add nodes, rewire connections, add columns, reorganise into layers, fill in owners and schedules. Be specific about what to change and where: "Add a Kafka topic between the API and the bronze table, labelled 'events'" works; "make it better" does not. Timing: an edit takes 30-120 s. This waits about 35 s; a finished edit comes back with its summary, the ids it changed and a PNG. A slower one answers "in progress" and keeps running on the server: do NOT call edit_diagram again. Sending the same instruction again joins the running edit (or returns the result of the one that finished less than a minute ago); a different instruction is refused until it finishes. canvas_view and get_diagram report when it has finished. Next: canvas_view to check the result.

NameTypeReqDescription
diagram_idstringyesDiagram id to modify.
include_imageboolean–Return a PNG of the updated diagram when the edit finishes in time. Default true.
instructionstringyesWhat to change, in plain language.

No output schema declared.

No examples provided.

export_diagram ~190

When: use to give the user an image of a diagram, or a link to download, attach or embed one. Not to check your own edits: a render starts a browser (6-10 s), while canvas_view answers in milliseconds and reports overlaps. Renders a diagram to PNG or JPEG. Returns the image inline AND a short-lived signed download URL. Use the inline image to show the diagram; use the URL when the user wants to save it, attach it, or share a link: it serves the file directly and needs no API key. Next: nothing; show the image or the link to the user.

NameTypeReqDescription
diagram_idstringyesCanvas id to export.
formatstring–Default png.
heightinteger–Viewport height in pixels. Default 1000.
widthinteger–Viewport width in pixels. Default 1600.

No output schema declared.

No examples provided.

get_design_guide ~124

When: read once before your first canvas_* call, to build or to edit. Datadef's standard for a readable diagram (size, edge discipline, nested zones, notes) and the tool workflow: which canvas_* tool to use when, batching, laying out once, checking with canvas_view. It is the same standard Datadef's own generator follows, so a diagram you build by hand comes out indistinguishable from a generated one. Works without a subscription. Next: create_blank_diagram to build, or canvas_view to edit an existing diagram.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_diagram ~180

When: use to show the user a diagram (it attaches a rendered PNG and a markdown image line, 6-10 s), or to poll a diagram that create_diagram or edit_diagram is still working on. To check your own edits, canvas_view is faster and reports overlaps. Returns every node with its type and columns, every connection and the zones, plus whether a generation or edit_diagram run is still in progress. Next: canvas_view and the canvas_* tools to edit.

NameTypeReqDescription
diagram_idstringyesCanvas id, from list_diagrams, create_diagram, or create_blank_diagram.
include_columnsboolean–Include table column lists. Default true.
include_imageboolean–Attach a PNG preview and a markdown image link to show the user. Default true; pass false for structure-only reads.

No output schema declared.

No examples provided.

list_diagrams ~69

When: use to find the id of an existing diagram before viewing, editing or exporting it. Lists the diagrams in the user's Datadef account, most recently updated first. Next: canvas_view with the diagram_id to see it.

NameTypeReqDescription
limitinteger–Max results. Default 25.

No output schema declared.

No examples provided.

repo_refresh ~95

Re-sync a repo-linked diagram from the current state of its repository. If the tracked branch or tag has not moved since the last sync, nothing changes. If it has, the diagram is REGENERATED from the repository, which replaces manual canvas edits. Only the owner of the repository connection can use this.

NameTypeReqDescription
project_idstringyesProject id of the repo-linked diagram. A diagram_id from list_diagrams works too.

No output schema declared.

No examples provided.

repo_status ~90

For a diagram that was created from a connected git repository: which repo and branch or tag it tracks, when it last synced, the commit it reflects, and whether daily sync is on. Use repo_refresh to sync it now. Only the owner of the repository connection can use this.

NameTypeReqDescription
project_idstringyesProject id of the repo-linked diagram. A diagram_id from list_diagrams works too.

No output schema declared.

No examples provided.

Install

How do I install the io.datadef/mcp server?

io.datadef/mcp is a hosted endpoint at https://datadef.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · datadef.io

# add to Claude Code
claude mcp add --transport http io-datadef-mcp 'https://datadef.io/mcp'
Common questions

What is the io.datadef/mcp server?

io.datadef/mcp is listed in the public MCP registry as io.datadef/mcp. Generate, edit, and export data-architecture diagrams from your AI. Column lineage, PNG in chat. This page covers its hosted endpoint (https://datadef.io/mcp).

Is the io.datadef/mcp server safe to use?

io.datadef/mcp scores 92 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.datadef/mcp server expose?

io.datadef/mcp exposes 39 tools: get_design_guide, canvas_describe_canvas, canvas_inspect_nodes, canvas_search_icons, canvas_measure_canvas, and 34 more. Their descriptions and schemas cost roughly 9,513 tokens of context every time the server is loaded.

Does the io.datadef/mcp server require authentication?

Yes. io.datadef/mcp asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the io.datadef/mcp server still maintained?

io.datadef/mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.