Skip to main content
Glama

Carousel save template

carousels_save_template
DestructiveIdempotent

Save one carousel slide as a private template; removes the oldest saved template when the 40-template limit is reached.

Input Schema

NameRequiredDescriptionDefault
nameYes
scopeNo
projectIdYesUUID string.
slideIndexYes
workspaceIdNo
idempotencyKeyYes

Output Schema

NameRequiredDescriptionDefault
kitNo
nameNo
frameNo
styleNo
localeNo
slidesNo
can_undoNo
platformNo
revisionNo
warningsNo
templatesNo
font_facesNo
project_idNo
next_actionsNo
mutationReceiptNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedOutput schema / properties / font_faces
      Added value: +{
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "family": {
      +        "maxLength": 160,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "src": {
      +        "maxLength": 4000,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "style": {
      +        "enum": [
      +          "normal",
      +          "italic",
      +          "oblique"
      +        ],
      +        "type": "string"
      +      },
      +      "unicodeRange": {
      +        "maxLength": 8000,
      +        "type": "string"
      +      },
      +      "weight": {
      +        "maxLength": 32,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "family",
      +      "src",
      +      "weight",
      +      "style",
      +      "unicodeRange"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 256,
      +  "type": "array"
      +}
    • addedOutput schema / properties / slides / items / properties / visual / properties / creative_artifact_id
      Added value: +{
      +  "format": "uuid",
      +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +  "type": "string"
      +}
    • addedOutput schema / properties / slides / items / properties / visual / properties / creative_source
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "artifact_id": {
      +      "format": "uuid",
      +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +      "type": "string"
      +    },
      +    "composition_id": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "controls": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "fields": {
      +              "items": {
      +                "oneOf": [
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "key": {
      +                        "maxLength": 80,
      +                        "minLength": 1,
      +                        "pattern": "^[A-Za-z][A-Za-z0-9_]*$",
      +                        "type": "string"
      +                      },
      +                      "label": {
      +                        "maxLength": 120,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "maxLength": {
      +                        "maximum": 10000,
      +                        "minimum": 1,
      +                        "type": "integer"
      +                      },
      +                      "type": {
      +                        "const": "text",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "key",
      +                      "label",
      +                      "type",
      +                      "maxLength"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "key": {
      +                        "maxLength": 80,
      +                        "minLength": 1,
      +                        "pattern": "^[A-Za-z][A-Za-z0-9_]*$",
      +                        "type": "string"
      +                      },
      +                      "label": {
      +                        "maxLength": 120,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "type": {
      +                        "const": "color",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "key",
      +                      "label",
      +                      "type"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "key": {
      +                        "maxLength": 80,
      +                        "minLength": 1,
      +                        "pattern": "^[A-Za-z][A-Za-z0-9_]*$",
      +                        "type": "string"
      +                      },
      +                      "label": {
      +                        "maxLength": 120,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "type": {
      +                        "const": "media",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "key",
      +                      "label",
      +                      "type"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  {
      +                    "additionalProperties": false,
      +                    "properties": {
      +                      "key": {
      +                        "maxLength": 80,
      +                        "minLength": 1,
      +                        "pattern": "^[A-Za-z][A-Za-z0-9_]*$",
      +                        "type": "string"
      +                      },
      +                      "label": {
      +                        "maxLength": 120,
      +                        "minLength": 1,
      +                        "type": "string"
      +                      },
      +                      "max": {
      +                        "maximum": 10800,
      +                        "type": "number"
      +                      },
      +                      "min": {
      +                        "minimum": 0,
      +                        "type": "number"
      +                      },
      +                      "step": {
      +                        "exclusiveMinimum": 0,
      +                        "type": "number"
      +                      },
      +                      "type": {
      +                        "const": "timing",
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "key",
      +                      "label",
      +                      "type",
      +                      "min",
      +                      "max",
      +                      "step"
      +                    ],
      +                    "type": "object"
      +                  }
      +                ]
      +              },
      +              "maxItems": 40,
      +              "minItems": 1,
      +              "type": "array"
      +            },
      +            "file": {
      +              "format": "ends_with",
      +              "maxLength": 180,
      +              "minLength": 1,
      +              "pattern": ".*\\.json$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "file",
      +            "fields"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "fps": {
      +      "exclusiveMinimum": 0,
      +      "type": "number"
      +    },
      +    "frame": {
      +      "maximum": 9007199254740991,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "frame_hash": {
      +      "pattern": "^[a-f0-9]{64}$",
      +      "type": "string"
      +    },
      +    "height": {
      +      "exclusiveMinimum": 0,
      +      "maximum": 9007199254740991,
      +      "type": "integer"
      +    },
      +    "media_asset_id": {
      +      "format": "uuid",
      +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +      "type": "string"
      +    },
      +    "project_id": {
      +      "format": "uuid",
      +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +      "type": "string"
      +    },
      +    "runtime_identity": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "source_hash": {
      +      "pattern": "^[a-f0-9]{64}$",
      +      "type": "string"
      +    },
      +    "source_revision": {
      +      "exclusiveMinimum": 0,
      +      "maximum": 9007199254740991,
      +      "type": "integer"
      +    },
      +    "source_revision_id": {
      +      "format": "uuid",
      +      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +      "type": "string"
      +    },
      +    "values": {
      +      "additionalProperties": {
      +        "anyOf": [
      +          {
      +            "maxLength": 10000,
      +            "type": "string"
      +          },
      +          {
      +            "type": "number"
      +          }
      +        ]
      +      },
      +      "propertyNames": {
      +        "maxLength": 80,
      +        "minLength": 1,
      +        "pattern": "^[A-Za-z][A-Za-z0-9_]*$",
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    "width": {
      +      "exclusiveMinimum": 0,
      +      "maximum": 9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "artifact_id",
      +    "project_id",
      +    "source_revision_id",
      +    "source_revision",
      +    "source_hash",
      +    "runtime_identity",
      +    "composition_id",
      +    "frame",
      +    "width",
      +    "height",
      +    "fps",
      +    "frame_hash",
      +    "media_asset_id",
      +    "controls",
      +    "values"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / slides / items / properties / visual / properties / crop
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "height": {
      +      "exclusiveMinimum": 0,
      +      "maximum": 1,
      +      "type": "number"
      +    },
      +    "left": {
      +      "maximum": 1,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "top": {
      +      "maximum": 1,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "width": {
      +      "exclusiveMinimum": 0,
      +      "maximum": 1,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "left",
      +    "top",
      +    "width",
      +    "height"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / slides / items / properties / visual / properties / kind / enum
      Previous value: -[
      -  "media_asset",
      -  "generate",
      -  "solid",
      -  "gradient",
      -  "html",
      -  "template"
      -]New value: +[
      +  "creative_source",
      +  "media_asset",
      +  "generate",
      +  "solid",
      +  "gradient",
      +  "html",
      +  "template"
      +]
  2. Added

TDQS

B3.3/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and idempotentHint=true, and the description adds the concrete side effect behind that flag: the oldest saved template is evicted once the 40-template limit is hit. That is genuine value beyond the annotations. It stops short of covering permissions/visibility rules for 'private' templates.

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?

One sentence, two clauses, zero filler, with the primary action front-loaded and the destructive limit rule trailing. Nothing to trim.

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?

An output schema exists so return values need no explanation, and the eviction behavior is disclosed. But for a six-parameter mutation with 17% schema coverage, the description leaves scope semantics, idempotency key usage, and template visibility rules unaddressed.

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 only 17% (projectId alone has 'UUID string.'), so the description carries the compensation burden and barely does so. It never explains slideIndex, the project/brand scope enum, the idempotencyKey, or when workspaceId is needed; only 'one carousel slide' loosely maps to slideIndex.

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 and resource: saving one carousel slide as a private template, with the slide-level granularity made explicit. It does not, however, distinguish itself from the adjacent siblings carousels_save_theme or carousels_apply_template, so an agent must infer the boundary from names 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?

No when-to-use guidance and no exclusions. Nothing tells the agent why it would pick this over carousels_save_theme, nor when to save a template versus applying an existing one, nor how the project/brand scope parameter should be chosen.

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