Skip to main content
Glama

Add several slides

add_slides

Add several slides at once to a presentation you may edit, at the end or from "position" (1-based) on. Each slide is {"name", "w", "h", "bg", "fit", "transition", "transition_duration", "background", "objects": [blocks]}. A link {"kind": "slide", "slide_number": N} counts the slides of the presentation as they are after the insertion, so new slides may lead to each other. Returns the new slides (ids only unless "response" is "full").

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
slugYesThe presentation's slug (its address: /movie/<slug>/).
slidesYesThe slides: [{"name", "w", "h", "bg", "fit", "transition", "transition_duration", "background", "objects"}].
positionNo1-based place of the first new slide; default: the end.
responseNo"brief" (default): only the ids, numbers and types of the slides and blocks; "full": every prop of every block too.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
totalNoSlides in the presentation now.
slidesYesThe new slides.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedOutput schema / properties / slides / items / properties / layout_warnings
      Added value: +{
      +  "description": "How the changed slides will probably look: texts too long for their blocks, blocks outside the slide, texts over each other (estimated -- look at them).",
      +  "items": {
      +    "properties": {
      +      "block_id": {
      +        "type": "integer"
      +      },
      +      "detail": {
      +        "type": "string"
      +      },
      +      "problem": {
      +        "description": "overflow, cut, outside or overlap.",
      +        "type": "string"
      +      },
      +      "slide_id": {
      +        "type": "integer"
      +      },
      +      "slide_number": {
      +        "type": "integer"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / slides / items / properties / missing_translations / description
      Previous value: -"What is not translated yet into the other languages of the site (add it)."New value: +"What is not translated yet into the other languages of the site (add it): the first ones; \"missing_translations_count\" says how many there are."
    • addedOutput schema / properties / slides / items / properties / missing_translations_count
      Added value: +{
      +  "description": "How many texts are not translated yet.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / slides / items / properties / version
      Added value: +{
      +  "description": "Stamp of the content as it is now: give it back as \"base_version\" to change it only if nobody else did meanwhile.",
      +  "type": "string"
      +}
  2. Changed4 schema fields changed
    • changedInput schema / properties / slides / description
      Previous value: -"The slides: [{\"name\", \"w\", \"h\", \"bg\", \"fit\", \"background\", \"objects\"}]."New value: +"The slides: [{\"name\", \"w\", \"h\", \"bg\", \"fit\", \"transition\", \"transition_duration\", \"background\", \"objects\"}]."
    • addedInput schema / properties / slides / items / properties
      Added value: +{
      +  "background": {
      +    "description": "Background picture: the \"src\" of an uploaded picture; null removes it.",
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "bg": {
      +    "description": "Background colour, #rrggbb.",
      +    "type": "string"
      +  },
      +  "fit": {
      +    "description": "How the background picture fits.",
      +    "enum": [
      +      "contain",
      +      "cover",
      +      "stretch"
      +    ],
      +    "type": "string"
      +  },
      +  "h": {
      +    "description": "Canvas height in px (default 720).",
      +    "type": "integer"
      +  },
      +  "name": {
      +    "description": "Slide name (at most 100 characters), in the language of the presentation.",
      +    "maxLength": 100,
      +    "type": "string"
      +  },
      +  "name_tr": {
      +    "additionalProperties": {
      +      "type": "string"
      +    },
      +    "description": "The slide name in the other languages of the site: {\"en\": \"...\"}.",
      +    "type": "object"
      +  },
      +  "objects": {
      +    "description": "Blocks of the slide, bottom to top: [{\"type\": \"text\"|\"shape\"|\"button\"|\"line\"|\"image\"|\"code\", \"props\": {...}}]. Missing props take the presentation theme's defaults (every prop is described in the block format reference). A link to a slide of the same presentation may be given as {\"kind\": \"slide\", \"slide_number\": N}.",
      +    "items": {
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  "transition": {
      +    "default": "none",
      +    "description": "Entrance effect of this incoming slide (default: none).",
      +    "enum": [
      +      "none",
      +      "fade",
      +      "slide-left",
      +      "slide-right",
      +      "zoom"
      +    ],
      +    "type": "string"
      +  },
      +  "transition_duration": {
      +    "default": 500,
      +    "description": "Animation duration in milliseconds (100-3000, default 500); not auto advance. Values outside the range are clamped.",
      +    "type": "integer"
      +  },
      +  "w": {
      +    "description": "Canvas width in px (200-4000, default 1280).",
      +    "type": "integer"
      +  }
      +}
    • addedOutput schema / properties / slides / items / properties / transition
      Added value: +{
      +  "description": "Entrance effect of this incoming slide.",
      +  "enum": [
      +    "none",
      +    "fade",
      +    "slide-left",
      +    "slide-right",
      +    "zoom"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / slides / items / properties / transition_duration
      Added value: +{
      +  "description": "Animation milliseconds, not auto advance.",
      +  "maximum": 3000,
      +  "minimum": 100,
      +  "type": "integer"
      +}
  3. Changed2 schema fields changed
    • addedOutput schema / properties / slides / items / properties / missing_translations
      Added value: +{
      +  "description": "What is not translated yet into the other languages of the site (add it).",
      +  "items": {
      +    "properties": {
      +      "block_id": {
      +        "type": "integer"
      +      },
      +      "lang": {
      +        "type": "string"
      +      },
      +      "slide_id": {
      +        "type": "integer"
      +      },
      +      "slide_number": {
      +        "type": "integer"
      +      },
      +      "what": {
      +        "description": "title, slide name or block.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / slides / items / properties / name_tr
      Added value: +{
      +  "description": "The same text in the other languages of the site: {\"en\": \"...\"}.",
      +  "type": "object"
      +}
  4. Added

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (non-readOnly, non-destructive, non-idempotent), so the bar is lower. The description still adds real behavioral context: the return shape (new slide ids, or full props when "response" is "full") and the non-obvious fact that slide links are resolved against post-insertion numbering. It does not state failure modes or what happens on partial insertion.

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?

Front-loaded with the verb and scope, and every sentence carries information. The inline JSON-ish snippets mirror the schema and make it slightly harder to read than plain prose, but nothing is wasted.

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

Completeness4/5

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

For a 4-parameter mutation tool with an output schema, the description covers insertion position, the response verbosity modes, and cross-slide link resolution. Return values largely live in the output schema, so it is close to complete; only error/edge-case behavior is unaddressed.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the self-referential link semantics ({"kind": "slide", "slide_number": N} counts slides as they are after insertion), which is the one parameter behavior the schema does not convey. It also restates the slide object's field list, which is redundant with the schema.

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+resource ("Add several slides at once to a presentation") and names the scope of the operation (at end or from "position"). It implicitly differentiates from the sibling add_slide via "several slides at once", but never names the single-slide alternative, so an agent must infer the routing.

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

Usage Guidelines3/5

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

Usage is implied by the batch framing rather than stated: an agent can infer this is for multiple slides, but there is no explicit when-to-use/when-not or named alternative versus add_slide/edit_slides. The phrase "a presentation you may edit" does at least signal a permission prerequisite.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources