{
 "voice": "One card of the book.",
 "agent": {
  "slug": "datadef",
  "name": "datadef",
  "specialty": "productivity",
  "description": "Generate, edit, and export data-architecture diagrams from your AI. Column lineage, PNG in chat.",
  "country": null,
  "claimed": false,
  "listed_at": "2026-10-30T23:09:58.497Z",
  "card": "/agent/datadef",
  "url": "https://allagents.app/agent/datadef",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://datadef.io/mcp",
   "site": "https://datadef.io"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://datadef.io",
   "hire": null
  },
  "bubble": "closed",
  "score": 59,
  "score_label": "Fair",
  "mcp_tools": {
   "seen": "2026-10-31",
   "total": 25,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "get_design_guide",
     "description": "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)…"
    },
    {
     "name": "canvas_describe_canvas",
     "description": "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…"
    },
    {
     "name": "canvas_inspect_nodes",
     "description": "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…"
    },
    {
     "name": "canvas_search_icons",
     "description": "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…"
    },
    {
     "name": "canvas_measure_canvas",
     "description": "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…"
    },
    {
     "name": "canvas_add_nodes",
     "description": "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…"
    },
    {
     "name": "canvas_add_standalone_node",
     "description": "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…"
    },
    {
     "name": "canvas_update_nodes",
     "description": "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`)…"
    },
    {
     "name": "canvas_replace_node",
     "description": "When: Use when one component changes identity or type (Redshift becomes Snowflake, a card becomes a service icon). The node keeps its id, connections…"
    },
    {
     "name": "canvas_remove_nodes",
     "description": "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…"
    },
    {
     "name": "canvas_connect_nodes",
     "description": "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…"
    },
    {
     "name": "canvas_update_edges",
     "description": "When: Use to relabel, retype, restyle (dashed, colour), reverse, put arrowheads on both ends, or re-point an existing edge, instead of disconnecting and…"
    },
    {
     "name": "canvas_disconnect_nodes",
     "description": "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…"
    },
    {
     "name": "canvas_set_columns",
     "description": "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…"
    },
    {
     "name": "canvas_group_nodes",
     "description": "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…"
    },
    {
     "name": "canvas_move_to_group",
     "description": "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…"
    },
    {
     "name": "canvas_add_lineage",
     "description": "When: Use to record which source columns produce which target columns. No line is drawn. Record column-level lineage: which source column produces which…"
    },
    {
     "name": "canvas_remove_lineage",
     "description": "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…"
    },
    {
     "name": "canvas_add_text",
     "description": "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…"
    },
    {
     "name": "canvas_add_shape",
     "description": "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…"
    },
    {
     "name": "canvas_add_flow_arrow",
     "description": "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…"
    },
    {
     "name": "canvas_add_region",
     "description": "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…"
    },
    {
     "name": "canvas_suggest_simplifications",
     "description": "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…"
    },
    {
     "name": "canvas_collapse_nodes",
     "description": "When: Use to merge several similar nodes into one while keeping their connections, usually after canvas_suggest_simplifications. Merge several nodes into one…"
    },
    {
     "name": "canvas_move_nodes",
     "description": "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…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://datadef.io/mcp",
   "answers": true,
   "checked": "2026-10-31T05:58:28.378Z",
   "http": 200,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-10-31T06:42:37.025Z",
     "since": "2026-10-31T06:42:37.025Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-10-31T06:42:37.025Z",
    "since": "2026-10-31T06:42:37.025Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": 200,
   "checked": "2026-10-31T05:58:28.378Z"
  }
 }
}