changedInput schema / anyOf
Previous value: -[
- {
- "additionalProperties": false,
- "description": "what=\"nodes\": Generic, paginated node listing — the lean single tool the typed CLI `list` commands ride on (knowledge/document/component plain lists). Filter by type, status, and parent component; ordered by most-recently-updated. Bodies are omitted — fetch one with fetch for the full body. For the faceted task view use list_tasks; for the objective tracker use list(what=\"objectives\").",
- "properties": {
- "component_id": {
- "description": "(nodes/documents/diagrams only) Limit results to nodes/docs/diagrams under this parent component (COMP-N).",
- "type": "string"
- },
- "limit": {
- "description": "(nodes/documents/diagrams/node_versions only) Page size / max results (default 50, max 200; defaults vary by collection).",
- "exclusiveMinimum": 0,
- "maximum": 200,
- "type": "integer"
- },
- "offset": {
- "description": "(nodes/documents/diagrams only) Skip N results (default 0).",
- "minimum": 0,
- "type": "integer"
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "status": {
- "description": "(nodes/documents/diagrams only) Filter to one exact status.",
- "enum": [
- "active",
- "archived",
- "backlog",
- "open",
- "in_progress",
- "done",
- "cancelled"
- ],
- "type": "string"
- },
- "type": {
- "description": "(nodes only) Limit to one node type (component | knowledge | task | document | diagram).",
- "enum": [
- "component",
- "knowledge",
- "task",
- "document",
- "diagram"
- ],
- "type": "string"
- },
- "what": {
- "const": "nodes",
- "type": "string"
- }
- },
- "required": [
- "what",
- "project_slug"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "what=\"components\": List components in the active project. Omit `parent_id` to get the ENTIRE tree (every component, bodyless) — the default for finding the right component to file a task/knowledge under. Pass `parent_id` (COMP-N) for a component's direct children, or null for root-level only. Always check this before creating a component: prefer reusing an existing one, they shouldn't proliferate. Cached ~30s; invalidated on add/archive_component.",
- "properties": {
- "parent_id": {
- "anyOf": [
- {
- "description": "(nodes/documents/diagrams only) Limit results to nodes/docs/diagrams under this parent component (COMP-N).",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "(components only) Omit to list the WHOLE component tree (every component, bodyless) — do this to find where a task/knowledge should be filed. Pass a component id (COMP-N) for just its direct children, or null for root-level only."
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "what": {
- "const": "components",
- "type": "string"
- }
- },
- "required": [
- "what",
- "project_slug"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "what=\"topics\": List every topic in the active project with its node count, counted across active knowledge + open/in_progress tasks only. Use before rename_topic / merge_topics to spot near-duplicates (releng / release-eng / release-engineering).",
- "properties": {
- "min_count": {
- "description": "(topics only) Minimum count to include a topic in the result. Default 1.",
- "minimum": 1,
- "type": "integer"
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "what": {
- "const": "topics",
- "type": "string"
- }
- },
- "required": [
- "what",
- "project_slug"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "what=\"documents\": List documents in the active project, optionally filtered (filters AND-combine). Each row carries a short `preview` (first 10 lines, long lines truncated) so agents can triage in one call; use fetch DOC-N for the full body.",
- "properties": {
- "component_id": {
- "anyOf": [
- {
- "description": "(nodes/documents/diagrams only) Limit results to nodes/docs/diagrams under this parent component (COMP-N).",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Parent component shareable id. Omit for all docs."
- },
- "limit": {
- "description": "Page size (default 50, max 100).",
- "maximum": 100,
- "minimum": 1,
- "type": "integer"
- },
- "offset": {
- "description": "Skip N results (default 0).",
- "minimum": 0,
- "type": "integer"
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "status": {
- "description": "Default 'active'.",
- "enum": [
- "active",
- "archived"
- ],
- "type": "string"
- },
- "what": {
- "const": "documents",
- "type": "string"
- }
- },
- "required": [
- "what",
- "project_slug"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "what=\"diagrams\": List diagrams in the active project, optionally filtered (filters AND-combine). Each row carries a short `preview` of the d2 source so agents can triage in one call; use fetch DIAG-N for the full source.",
- "properties": {
- "component_id": {
- "anyOf": [
- {
- "description": "(nodes/documents/diagrams only) Limit results to nodes/docs/diagrams under this parent component (COMP-N).",
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Parent component shareable id. Omit for all diagrams."
- },
- "limit": {
- "description": "Page size (default 50, max 100).",
- "maximum": 100,
- "minimum": 1,
- "type": "integer"
- },
- "offset": {
- "description": "Skip N results (default 0).",
- "minimum": 0,
- "type": "integer"
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "status": {
- "description": "Default 'active'.",
- "enum": [
- "active",
- "archived"
- ],
- "type": "string"
- },
- "what": {
- "const": "diagrams",
- "type": "string"
- }
- },
- "required": [
- "what",
- "project_slug"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "what=\"objectives\": Overview of the project's objectives — for each: derived status (on-track / drifting / done / superseded), milestone count, task rollup (done/total), and how many loose (un-milestoned) tasks it has. Plus the project vision and the count of drift tasks serving no objective. Use this to answer 'what are we steering toward, and is anything drifting?'",
- "properties": {
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "what": {
- "const": "objectives",
- "type": "string"
- }
- },
- "required": [
- "what",
- "project_slug"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "what=\"workspaces\": List a project's workspaces (named scoped overlays), marking which are ACTIVE for this session. Trunk is always implicitly active and is not listed.",
- "properties": {
- "include_archived": {
- "description": "(workspaces only) Include archived/merged workspaces (default false).",
- "type": "boolean"
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "what": {
- "const": "workspaces",
- "type": "string"
- }
- },
- "required": [
- "what",
- "project_slug"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "what=\"comments\": List a node's comments as threads (top-level comment + replies), each flagged seen/unseen for you with its anchor status. Resolved threads and soft-deleted tombstones are included but don't count toward active/unread. Reading does NOT mark them seen (pass mark_seen=true to acknowledge).",
- "properties": {
- "include_replies": {
- "description": "(comments only) Include replies under each thread (default true).",
- "type": "boolean"
- },
- "node_id": {
- "description": "REQUIRED for comments — the node whose comments to list.",
- "type": "string"
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "what": {
- "const": "comments",
- "type": "string"
- }
- },
- "required": [
- "what",
- "project_slug",
- "node_id"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "what=\"node_versions\": List a node's content version history — every superseded title/body snapshot, newest first, with the editor and timestamp. Captured automatically by a DB trigger on every content edit, so it's a complete backup. PULL-ONLY: never auto-injected; call deliberately to inspect churn or recover what a node said before a bad edit.",
- "properties": {
- "limit": {
- "description": "Max versions to return (default 100, server cap 500).",
- "exclusiveMinimum": 0,
- "type": "integer"
- },
- "node_id": {
- "description": "REQUIRED for node_versions — node shareable id (e.g. KNOW-42, DOC-7).",
- "type": "string"
- },
- "project_slug": {
- "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
- "minLength": 1,
- "type": "string"
- },
- "what": {
- "const": "node_versions",
- "type": "string"
- }
- },
- "required": [
- "what",
- "project_slug",
- "node_id"
- ],
- "type": "object"
- },
- {
- "additionalProperties": false,
- "description": "what=\"projects\": List Stele projects the current user is a member of. Use the `slug` from here as the `project_slug` argument on every other tool. Cached for ~30s per MCP session — cheap to call repeatedly.",
- "properties": {
- "what": {
- "const": "projects",
- "type": "string"
- }
- },
- "required": [
- "what"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "additionalProperties": false,
+ "description": "what=\"nodes\": Generic, paginated node listing — the lean single tool the typed CLI `list` commands ride on (knowledge/document/component plain lists). Filter by type, status, and parent component; ordered by most-recently-updated. Bodies are omitted — fetch one with fetch for the full body. For the faceted task view use list_tasks; for the objective tracker use list(what=\"objectives\").",
+ "properties": {
+ "component_id": {
+ "description": "(nodes/documents/diagrams only) Limit results to nodes/docs/diagrams under this parent component (COMP-N).",
+ "type": "string"
+ },
+ "limit": {
+ "description": "(nodes/documents/diagrams/node_versions only) Page size / max results (default 50, max 200; defaults vary by collection).",
+ "exclusiveMinimum": 0,
+ "maximum": 200,
+ "type": "integer"
+ },
+ "offset": {
+ "description": "(nodes/documents/diagrams only) Skip N results (default 0).",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "status": {
+ "description": "(nodes/documents/diagrams only) Filter to one exact status.",
+ "enum": [
+ "active",
+ "archived",
+ "backlog",
+ "open",
+ "in_progress",
+ "done",
+ "cancelled"
+ ],
+ "type": "string"
+ },
+ "type": {
+ "description": "(nodes only) Limit to one node type (component | knowledge | task | document | diagram).",
+ "enum": [
+ "component",
+ "knowledge",
+ "task",
+ "document",
+ "diagram"
+ ],
+ "type": "string"
+ },
+ "what": {
+ "const": "nodes",
+ "type": "string"
+ }
+ },
+ "required": [
+ "what",
+ "project_slug"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "what=\"components\": List components in the active project. Omit `parent_id` to get the ENTIRE tree (every component, bodyless) — the default for finding the right component to file a task/knowledge under. Pass `parent_id` (COMP-N) for a component's direct children, or null for root-level only. Always check this before creating a component: prefer reusing an existing one, they shouldn't proliferate. Cached ~30s; invalidated on add/archive_component.",
+ "properties": {
+ "parent_id": {
+ "anyOf": [
+ {
+ "description": "(nodes/documents/diagrams only) Limit results to nodes/docs/diagrams under this parent component (COMP-N).",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "(components only) Omit to list the WHOLE component tree (every component, bodyless) — do this to find where a task/knowledge should be filed. Pass a component id (COMP-N) for just its direct children, or null for root-level only."
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "what": {
+ "const": "components",
+ "type": "string"
+ }
+ },
+ "required": [
+ "what",
+ "project_slug"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "what=\"topics\": List every topic in the active project with its node count, counted across active knowledge + open/in_progress tasks only. Use before rename_topic / merge_topics to spot near-duplicates (releng / release-eng / release-engineering).",
+ "properties": {
+ "min_count": {
+ "description": "(topics only) Minimum count to include a topic in the result. Default 1.",
+ "minimum": 1,
+ "type": "integer"
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "what": {
+ "const": "topics",
+ "type": "string"
+ }
+ },
+ "required": [
+ "what",
+ "project_slug"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "what=\"documents\": List documents in the active project, optionally filtered (filters AND-combine). Each row carries a short `preview` (first 10 lines, long lines truncated) so agents can triage in one call; use fetch DOC-N for the full body.",
+ "properties": {
+ "component_id": {
+ "anyOf": [
+ {
+ "description": "(nodes/documents/diagrams only) Limit results to nodes/docs/diagrams under this parent component (COMP-N).",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Parent component shareable id. Omit for all docs."
+ },
+ "limit": {
+ "description": "Page size (default 50, max 100).",
+ "maximum": 100,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "offset": {
+ "description": "Skip N results (default 0).",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "status": {
+ "description": "Default 'active'.",
+ "enum": [
+ "active",
+ "archived"
+ ],
+ "type": "string"
+ },
+ "what": {
+ "const": "documents",
+ "type": "string"
+ }
+ },
+ "required": [
+ "what",
+ "project_slug"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "what=\"diagrams\": List diagrams in the active project, optionally filtered (filters AND-combine). Each row carries a short `preview` of the d2 source so agents can triage in one call; use fetch DIAG-N for the full source.",
+ "properties": {
+ "component_id": {
+ "anyOf": [
+ {
+ "description": "(nodes/documents/diagrams only) Limit results to nodes/docs/diagrams under this parent component (COMP-N).",
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Parent component shareable id. Omit for all diagrams."
+ },
+ "limit": {
+ "description": "Page size (default 50, max 100).",
+ "maximum": 100,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "offset": {
+ "description": "Skip N results (default 0).",
+ "minimum": 0,
+ "type": "integer"
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "status": {
+ "description": "Default 'active'.",
+ "enum": [
+ "active",
+ "archived"
+ ],
+ "type": "string"
+ },
+ "what": {
+ "const": "diagrams",
+ "type": "string"
+ }
+ },
+ "required": [
+ "what",
+ "project_slug"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "what=\"objectives\": Overview of the project's objectives — for each: derived status (on-track / drifting / done / superseded), milestone count, task rollup (done/total), and how many loose (un-milestoned) tasks it has. Plus the project vision and the count of drift tasks serving no objective. Use this to answer 'what are we steering toward, and is anything drifting?'",
+ "properties": {
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "what": {
+ "const": "objectives",
+ "type": "string"
+ }
+ },
+ "required": [
+ "what",
+ "project_slug"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "what=\"workspaces\": List a project's workspaces (named scoped overlays), marking which are ACTIVE for this session. Trunk is always implicitly active and is not listed.",
+ "properties": {
+ "include_archived": {
+ "description": "(workspaces only) Include archived/merged workspaces (default false).",
+ "type": "boolean"
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "what": {
+ "const": "workspaces",
+ "type": "string"
+ }
+ },
+ "required": [
+ "what",
+ "project_slug"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "what=\"comments\": List a node's comments as threads (top-level comment + replies), each flagged seen/unseen for you with its anchor status. Resolved threads and soft-deleted tombstones are included but don't count toward active/unread. Reading does NOT mark them seen (pass mark_seen=true to acknowledge).",
+ "properties": {
+ "include_replies": {
+ "description": "(comments only) Include replies under each thread (default true).",
+ "type": "boolean"
+ },
+ "node_id": {
+ "description": "REQUIRED for comments — the node whose comments to list.",
+ "type": "string"
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "what": {
+ "const": "comments",
+ "type": "string"
+ }
+ },
+ "required": [
+ "what",
+ "project_slug",
+ "node_id"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "what=\"node_versions\": List a node's content version history — every superseded title/body snapshot, newest first, with the editor and timestamp. Captured automatically by a DB trigger on every content edit, so it's a complete backup. PULL-ONLY: never auto-injected; call deliberately to inspect churn or recover what a node said before a bad edit.",
+ "properties": {
+ "limit": {
+ "description": "Max versions to return (default 100, server cap 500).",
+ "exclusiveMinimum": 0,
+ "type": "integer"
+ },
+ "node_id": {
+ "description": "REQUIRED for node_versions — node shareable id (e.g. KNOW-42, DOC-7).",
+ "type": "string"
+ },
+ "project_slug": {
+ "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "what": {
+ "const": "node_versions",
+ "type": "string"
+ }
+ },
+ "required": [
+ "what",
+ "project_slug",
+ "node_id"
+ ],
+ "type": "object"
+ },
+ {
+ "additionalProperties": false,
+ "description": "what=\"projects\": List Stele projects the current user is a member of. Use the `slug` from here as the `project_slug` argument on every other tool. Each project carries its `visibility`: anyone can read a public project. Cached for ~30s per MCP session — cheap to call repeatedly.",
+ "properties": {
+ "what": {
+ "const": "projects",
+ "type": "string"
+ }
+ },
+ "required": [
+ "what"
+ ],
+ "type": "object"
+ }
+]