Skip to main content
Glama

Frame an image

apply_frame

[writes flayr data · write scope] Draws a frame over an image and returns a new image URL (the original is untouched). Use the URL in create_content, or pass contentId + platform so that post publishes the framed image on that platform. Free by default; the same inputs again are free. (Wraps POST /api/v2/frames/apply.)

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": {
      "sourceUrl": "<sourceUrl>",
      "frameRef": "<frameRef>"
    },
    "name": "apply_frame"
  }
}

Input Schema

NameRequiredDescriptionDefault
fitNo
zoomNo
textsNoTexts some frames print (ribbon/tag label, lower-third title/subtitle).
aspectNoDefault: nearest to the source image.
offsetXNo
offsetYNo
frameRefYes`default:<key>` or `brand:<id>` from GET /api/v2/frames.
platformNoPlatform this framed image is for ("all" by default).
contentIdNoA content id: its publish swaps this framed image in for `platform`.
sourceUrlYeshttps image URL (flayr/Convex storage or a stock host).
slideIndexNoImage position in the post.
paletteOverrideNoColors that win over the brand kit.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds genuinely new context: it writes flayr data under a `write` scope, the source image is not modified, and repeated identical inputs are free (cost/dedup behavior). It does not cover rate limits or failure modes. Note that 'same inputs again are free' is about billing, not identity, so it does not contradict idempotentHint=false.

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 scope tag, then the core action and its output, then usage, then cost. Every sentence carries information and the trailing 'Wraps POST /api/v2/frames/apply' is a compact API pointer. Slightly dense bracket/parenthetical stacking keeps it from a 5.

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 12-parameter mutation tool with nested objects and no output schema, the description supplies the essentials an agent needs: what it produces (a URL), that the original is safe, how to consume the result, and that it is free. The remaining parameter semantics live in a reasonably documented schema, so the gaps are minor.

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

Parameters3/5

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

Schema description coverage is 67%, with many parameters (frameRef, aspect, paletteOverride, contentId, platform) already documented inline. The description adds the contentId + platform pairing semantics, which is useful, but leaves fit, zoom, offsetX/Y, slideIndex and texts entirely to the schema. Baseline 3 is appropriate given the schema does most of the work.

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?

The description names a specific verb and resource ('Draws a frame over an image') and states the concrete output ('returns a new image URL'). It also clarifies the non-mutating nature of the source ('the original is untouched'). However, it never explicitly distinguishes itself from the close siblings create_frame / get_frame / list_frames, so an agent must infer that those define or fetch frames while this one renders one.

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

Usage Guidelines4/5

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

It gives two concrete downstream paths: 'Use the URL in create_content, or pass contentId + platform so that post publishes the framed image on that platform.' That is real when/how guidance tying the tool into a workflow. It stops short of exclusions (e.g., 'to define a reusable frame, use create_frame instead') or prerequisites, so it is clear context without alternatives.

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