Skip to main content
Glama

Create deck

create_deck

Creates a complete presentation deck from a title, brief, and slides in one call, validates layout and text overflow, and saves it with previews only when no slide errors remain.

Instructions

Creates a deck with all its slides in one call and renders it as a presentation file with animations. Returns the deck id, revision, findings (validation and measured overflow) and previews. Nothing is saved when the slides have errors.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "title": "<title>",
      "brief": "<brief>",
      "slides": "<slides>"
    },
    "name": "create_deck"
  }
}

Input Schema

NameRequiredDescriptionDefault
briefYes
titleYes
designNoDesign fields to set on top of the brand kit or default design
motionNoThe motion language of this deck: intensity, rationale, default entrance and transition, tempo, heroes and your own vocabulary (section motion)
slidesYes
previewsNoLocal server: return PNG previews of changed slides and slides with errors (up to 4)
brand_kit_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changedv0.1.1
    • addedInput schema / properties / brief / properties / bigIdea
      Added value: +{
      +  "description": "What the audience should take away and do, in one sentence. Every slide serves it",
      +  "maxLength": 200,
      +  "minLength": 10,
      +  "type": "string"
      +}
    • addedInput schema / properties / brief / properties / concept
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "avoid": {
      +      "description": "What the deck must not look like",
      +      "maxLength": 160,
      +      "minLength": 3,
      +      "type": "string"
      +    },
      +    "idea": {
      +      "description": "The visual idea of the deck in one sentence, e.g. a quiet editorial deck where one number per slide speaks",
      +      "maxLength": 200,
      +      "minLength": 10,
      +      "type": "string"
      +    },
      +    "references": {
      +      "description": "Named references, e.g. Bloomberg Businessweek covers, Braun product manuals",
      +      "items": {
      +        "maxLength": 80,
      +        "minLength": 2,
      +        "type": "string"
      +      },
      +      "maxItems": 4,
      +      "type": "array"
      +    },
      +    "school": {
      +      "description": "Design school the deck follows (section schools), when one fits",
      +      "enum": [
      +        "swiss",
      +        "editorial",
      +        "ma",
      +        "keynote",
      +        "product-tech",
      +        "brutalist",
      +        "bauhaus",
      +        "functional",
      +        "data-editorial",
      +        "ibcs",
      +        "humanist"
      +      ],
      +      "type": "string"
      +    },
      +    "signature": {
      +      "description": "One device that recurs on every slide: a rule, a crop, a number style, a color field",
      +      "maxLength": 160,
      +      "minLength": 3,
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "idea",
      +    "avoid",
      +    "signature"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / brief / properties / delivery
      Added value: +{
      +  "description": "How the deck is used: live (spoken to an audience), pre-read (read alone, no speaker) or both. It decides text density, motion and speaker notes (validation checks density and motion). Ask the user, do not infer it from the industry",
      +  "enum": [
      +    "live",
      +    "pre-read",
      +    "both"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / brief / properties / frame
      Added value: +{
      +  "description": "Narrative frame that orders the story (section pitch, frames): classical, scqa, abt, monroe, story-spine, sparkline, toulmin",
      +  "enum": [
      +    "classical",
      +    "scqa",
      +    "abt",
      +    "monroe",
      +    "story-spine",
      +    "sparkline",
      +    "toulmin"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / brief / required
      Previous value: -[
      -  "company",
      -  "topic",
      -  "language"
      -]New value: +[
      +  "company",
      +  "topic",
      +  "language",
      +  "concept"
      +]
    • addedInput schema / properties / slides / items / properties / background
      Added value: +{
      +  "description": "Background of the slide. brand = a visual drawn from the brand colors (no assets needed), image = the user's image under an overlay that keeps text legible. Use it for the title and chapter openers, not on every slide",
      +  "oneOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "type": {
      +          "const": "brand",
      +          "type": "string"
      +        },
      +        "visual": {
      +          "description": "numeral = the chapter number set very large, field = a color field across part of the slide, geometry = one thin line in the accent along the edge of the slide",
      +          "enum": [
      +            "numeral",
      +            "field",
      +            "geometry"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type",
      +        "visual"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "assetId": {
      +          "description": "An image asset the user supplied (add_asset). Never a stock or generated image",
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "focus": {
      +          "additionalProperties": false,
      +          "description": "Focal point for the crop. Put it where the text is not",
      +          "properties": {
      +            "x": {
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            },
      +            "y": {
      +              "maximum": 1,
      +              "minimum": 0,
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "x",
      +            "y"
      +          ],
      +          "type": "object"
      +        },
      +        "overlay": {
      +          "description": "How much of the slide background color covers the image so text stays legible, 0 to 0.95. Default 0.55. The browser measures the text over the image and reports the smallest value that works",
      +          "maximum": 0.95,
      +          "minimum": 0,
      +          "type": "number"
      +        },
      +        "type": {
      +          "const": "image",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "type",
      +        "assetId"
      +      ],
      +      "type": "object"
      +    }
      +  ]
      +}
    • addedInput schema / properties / slides / items / properties / beat
      Added value: +{
      +  "description": "The story beat this slide carries (section pitch, beats): hook, problem, traction, ask...",
      +  "enum": [
      +    "hook",
      +    "problem",
      +    "why-now",
      +    "solution",
      +    "product",
      +    "traction",
      +    "market",
      +    "business-model",
      +    "competition",
      +    "go-to-market",
      +    "roadmap",
      +    "team",
      +    "financials",
      +    "risks",
      +    "decision",
      +    "ask"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / slides / items / properties / blocks / additionalProperties / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "level": {
      -        "description": "display = title and statement slides, h1 = slide heading, h2 = sub heading",
      -        "enum": [
      -          "display",
      -          "h1",
      -          "h2"
      -        ],
      -        "type": "string"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "text": {
      -        "description": "Heading. Wrap the key words in ==double equals== to highlight them. Aim for at most 70 characters",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "type": {
      -        "const": "heading",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text",
      -      "level"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "size": {
      -        "enum": [
      -          "lead",
      -          "body",
      -          "small"
      -        ],
      -        "type": "string"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "text": {
      -        "description": "Paragraph. Aim for at most 260 characters",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "type": {
      -        "const": "text",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text",
      -      "size"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "build": {
      -        "description": "together = all items with the block, items = one item per click",
      -        "enum": [
      -          "together",
      -          "items"
      -        ],
      -        "type": "string"
      -      },
      -      "items": {
      -        "items": {
      -          "description": "One point, a short sentence, no bullet character. Aim for at most 100 characters",
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 5,
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "bullets",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "items"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "decimals": {
      -        "maximum": 2,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "detail": {
      -        "description": "Optional context or source. Aim for at most 90 characters",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "label": {
      -        "description": "What the number means. Aim for at most 48 characters",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "prefix": {
      -        "description": "e.g. $, €",
      -        "maxLength": 3,
      -        "type": "string"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "suffix": {
      -        "description": "e.g. %, x, M, k",
      -        "maxLength": 4,
      -        "type": "string"
      -      },
      -      "type": {
      -        "const": "stat",
      -        "type": "string"
      -      },
      -      "value": {
      -        "description": "The number itself, animated as a count up",
      -        "type": "number"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "value",
      -      "label"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "build": {
      -        "description": "together = all items with the block, items = one item per click",
      -        "enum": [
      -          "together",
      -          "items"
      -        ],
      -        "type": "string"
      -      },
      -      "items": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "decimals": {
      -              "maximum": 2,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "detail": {
      -              "description": "Optional context or source. Aim for at most 90 characters",
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "label": {
      -              "description": "What the number means. Aim for at most 48 characters",
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "prefix": {
      -              "description": "e.g. $, €",
      -              "maxLength": 3,
      -              "type": "string"
      -            },
      -            "suffix": {
      -              "description": "e.g. %, x, M, k",
      -              "maxLength": 4,
      -              "type": "string"
      -            },
      -            "value": {
      -              "description": "The number itself, animated as a count up",
      -              "type": "number"
      -            }
      -          },
      -          "required": [
      -            "value",
      -            "label"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 4,
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "stats",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "items"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "caption": {
      -        "description": "Source or footnote. Aim for at most 90 characters",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "categories": {
      -        "description": "X axis labels (column, line), rows (bar) or segments (donut)",
      -        "items": {
      -          "maxLength": 24,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 8,
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "highlight": {
      -        "description": "Index of the category to draw in the accent color, the rest stays muted",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "kind": {
      -        "enum": [
      -          "column",
      -          "bar",
      -          "line",
      -          "donut"
      -        ],
      -        "type": "string"
      -      },
      -      "series": {
      -        "description": "One value per category. Donut takes exactly one series",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "name": {
      -              "maxLength": 30,
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "values": {
      -              "items": {
      -                "type": "number"
      -              },
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "values"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 3,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "chart",
      -        "type": "string"
      -      },
      -      "unit": {
      -        "description": "Shown after values, e.g. %, $M",
      -        "maxLength": 6,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "kind",
      -      "categories",
      -      "series"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "alt": {
      -        "description": "What the image shows. Aim for at most 120 characters",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "assetId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "fit": {
      -        "enum": [
      -          "cover",
      -          "contain"
      -        ],
      -        "type": "string"
      -      },
      -      "focus": {
      -        "additionalProperties": false,
      -        "description": "Focal point for cover crops",
      -        "properties": {
      -          "x": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          },
      -          "y": {
      -            "maximum": 1,
      -            "minimum": 0,
      -            "type": "number"
      -          }
      -        },
      -        "required": [
      -          "x",
      -          "y"
      -        ],
      -        "type": "object"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "image",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "assetId",
      -      "alt",
      -      "fit"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "alt": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "assetId": {
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "logo",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "assetId",
      -      "alt"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "items": {
      -        "description": "Customer, partner or press logos",
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "alt": {
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "assetId": {
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "assetId",
      -            "alt"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 8,
      -        "minItems": 3,
      -        "type": "array"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "logos",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "items"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "author": {
      -        "maxLength": 40,
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "role": {
      -        "maxLength": 60,
      -        "type": "string"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "text": {
      -        "description": "The quote, without quotation marks. Aim for at most 200 characters",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "type": {
      -        "const": "quote",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text",
      -      "author"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "build": {
      -        "description": "together = all items with the block, items = one item per click",
      -        "enum": [
      -          "together",
      -          "items"
      -        ],
      -        "type": "string"
      -      },
      -      "current": {
      -        "description": "Index of the milestone that represents now",
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "items": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "label": {
      -              "description": "Date or phase, e.g. Q3 2026",
      -              "maxLength": 16,
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "text": {
      -              "description": "Detail. Aim for at most 80 characters",
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "title": {
      -              "description": "Milestone. Aim for at most 36 characters",
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "label",
      -            "title"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 6,
      -        "minItems": 3,
      -        "type": "array"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "timeline",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "items"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "people": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "bio": {
      -              "description": "One line of credibility. Aim for at most 80 characters",
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "name": {
      -              "maxLength": 32,
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "photoAssetId": {
      -              "type": "string"
      -            },
      -            "role": {
      -              "maxLength": 40,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "role"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 6,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "team",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "people"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "build": {
      -        "description": "together = all items with the block, items = one item per click",
      -        "enum": [
      -          "together",
      -          "items"
      -        ],
      -        "type": "string"
      -      },
      -      "columns": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "highlight": {
      -              "description": "Our column, drawn with the accent",
      -              "type": "boolean"
      -            },
      -            "items": {
      -              "items": {
      -                "description": "Point. Aim for at most 60 characters",
      -                "minLength": 1,
      -                "type": "string"
      -              },
      -              "maxItems": 5,
      -              "minItems": 1,
      -              "type": "array"
      -            },
      -            "title": {
      -              "maxLength": 28,
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "title",
      -            "items"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 3,
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "comparison",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "columns"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "build": {
      -        "description": "together = all items with the block, items = one item per click",
      -        "enum": [
      -          "together",
      -          "items"
      -        ],
      -        "type": "string"
      -      },
      -      "items": {
      -        "items": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "text": {
      -              "description": "Card text. Aim for at most 110 characters",
      -              "minLength": 1,
      -              "type": "string"
      -            },
      -            "title": {
      -              "description": "Card title. Aim for at most 32 characters",
      -              "minLength": 1,
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "title",
      -            "text"
      -          ],
      -          "type": "object"
      -        },
      -        "maxItems": 4,
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "cards",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "items"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "columns": {
      -        "items": {
      -          "maxLength": 24,
      -          "minLength": 1,
      -          "type": "string"
      -        },
      -        "maxItems": 5,
      -        "minItems": 2,
      -        "type": "array"
      -      },
      -      "highlightColumn": {
      -        "maximum": 9007199254740991,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "rows": {
      -        "description": "Each row has one cell per column",
      -        "items": {
      -          "items": {
      -            "maxLength": 40,
      -            "type": "string"
      -          },
      -          "type": "array"
      -        },
      -        "maxItems": 6,
      -        "minItems": 1,
      -        "type": "array"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "table",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "columns",
      -      "rows"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "detail": {
      -        "description": "Contact, link or next step. Aim for at most 80 characters",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "step": {
      -        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      -        "maximum": 5,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "text": {
      -        "description": "The ask or call to action. ==Highlight== the amount or key words. Aim for at most 70 characters",
      -        "minLength": 1,
      -        "type": "string"
      -      },
      -      "type": {
      -        "const": "cta",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "level": {
      +        "description": "display = title and statement slides, h1 = slide heading, h2 = sub heading",
      +        "enum": [
      +          "display",
      +          "h1",
      +          "h2"
      +        ],
      +        "type": "string"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "text": {
      +        "description": "Heading. Wrap the key words in ==double equals== to highlight them. Aim for at most 70 characters",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "type": {
      +        "const": "heading",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text",
      +      "level"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "size": {
      +        "enum": [
      +          "lead",
      +          "body",
      +          "small"
      +        ],
      +        "type": "string"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "text": {
      +        "description": "Paragraph. Aim for at most 260 characters",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "type": {
      +        "const": "text",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text",
      +      "size"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "build": {
      +        "description": "together = all items with the block, items = one item per click",
      +        "enum": [
      +          "together",
      +          "items"
      +        ],
      +        "type": "string"
      +      },
      +      "items": {
      +        "items": {
      +          "description": "One point, a short sentence, no bullet character. Aim for at most 100 characters",
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 5,
      +        "minItems": 2,
      +        "type": "array"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "bullets",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "items"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "decimals": {
      +        "maximum": 2,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "detail": {
      +        "description": "Optional context or source. Aim for at most 90 characters",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "label": {
      +        "description": "What the number means. Aim for at most 48 characters",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "prefix": {
      +        "description": "e.g. $, €",
      +        "maxLength": 3,
      +        "type": "string"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "suffix": {
      +        "description": "e.g. %, x, M, k",
      +        "maxLength": 4,
      +        "type": "string"
      +      },
      +      "type": {
      +        "const": "stat",
      +        "type": "string"
      +      },
      +      "value": {
      +        "description": "The number itself, animated as a count up",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "value",
      +      "label"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "build": {
      +        "description": "together = all items with the block, items = one item per click",
      +        "enum": [
      +          "together",
      +          "items"
      +        ],
      +        "type": "string"
      +      },
      +      "items": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "decimals": {
      +              "maximum": 2,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "detail": {
      +              "description": "Optional context or source. Aim for at most 90 characters",
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "label": {
      +              "description": "What the number means. Aim for at most 48 characters",
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "prefix": {
      +              "description": "e.g. $, €",
      +              "maxLength": 3,
      +              "type": "string"
      +            },
      +            "suffix": {
      +              "description": "e.g. %, x, M, k",
      +              "maxLength": 4,
      +              "type": "string"
      +            },
      +            "value": {
      +              "description": "The number itself, animated as a count up",
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "value",
      +            "label"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 4,
      +        "minItems": 2,
      +        "type": "array"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "stats",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "items"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "axis": {
      +        "description": "Show a value axis with gridlines. Only when the audience must read values off the chart, labels on the bars usually suffice (Tufte)",
      +        "type": "boolean"
      +      },
      +      "caption": {
      +        "description": "Source or footnote. Aim for at most 90 characters",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "categories": {
      +        "description": "X axis labels (column, stacked, waterfall, line), rows (bar) or segments (donut)",
      +        "items": {
      +          "maxLength": 24,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 10,
      +        "minItems": 2,
      +        "type": "array"
      +      },
      +      "decimals": {
      +        "description": "Decimal places of the value labels. Omit it: labels keep the decimals the values have (at most 3), the same for every label",
      +        "maximum": 3,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "estimate": {
      +        "description": "Index of the first category that is an estimate or plan (IBCS): from there bars are hatched. Name those categories e.g. 2025E",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "highlight": {
      +        "description": "Index of the category to draw in the accent color, the rest stays muted",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "kind": {
      +        "description": "column, bar (horizontal), line, donut (share of a whole, at most 4 segments read well), stacked (columns split into series), waterfall (bridge: first and last categories are totals, the ones between are changes that add up)",
      +        "enum": [
      +          "column",
      +          "bar",
      +          "line",
      +          "donut",
      +          "stacked",
      +          "waterfall"
      +        ],
      +        "type": "string"
      +      },
      +      "reference": {
      +        "additionalProperties": false,
      +        "description": "A horizontal line at a reference value: target, plan or average",
      +        "properties": {
      +          "label": {
      +            "description": "What the line marks, e.g. Target, Plan, Average. Aim for at most 24 characters",
      +            "minLength": 1,
      +            "type": "string"
      +          },
      +          "value": {
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "value",
      +          "label"
      +        ],
      +        "type": "object"
      +      },
      +      "series": {
      +        "description": "One value per category. Donut takes exactly one series",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "name": {
      +              "maxLength": 30,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "values": {
      +              "items": {
      +                "type": "number"
      +              },
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "values"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 3,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "chart",
      +        "type": "string"
      +      },
      +      "unit": {
      +        "description": "Shown after values, e.g. %, $M",
      +        "maxLength": 6,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "kind",
      +      "categories",
      +      "series"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "alt": {
      +        "description": "What the image shows. Aim for at most 120 characters",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "assetId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "fit": {
      +        "enum": [
      +          "cover",
      +          "contain"
      +        ],
      +        "type": "string"
      +      },
      +      "focus": {
      +        "additionalProperties": false,
      +        "description": "Focal point for cover crops",
      +        "properties": {
      +          "x": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          },
      +          "y": {
      +            "maximum": 1,
      +            "minimum": 0,
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "x",
      +          "y"
      +        ],
      +        "type": "object"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "image",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "assetId",
      +      "alt",
      +      "fit"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "alt": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "assetId": {
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "logo",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "assetId",
      +      "alt"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "items": {
      +        "description": "Customer, partner or press logos",
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "alt": {
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "assetId": {
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "assetId",
      +            "alt"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 8,
      +        "minItems": 3,
      +        "type": "array"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "logos",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "items"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "author": {
      +        "maxLength": 40,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "role": {
      +        "maxLength": 60,
      +        "type": "string"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "text": {
      +        "description": "The quote, without quotation marks. Aim for at most 200 characters",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "type": {
      +        "const": "quote",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text",
      +      "author"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "build": {
      +        "description": "together = all items with the block, items = one item per click",
      +        "enum": [
      +          "together",
      +          "items"
      +        ],
      +        "type": "string"
      +      },
      +      "current": {
      +        "description": "Index of the milestone that represents now",
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "items": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "label": {
      +              "description": "Date or phase, e.g. Q3 2026",
      +              "maxLength": 16,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "text": {
      +              "description": "Detail. Aim for at most 80 characters",
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "title": {
      +              "description": "Milestone. Aim for at most 36 characters",
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "label",
      +            "title"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 6,
      +        "minItems": 3,
      +        "type": "array"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "timeline",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "items"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "people": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "bio": {
      +              "description": "One line of credibility. Aim for at most 80 characters",
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "name": {
      +              "maxLength": 32,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "photoAssetId": {
      +              "type": "string"
      +            },
      +            "role": {
      +              "maxLength": 40,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "role"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 6,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "team",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "people"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "build": {
      +        "description": "together = all items with the block, items = one item per click",
      +        "enum": [
      +          "together",
      +          "items"
      +        ],
      +        "type": "string"
      +      },
      +      "columns": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "highlight": {
      +              "description": "Our column, drawn with the accent",
      +              "type": "boolean"
      +            },
      +            "items": {
      +              "items": {
      +                "description": "Point. Aim for at most 60 characters",
      +                "minLength": 1,
      +                "type": "string"
      +              },
      +              "maxItems": 5,
      +              "minItems": 1,
      +              "type": "array"
      +            },
      +            "title": {
      +              "maxLength": 28,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "title",
      +            "items"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 3,
      +        "minItems": 2,
      +        "type": "array"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "comparison",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "columns"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "build": {
      +        "description": "together = all items with the block, items = one item per click",
      +        "enum": [
      +          "together",
      +          "items"
      +        ],
      +        "type": "string"
      +      },
      +      "items": {
      +        "items": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "icon": {
      +              "description": "An icon that carries the meaning of the card (the kind of risk, the step of a process). Give all cards one or none, and avoid the same icon on two cards unless they mean the same thing",
      +              "enum": [
      +                "risk",
      +                "security",
      +                "lock",
      +                "time",
      +                "people",
      +                "person",
      +                "goal",
      +                "growth",
      +                "decline",
      +                "chart",
      +                "money",
      +                "global",
      +                "speed",
      +                "done",
      +                "fail",
      +                "layers",
      +                "settings",
      +                "data",
      +                "cloud",
      +                "delivery",
      +                "company",
      +                "document",
      +                "search",
      +                "mail",
      +                "launch",
      +                "milestone",
      +                "link",
      +                "balance",
      +                "partnership",
      +                "idea",
      +                "package",
      +                "route"
      +              ],
      +              "type": "string"
      +            },
      +            "text": {
      +              "description": "Card text. Aim for at most 110 characters",
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "title": {
      +              "description": "Card title. Aim for at most 32 characters",
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "title",
      +            "text"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 4,
      +        "minItems": 2,
      +        "type": "array"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "cards",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "items"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "columns": {
      +        "items": {
      +          "maxLength": 24,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "maxItems": 5,
      +        "minItems": 2,
      +        "type": "array"
      +      },
      +      "highlightColumn": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "rows": {
      +        "description": "Each row has one cell per column",
      +        "items": {
      +          "items": {
      +            "maxLength": 40,
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "maxItems": 6,
      +        "minItems": 1,
      +        "type": "array"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "table",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "columns",
      +      "rows"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "detail": {
      +        "description": "Contact, link or next step. Aim for at most 80 characters",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "step": {
      +        "description": "Reveal step: 0 or omitted = with slide entrance, 1..5 = on click, in order",
      +        "maximum": 5,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "text": {
      +        "description": "The ask or call to action. ==Highlight== the amount or key words. Aim for at most 70 characters",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "type": {
      +        "const": "cta",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedInput schema / properties / slides / items / properties / composition
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The geometry of the slide grid as intent: where the content sits, how two columns share the width and which zone leads. The engine derives the numbers and measures that the slide holds. Without it the slide follows the composition of the school",
      +  "properties": {
      +    "axis": {
      +      "description": "left (default), center (low density layouts with one column) or asymmetric (the content is pushed right, the left side stays empty on purpose)",
      +      "enum": [
      +        "left",
      +        "center",
      +        "asymmetric"
      +      ],
      +      "type": "string"
      +    },
      +    "dominant": {
      +      "description": "The zone that leads and gets the larger column, in a two column layout",
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "split": {
      +      "description": "Ratio of the two columns of title-image, text-image, image-text and chart-insight",
      +      "enum": [
      +        "1:3",
      +        "1:2",
      +        "1:1",
      +        "2:1",
      +        "3:1"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observedv0.1.0

TDQS

B3.3/5.0
Behavior4/5

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

Annotations only declare the safety profile (not read-only, not destructive, closed-world). The description adds real behavior beyond that: the atomic failure rule ('Nothing is saved when the slides have errors') and the fact that validation and measured overflow findings come back with the result — exactly the kind of consequence-disclosure an agent needs before sending a large payload.

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 sentences: what it does, what it returns, what happens on failure — front-loaded with zero filler and no restatement of the title.

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

Completeness3/5

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

Given no output schema, describing the return shape (deck id, revision, findings, previews) is genuinely useful and the atomicity rule covers the biggest risk. But for a tool this complex it omits preconditions (existing assets, layout ids from instadeck://layouts, whether brand_kit_id is required for coherent design) and any note on payload size or rendering cost.

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?

With only 43% schema coverage across 7 params (and heavy nesting), the description needs to compensate but does not: brief, slides, design, motion, brand_kit_id and the interplay between previews and the returned findings are never explained. It mentions that previews/findings come back, but adds no meaning about what must go into brief or motion beyond what the schema already says.

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?

Specific verb + resource ('Creates a deck') plus scope ('with all its slides in one call') and an output artifact ('renders it as a presentation file with animations'). It implicitly separates itself from incremental editors like apply_ops by stressing the one-call construction, but never names a sibling explicitly.

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 explicit when-to-use guidance: nothing says to consult get_design_guide or get_example first, that assets must already exist via add_asset, or when to prefer apply_ops / validate_deck instead. The only hint is the phrase 'in one call', which weakly implies batch construction over incremental editing.

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