Skip to main content
Glama
Kydaix

Font Design MCP

by Kydaix

glyph_edit

Apply vector operations and drawing primitives to edit a single glyph in a font master. Perform atomic edits like moving points, adding contours, or transforming components.

Instructions

Apply typed vector operations or drawing primitives atomically to one glyph in master_id (default: 'default'). Use detail=full for added/removed/touched IDs. Replacements are explicit.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
createNo
detailNosummary
summaryNo
glyph_idYes
master_idNodefault
operationsYes
project_idYes
expected_revisionYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
okYes
dataNo
errorNo
changedNo
summaryYes
revisionNo
warningsNo
project_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changedv0.6.0
    • addedInput schema / $defs / DetachStrokeNetwork
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "op": {
      +      "const": "detach_stroke_network",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "op"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / NetworkStroke
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "cap": {
      +      "default": "butt",
      +      "enum": [
      +        "round",
      +        "butt",
      +        "square"
      +      ],
      +      "type": "string"
      +    },
      +    "id": {
      +      "pattern": "^[a-zA-Z_][a-zA-Z0-9_]{0,15}$",
      +      "type": "string"
      +    },
      +    "join": {
      +      "default": "miter",
      +      "enum": [
      +        "round",
      +        "bevel",
      +        "miter"
      +      ],
      +      "type": "string"
      +    },
      +    "path": {
      +      "maxLength": 16000,
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "width_parameter": {
      +      "pattern": "^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "path",
      +    "width_parameter"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / SetStrokeNetwork
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "network": {
      +      "$ref": "#/$defs/StrokeNetwork"
      +    },
      +    "op": {
      +      "const": "stroke_network",
      +      "type": "string"
      +    },
      +    "replace": {
      +      "default": false,
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "op",
      +    "network"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / StrokeNetwork
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "advance": {
      +      "default": 600,
      +      "maximum": 16000,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "horizontal_scale": {
      +      "default": 1,
      +      "exclusiveMinimum": 0,
      +      "maximum": 4,
      +      "type": "number"
      +    },
      +    "origin_x": {
      +      "default": 0,
      +      "maximum": 16000,
      +      "minimum": -16000,
      +      "type": "number"
      +    },
      +    "parameters": {
      +      "maxProperties": 16,
      +      "minProperties": 1,
      +      "patternProperties": {
      +        "^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$": {
      +          "exclusiveMinimum": 0,
      +          "maximum": 2000,
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "strokes": {
      +      "items": {
      +        "$ref": "#/$defs/NetworkStroke"
      +      },
      +      "maxItems": 16,
      +      "minItems": 1,
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "parameters",
      +    "strokes"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / UpdateStrokeNetwork
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "advance": {
      +      "anyOf": [
      +        {
      +          "maximum": 16000,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "horizontal_scale": {
      +      "anyOf": [
      +        {
      +          "exclusiveMinimum": 0,
      +          "maximum": 4,
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "op": {
      +      "const": "update_stroke_network",
      +      "type": "string"
      +    },
      +    "parameters": {
      +      "maxProperties": 16,
      +      "patternProperties": {
      +        "^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$": {
      +          "exclusiveMinimum": 0,
      +          "maximum": 2000,
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "op"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / operations / items / discriminator / mapping / detach_stroke_network
      Added value: +"#/$defs/DetachStrokeNetwork"
    • addedInput schema / properties / operations / items / discriminator / mapping / stroke_network
      Added value: +"#/$defs/SetStrokeNetwork"
    • addedInput schema / properties / operations / items / discriminator / mapping / update_stroke_network
      Added value: +"#/$defs/UpdateStrokeNetwork"
    • changedInput schema / properties / operations / items / oneOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/PutContour"
      -  },
      -  {
      -    "$ref": "#/$defs/MovePoint"
      -  },
      -  {
      -    "$ref": "#/$defs/MoveHandle"
      -  },
      -  {
      -    "$ref": "#/$defs/SetSmooth"
      -  },
      -  {
      -    "$ref": "#/$defs/DetachComposition"
      -  },
      -  {
      -    "$ref": "#/$defs/Transform"
      -  },
      -  {
      -    "$ref": "#/$defs/PutComponent"
      -  },
      -  {
      -    "$ref": "#/$defs/PutAnchor"
      -  },
      -  {
      -    "$ref": "#/$defs/Remove"
      -  },
      -  {
      -    "$ref": "#/$defs/SetUnicodes"
      -  },
      -  {
      -    "$ref": "#/$defs/ReplaceGlyph"
      -  },
      -  {
      -    "$ref": "#/$defs/FilledPath"
      -  },
      -  {
      -    "$ref": "#/$defs/StrokePath"
      -  },
      -  {
      -    "$ref": "#/$defs/Primitive"
      -  },
      -  {
      -    "$ref": "#/$defs/Duplicate"
      -  },
      -  {
      -    "$ref": "#/$defs/ComposeAccent"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/PutContour"
      +  },
      +  {
      +    "$ref": "#/$defs/MovePoint"
      +  },
      +  {
      +    "$ref": "#/$defs/MoveHandle"
      +  },
      +  {
      +    "$ref": "#/$defs/SetSmooth"
      +  },
      +  {
      +    "$ref": "#/$defs/DetachComposition"
      +  },
      +  {
      +    "$ref": "#/$defs/Transform"
      +  },
      +  {
      +    "$ref": "#/$defs/PutComponent"
      +  },
      +  {
      +    "$ref": "#/$defs/PutAnchor"
      +  },
      +  {
      +    "$ref": "#/$defs/Remove"
      +  },
      +  {
      +    "$ref": "#/$defs/SetUnicodes"
      +  },
      +  {
      +    "$ref": "#/$defs/ReplaceGlyph"
      +  },
      +  {
      +    "$ref": "#/$defs/FilledPath"
      +  },
      +  {
      +    "$ref": "#/$defs/StrokePath"
      +  },
      +  {
      +    "$ref": "#/$defs/SetStrokeNetwork"
      +  },
      +  {
      +    "$ref": "#/$defs/UpdateStrokeNetwork"
      +  },
      +  {
      +    "$ref": "#/$defs/DetachStrokeNetwork"
      +  },
      +  {
      +    "$ref": "#/$defs/Primitive"
      +  },
      +  {
      +    "$ref": "#/$defs/Duplicate"
      +  },
      +  {
      +    "$ref": "#/$defs/ComposeAccent"
      +  }
      +]
  2. Changed9 schema fields changedv0.5.0
    • addedInput schema / $defs / ComposeAccent / properties / auto_align
      Added value: +{
      +  "default": false,
      +  "type": "boolean"
      +}
    • addedInput schema / $defs / DetachComposition
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "op": {
      +      "const": "detach_composition",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "op"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / MoveHandle
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "mode": {
      +      "default": "aligned",
      +      "enum": [
      +        "aligned",
      +        "symmetric"
      +      ],
      +      "type": "string"
      +    },
      +    "op": {
      +      "const": "move_handle",
      +      "type": "string"
      +    },
      +    "point_id": {
      +      "pattern": "^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$",
      +      "type": "string"
      +    },
      +    "x": {
      +      "maximum": 16000,
      +      "minimum": -16000,
      +      "type": "number"
      +    },
      +    "y": {
      +      "maximum": 16000,
      +      "minimum": -16000,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "op",
      +    "point_id",
      +    "x",
      +    "y"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / MovePoint / properties / preserve_handles
      Added value: +{
      +  "default": false,
      +  "type": "boolean"
      +}
    • addedInput schema / $defs / SetSmooth
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "op": {
      +      "const": "set_smooth",
      +      "type": "string"
      +    },
      +    "point_id": {
      +      "pattern": "^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$",
      +      "type": "string"
      +    },
      +    "smooth": {
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "op",
      +    "point_id",
      +    "smooth"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / operations / items / discriminator / mapping / detach_composition
      Added value: +"#/$defs/DetachComposition"
    • addedInput schema / properties / operations / items / discriminator / mapping / move_handle
      Added value: +"#/$defs/MoveHandle"
    • addedInput schema / properties / operations / items / discriminator / mapping / set_smooth
      Added value: +"#/$defs/SetSmooth"
    • changedInput schema / properties / operations / items / oneOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/PutContour"
      -  },
      -  {
      -    "$ref": "#/$defs/MovePoint"
      -  },
      -  {
      -    "$ref": "#/$defs/Transform"
      -  },
      -  {
      -    "$ref": "#/$defs/PutComponent"
      -  },
      -  {
      -    "$ref": "#/$defs/PutAnchor"
      -  },
      -  {
      -    "$ref": "#/$defs/Remove"
      -  },
      -  {
      -    "$ref": "#/$defs/SetUnicodes"
      -  },
      -  {
      -    "$ref": "#/$defs/ReplaceGlyph"
      -  },
      -  {
      -    "$ref": "#/$defs/FilledPath"
      -  },
      -  {
      -    "$ref": "#/$defs/StrokePath"
      -  },
      -  {
      -    "$ref": "#/$defs/Primitive"
      -  },
      -  {
      -    "$ref": "#/$defs/Duplicate"
      -  },
      -  {
      -    "$ref": "#/$defs/ComposeAccent"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/PutContour"
      +  },
      +  {
      +    "$ref": "#/$defs/MovePoint"
      +  },
      +  {
      +    "$ref": "#/$defs/MoveHandle"
      +  },
      +  {
      +    "$ref": "#/$defs/SetSmooth"
      +  },
      +  {
      +    "$ref": "#/$defs/DetachComposition"
      +  },
      +  {
      +    "$ref": "#/$defs/Transform"
      +  },
      +  {
      +    "$ref": "#/$defs/PutComponent"
      +  },
      +  {
      +    "$ref": "#/$defs/PutAnchor"
      +  },
      +  {
      +    "$ref": "#/$defs/Remove"
      +  },
      +  {
      +    "$ref": "#/$defs/SetUnicodes"
      +  },
      +  {
      +    "$ref": "#/$defs/ReplaceGlyph"
      +  },
      +  {
      +    "$ref": "#/$defs/FilledPath"
      +  },
      +  {
      +    "$ref": "#/$defs/StrokePath"
      +  },
      +  {
      +    "$ref": "#/$defs/Primitive"
      +  },
      +  {
      +    "$ref": "#/$defs/Duplicate"
      +  },
      +  {
      +    "$ref": "#/$defs/ComposeAccent"
      +  }
      +]
  3. Changed81 schema fields changedv0.4.3
    • removedInput schema / $defs / Anchor / properties / id / title
      Removed value: -"Id"
    • removedInput schema / $defs / Anchor / properties / name / title
      Removed value: -"Name"
    • removedInput schema / $defs / Anchor / properties / x / title
      Removed value: -"X"
    • removedInput schema / $defs / Anchor / properties / y / title
      Removed value: -"Y"
    • removedInput schema / $defs / Anchor / title
      Removed value: -"Anchor"
    • removedInput schema / $defs / Component / properties / base / title
      Removed value: -"Base"
    • removedInput schema / $defs / Component / properties / id / title
      Removed value: -"Id"
    • removedInput schema / $defs / Component / properties / transform / title
      Removed value: -"Transform"
    • removedInput schema / $defs / Component / title
      Removed value: -"Component"
    • addedInput schema / $defs / ComposeAccent
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "base": {
      +      "pattern": "^(?:\\.notdef|[a-zA-Z_][a-zA-Z0-9_.]{0,62})$",
      +      "type": "string"
      +    },
      +    "base_anchor": {
      +      "default": "top",
      +      "pattern": "^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$",
      +      "type": "string"
      +    },
      +    "mark": {
      +      "pattern": "^(?:\\.notdef|[a-zA-Z_][a-zA-Z0-9_.]{0,62})$",
      +      "type": "string"
      +    },
      +    "mark_anchor": {
      +      "default": "_top",
      +      "pattern": "^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$",
      +      "type": "string"
      +    },
      +    "op": {
      +      "const": "compose_accent",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "op",
      +    "base",
      +    "mark"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / $defs / Contour / properties / id / title
      Removed value: -"Id"
    • removedInput schema / $defs / Contour / properties / points / title
      Removed value: -"Points"
    • removedInput schema / $defs / Contour / title
      Removed value: -"Contour"
    • addedInput schema / $defs / Duplicate
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "matrix": {
      +      "default": [
      +        1,
      +        0,
      +        0,
      +        1,
      +        0,
      +        0
      +      ],
      +      "maxItems": 6,
      +      "minItems": 6,
      +      "prefixItems": [
      +        {
      +          "maximum": 16,
      +          "minimum": -16,
      +          "type": "number"
      +        },
      +        {
      +          "maximum": 16,
      +          "minimum": -16,
      +          "type": "number"
      +        },
      +        {
      +          "maximum": 16,
      +          "minimum": -16,
      +          "type": "number"
      +        },
      +        {
      +          "maximum": 16,
      +          "minimum": -16,
      +          "type": "number"
      +        },
      +        {
      +          "maximum": 16000,
      +          "minimum": -16000,
      +          "type": "number"
      +        },
      +        {
      +          "maximum": 16000,
      +          "minimum": -16000,
      +          "type": "number"
      +        }
      +      ],
      +      "type": "array"
      +    },
      +    "op": {
      +      "const": "duplicate",
      +      "type": "string"
      +    },
      +    "source": {
      +      "pattern": "^(?:\\.notdef|[a-zA-Z_][a-zA-Z0-9_.]{0,62})$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "op",
      +    "source"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / $defs / FilledPath
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "advance": {
      +      "anyOf": [
      +        {
      +          "maximum": 16000,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "id": {
      +      "default": "outline",
      +      "pattern": "^[a-zA-Z_][a-zA-Z0-9_]{0,23}$",
      +      "type": "string"
      +    },
      +    "op": {
      +      "const": "filled_path",
      +      "type": "string"
      +    },
      +    "paths": {
      +      "items": {
      +        "maxLength": 16000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxItems": 32,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "replace": {
      +      "default": false,
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "op",
      +    "paths"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / $defs / Glyph / properties / advance / title
      Removed value: -"Advance"
    • removedInput schema / $defs / Glyph / properties / anchors / title
      Removed value: -"Anchors"
    • removedInput schema / $defs / Glyph / properties / components / title
      Removed value: -"Components"
    • removedInput schema / $defs / Glyph / properties / contours / title
      Removed value: -"Contours"
    • removedInput schema / $defs / Glyph / properties / unicodes / title
      Removed value: -"Unicodes"
    • removedInput schema / $defs / Glyph / title
      Removed value: -"Glyph"
    • removedInput schema / $defs / MovePoint / properties / op / title
      Removed value: -"Op"
    • removedInput schema / $defs / MovePoint / properties / point_id / title
      Removed value: -"Point Id"
    • removedInput schema / $defs / MovePoint / properties / x / title
      Removed value: -"X"
    • removedInput schema / $defs / MovePoint / properties / y / title
      Removed value: -"Y"
    • removedInput schema / $defs / MovePoint / title
      Removed value: -"MovePoint"
    • removedInput schema / $defs / Point / properties / id / title
      Removed value: -"Id"
    • removedInput schema / $defs / Point / properties / smooth / title
      Removed value: -"Smooth"
    • removedInput schema / $defs / Point / properties / type / title
      Removed value: -"Type"
    • removedInput schema / $defs / Point / properties / x / title
      Removed value: -"X"
    • removedInput schema / $defs / Point / properties / y / title
      Removed value: -"Y"
    • removedInput schema / $defs / Point / title
      Removed value: -"Point"
    • addedInput schema / $defs / Primitive
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "advance": {
      +      "anyOf": [
      +        {
      +          "maximum": 16000,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "height": {
      +      "exclusiveMinimum": 0,
      +      "maximum": 16000,
      +      "type": "number"
      +    },
      +    "id": {
      +      "default": "outline",
      +      "pattern": "^[a-zA-Z_][a-zA-Z0-9_]{0,23}$",
      +      "type": "string"
      +    },
      +    "op": {
      +      "const": "primitive",
      +      "type": "string"
      +    },
      +    "replace": {
      +      "default": false,
      +      "type": "boolean"
      +    },
      +    "shape": {
      +      "enum": [
      +        "rectangle",
      +        "ellipse"
      +      ],
      +      "type": "string"
      +    },
      +    "width": {
      +      "exclusiveMinimum": 0,
      +      "maximum": 16000,
      +      "type": "number"
      +    },
      +    "x": {
      +      "maximum": 16000,
      +      "minimum": -16000,
      +      "type": "number"
      +    },
      +    "y": {
      +      "maximum": 16000,
      +      "minimum": -16000,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "op",
      +    "shape",
      +    "x",
      +    "y",
      +    "width",
      +    "height"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / $defs / PutAnchor / properties / op / title
      Removed value: -"Op"
    • removedInput schema / $defs / PutAnchor / properties / replace / title
      Removed value: -"Replace"
    • removedInput schema / $defs / PutAnchor / title
      Removed value: -"PutAnchor"
    • removedInput schema / $defs / PutComponent / properties / op / title
      Removed value: -"Op"
    • removedInput schema / $defs / PutComponent / properties / replace / title
      Removed value: -"Replace"
    • removedInput schema / $defs / PutComponent / title
      Removed value: -"PutComponent"
    • removedInput schema / $defs / PutContour / properties / op / title
      Removed value: -"Op"
    • removedInput schema / $defs / PutContour / properties / replace / title
      Removed value: -"Replace"
    • removedInput schema / $defs / PutContour / title
      Removed value: -"PutContour"
    • removedInput schema / $defs / Remove / properties / id / title
      Removed value: -"Id"
    • removedInput schema / $defs / Remove / properties / kind / title
      Removed value: -"Kind"
    • removedInput schema / $defs / Remove / properties / op / title
      Removed value: -"Op"
    • removedInput schema / $defs / Remove / title
      Removed value: -"Remove"
    • removedInput schema / $defs / ReplaceGlyph / properties / op / title
      Removed value: -"Op"
    • removedInput schema / $defs / ReplaceGlyph / title
      Removed value: -"ReplaceGlyph"
    • removedInput schema / $defs / SetUnicodes / properties / op / title
      Removed value: -"Op"
    • removedInput schema / $defs / SetUnicodes / properties / unicodes / title
      Removed value: -"Unicodes"
    • removedInput schema / $defs / SetUnicodes / title
      Removed value: -"SetUnicodes"
    • addedInput schema / $defs / StrokePath
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "advance": {
      +      "anyOf": [
      +        {
      +          "maximum": 16000,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null
      +    },
      +    "cap": {
      +      "default": "round",
      +      "enum": [
      +        "round",
      +        "butt",
      +        "square"
      +      ],
      +      "type": "string"
      +    },
      +    "id": {
      +      "default": "outline",
      +      "pattern": "^[a-zA-Z_][a-zA-Z0-9_]{0,23}$",
      +      "type": "string"
      +    },
      +    "join": {
      +      "default": "round",
      +      "enum": [
      +        "round",
      +        "bevel",
      +        "miter"
      +      ],
      +      "type": "string"
      +    },
      +    "op": {
      +      "const": "stroke_path",
      +      "type": "string"
      +    },
      +    "paths": {
      +      "items": {
      +        "maxLength": 16000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxItems": 32,
      +      "minItems": 1,
      +      "type": "array"
      +    },
      +    "replace": {
      +      "default": false,
      +      "type": "boolean"
      +    },
      +    "width": {
      +      "exclusiveMinimum": 0,
      +      "maximum": 2000,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "op",
      +    "paths",
      +    "width"
      +  ],
      +  "type": "object"
      +}
    • removedInput schema / $defs / Transform / properties / contour_ids / title
      Removed value: -"Contour Ids"
    • removedInput schema / $defs / Transform / properties / matrix / title
      Removed value: -"Matrix"
    • removedInput schema / $defs / Transform / properties / op / title
      Removed value: -"Op"
    • removedInput schema / $defs / Transform / title
      Removed value: -"Transform"
    • removedInput schema / properties / create / title
      Removed value: -"Create"
    • addedInput schema / properties / detail
      Added value: +{
      +  "default": "summary",
      +  "enum": [
      +    "summary",
      +    "full"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / properties / expected_revision / title
      Removed value: -"Expected Revision"
    • removedInput schema / properties / glyph_id / title
      Removed value: -"Glyph Id"
    • addedInput schema / properties / master_id
      Added value: +{
      +  "default": "default",
      +  "pattern": "^[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,63}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / operations / items / discriminator / mapping / compose_accent
      Added value: +"#/$defs/ComposeAccent"
    • addedInput schema / properties / operations / items / discriminator / mapping / duplicate
      Added value: +"#/$defs/Duplicate"
    • addedInput schema / properties / operations / items / discriminator / mapping / filled_path
      Added value: +"#/$defs/FilledPath"
    • addedInput schema / properties / operations / items / discriminator / mapping / primitive
      Added value: +"#/$defs/Primitive"
    • addedInput schema / properties / operations / items / discriminator / mapping / stroke_path
      Added value: +"#/$defs/StrokePath"
    • changedInput schema / properties / operations / items / oneOf
      Previous value: -[
      -  {
      -    "$ref": "#/$defs/PutContour"
      -  },
      -  {
      -    "$ref": "#/$defs/MovePoint"
      -  },
      -  {
      -    "$ref": "#/$defs/Transform"
      -  },
      -  {
      -    "$ref": "#/$defs/PutComponent"
      -  },
      -  {
      -    "$ref": "#/$defs/PutAnchor"
      -  },
      -  {
      -    "$ref": "#/$defs/Remove"
      -  },
      -  {
      -    "$ref": "#/$defs/SetUnicodes"
      -  },
      -  {
      -    "$ref": "#/$defs/ReplaceGlyph"
      -  }
      -]New value: +[
      +  {
      +    "$ref": "#/$defs/PutContour"
      +  },
      +  {
      +    "$ref": "#/$defs/MovePoint"
      +  },
      +  {
      +    "$ref": "#/$defs/Transform"
      +  },
      +  {
      +    "$ref": "#/$defs/PutComponent"
      +  },
      +  {
      +    "$ref": "#/$defs/PutAnchor"
      +  },
      +  {
      +    "$ref": "#/$defs/Remove"
      +  },
      +  {
      +    "$ref": "#/$defs/SetUnicodes"
      +  },
      +  {
      +    "$ref": "#/$defs/ReplaceGlyph"
      +  },
      +  {
      +    "$ref": "#/$defs/FilledPath"
      +  },
      +  {
      +    "$ref": "#/$defs/StrokePath"
      +  },
      +  {
      +    "$ref": "#/$defs/Primitive"
      +  },
      +  {
      +    "$ref": "#/$defs/Duplicate"
      +  },
      +  {
      +    "$ref": "#/$defs/ComposeAccent"
      +  }
      +]
    • removedInput schema / properties / operations / title
      Removed value: -"Operations"
    • removedInput schema / properties / project_id / title
      Removed value: -"Project Id"
    • removedInput schema / properties / summary / title
      Removed value: -"Summary"
    • changedInput schema / required
      Previous value: -[
      -  "project_id",
      -  "expected_revision",
      -  "glyph_id",
      -  "operations"
      -]New value: +[
      +  "glyph_id",
      +  "operations",
      +  "project_id",
      +  "expected_revision"
      +]
    • removedInput schema / title
      Removed value: -"GlyphEdit"
    • removedOutput schema / properties / changed / title
      Removed value: -"Changed"
    • removedOutput schema / properties / data / title
      Removed value: -"Data"
    • removedOutput schema / properties / error / title
      Removed value: -"Error"
    • removedOutput schema / properties / ok / title
      Removed value: -"Ok"
    • removedOutput schema / properties / project_id / title
      Removed value: -"Project Id"
    • removedOutput schema / properties / revision / title
      Removed value: -"Revision"
    • removedOutput schema / properties / summary / title
      Removed value: -"Summary"
    • removedOutput schema / properties / warnings / title
      Removed value: -"Warnings"
    • removedOutput schema / title
      Removed value: -"Result"
  4. First observedv0.1.0

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the safety bar is lower. The description usefully adds that operations are applied 'atomically' and that 'replacements are explicit', which is real behavioral context beyond the annotations, but it omits the concurrency semantics (expected_revision) that govern a mutation of this kind.

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

Conciseness4/5

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

Three tightly written sentences with the primary action front-loaded and no filler. It is efficient, though 'Replacements are explicit' is somewhat cryptic in isolation.

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

Completeness2/5

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

For a highly complex mutation tool (19 operation variants, 8 params, optimistic concurrency via expected_revision, and a create flag), the description is far too terse. An output schema exists so return values need not be explained, but the missing param coverage and lack of concurrency/creation guidance leave real gaps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the full explanatory burden, yet it only mentions master_id's default and the detail=full option. Key parameters such as expected_revision, create, and the 19-variant operations payload receive no explanation, leaving the parameter semantics largely undocumented.

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 a specific verb (apply) and resource (typed vector operations/drawing primitives to one glyph in a master), which is clear. It does not, however, differentiate itself from siblings like glyph_get or font_edit, so an agent must infer the boundary from the word 'operations' alone.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus font_edit, glyph_get, or spacing_edit. The only conditional offered is the detail=full hint, which concerns output verbosity, not tool selection. No prerequisites or exclusions are stated.

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