Skip to main content
Glama

Manage categories

manage_categories
Destructive

Create, update, or delete areas (categories / groups / colour-coded labels), activity types (tags / fill patterns) and projects (named goals under an area) — one or many in a single call. Pass areas, activityTypes and/or projects, each an array of ops: {op:"create", name, color?} / {op:"update", id, name?, color?} / {op:"delete", id, reassignTo?} for areas; pattern instead of color for activity types (valid patterns: solid, hatch_r, hatch_l, cross, horizontal, vertical, grid, dots, waves, chevron). Projects: {op:"create", name, areaId?} / {op:"update", id, name?, areaId?, order?, archived?} / {op:"delete", id} / {op:"split", id, linkId}. A split moves one task list or Linear project (linkId) that feeds the project to a new project of its own, "{name} ({Provider})" in the same area (" 2" on a taken name), with its Inbox items; later syncs keep it there. {op:"relink", id, linkId} points one Linear project (linkId) at the live project id, with its Inbox items. A project is your own (no shared defaults, no fork). areaId links it to an area; when a write moves an Inbox item to the project and sets no area, the item takes that area, also over an area set by hand. archived: true marks it archived in the lookups and refuses new links; its links stay; archived: false restores it. A delete clears the project link on its items and events (one undo restores them). A delete of a project that a synced task list or Linear project feeds fails with conflict: link it to another project first, or archive it. A project name is unique among the live projects of the user, in any area: a duplicate fails with conflict ("A project named Launch exists in Work."). Results come back in a projects array. Colours are lowercase "#rrggbb"; omit color or pattern to auto-pick. Editing a shared global default forks it into your own copy, so the returned id may differ — each result reports the effective id (and forkedFrom). A delete removes your own entry, or hides a shared default (and your copy of it) for you only. When events, Inbox items, trackers or calendar defaults use it, a delete without reassignTo is refused with validation; the error details give usage (the counts) and reassignTargets (the categories that can take them). Ask the user, then send the delete again with reassignTo (another id, to move them) or reassignTo: null (to clear their link). A project name is unique among all live projects of the user, so a moved project keeps its name. Names are deduplicated case-, accent- and whitespace-insensitively: a create or a rename into the name of an existing area/type fails with conflict (reuse the existing id instead). A create or update result is the created/updated row; a delete result lists deletedIds (plus movedEvents after a reassign). Every call that writes returns one undoToken + expiresAt (a UTC instant); pass it to undo_changes to reverse the whole call. Atomic by default: if any op is invalid nothing is written; pass partial: true for best-effort. Create areas/types here first, then reference the returned ids in write_events (and a project id in manage_inbox projectId).

Input Schema

