Skip to main content
Glama

Manage a workspace

workspace
Destructive

Manage a workspace overlay. action = create | update. Hosted MCP is stateless, so checkout-local activate/deactivate actions are not exposed; promoting or archiving a workspace lives in the destructive tool.

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\": Create a named workspace — a scoped overlay on the project's trunk (shared truth). Knowledge written while it's active scopes to it; collaborators off that workspace never see it. permanent = a domain/team overlay that never graduates (promote per-item); experimental = ephemeral, expected to merge or be archived. Prefer OFFERING before creating unless the user asked. Does NOT activate it — call workspace(action=\"activate\") to scope this session to it.",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "auto_activate_hint": {
      -        "description": "(create/update only) Plain-language 'when should this auto-activate' hint, read by the agent at session start. Globs/paths welcome; no rules DSL.",
      -        "type": "string"
      -      },
      -      "branches": {
      -        "description": "(create only) Branch associations (0..N). Exact match auto-activates; a glob is offered. Omit for a pure domain overlay with no branch.",
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "description": {
      -        "description": "(create/update only) One-line description of what this overlay is for.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "REQUIRED for create — permanent = standing domain/team overlay (never graduates); experimental = ephemeral, expected to merge or be archived.",
      -        "enum": [
      -          "permanent",
      -          "experimental"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "REQUIRED for create — workspace name, shown in scope tags (e.g. \"Billing\").",
      -        "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"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "name",
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"update\": Update a workspace's editable fields (name, kind, description, auto-activation hint) and/or ADD branch associations. Only the fields you pass change. Does NOT promote knowledge or change scope — merge/archive have dedicated tools.",
      -    "properties": {
      -      "action": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "add_branches": {
      -        "description": "(update only) Branch associations to ADD (existing ones are kept).",
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "auto_activate_hint": {
      -        "description": "New plain-language auto-activation hint.",
      -        "type": "string"
      -      },
      -      "description": {
      -        "description": "New one-line description.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Change the workspace kind.",
      -        "enum": [
      -          "permanent",
      -          "experimental"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "New name.",
      -        "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"
      -      },
      -      "workspace": {
      -        "description": "REQUIRED for update/activate/deactivate — the workspace to act on — its NAME (e.g. \"Billing\") or its uuid. NOT a short-id (workspaces aren't nodes).",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "workspace"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "workspace action \"create\".",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "description": "Run the create action.",
      +        "type": "string"
      +      },
      +      "auto_activate_hint": {
      +        "description": "(create/update only) Plain-language 'when should this auto-activate' hint, read by the agent at session start. Globs/paths welcome; no rules DSL.",
      +        "type": "string"
      +      },
      +      "branches": {
      +        "description": "(create only) Branch associations (0..N). Exact match auto-activates; a glob is offered. Omit for a pure domain overlay with no branch.",
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "description": {
      +        "description": "(create/update only) One-line description of what this overlay is for.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "REQUIRED for create — permanent = standing domain/team overlay (never graduates); experimental = ephemeral, expected to merge or be archived.",
      +        "enum": [
      +          "permanent",
      +          "experimental"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "REQUIRED for create — workspace name, shown in scope tags (e.g. \"Billing\").",
      +        "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"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "name",
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "workspace action \"update\".",
      +    "properties": {
      +      "action": {
      +        "const": "update",
      +        "description": "Run the update action.",
      +        "type": "string"
      +      },
      +      "add_branches": {
      +        "description": "(update only) Branch associations to ADD (existing ones are kept).",
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "auto_activate_hint": {
      +        "description": "New plain-language auto-activation hint.",
      +        "type": "string"
      +      },
      +      "description": {
      +        "description": "New one-line description.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Change the workspace kind.",
      +        "enum": [
      +          "permanent",
      +          "experimental"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "New name.",
      +        "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"
      +      },
      +      "workspace": {
      +        "description": "REQUIRED for update/activate/deactivate — the workspace to act on — its NAME (e.g. \"Billing\") or its uuid. NOT a short-id (workspaces aren't nodes).",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "workspace"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create\": Create a named workspace — a scoped overlay on the project's trunk (shared truth). Knowledge written while it's active scopes to it; collaborators off that workspace never see it. permanent = a domain/team overlay that never graduates (promote per-item); experimental = ephemeral, expected to merge or be archived. Prefer OFFERING before creating unless the user asked. Does NOT activate it — call workspace(action=\"activate\") to scope this session to it.",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "auto_activate_hint": {
      -        "description": "(create/update only) Plain-language 'when should this auto-activate' hint, read by the agent at session start. Globs/paths welcome; no rules DSL.",
      -        "type": "string"
      -      },
      -      "branches": {
      -        "description": "(create only) Branch associations (0..N). Exact match auto-activates; a glob is offered. Omit for a pure domain overlay with no branch.",
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "description": {
      -        "description": "(create/update only) One-line description of what this overlay is for.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "REQUIRED for create — permanent = standing domain/team overlay (never graduates); experimental = ephemeral, expected to merge or be archived.",
      -        "enum": [
      -          "permanent",
      -          "experimental"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "REQUIRED for create — workspace name, shown in scope tags (e.g. \"Billing\").",
      -        "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"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "name",
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"update\": Update a workspace's editable fields (name, kind, description, auto-activation hint) and/or ADD branch associations. Only the fields you pass change. Does NOT promote knowledge or change scope — merge/archive have dedicated tools.",
      -    "properties": {
      -      "action": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "add_branches": {
      -        "description": "(update only) Branch associations to ADD (existing ones are kept).",
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "auto_activate_hint": {
      -        "description": "New plain-language auto-activation hint.",
      -        "type": "string"
      -      },
      -      "description": {
      -        "description": "New one-line description.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Change the workspace kind.",
      -        "enum": [
      -          "permanent",
      -          "experimental"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "New name.",
      -        "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"
      -      },
      -      "workspace": {
      -        "description": "REQUIRED for update/activate/deactivate — the workspace to act on — its NAME (e.g. \"Billing\") or its uuid. NOT a short-id (workspaces aren't nodes).",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "workspace"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create\": Create a named workspace — a scoped overlay on the project's trunk (shared truth). Knowledge written while it's active scopes to it; collaborators off that workspace never see it. permanent = a domain/team overlay that never graduates (promote per-item); experimental = ephemeral, expected to merge or be archived. Prefer OFFERING before creating unless the user asked. Does NOT activate it — call workspace(action=\"activate\") to scope this session to it.",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "auto_activate_hint": {
      +        "description": "(create/update only) Plain-language 'when should this auto-activate' hint, read by the agent at session start. Globs/paths welcome; no rules DSL.",
      +        "type": "string"
      +      },
      +      "branches": {
      +        "description": "(create only) Branch associations (0..N). Exact match auto-activates; a glob is offered. Omit for a pure domain overlay with no branch.",
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "description": {
      +        "description": "(create/update only) One-line description of what this overlay is for.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "REQUIRED for create — permanent = standing domain/team overlay (never graduates); experimental = ephemeral, expected to merge or be archived.",
      +        "enum": [
      +          "permanent",
      +          "experimental"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "REQUIRED for create — workspace name, shown in scope tags (e.g. \"Billing\").",
      +        "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"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "name",
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"update\": Update a workspace's editable fields (name, kind, description, auto-activation hint) and/or ADD branch associations. Only the fields you pass change. Does NOT promote knowledge or change scope — merge/archive have dedicated tools.",
      +    "properties": {
      +      "action": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "add_branches": {
      +        "description": "(update only) Branch associations to ADD (existing ones are kept).",
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "auto_activate_hint": {
      +        "description": "New plain-language auto-activation hint.",
      +        "type": "string"
      +      },
      +      "description": {
      +        "description": "New one-line description.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Change the workspace kind.",
      +        "enum": [
      +          "permanent",
      +          "experimental"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "New name.",
      +        "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"
      +      },
      +      "workspace": {
      +        "description": "REQUIRED for update/activate/deactivate — the workspace to act on — its NAME (e.g. \"Billing\") or its uuid. NOT a short-id (workspaces aren't nodes).",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "workspace"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"create\": Create a named workspace — a scoped overlay on the project's trunk (shared truth). Knowledge written while it's active scopes to it; collaborators off that workspace never see it. permanent = a domain/team overlay that never graduates (promote per-item); experimental = ephemeral, expected to merge or be archived. Prefer OFFERING before creating unless the user asked. Does NOT activate it — call workspace(action=\"activate\") to scope this session to it.",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "auto_activate_hint": {
      -        "description": "(create/update only) Plain-language 'when should this auto-activate' hint, read by the agent at session start. Globs/paths welcome; no rules DSL.",
      -        "type": "string"
      -      },
      -      "branches": {
      -        "description": "(create only) Branch associations (0..N). Exact match auto-activates; a glob is offered. Omit for a pure domain overlay with no branch.",
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "description": {
      -        "description": "(create/update only) One-line description of what this overlay is for.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "REQUIRED for create — permanent = standing domain/team overlay (never graduates); experimental = ephemeral, expected to merge or be archived.",
      -        "enum": [
      -          "permanent",
      -          "experimental"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "REQUIRED for create — workspace name, shown in scope tags (e.g. \"Billing\").",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "name",
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "action=\"update\": Update a workspace's editable fields (name, kind, description, auto-activation hint) and/or ADD branch associations. Only the fields you pass change. Does NOT promote knowledge or change scope — merge/archive have dedicated tools.",
      -    "properties": {
      -      "action": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "add_branches": {
      -        "description": "(update only) Branch associations to ADD (existing ones are kept).",
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "auto_activate_hint": {
      -        "description": "New plain-language auto-activation hint.",
      -        "type": "string"
      -      },
      -      "description": {
      -        "description": "New one-line description.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Change the workspace kind.",
      -        "enum": [
      -          "permanent",
      -          "experimental"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "New name.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "workspace": {
      -        "description": "REQUIRED for update/activate/deactivate — the workspace to act on — its NAME (e.g. \"Billing\") or its uuid. NOT a short-id (workspaces aren't nodes).",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "workspace"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create\": Create a named workspace — a scoped overlay on the project's trunk (shared truth). Knowledge written while it's active scopes to it; collaborators off that workspace never see it. permanent = a domain/team overlay that never graduates (promote per-item); experimental = ephemeral, expected to merge or be archived. Prefer OFFERING before creating unless the user asked. Does NOT activate it — call workspace(action=\"activate\") to scope this session to it.",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "auto_activate_hint": {
      +        "description": "(create/update only) Plain-language 'when should this auto-activate' hint, read by the agent at session start. Globs/paths welcome; no rules DSL.",
      +        "type": "string"
      +      },
      +      "branches": {
      +        "description": "(create only) Branch associations (0..N). Exact match auto-activates; a glob is offered. Omit for a pure domain overlay with no branch.",
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "description": {
      +        "description": "(create/update only) One-line description of what this overlay is for.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "REQUIRED for create — permanent = standing domain/team overlay (never graduates); experimental = ephemeral, expected to merge or be archived.",
      +        "enum": [
      +          "permanent",
      +          "experimental"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "REQUIRED for create — workspace name, shown in scope tags (e.g. \"Billing\").",
      +        "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"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "name",
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"update\": Update a workspace's editable fields (name, kind, description, auto-activation hint) and/or ADD branch associations. Only the fields you pass change. Does NOT promote knowledge or change scope — merge/archive have dedicated tools.",
      +    "properties": {
      +      "action": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "add_branches": {
      +        "description": "(update only) Branch associations to ADD (existing ones are kept).",
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "auto_activate_hint": {
      +        "description": "New plain-language auto-activation hint.",
      +        "type": "string"
      +      },
      +      "description": {
      +        "description": "New one-line description.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Change the workspace kind.",
      +        "enum": [
      +          "permanent",
      +          "experimental"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "New name.",
      +        "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"
      +      },
      +      "workspace": {
      +        "description": "REQUIRED for update/activate/deactivate — the workspace to act on — its NAME (e.g. \"Billing\") or its uuid. NOT a short-id (workspaces aren't nodes).",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "workspace"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed1 schema field changed
    • changedInput schema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "workspace action \"create\".",
      -    "properties": {
      -      "action": {
      -        "const": "create",
      -        "description": "Run the create action.",
      -        "type": "string"
      -      },
      -      "auto_activate_hint": {
      -        "description": "(create/update only) Plain-language 'when should this auto-activate' hint, read by the agent at session start. Globs/paths welcome; no rules DSL.",
      -        "type": "string"
      -      },
      -      "branches": {
      -        "description": "(create only) Branch associations (0..N). Exact match auto-activates; a glob is offered. Omit for a pure domain overlay with no branch.",
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "description": {
      -        "description": "(create/update only) One-line description of what this overlay is for.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "REQUIRED for create — permanent = standing domain/team overlay (never graduates); experimental = ephemeral, expected to merge or be archived.",
      -        "enum": [
      -          "permanent",
      -          "experimental"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "REQUIRED for create — workspace name, shown in scope tags (e.g. \"Billing\").",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "name",
      -      "kind"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "workspace action \"update\".",
      -    "properties": {
      -      "action": {
      -        "const": "update",
      -        "description": "Run the update action.",
      -        "type": "string"
      -      },
      -      "add_branches": {
      -        "description": "(update only) Branch associations to ADD (existing ones are kept).",
      -        "items": {
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "auto_activate_hint": {
      -        "description": "New plain-language auto-activation hint.",
      -        "type": "string"
      -      },
      -      "description": {
      -        "description": "New one-line description.",
      -        "type": "string"
      -      },
      -      "kind": {
      -        "description": "Change the workspace kind.",
      -        "enum": [
      -          "permanent",
      -          "experimental"
      -        ],
      -        "type": "string"
      -      },
      -      "name": {
      -        "description": "New name.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "project_slug": {
      -        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "workspace": {
      -        "description": "REQUIRED for update/activate/deactivate — the workspace to act on — its NAME (e.g. \"Billing\") or its uuid. NOT a short-id (workspaces aren't nodes).",
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "action",
      -      "project_slug",
      -      "workspace"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"create\": Create a named workspace — a scoped overlay on the project's trunk (shared truth). Knowledge written while it's active scopes to it; collaborators off that workspace never see it. permanent = a domain/team overlay that never graduates (promote per-item); experimental = ephemeral, expected to merge or be archived. Prefer OFFERING before creating unless the user asked. Does NOT activate it — call workspace(action=\"activate\") to scope this session to it.",
      +    "properties": {
      +      "action": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "auto_activate_hint": {
      +        "description": "(create/update only) Plain-language 'when should this auto-activate' hint, read by the agent at session start. Globs/paths welcome; no rules DSL.",
      +        "type": "string"
      +      },
      +      "branches": {
      +        "description": "(create only) Branch associations (0..N). Exact match auto-activates; a glob is offered. Omit for a pure domain overlay with no branch.",
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "description": {
      +        "description": "(create/update only) One-line description of what this overlay is for.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "REQUIRED for create — permanent = standing domain/team overlay (never graduates); experimental = ephemeral, expected to merge or be archived.",
      +        "enum": [
      +          "permanent",
      +          "experimental"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "REQUIRED for create — workspace name, shown in scope tags (e.g. \"Billing\").",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "name",
      +      "kind"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "action=\"update\": Update a workspace's editable fields (name, kind, description, auto-activation hint) and/or ADD branch associations. Only the fields you pass change. Does NOT promote knowledge or change scope — merge/archive have dedicated tools.",
      +    "properties": {
      +      "action": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "add_branches": {
      +        "description": "(update only) Branch associations to ADD (existing ones are kept).",
      +        "items": {
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "auto_activate_hint": {
      +        "description": "New plain-language auto-activation hint.",
      +        "type": "string"
      +      },
      +      "description": {
      +        "description": "New one-line description.",
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "Change the workspace kind.",
      +        "enum": [
      +          "permanent",
      +          "experimental"
      +        ],
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "New name.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "project_slug": {
      +        "description": "Project slug, e.g. \"acme-app\" — list(what=\"projects\") returns yours.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "workspace": {
      +        "description": "REQUIRED for update/activate/deactivate — the workspace to act on — its NAME (e.g. \"Billing\") or its uuid. NOT a short-id (workspaces aren't nodes).",
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "project_slug",
      +      "workspace"
      +    ],
      +    "type": "object"
      +  }
      +]
  5. First observed

TDQS

A4/5.0
Behavior4/5

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

Adds non-obvious context beyond the annotations: the hosted server is stateless so activate/deactivate do not exist here. Annotations already flag destructiveHint=true, and the description's pointer to the `destructive` tool for promote/archive explains part of that. It falls short of clarifying why create/update themselves are marked destructive or what permission preconditions apply.

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

Conciseness5/5

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

Three tight clauses: purpose, action set, then scope exclusions with the owning sibling tool. Front-loaded and nothing redundant — every sentence carries information the agent cannot get elsewhere.

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 a fully documented schema, an output schema, and annotations, the description covers the key gaps: which actions exist here and which do not. Minor omissions remain — permission requirements, and whether update requires an existing workspace — but nothing that blocks correct invocation.

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%, including per-field notes for kind, branches, workspace, and the privacy_bypass flow, so the schema carries parameter meaning entirely. The description adds no parameter-level detail such as required fields per action. Baseline 3 applies.

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

Purpose4/5

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

States the resource (workspace overlay) and enumerates the supported actions (create | update) explicitly. It also differentiates scope from the sibling `destructive` tool, which owns promote/archive. The verb 'manage' is generic, but the action enumeration removes ambiguity.

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?

Explicitly names out-of-scope actions and routes them elsewhere: activate/deactivate is not exposed because hosted MCP is stateless, and promoting/archiving lives in the `destructive` tool. It does not spell out when to pick create vs update, but the action enum makes that self-evident.

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.