{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_ehw9zxpkjhjd","handle":"io-datadef-mcp","url":"https://wellknown.network/agents/io-datadef-mcp","links":{"self":"https://wellknown.network/agents/io-datadef-mcp/record.json","html":"https://wellknown.network/agents/io-datadef-mcp","markdown":"https://wellknown.network/agents/io-datadef-mcp/record.md","api":"https://wellknown.network/api/v1/agents/io-datadef-mcp","status":"https://wellknown.network/api/v1/agents/io-datadef-mcp/status","claim":"https://wellknown.network/agents/io-datadef-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","badge":"https://wellknown.network/agents/io-datadef-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air:datadef.io:server:io-datadef-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"mcp","summary":"Generate, edit, and export data-architecture diagrams from your AI. Column lineage, PNG in chat.","description":"Generate, edit, and export data-architecture diagrams from your AI. Column lineage, PNG in chat.","publisher":{"name":"io.datadef","url":null},"homepage":"https://datadef.io","repository":null,"version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://datadef.io/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-08-05T19:46:55.096547Z","publishedAt":"2026-08-05T19:46:55.096547Z","registryName":"io.datadef/mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.writing","name":"Writing & Editing","confidence":1,"provenance":"derived"},{"slug":"dev.version-control","name":"Version Control","confidence":1,"provenance":"derived"},{"slug":"dev.docs-lookup","name":"Documentation Lookup","confidence":0.54,"provenance":"derived"}],"categories":["content","dev"]},"observed":{"status":"live","statusReason":"Responded 6h ago.","lastOkAt":"2026-09-06T02:27:42.084Z","lastProbedAt":"2026-09-06T02:27:42.084Z","statusComputedAt":"2026-09-06T02:28:29.239Z","reliability30d":{"probes":1,"successRate":1,"p50Ms":70},"latestObservations":[{"at":"2026-09-06T02:27:42.084Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":70,"error":null,"detail":{"tools":[{"name":"get_design_guide","description":"Datadef's standard for what makes a diagram readable, size, edge discipline, nested zones, annotations, and the tool order for building or editing. Read this BE"},{"name":"canvas_describe_canvas","description":"Get an overview of the current canvas: every node with its id, type, label and group, plus all connections and groups. Call this first, before any edit, so you "},{"name":"canvas_inspect_nodes","description":"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"},{"name":"canvas_measure_canvas","description":"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, r"},{"name":"canvas_suggest_simplifications","description":"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 t"},{"name":"canvas_search_icons","description":"Search Datadef's icon library (2000+ cloud and data-tool logos) for a valid icon id. Use it when you want a specific vendor logo and are unsure of its exact id "},{"name":"canvas_add_nodes","description":"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 your"},{"name":"canvas_add_standalone_node","description":"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 wi"},{"name":"canvas_update_nodes","description":"Change properties of existing nodes. Only the fields you pass are touched; everything else is preserved. To replace a table's columns use canvas_set_columns ins"},{"name":"canvas_replace_node","description":"Swap a node for a different one while keeping every connection, its position, and its group. Use this when a component changes — Redshift becomes Snowflake, a b"},{"name":"canvas_remove_nodes","description":"Delete nodes and every edge touching them. Deleting a group also deletes the nodes inside it — check with canvas_describe_canvas first if that is not what you w"},{"name":"canvas_connect_nodes","description":"Draw edges between nodes to show how data flows. Always label the edge with what actually happens (\"ingest\", \"dbt transform\", \"hourly sync\") — unlabelled edges "},{"name":"canvas_update_edges","description":"Change existing connections without deleting them: fix a label, change the type, or restyle. Use this to correct a wrong edge label rather than disconnecting an"},{"name":"canvas_disconnect_nodes","description":"Remove the edge between two nodes.\n\nOperates on one Datadef diagram, named by diagram_id."},{"name":"canvas_set_columns","description":"Set the full column list of a table node, replacing whatever it had. Pass every column you want to keep — this is a replace, not a merge. Mark primary and forei"},{"name":"canvas_group_nodes","description":"Create a labelled zone (e.g. \"Bronze Layer\", \"Ingestion\") and optionally move nodes into it. Zones are what turn a tangle of boxes into a readable architecture "},{"name":"canvas_move_to_group","description":"Move existing nodes into an existing group, or out of any group.\n\nOperates on one Datadef diagram, named by diagram_id."},{"name":"canvas_add_lineage","description":"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 "},{"name":"canvas_add_text","description":"Place a free-floating text box on the canvas — a caption, a callout, a section heading, a note explaining a decision. Position it with explicit coordinates from"},{"name":"canvas_add_shape","description":"Place a rectangle, circle, arrow, or line as a visual annotation — a backdrop highlighting a region, an arrow pointing something out, a divider. Shapes sit behi"},{"name":"canvas_add_flow_arrow","description":"Draw one large labelled arrow representing a whole flow — \"ingest\", \"serve\", \"publish\" — instead of many thin edges saying the same thing. Use this when several"},{"name":"canvas_add_region","description":"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 rathe"},{"name":"canvas_move_nodes","description":"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_measur"},{"name":"canvas_resize_nodes","description":"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 wha"},{"name":"canvas_align_nodes","description":"Align nodes to a shared edge or centre line, or space them evenly. Cleaner and far more reliable than computing coordinates by hand.\n\nOperates on one Datadef di"},{"name":"canvas_collapse_nodes","description":"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"},{"name":"canvas_layout_canvas","description":"Arrange the canvas. Call this once at the end, after all structural edits are done — not between each edit. By default only the parts you touched are re-arrange"},{"name":"canvas_validate_canvas","description":"Check the canvas for structural problems (disconnected nodes, circular data flow, broken references) and quality problems (unlabelled edges, tables without colu"},{"name":"create_diagram","description":"Generate a professional data architecture diagram from a description and save it to the user's Datadef account.\n\nUse this for any data-shaped diagram: medallion"},{"name":"create_blank_diagram","description":"Create an empty diagram and return its diagram_id, so you can build it yourself with the canvas_* tools. No AI generation runs and no credit is spent: you draw "},{"name":"list_diagrams","description":"List diagrams in the user's Datadef account, most recently updated first. Use this to find the id of a diagram before editing or exporting it."},{"name":"get_diagram","description":"Read the full structure of a diagram: every node with its type and columns, every connection, and the groups. Use this before editing so you know what is actual"},{"name":"edit_diagram","description":"Change an existing diagram with a natural-language instruction, add nodes, rewire connections, add columns, reorganise into layers, fill in owners and schedules"},{"name":"export_diagram","description":"Render a diagram to a PNG or JPEG image. Returns the image inline AND a short-lived signed download URL. Use the inline image to show the diagram; use the URL w"},{"name":"repo_status","description":"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"},{"name":"repo_refresh","description":"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 h"}],"toolCount":36,"serverName":"datadef","capabilities":["prompts","completions","tools"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_design_guide","description":"Datadef's standard for what makes a diagram readable, size, edge discipline, nested zones, annotations, and the tool order for building or editing. Read this BE"},{"name":"canvas_describe_canvas","description":"Get an overview of the current canvas: every node with its id, type, label and group, plus all connections and groups. Call this first, before any edit, so you "},{"name":"canvas_inspect_nodes","description":"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"},{"name":"canvas_measure_canvas","description":"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, r"},{"name":"canvas_suggest_simplifications","description":"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 t"},{"name":"canvas_search_icons","description":"Search Datadef's icon library (2000+ cloud and data-tool logos) for a valid icon id. Use it when you want a specific vendor logo and are unsure of its exact id "},{"name":"canvas_add_nodes","description":"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 your"},{"name":"canvas_add_standalone_node","description":"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 wi"},{"name":"canvas_update_nodes","description":"Change properties of existing nodes. Only the fields you pass are touched; everything else is preserved. To replace a table's columns use canvas_set_columns ins"},{"name":"canvas_replace_node","description":"Swap a node for a different one while keeping every connection, its position, and its group. Use this when a component changes — Redshift becomes Snowflake, a b"},{"name":"canvas_remove_nodes","description":"Delete nodes and every edge touching them. Deleting a group also deletes the nodes inside it — check with canvas_describe_canvas first if that is not what you w"},{"name":"canvas_connect_nodes","description":"Draw edges between nodes to show how data flows. Always label the edge with what actually happens (\"ingest\", \"dbt transform\", \"hourly sync\") — unlabelled edges "},{"name":"canvas_update_edges","description":"Change existing connections without deleting them: fix a label, change the type, or restyle. Use this to correct a wrong edge label rather than disconnecting an"},{"name":"canvas_disconnect_nodes","description":"Remove the edge between two nodes.\n\nOperates on one Datadef diagram, named by diagram_id."},{"name":"canvas_set_columns","description":"Set the full column list of a table node, replacing whatever it had. Pass every column you want to keep — this is a replace, not a merge. Mark primary and forei"},{"name":"canvas_group_nodes","description":"Create a labelled zone (e.g. \"Bronze Layer\", \"Ingestion\") and optionally move nodes into it. Zones are what turn a tangle of boxes into a readable architecture "},{"name":"canvas_move_to_group","description":"Move existing nodes into an existing group, or out of any group.\n\nOperates on one Datadef diagram, named by diagram_id."},{"name":"canvas_add_lineage","description":"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 "},{"name":"canvas_add_text","description":"Place a free-floating text box on the canvas — a caption, a callout, a section heading, a note explaining a decision. Position it with explicit coordinates from"},{"name":"canvas_add_shape","description":"Place a rectangle, circle, arrow, or line as a visual annotation — a backdrop highlighting a region, an arrow pointing something out, a divider. Shapes sit behi"},{"name":"canvas_add_flow_arrow","description":"Draw one large labelled arrow representing a whole flow — \"ingest\", \"serve\", \"publish\" — instead of many thin edges saying the same thing. Use this when several"},{"name":"canvas_add_region","description":"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 rathe"},{"name":"canvas_move_nodes","description":"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_measur"},{"name":"canvas_resize_nodes","description":"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 wha"},{"name":"canvas_align_nodes","description":"Align nodes to a shared edge or centre line, or space them evenly. Cleaner and far more reliable than computing coordinates by hand.\n\nOperates on one Datadef di"},{"name":"canvas_collapse_nodes","description":"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"},{"name":"canvas_layout_canvas","description":"Arrange the canvas. Call this once at the end, after all structural edits are done — not between each edit. By default only the parts you touched are re-arrange"},{"name":"canvas_validate_canvas","description":"Check the canvas for structural problems (disconnected nodes, circular data flow, broken references) and quality problems (unlabelled edges, tables without colu"},{"name":"create_diagram","description":"Generate a professional data architecture diagram from a description and save it to the user's Datadef account.\n\nUse this for any data-shaped diagram: medallion"},{"name":"create_blank_diagram","description":"Create an empty diagram and return its diagram_id, so you can build it yourself with the canvas_* tools. No AI generation runs and no credit is spent: you draw "},{"name":"list_diagrams","description":"List diagrams in the user's Datadef account, most recently updated first. Use this to find the id of a diagram before editing or exporting it."},{"name":"get_diagram","description":"Read the full structure of a diagram: every node with its type and columns, every connection, and the groups. Use this before editing so you know what is actual"},{"name":"edit_diagram","description":"Change an existing diagram with a natural-language instruction, add nodes, rewire connections, add columns, reorganise into layers, fill in owners and schedules"},{"name":"export_diagram","description":"Render a diagram to a PNG or JPEG image. Returns the image inline AND a short-lived signed download URL. Use the inline image to show the diagram; use the URL w"},{"name":"repo_status","description":"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"},{"name":"repo_refresh","description":"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 h"}],"package":null},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.datadef/mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/io.datadef%2Fmcp","firstSeenAt":"2026-09-06T00:20:36.798Z","fetchedAt":"2026-09-06T00:20:36.798Z","normalizedAt":"2026-09-06T00:20:36.798Z"}]},"firstSeenAt":"2026-09-06T00:20:36.798Z","updatedAt":"2026-09-06T02:28:36.640Z"}