Skip to main content
Glama

Create documents and diagrams

document

Create long-form artifacts. action = create (a document — a plan, spec, or imported file) | create_diagram (a d2 diagram node). For create, pass the body inline or a repo-relative file_path for the server to read. file_path works only on a local connection; over a hosted connection pass the body inline. Recall and search surface a document by title only; read its body with fetch.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
dataYesThe action-specific result returned by Stele.
actionYesThe action that produced this result.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create\": Add a document — a large multi-section markdown artifact (plan, audit, design spec, retrospective). Use over knowledge(action=\"create\") when content is long/narrative rather than a single short structured fact. Documents are surfaced by recall by title only; the body is never auto-injected, so an agent must call fetch DOC-N to read it. component_id is optional (omit to land at the project root; re-parent later via node(action=\"update\")). For the body pass exactly one of `body` (inline markdown) or `file_path` (repo-relative path the server reads, UTF-8 only, max 1 MB) — or neither for a title-only stub. file_path works only on a local connection; over a hosted connection pass the body inline.",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "The artifact body: for create, markdown (multi-section is fine — the whole point of a document is a long narrative; no upper bound; mutually exclusive with `file_path`). For create_diagram, d2 source. Write prose in plain style: one idea per sentence, active voice, lead with the condition, one term per concept, exact technical names.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "anyOf": [
      -          {
      -            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional parent component shareable id. Omit to land the doc at the project root."
      -      },
      -      "file_path": {
      -        "description": "(create only) Optional alternative to `body`. Path relative to the MCP server's cwd (the session working directory). The server reads the file and uses its content as the body — use this to import existing repo docs without burning agent context. UTF-8 text only, max 1 MB. Mutually exclusive with `body`. Stdio-only.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "privacy_bypass": {
      -        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      -        "type": "boolean"
      -      },
      -      "privacy_false_positive": {
      -        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      -        "type": "boolean"
      -      },
      -      "privacy_judgement_id": {
      -        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      -        "type": "string"
      -      },
      -      "privacy_note": {
      -        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      -        "maxLength": 500,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "source": {
      -        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04', 'pr:stele#117', 'meeting:planning-q2'. When `file_path` is used and `source` is omitted, defaults to 'file:<relative-path>'.",
      -        "maxLength": 500,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "source_url": {
      -        "description": "Optional canonical URL for the source — Notion page, Google doc, PR description, etc.",
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "REQUIRED for create/create_diagram — one-line summary, e.g. \"v1.5 implementation plan\".",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list (\"plan\", \"audit\", \"v1.5\").",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create_diagram\": Add a diagram — a visual design artifact (architecture, workflow, sequence, or flow diagram) authored in d2 source and rendered to an SVG on its page. Use when a picture explains a design better than prose: the diagram lives in the graph as a durable, referenceable node the next agent and the human can open. The `body` is d2 source — it is rendered server-side (you never write the image). Diagram source is excluded from search and recall (it's structural), but the title + topics stay findable and any shareable ids you label in the diagram (e.g. TASK-123) still create mention links. To show the rendered diagram inline in another node's body, embed it with `{{DIAG-N:short description}}` — it renders as a live image there, not just a link. component_id is optional (omit to land at the project root).",
      -    "properties": {
      -      "action": {
      -        "const": "create_diagram",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "The diagram source, written in d2 (the terrastruct.com/d2 language). It is rendered to an SVG (and ASCII) on the diagram's page — you author the source, not the image. Keep it valid d2; load the d2 authoring guidance if you're unsure of the syntax.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "anyOf": [
      -          {
      -            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional parent component shareable id. Omit to land the diagram at the project root."
      -      },
      -      "privacy_bypass": {
      -        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      -        "type": "boolean"
      -      },
      -      "privacy_false_positive": {
      -        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      -        "type": "boolean"
      -      },
      -      "privacy_judgement_id": {
      -        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      -        "type": "string"
      -      },
      -      "privacy_note": {
      -        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      -        "maxLength": 500,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "source": {
      -        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04' or 'design:sign-in'.",
      -        "maxLength": 500,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "source_url": {
      -        "description": "Optional canonical URL for the source.",
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "One-line summary, e.g. \"Sign-in sequence\" or \"Service topology\".",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list (\"architecture\", \"sequence\", \"auth\").",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "title"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "document action \"create\".",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "description": "Run the create action.",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "The artifact body: for create, markdown (multi-section is fine — the whole point of a document is a long narrative; no upper bound; mutually exclusive with `file_path`). For create_diagram, d2 source. Write prose in plain style: one idea per sentence, active voice, lead with the condition, one term per concept, exact technical names.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "anyOf": [
      +          {
      +            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional parent component shareable id. Omit to land the doc at the project root."
      +      },
      +      "file_path": {
      +        "description": "(create only) Optional alternative to `body`. Path relative to the MCP server's cwd (the session working directory). The server reads the file and uses its content as the body — use this to import existing repo docs without burning agent context. UTF-8 text only, max 1 MB. Mutually exclusive with `body`. Stdio-only.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04', 'pr:stele#117', 'meeting:planning-q2'. When `file_path` is used and `source` is omitted, defaults to 'file:<relative-path>'.",
      +        "maxLength": 500,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "source_url": {
      +        "description": "Optional canonical URL for the source — Notion page, Google doc, PR description, etc.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "REQUIRED for create/create_diagram — one-line summary, e.g. \"v1.5 implementation plan\".",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list (\"plan\", \"audit\", \"v1.5\").",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "document action \"create_diagram\".",
      +    "properties": {
      +      "action": {
      +        "const": "create_diagram",
      +        "description": "Run the create_diagram action.",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "The diagram source, written in d2 (the terrastruct.com/d2 language). It is rendered to an SVG (and ASCII) on the diagram's page — you author the source, not the image. Keep it valid d2; load the d2 authoring guidance if you're unsure of the syntax.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "anyOf": [
      +          {
      +            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional parent component shareable id. Omit to land the diagram at the project root."
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04' or 'design:sign-in'.",
      +        "maxLength": 500,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "source_url": {
      +        "description": "Optional canonical URL for the source.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "One-line summary, e.g. \"Sign-in sequence\" or \"Service topology\".",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list (\"architecture\", \"sequence\", \"auth\").",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "title"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create\": Add a document — a large multi-section markdown artifact (plan, audit, design spec, retrospective). Use over knowledge(action=\"create\") when content is long/narrative rather than a single short structured fact. Documents are surfaced by recall by title only; the body is never auto-injected, so an agent must call fetch DOC-N to read it. component_id is optional (omit to land at the project root; re-parent later via node(action=\"update\")). For the body pass exactly one of `body` (inline markdown) or `file_path` (repo-relative path the server reads, UTF-8 only, max 1 MB) — or neither for a title-only stub. file_path works only on a local connection; over a hosted connection pass the body inline.",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "The artifact body: for create, markdown (multi-section is fine — the whole point of a document is a long narrative; no upper bound; mutually exclusive with `file_path`). For create_diagram, d2 source. Write prose in plain style: one idea per sentence, active voice, lead with the condition, one term per concept, exact technical names.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "anyOf": [
      -          {
      -            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional parent component shareable id. Omit to land the doc at the project root."
      -      },
      -      "file_path": {
      -        "description": "(create only) Optional alternative to `body`. Path relative to the MCP server's cwd (the session working directory). The server reads the file and uses its content as the body — use this to import existing repo docs without burning agent context. UTF-8 text only, max 1 MB. Mutually exclusive with `body`. Stdio-only.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "privacy_bypass": {
      -        "description": "true writes despite a privacy flag on a public project. Only meaningful after a flag; the user decides whether the content can be public.",
      -        "type": "boolean"
      -      },
      -      "privacy_false_positive": {
      -        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      -        "type": "boolean"
      -      },
      -      "privacy_judgement_id": {
      -        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      -        "type": "string"
      -      },
      -      "privacy_note": {
      -        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      -        "maxLength": 500,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "source": {
      -        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04', 'pr:stele#117', 'meeting:planning-q2'. When `file_path` is used and `source` is omitted, defaults to 'file:<relative-path>'.",
      -        "maxLength": 500,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "source_url": {
      -        "description": "Optional canonical URL for the source — Notion page, Google doc, PR description, etc.",
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "REQUIRED for create/create_diagram — one-line summary, e.g. \"v1.5 implementation plan\".",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list (\"plan\", \"audit\", \"v1.5\").",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create_diagram\": Add a diagram — a visual design artifact (architecture, workflow, sequence, or flow diagram) authored in d2 source and rendered to an SVG on its page. Use when a picture explains a design better than prose: the diagram lives in the graph as a durable, referenceable node the next agent and the human can open. The `body` is d2 source — it is rendered server-side (you never write the image). Diagram source is excluded from search and recall (it's structural), but the title + topics stay findable and any shareable ids you label in the diagram (e.g. TASK-123) still create mention links. To show the rendered diagram inline in another node's body, embed it with `{{DIAG-N:short description}}` — it renders as a live image there, not just a link. component_id is optional (omit to land at the project root).",
      -    "properties": {
      -      "action": {
      -        "const": "create_diagram",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "The diagram source, written in d2 (the terrastruct.com/d2 language). It is rendered to an SVG (and ASCII) on the diagram's page — you author the source, not the image. Keep it valid d2; load the d2 authoring guidance if you're unsure of the syntax.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "anyOf": [
      -          {
      -            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional parent component shareable id. Omit to land the diagram at the project root."
      -      },
      -      "privacy_bypass": {
      -        "description": "true writes despite a privacy flag on a public project. Only meaningful after a flag; the user decides whether the content can be public.",
      -        "type": "boolean"
      -      },
      -      "privacy_false_positive": {
      -        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      -        "type": "boolean"
      -      },
      -      "privacy_judgement_id": {
      -        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      -        "type": "string"
      -      },
      -      "privacy_note": {
      -        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      -        "maxLength": 500,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "source": {
      -        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04' or 'design:sign-in'.",
      -        "maxLength": 500,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "source_url": {
      -        "description": "Optional canonical URL for the source.",
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "One-line summary, e.g. \"Sign-in sequence\" or \"Service topology\".",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list (\"architecture\", \"sequence\", \"auth\").",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "title"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create\": Add a document — a large multi-section markdown artifact (plan, audit, design spec, retrospective). Use over knowledge(action=\"create\") when content is long/narrative rather than a single short structured fact. Documents are surfaced by recall by title only; the body is never auto-injected, so an agent must call fetch DOC-N to read it. component_id is optional (omit to land at the project root; re-parent later via node(action=\"update\")). For the body pass exactly one of `body` (inline markdown) or `file_path` (repo-relative path the server reads, UTF-8 only, max 1 MB) — or neither for a title-only stub. file_path works only on a local connection; over a hosted connection pass the body inline.",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "The artifact body: for create, markdown (multi-section is fine — the whole point of a document is a long narrative; no upper bound; mutually exclusive with `file_path`). For create_diagram, d2 source. Write prose in plain style: one idea per sentence, active voice, lead with the condition, one term per concept, exact technical names.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "anyOf": [
      +          {
      +            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional parent component shareable id. Omit to land the doc at the project root."
      +      },
      +      "file_path": {
      +        "description": "(create only) Optional alternative to `body`. Path relative to the MCP server's cwd (the session working directory). The server reads the file and uses its content as the body — use this to import existing repo docs without burning agent context. UTF-8 text only, max 1 MB. Mutually exclusive with `body`. Stdio-only.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04', 'pr:stele#117', 'meeting:planning-q2'. When `file_path` is used and `source` is omitted, defaults to 'file:<relative-path>'.",
      +        "maxLength": 500,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "source_url": {
      +        "description": "Optional canonical URL for the source — Notion page, Google doc, PR description, etc.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "REQUIRED for create/create_diagram — one-line summary, e.g. \"v1.5 implementation plan\".",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list (\"plan\", \"audit\", \"v1.5\").",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create_diagram\": Add a diagram — a visual design artifact (architecture, workflow, sequence, or flow diagram) authored in d2 source and rendered to an SVG on its page. Use when a picture explains a design better than prose: the diagram lives in the graph as a durable, referenceable node the next agent and the human can open. The `body` is d2 source — it is rendered server-side (you never write the image). Diagram source is excluded from search and recall (it's structural), but the title + topics stay findable and any shareable ids you label in the diagram (e.g. TASK-123) still create mention links. To show the rendered diagram inline in another node's body, embed it with `{{DIAG-N:short description}}` — it renders as a live image there, not just a link. component_id is optional (omit to land at the project root).",
      +    "properties": {
      +      "action": {
      +        "const": "create_diagram",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "The diagram source, written in d2 (the terrastruct.com/d2 language). It is rendered to an SVG (and ASCII) on the diagram's page — you author the source, not the image. Keep it valid d2; load the d2 authoring guidance if you're unsure of the syntax.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "anyOf": [
      +          {
      +            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional parent component shareable id. Omit to land the diagram at the project root."
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag. Only meaningful after a flag; the user decides whether the content can be written.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04' or 'design:sign-in'.",
      +        "maxLength": 500,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "source_url": {
      +        "description": "Optional canonical URL for the source.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "One-line summary, e.g. \"Sign-in sequence\" or \"Service topology\".",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list (\"architecture\", \"sequence\", \"auth\").",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "title"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create\": Add a document — a large multi-section markdown artifact (plan, audit, design spec, retrospective). Use over knowledge(action=\"create\") when content is long/narrative rather than a single short structured fact. Documents are surfaced by recall by title only; the body is never auto-injected, so an agent must call fetch DOC-N to read it. component_id is optional (omit to land at the project root; re-parent later via node(action=\"update\")). For the body pass exactly one of `body` (inline markdown) or `file_path` (repo-relative path the server reads, UTF-8 only, max 1 MB) — or neither for a title-only stub. file_path works only on a local connection; over a hosted connection pass the body inline.",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "The artifact body: for create, markdown (multi-section is fine — the whole point of a document is a long narrative; no upper bound; mutually exclusive with `file_path`). For create_diagram, d2 source. Write prose in plain style: one idea per sentence, active voice, lead with the condition, one term per concept, exact technical names.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "anyOf": [
      -          {
      -            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional parent component shareable id. Omit to land the doc at the project root."
      -      },
      -      "file_path": {
      -        "description": "(create only) Optional alternative to `body`. Path relative to the MCP server's cwd (the session working directory). The server reads the file and uses its content as the body — use this to import existing repo docs without burning agent context. UTF-8 text only, max 1 MB. Mutually exclusive with `body`. Stdio-only.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "source": {
      -        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04', 'pr:stele#117', 'meeting:planning-q2'. When `file_path` is used and `source` is omitted, defaults to 'file:<relative-path>'.",
      -        "maxLength": 500,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "source_url": {
      -        "description": "Optional canonical URL for the source — Notion page, Google doc, PR description, etc.",
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "REQUIRED for create/create_diagram — one-line summary, e.g. \"v1.5 implementation plan\".",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list (\"plan\", \"audit\", \"v1.5\").",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create_diagram\": Add a diagram — a visual design artifact (architecture, workflow, sequence, or flow diagram) authored in d2 source and rendered to an SVG on its page. Use when a picture explains a design better than prose: the diagram lives in the graph as a durable, referenceable node the next agent and the human can open. The `body` is d2 source — it is rendered server-side (you never write the image). Diagram source is excluded from search and recall (it's structural), but the title + topics stay findable and any shareable ids you label in the diagram (e.g. TASK-123) still create mention links. To show the rendered diagram inline in another node's body, embed it with `{{DIAG-N:short description}}` — it renders as a live image there, not just a link. component_id is optional (omit to land at the project root).",
      -    "properties": {
      -      "action": {
      -        "const": "create_diagram",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "The diagram source, written in d2 (the terrastruct.com/d2 language). It is rendered to an SVG (and ASCII) on the diagram's page — you author the source, not the image. Keep it valid d2; load the d2 authoring guidance if you're unsure of the syntax.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "anyOf": [
      -          {
      -            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional parent component shareable id. Omit to land the diagram at the project root."
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "source": {
      -        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04' or 'design:sign-in'.",
      -        "maxLength": 500,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "source_url": {
      -        "description": "Optional canonical URL for the source.",
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "One-line summary, e.g. \"Sign-in sequence\" or \"Service topology\".",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list (\"architecture\", \"sequence\", \"auth\").",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "title"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create\": Add a document — a large multi-section markdown artifact (plan, audit, design spec, retrospective). Use over knowledge(action=\"create\") when content is long/narrative rather than a single short structured fact. Documents are surfaced by recall by title only; the body is never auto-injected, so an agent must call fetch DOC-N to read it. component_id is optional (omit to land at the project root; re-parent later via node(action=\"update\")). For the body pass exactly one of `body` (inline markdown) or `file_path` (repo-relative path the server reads, UTF-8 only, max 1 MB) — or neither for a title-only stub. file_path works only on a local connection; over a hosted connection pass the body inline.",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "The artifact body: for create, markdown (multi-section is fine — the whole point of a document is a long narrative; no upper bound; mutually exclusive with `file_path`). For create_diagram, d2 source. Write prose in plain style: one idea per sentence, active voice, lead with the condition, one term per concept, exact technical names.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "anyOf": [
      +          {
      +            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional parent component shareable id. Omit to land the doc at the project root."
      +      },
      +      "file_path": {
      +        "description": "(create only) Optional alternative to `body`. Path relative to the MCP server's cwd (the session working directory). The server reads the file and uses its content as the body — use this to import existing repo docs without burning agent context. UTF-8 text only, max 1 MB. Mutually exclusive with `body`. Stdio-only.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag on a public project. Only meaningful after a flag; the user decides whether the content can be public.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04', 'pr:stele#117', 'meeting:planning-q2'. When `file_path` is used and `source` is omitted, defaults to 'file:<relative-path>'.",
      +        "maxLength": 500,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "source_url": {
      +        "description": "Optional canonical URL for the source — Notion page, Google doc, PR description, etc.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "REQUIRED for create/create_diagram — one-line summary, e.g. \"v1.5 implementation plan\".",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list (\"plan\", \"audit\", \"v1.5\").",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create_diagram\": Add a diagram — a visual design artifact (architecture, workflow, sequence, or flow diagram) authored in d2 source and rendered to an SVG on its page. Use when a picture explains a design better than prose: the diagram lives in the graph as a durable, referenceable node the next agent and the human can open. The `body` is d2 source — it is rendered server-side (you never write the image). Diagram source is excluded from search and recall (it's structural), but the title + topics stay findable and any shareable ids you label in the diagram (e.g. TASK-123) still create mention links. To show the rendered diagram inline in another node's body, embed it with `{{DIAG-N:short description}}` — it renders as a live image there, not just a link. component_id is optional (omit to land at the project root).",
      +    "properties": {
      +      "action": {
      +        "const": "create_diagram",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "The diagram source, written in d2 (the terrastruct.com/d2 language). It is rendered to an SVG (and ASCII) on the diagram's page — you author the source, not the image. Keep it valid d2; load the d2 authoring guidance if you're unsure of the syntax.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "anyOf": [
      +          {
      +            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional parent component shareable id. Omit to land the diagram at the project root."
      +      },
      +      "privacy_bypass": {
      +        "description": "true writes despite a privacy flag on a public project. Only meaningful after a flag; the user decides whether the content can be public.",
      +        "type": "boolean"
      +      },
      +      "privacy_false_positive": {
      +        "description": "With privacy_bypass: true reports the privacy flag as wrong.",
      +        "type": "boolean"
      +      },
      +      "privacy_judgement_id": {
      +        "description": "With privacy_bypass: the judgement_id the privacy flag returned.",
      +        "type": "string"
      +      },
      +      "privacy_note": {
      +        "description": "With privacy_bypass: an optional short reason, kept with the bypass.",
      +        "maxLength": 500,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04' or 'design:sign-in'.",
      +        "maxLength": 500,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "source_url": {
      +        "description": "Optional canonical URL for the source.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "One-line summary, e.g. \"Sign-in sequence\" or \"Service topology\".",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list (\"architecture\", \"sequence\", \"auth\").",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "title"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "document action \"create\".",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "description": "Run the create action.",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "The artifact body: for create, markdown (multi-section is fine — the whole point of a document is a long narrative; no upper bound; mutually exclusive with `file_path`). For create_diagram, d2 source. Write prose in plain style: one idea per sentence, active voice, lead with the condition, one term per concept, exact technical names.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "anyOf": [
      -          {
      -            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional parent component shareable id. Omit to land the doc at the project root."
      -      },
      -      "file_path": {
      -        "description": "(create only) Optional alternative to `body`. Path relative to the MCP server's cwd (the session working directory). The server reads the file and uses its content as the body — use this to import existing repo docs without burning agent context. UTF-8 text only, max 1 MB. Mutually exclusive with `body`. Stdio-only.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "source": {
      -        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04', 'pr:stele#117', 'meeting:planning-q2'. When `file_path` is used and `source` is omitted, defaults to 'file:<relative-path>'.",
      -        "maxLength": 500,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "source_url": {
      -        "description": "Optional canonical URL for the source — Notion page, Google doc, PR description, etc.",
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "REQUIRED for create/create_diagram — one-line summary, e.g. \"v1.5 implementation plan\".",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list (\"plan\", \"audit\", \"v1.5\").",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "title"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "document action \"create_diagram\".",
      -    "properties": {
      -      "action": {
      -        "const": "create_diagram",
      -        "description": "Run the create_diagram action.",
      -        "type": "string"
      -      },
      -      "body": {
      -        "description": "The diagram source, written in d2 (the terrastruct.com/d2 language). It is rendered to an SVG (and ASCII) on the diagram's page — you author the source, not the image. Keep it valid d2; load the d2 authoring guidance if you're unsure of the syntax.",
      -        "type": "string"
      -      },
      -      "component_id": {
      -        "anyOf": [
      -          {
      -            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "Optional parent component shareable id. Omit to land the diagram at the project root."
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "scope": {
      -        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      -        "type": "string"
      -      },
      -      "source": {
      -        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04' or 'design:sign-in'.",
      -        "maxLength": 500,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "source_url": {
      -        "description": "Optional canonical URL for the source.",
      -        "format": "uri",
      -        "type": "string"
      -      },
      -      "title": {
      -        "description": "One-line summary, e.g. \"Sign-in sequence\" or \"Service topology\".",
      -        "maxLength": 300,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "topics": {
      -        "description": "Short tag list (\"architecture\", \"sequence\", \"auth\").",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "title"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create\": Add a document — a large multi-section markdown artifact (plan, audit, design spec, retrospective). Use over knowledge(action=\"create\") when content is long/narrative rather than a single short structured fact. Documents are surfaced by recall by title only; the body is never auto-injected, so an agent must call fetch DOC-N to read it. component_id is optional (omit to land at the project root; re-parent later via node(action=\"update\")). For the body pass exactly one of `body` (inline markdown) or `file_path` (repo-relative path the server reads, UTF-8 only, max 1 MB) — or neither for a title-only stub. file_path works only on a local connection; over a hosted connection pass the body inline.",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "The artifact body: for create, markdown (multi-section is fine — the whole point of a document is a long narrative; no upper bound; mutually exclusive with `file_path`). For create_diagram, d2 source. Write prose in plain style: one idea per sentence, active voice, lead with the condition, one term per concept, exact technical names.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "anyOf": [
      +          {
      +            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional parent component shareable id. Omit to land the doc at the project root."
      +      },
      +      "file_path": {
      +        "description": "(create only) Optional alternative to `body`. Path relative to the MCP server's cwd (the session working directory). The server reads the file and uses its content as the body — use this to import existing repo docs without burning agent context. UTF-8 text only, max 1 MB. Mutually exclusive with `body`. Stdio-only.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04', 'pr:stele#117', 'meeting:planning-q2'. When `file_path` is used and `source` is omitted, defaults to 'file:<relative-path>'.",
      +        "maxLength": 500,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "source_url": {
      +        "description": "Optional canonical URL for the source — Notion page, Google doc, PR description, etc.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "REQUIRED for create/create_diagram — one-line summary, e.g. \"v1.5 implementation plan\".",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list (\"plan\", \"audit\", \"v1.5\").",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "title"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create_diagram\": Add a diagram — a visual design artifact (architecture, workflow, sequence, or flow diagram) authored in d2 source and rendered to an SVG on its page. Use when a picture explains a design better than prose: the diagram lives in the graph as a durable, referenceable node the next agent and the human can open. The `body` is d2 source — it is rendered server-side (you never write the image). Diagram source is excluded from search and recall (it's structural), but the title + topics stay findable and any shareable ids you label in the diagram (e.g. TASK-123) still create mention links. To show the rendered diagram inline in another node's body, embed it with `{{DIAG-N:short description}}` — it renders as a live image there, not just a link. component_id is optional (omit to land at the project root).",
      +    "properties": {
      +      "action": {
      +        "const": "create_diagram",
      +        "type": "string"
      +      },
      +      "body": {
      +        "description": "The diagram source, written in d2 (the terrastruct.com/d2 language). It is rendered to an SVG (and ASCII) on the diagram's page — you author the source, not the image. Keep it valid d2; load the d2 authoring guidance if you're unsure of the syntax.",
      +        "type": "string"
      +      },
      +      "component_id": {
      +        "anyOf": [
      +          {
      +            "description": "Shareable id: TASK-N (task), KNOW-N (knowledge), COMP-N (component), DOC-N (document), or NODE-N (any).",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "Optional parent component shareable id. Omit to land the diagram at the project root."
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "scope": {
      +        "description": "Workspace scope. Omit or 'auto' = scope to the workspace mapped to the current git branch, else trunk (shared truth). 'trunk' = force shared truth even on a branch. Or pass a workspace name/id to target it. Branch-scoped writes are invisible to collaborators off that workspace.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Optional free-form provenance label, e.g. 'session:2026-05-04' or 'design:sign-in'.",
      +        "maxLength": 500,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "source_url": {
      +        "description": "Optional canonical URL for the source.",
      +        "format": "uri",
      +        "type": "string"
      +      },
      +      "title": {
      +        "description": "One-line summary, e.g. \"Sign-in sequence\" or \"Service topology\".",
      +        "maxLength": 300,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "topics": {
      +        "description": "Short tag list (\"architecture\", \"sequence\", \"auth\").",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "title"
      +    ],
      +    "type": "object"
      +  }
      +]
  5. First observed

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare write (readOnlyHint=false) but non-destructive, so the bar for safety disclosure is partly met; the description adds substantive behavioral context beyond them — the console-only limitation of file_path, that hosted connections require inline bodies, and that branch-scoped writes are invisible to collaborators. It does not mention the privacy-flag/blocking flow, which is a meaningful write-path behavior covered only by the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the purpose and action split before the file_path caveat and the read-with-fetch pointer. Dense but every clause carries information; only the trailing sentence about recall/search sits slightly apart from the create-focused opening.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and annotations cover the safety profile. The description covers body sourcing, connection constraints, and the read-back path. The notable omission is the privacy-flag interception workflow (privacy_bypass/privacy_judgement_id), which affects whether a write succeeds and is only discoverable in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; every parameter including file_path, scope, and the privacy_* fields is already documented in schema. The description adds the mutually-exclusive framing of body vs file_path and the local-vs-hosted execution constraint, but little else beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ("Create long-form artifacts") and immediately enumerates the two actions with what each produces (a document — plan/spec/imported file — vs a d2 diagram node). It also distinguishes the creation surface from the read surfaces (recall, search, fetch), so the agent can tell it apart from siblings without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: use create for documents, create_diagram for d2 nodes, and use `fetch` to read a body since recall/search only surface titles. It also states the file_path-vs-inline condition tied to local vs hosted connections. Missing an explicit statement of when NOT to use this tool versus knowledge/task/node creation siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.