NameRequiredDescriptionDefault
areasNo
partialNoBest-effort mode instead of the default all-or-nothing.
projectsNo
activityTypesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / projects
      Added value: +{
      +  "items": {
      +    "oneOf": [
      +      {
      +        "additionalProperties": false,
      +        "properties": {
      +          "areaId": {
      +            "description": "The parent area id, or null for no area. When a write moves an Inbox item to the project and sets no area, the item takes this area.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "description": "The project name; unique among all live projects of the user, in any area.",
      +            "maxLength": 60,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "op": {
      +            "const": "create",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "op",
      +          "name"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "properties": {
      +          "archived": {
      +            "description": "true archives the project: it leaves the lookups and takes no new links, but its links stay. false restores it.",
      +            "type": "boolean"
      +          },
      +          "areaId": {
      +            "description": "The parent area id, or null for no area. When a write moves an Inbox item to the project and sets no area, the item takes this area.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "id": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "description": "The project name; unique among all live projects of the user, in any area.",
      +            "maxLength": 60,
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "op": {
      +            "const": "update",
      +            "type": "string"
      +          },
      +          "order": {
      +            "description": "The sort position.",
      +            "type": "number"
      +          },
      +          "publishCalendarId": {
      +            "description": "The task list that a new Inbox item of this project is created in, unless the item names its own list. null turns it off.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "op",
      +          "id"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "description": "The project to delete; its items and events keep their area and lose the project link.",
      +            "type": "string"
      +          },
      +          "op": {
      +            "const": "delete",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "op",
      +          "id"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "description": "The shared project to split a link from.",
      +            "type": "string"
      +          },
      +          "linkId": {
      +            "description": "The task list (`source_calendars` id) or Linear project (`source_projects` id) that feeds `id` and moves to a new project of its own, \"{name} ({Provider})\".",
      +            "type": "string"
      +          },
      +          "op": {
      +            "const": "split",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "op",
      +          "id",
      +          "linkId"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "description": "The live project that the Linear project feeds next.",
      +            "type": "string"
      +          },
      +          "linkId": {
      +            "description": "The Linear project (`source_projects` id) to point at `id`. Its Inbox items move along. A task list changes its project in its list settings.",
      +            "type": "string"
      +          },
      +          "op": {
      +            "const": "relink",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "op",
      +          "id",
      +          "linkId"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / activityTypes / items / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "pattern": {
      -        "description": "A fill pattern; omit to auto-pick.",
      -        "enum": [
      -          "solid",
      -          "hatch_r",
      -          "hatch_l",
      -          "cross",
      -          "horizontal",
      -          "vertical",
      -          "grid",
      -          "dots",
      -          "waves",
      -          "chevron"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "order": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      },
      -      "pattern": {
      -        "description": "A fill pattern; omit to auto-pick.",
      -        "enum": [
      -          "solid",
      -          "hatch_r",
      -          "hatch_l",
      -          "cross",
      -          "horizontal",
      -          "vertical",
      -          "grid",
      -          "dots",
      -          "waves",
      -          "chevron"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "delete",
      -        "type": "string"
      -      },
      -      "reassignTo": {
      -        "description": "Another activity type's id to move the linked events onto. Without it, the delete clears the type on those events.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "pattern": {
      +        "description": "A fill pattern; omit to auto-pick.",
      +        "enum": [
      +          "solid",
      +          "hatch_r",
      +          "hatch_l",
      +          "cross",
      +          "horizontal",
      +          "vertical",
      +          "grid",
      +          "dots",
      +          "waves",
      +          "chevron"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "order": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "pattern": {
      +        "description": "A fill pattern; omit to auto-pick.",
      +        "enum": [
      +          "solid",
      +          "hatch_r",
      +          "hatch_l",
      +          "cross",
      +          "horizontal",
      +          "vertical",
      +          "grid",
      +          "dots",
      +          "waves",
      +          "chevron"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "delete",
      +        "type": "string"
      +      },
      +      "reassignTo": {
      +        "description": "Another activity type's id to move the linked items onto, or null to clear their link. Required when items use it.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / areas / items / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "color": {
      -        "description": "Lowercase \"#rrggbb\"; omit to auto-pick.",
      -        "pattern": "^#[0-9a-f]{6}$",
      -        "type": "string"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "create",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "color": {
      -        "description": "Lowercase \"#rrggbb\"; omit to auto-pick.",
      -        "pattern": "^#[0-9a-f]{6}$",
      -        "type": "string"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "order": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "delete",
      -        "type": "string"
      -      },
      -      "reassignTo": {
      -        "description": "Another area's id to move the linked events onto. Without it, the delete clears the area on those events.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "color": {
      +        "description": "Lowercase \"#rrggbb\"; omit to auto-pick.",
      +        "pattern": "^#[0-9a-f]{6}$",
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "create",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "color": {
      +        "description": "Lowercase \"#rrggbb\"; omit to auto-pick.",
      +        "pattern": "^#[0-9a-f]{6}$",
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "order": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "delete",
      +        "type": "string"
      +      },
      +      "reassignTo": {
      +        "description": "Another area's id to move the linked items onto, or null to clear their link. Required when items use it.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed2 schema fields changed
    • changedInput schema / properties / activityTypes / items / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "pattern": {
      -        "description": "A fill pattern; omit to auto-pick.",
      -        "enum": [
      -          "solid",
      -          "hatch_r",
      -          "hatch_l",
      -          "cross",
      -          "horizontal",
      -          "vertical",
      -          "grid",
      -          "dots",
      -          "waves",
      -          "chevron"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "order": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      },
      -      "pattern": {
      -        "description": "A fill pattern; omit to auto-pick.",
      -        "enum": [
      -          "solid",
      -          "hatch_r",
      -          "hatch_l",
      -          "cross",
      -          "horizontal",
      -          "vertical",
      -          "grid",
      -          "dots",
      -          "waves",
      -          "chevron"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "delete",
      -        "type": "string"
      -      },
      -      "reassignTo": {
      -        "description": "Another activity type's id to move events onto; required if events still use this type.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "pattern": {
      +        "description": "A fill pattern; omit to auto-pick.",
      +        "enum": [
      +          "solid",
      +          "hatch_r",
      +          "hatch_l",
      +          "cross",
      +          "horizontal",
      +          "vertical",
      +          "grid",
      +          "dots",
      +          "waves",
      +          "chevron"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "order": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "pattern": {
      +        "description": "A fill pattern; omit to auto-pick.",
      +        "enum": [
      +          "solid",
      +          "hatch_r",
      +          "hatch_l",
      +          "cross",
      +          "horizontal",
      +          "vertical",
      +          "grid",
      +          "dots",
      +          "waves",
      +          "chevron"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "delete",
      +        "type": "string"
      +      },
      +      "reassignTo": {
      +        "description": "Another activity type's id to move the linked events onto. Without it, the delete clears the type on those events.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / areas / items / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "color": {
      -        "description": "Lowercase \"#rrggbb\"; omit to auto-pick.",
      -        "pattern": "^#[0-9a-f]{6}$",
      -        "type": "string"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "create",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "color": {
      -        "description": "Lowercase \"#rrggbb\"; omit to auto-pick.",
      -        "pattern": "^#[0-9a-f]{6}$",
      -        "type": "string"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "order": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "delete",
      -        "type": "string"
      -      },
      -      "reassignTo": {
      -        "description": "Another area's id to move events onto; required if events still use this area.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "color": {
      +        "description": "Lowercase \"#rrggbb\"; omit to auto-pick.",
      +        "pattern": "^#[0-9a-f]{6}$",
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "create",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "color": {
      +        "description": "Lowercase \"#rrggbb\"; omit to auto-pick.",
      +        "pattern": "^#[0-9a-f]{6}$",
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "order": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "delete",
      +        "type": "string"
      +      },
      +      "reassignTo": {
      +        "description": "Another area's id to move the linked events onto. Without it, the delete clears the area on those events.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed3 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / llm_model
      Removed value: -{
      -  "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
      -  "type": "string"
      -}
    • removedInput schema / required
      Removed value: -[
      -  "llm_model"
      -]
  5. Changed1 schema field changed
    • removedInput schema / properties / conversation_id
      Removed value: -{
      -  "description": "Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it.",
      -  "type": "string"
      -}
  6. Changed4 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / conversation_id
      Added value: +{
      +  "description": "Echo the conversation_id from the server's previous response. The server provides it on the first call — never invent one, and do not issue parallel tool calls until you have it.",
      +  "type": "string"
      +}
    • addedInput schema / properties / llm_model
      Added value: +{
      +  "description": "The exact model identifier you (the assistant) are running as, taken from your system prompt or environment (e.g. \"claude-opus-4-8\", \"gpt-5.2\"). Used for analytics only. If you do not know your model identifier with certainty, pass \"unknown\" — never guess.",
      +  "type": "string"
      +}
    • addedInput schema / required
      Added value: +[
      +  "llm_model"
      +]
  7. Changed3 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / activityTypes / items / oneOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "pattern": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "order": {
      -        "type": "number"
      -      },
      -      "pattern": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "delete",
      -        "type": "string"
      -      },
      -      "reassignTo": {
      -        "description": "Another activity type's id to move events onto; required if events still use this type.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "pattern": {
      +        "description": "A fill pattern; omit to auto-pick.",
      +        "enum": [
      +          "solid",
      +          "hatch_r",
      +          "hatch_l",
      +          "cross",
      +          "horizontal",
      +          "vertical",
      +          "grid",
      +          "dots",
      +          "waves",
      +          "chevron"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "order": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "pattern": {
      +        "description": "A fill pattern; omit to auto-pick.",
      +        "enum": [
      +          "solid",
      +          "hatch_r",
      +          "hatch_l",
      +          "cross",
      +          "horizontal",
      +          "vertical",
      +          "grid",
      +          "dots",
      +          "waves",
      +          "chevron"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "delete",
      +        "type": "string"
      +      },
      +      "reassignTo": {
      +        "description": "Another activity type's id to move events onto; required if events still use this type.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / areas / items / oneOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "color": {
      -        "type": "string"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "create",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "color": {
      -        "type": "string"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "order": {
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "delete",
      -        "type": "string"
      -      },
      -      "reassignTo": {
      -        "description": "Another area's id to move events onto; required if events still use this area.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "color": {
      +        "description": "Lowercase \"#rrggbb\"; omit to auto-pick.",
      +        "pattern": "^#[0-9a-f]{6}$",
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "create",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "color": {
      +        "description": "Lowercase \"#rrggbb\"; omit to auto-pick.",
      +        "pattern": "^#[0-9a-f]{6}$",
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "order": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "delete",
      +        "type": "string"
      +      },
      +      "reassignTo": {
      +        "description": "Another area's id to move events onto; required if events still use this area.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
  8. Changed3 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedInput schema / properties / activityTypes / items / oneOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "create",
      -        "type": "string"
      -      },
      -      "pattern": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "update",
      -        "type": "string"
      -      },
      -      "pattern": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "delete",
      -        "type": "string"
      -      },
      -      "reassignTo": {
      -        "description": "Another activity type's id to move events onto; required if events still use this type.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "create",
      +        "type": "string"
      +      },
      +      "pattern": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "order": {
      +        "type": "number"
      +      },
      +      "pattern": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "delete",
      +        "type": "string"
      +      },
      +      "reassignTo": {
      +        "description": "Another activity type's id to move events onto; required if events still use this type.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedInput schema / properties / areas / items / oneOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "color": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "create",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "name"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "color": {
      -        "type": "string"
      -      },
      -      "id": {
      -        "type": "string"
      -      },
      -      "name": {
      -        "maxLength": 60,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "update",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "id": {
      -        "type": "string"
      -      },
      -      "op": {
      -        "const": "delete",
      -        "type": "string"
      -      },
      -      "reassignTo": {
      -        "description": "Another area's id to move events onto; required if events still use this area.",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "op",
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "color": {
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "create",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "color": {
      +        "type": "string"
      +      },
      +      "id": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "maxLength": 60,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "update",
      +        "type": "string"
      +      },
      +      "order": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "id": {
      +        "type": "string"
      +      },
      +      "op": {
      +        "const": "delete",
      +        "type": "string"
      +      },
      +      "reassignTo": {
      +        "description": "Another area's id to move events onto; required if events still use this area.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "op",
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
  9. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only confirm it is a non-read-only, destructive, closed-world mutation; the description adds substantial behavior the annotations cannot convey: atomic-by-default with a `partial: true` best-effort mode, one `undoToken` + `expiresAt` per write, `conflict`/`validation` error codes with `usage`/`reassignTargets` detail, refusal of deletes on in-use categories, shared-default forking with `forkedFrom`, and archiving semantics. This is well beyond annotation coverage.

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

Conciseness3/5

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

Purpose is front-loaded and most sentences carry real information, but the body is one very dense paragraph with duplicated content (project-name uniqueness is stated twice). A reader must parse a wall of text to extract the op grammar, so structure is only adequate.

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

Completeness5/5

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

Despite no output schema and a complex multi-op, multi-family schema, the description covers write results (`created`/`updated` rows, `deletedIds`, `movedEvents`, `projects` array), error paths with remedy payloads, and undo. An agent has enough to call it correctly and recover from failures.

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

Parameters4/5

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

Schema coverage is only 25%, so the description must compensate, and it largely does: it spells out every op shape (`create`/`update`/`delete`/`split`/`relink`), the per-family field sets, valid `pattern` values, `#rrggbb` colour format, and `reassignTo` semantics. It omits a few schema-documented fields (`order` on area update, `publishCalendarId` on project update), which keeps it short of a 5.

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?

The opening sentence names precise verbs (create/update/delete) and the exact resource families (areas, activity types, projects) with their aliases, so the agent immediately knows this is the category/taxonomy management tool. It is clearly distinguishable from siblings like write_events or delete_events, which consume the ids this tool returns.

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?

It explicitly places the tool in a workflow: create areas/types here first, then pass the returned ids to write_events and a project id to manage_inbox `projectId`, and reverse writes via undo_changes. That is clear sequencing guidance, though it never states conditions under which this tool should be avoided in favor of a sibling.

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.