Immutable agent diagrams: create, edit, validate and render versioned diagrams over MCP.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Saves a new diagram from a DSP scene or Mermaid text; returns its id, revision 1, content hash and chain hash. key is your stable name for it, unique in the workspace: your repeat with the same key and content returns the existing diagram, not a copy. brief stores context for the next agent. Versions are kept until you delete the diagram or its workspace is deleted.
e.g. payments-architecture
What the diagram shows, conventions to keep, decisions made
https://zindex.ai/schemas/scene.schema.json
erDiagram or flowchart (graph); drops subgraphs, edges to them and styles
One line on why it was made
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Saves a new diagram from a DSP scene or Mermaid text; returns its id, revision 1, content hash and chain hash. key is your stable name for it, unique in the workspace: your repeat with the same key and content returns the existing diagram, not a copy. brief stores context for the next agent. Versions are kept until you delete the diagram or its workspace is deleted.
| Argument | Type | Description |
|---|---|---|
| key | string | e.g. payments-architecture |
| brief | string | What the diagram shows, conventions to keep, decisions made |
| scene | object | https://zindex.ai/schemas/scene.schema.json |
| mermaid | string | erDiagram or flowchart (graph); drops subgraphs, edges to them and styles |
| message | string | One line on why it was made |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"key": {
"type": "string",
"maxLength": 128,
"description": "e.g. payments-architecture"
},
"brief": {
"type": "string",
"maxLength": 1000,
"description": "What the diagram shows, conventions to keep, decisions made"
},
"scene": {
"type": "object",
"description": "https://zindex.ai/schemas/scene.schema.json",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"mermaid": {
"type": "string",
"maxLength": 65536,
"description": "erDiagram or flowchart (graph); drops subgraphs, edges to them and styles"
},
"message": {
"type": "string",
"maxLength": 500,
"description": "One line on why it was made"
}
}
}Deletes a diagram with all its versions. undo restores it within 24 hours; after that it is gone. Asks the user to confirm.
| Argument | Type | Description |
|---|---|---|
| id* | string | The diagram's id or key |
| undo | boolean | Restore a deleted diagram |
| confirm | string | Token from CONFIRMATION_REQUIRED |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The diagram's id or key"
},
"undo": {
"type": "boolean",
"description": "Restore a deleted diagram"
},
"confirm": {
"type": "string",
"description": "Token from CONFIRMATION_REQUIRED"
}
}
}Changes a saved diagram as a new revision; old ones stay. Give baseRevision (the revision you last read), a one-line message, and ops (typed operations, https://zindex.ai/schemas/ops.schema.json), mermaid (the whole diagram edited from view mermaid; only differences apply), restoreRevision (an earlier version back), or brief. An edit with an error saves nothing; one that changes nothing returns noop. requestId makes a retry return the first result. A conflict lists what changed.
| Argument | Type | Description |
|---|---|---|
| id* | string | The diagram's id or key |
| ops | array | |
| brief | any | Replace the brief; null removes it |
| mermaid | string | The whole diagram as Mermaid; not with ops or restoreRevision |
| message* | string | One line on what the edit does and why |
| requestId | string | Your id for this edit, e.g. a UUID |
| baseRevision* | integer | |
| restoreRevision | any | A revision number, or { asOf } for the version current at that instant |
Lists this workspace's diagrams, latest version first. query matches the title, key or brief, ignoring case.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Default 10 |
| query | string | |
| cursor | string | nextCursor from the previous page |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Default 10"
},
"query": {
"type": "string",
"maxLength": 200
},
"cursor": {
"type": "string",
"description": "nextCursor from the previous page"
}
}
}Reads a diagram by id or key. The default outline: a header (id, title, revision, time, hash), the brief, recent versions, one element per line nested by container, and edges as 'id: from -> to'. view 'dsp' returns the scene JSON, 'mermaid' Mermaid to edit and send back to diagram_edit. revision or asOf reads an earlier version; knownRevision, only what changed since; elements, only those elements and their neighbors. Another workspace's diagram answers NOT_FOUND.
| Argument | Type | Description |
|---|---|---|
| id* | string | The diagram's id or key |
| asOf | string | 2026-06-30 (end of day, UTC) or ISO 8601 with an offset |
| view | string | Default outline |
| cursor | string | nextCursor from the previous page |
| elements | array | Element ids to focus on |
| revision | integer | Omit for the latest |
| knownRevision | integer | A revision you already know |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The diagram's id or key"
},
"asOf": {
"type": "string",
"description": "2026-06-30 (end of day, UTC) or ISO 8601 with an offset"
},
"view": {
"enum": [
"outline",
"dsp",
"mermaid"
],
"type": "string",
"description": "Default outline"
},
"cursor": {
"type": "string",
"description": "nextCursor from the previous page"
},
"elements": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 50,
"description": "Element ids to focus on"
},
"revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Omit for the latest"
},
"knownRevision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "A revision you already know"
}
}
}Lists a diagram's versions, newest first, with time, who made it (by), client, message, chain hash and counts of elements added, changed and removed. compare (from and to: revision numbers or dates) returns what changed between two versions instead.
| Argument | Type | Description |
|---|---|---|
| id* | string | The diagram's id or key |
| limit | integer | Default 10 |
| cursor | string | nextCursor from the previous page |
| compare | object |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The diagram's id or key"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "Default 10"
},
"cursor": {
"type": "string",
"description": "nextCursor from the previous page"
},
"compare": {
"type": "object",
"required": [
"from"
],
"properties": {
"to": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
{
"type": "string"
}
],
"description": "Default the latest"
},
"from": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
{
"type": "string"
}
]
}
}
}
}
}SVG and PNG links to a saved diagram's version, not the image, with hashes and engine version. A published diagram's links are permanent (url is its page); others last 7 days. preview adds a PNG. Artifacts, slides and PDFs need the png file itself. scene or mermaid instead of id previews an unsaved diagram.
| Argument | Type | Description |
|---|---|---|
| id | string | The diagram's id or key |
| asOf | string | 2026-06-30 (end of day, UTC) or ISO 8601 with an offset |
| scene | object | https://zindex.ai/schemas/scene.schema.json |
| mermaid | string | erDiagram or flowchart (graph); drops subgraphs, edges to them and styles |
| preview | boolean | |
| revision | integer | Omit for the latest |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"id": {
"type": "string",
"description": "The diagram's id or key"
},
"asOf": {
"type": "string",
"description": "2026-06-30 (end of day, UTC) or ISO 8601 with an offset"
},
"scene": {
"type": "object",
"description": "https://zindex.ai/schemas/scene.schema.json",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"mermaid": {
"type": "string",
"maxLength": 65536,
"description": "erDiagram or flowchart (graph); drops subgraphs, edges to them and styles"
},
"preview": {
"type": "boolean"
},
"revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Omit for the latest"
}
}
}publish makes a diagram readable by anyone at its link; unpublish makes it private. link makes a share link showing its images, not its scene, to anyone who has it; unlink revokes them all. report sends one version to Zindex support. feedback sends Zindex staff a bug, docs (the docs and engine disagree), request or other; id or snippet attaches a diagram. Asks the user to confirm publish, link, report and feedback.
| Argument | Type | Description |
|---|---|---|
| id | string | The diagram's id or key |
| kind | string | |
| action* | string | |
| confirm | string | Token from CONFIRMATION_REQUIRED |
| problem | string | For report: what is wrong, in one line |
| snippet | any | A scene or Mermaid, 64 KB at most |
| summary | string | For feedback, required: one line |
| expected | string | |
| observed | string |
Checks a DSP scene or Mermaid text without saving it. Returns ok, errors and warnings, each with a code, the element if any, and a one-line fix.
| Argument | Type | Description |
|---|---|---|
| scene | object | https://zindex.ai/schemas/scene.schema.json |
| mermaid | string | erDiagram or flowchart (graph); drops subgraphs, edges to them and styles |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"scene": {
"type": "object",
"description": "https://zindex.ai/schemas/scene.schema.json",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"mermaid": {
"type": "string",
"maxLength": 65536,
"description": "erDiagram or flowchart (graph); drops subgraphs, edges to them and styles"
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id",
"baseRevision",
"message"
],
"properties": {
"id": {
"type": "string",
"description": "The diagram's id or key"
},
"ops": {
"type": "array",
"items": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"maxItems": 500
},
"brief": {
"anyOf": [
{
"type": "string",
"maxLength": 1000
},
{
"type": "null"
}
],
"description": "Replace the brief; null removes it"
},
"mermaid": {
"type": "string",
"maxLength": 65536,
"description": "The whole diagram as Mermaid; not with ops or restoreRevision"
},
"message": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "One line on what the edit does and why"
},
"requestId": {
"type": "string",
"pattern": "^[!-~]+$",
"maxLength": 255,
"minLength": 1,
"description": "Your id for this edit, e.g. a UUID"
},
"baseRevision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
"restoreRevision": {
"anyOf": [
{
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1
},
{
"type": "object",
"required": [
"asOf"
],
"properties": {
"asOf": {
"type": "string"
}
}
}
],
"description": "A revision number, or { asOf } for the version current at that instant"
}
}
}| revision | integer | For report or feedback; default the latest |
| anonymize | boolean | For report and feedback; default true |
| confidence | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"action"
],
"properties": {
"id": {
"type": "string",
"description": "The diagram's id or key"
},
"kind": {
"enum": [
"bug",
"docs",
"request",
"other"
],
"type": "string"
},
"action": {
"enum": [
"publish",
"unpublish",
"link",
"unlink",
"report",
"feedback"
],
"type": "string"
},
"confirm": {
"type": "string",
"description": "Token from CONFIRMATION_REQUIRED"
},
"problem": {
"type": "string",
"maxLength": 500,
"description": "For report: what is wrong, in one line"
},
"snippet": {
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {},
"additionalProperties": {}
}
],
"description": "A scene or Mermaid, 64 KB at most"
},
"summary": {
"type": "string",
"maxLength": 200,
"description": "For feedback, required: one line"
},
"expected": {
"type": "string",
"maxLength": 2000
},
"observed": {
"type": "string",
"maxLength": 2000
},
"revision": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "For report or feedback; default the latest"
},
"anonymize": {
"type": "boolean",
"description": "For report and feedback; default true"
},
"confidence": {
"enum": [
"seen",
"likely",
"unsure"
],
"type": "string"
}
}
}