Skip to main content
Glama

photo_meme_generator

Meme Generator — Add bold top and bottom caption text to an image in Impact-style font. At least one of top_text/bottom_text is required. [category: photo]

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fileYesBase image — JPG, PNG, WebP, BMP (max 25MB)
fontNoA font the server does not have is replaced: Impact by Anton (a free face in Impact's style, shipped with the server), Arial-Bold by Liberation-Sans-Bold (drawn to Arial Bold's exact widths). X-JE-Font-* response headers report what actually rendered.Impact
top_textNoTop caption. At least ONE of top_text/bottom_text must be non-empty or the request is rejected.
font_sizeNoCaption size in pixels, or the word auto to size it from the picture (a tenth of its height, kept between 20 and 150). A number outside 10 to 200 is treated as auto.auto
font_colorNoCaption fill — #rrggbb or #rrggbbaa hex only; invalid values silently revert to #ffffff.#ffffff
bottom_textNoBottom caption.
stroke_colorNoCaption outline hex; invalid values silently revert to #000000. Drawn at 2x stroke_width beneath the fill.#000000
stroke_widthNoOutline stroke width, 1-8.
output_formatNoDefaults to the input image's format.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • addedInput schema / properties / bottom_text / x-ui / draw
      Added value: +{
      +  "of": "captions",
      +  "role": "caption_bottom"
      +}
    • changedInput schema / properties / font / description
      Previous value: -"If Impact isn't installed the server substitutes DejaVu-Sans-Bold; X-JE-Font-* response headers report what actually rendered."New value: +"A font the server does not have is replaced: Impact by Anton (a free face in Impact's style, shipped with the server), Arial-Bold by Liberation-Sans-Bold (drawn to Arial Bold's exact widths). X-JE-Font-* response headers report what actually rendered."
    • addedInput schema / properties / font / x-ui
      Added value: +{
      +  "draw": {
      +    "faces": {
      +      "Arial-Bold": "liberation-sans-bold",
      +      "DejaVu-Sans-Bold": "dejavu-sans-bold",
      +      "Impact": "anton"
      +    },
      +    "fallback": "Impact",
      +    "of": "captions",
      +    "role": "font"
      +  }
      +}
    • addedInput schema / properties / font_color / x-ui
      Added value: +{
      +  "draw": {
      +    "of": "captions",
      +    "role": "color"
      +  }
      +}
    • addedInput schema / properties / font_size / x-ui
      Added value: +{
      +  "draw": {
      +    "accept": {
      +      "max": 200,
      +      "min": 10
      +    },
      +    "auto": {
      +      "max": 150,
      +      "min": 20,
      +      "per": 10
      +    },
      +    "measure": "caption-px",
      +    "of": "captions",
      +    "role": "size"
      +  }
      +}
    • addedInput schema / properties / stroke_color / x-ui
      Added value: +{
      +  "draw": {
      +    "of": "captions",
      +    "role": "outline_color"
      +  }
      +}
    • addedInput schema / properties / stroke_width / x-ui
      Added value: +{
      +  "draw": {
      +    "of": "captions",
      +    "role": "outline_width"
      +  }
      +}
    • addedInput schema / properties / top_text / x-ui / draw
      Added value: +{
      +  "of": "captions",
      +  "role": "caption_top"
      +}
    • addedInput schema / x-draw
      Added value: +{
      +  "captions": {
      +    "noun": "caption",
      +    "shape": "captions",
      +    "title": "Captions on the picture"
      +  }
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / bottom_text / x-ui / unset_label
      Previous value: -"No caption at the bottom"New value: +"None, as long as the top caption is set"
    • changedInput schema / properties / top_text / x-ui / unset_label
      Previous value: -"No caption at the top"New value: +"None, as long as the bottom caption is set"
  3. Changed2 schema fields changed
    • addedInput schema / properties / bottom_text / x-ui
      Added value: +{
      +  "unset_label": "No caption at the bottom"
      +}
    • addedInput schema / properties / top_text / x-ui
      Added value: +{
      +  "unset_label": "No caption at the top"
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / output_format / x-ui
      Added value: +{
      +  "unset_label": "Keeps input format"
      +}
  5. Changed2 schema fields changed
    • changedInput schema / properties / font_size / description
      Previous value: -"'auto' or a pixel size."New value: +"Caption size in pixels, or the word auto to size it from the picture (a tenth of its height, kept between 20 and 150). A number outside 10 to 200 is treated as auto."
    • changedInput schema / properties / output_format / enum
      Previous value: -[
      -  "jpg",
      -  "jpeg",
      -  "png",
      -  "webp"
      -]New value: +[
      +  "jpg",
      +  "png",
      +  "webp"
      +]
  6. First observed

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is clear and the description does not contradict it. Beyond that it adds little: it restates the caption requirement (already in the schema) and gives no word on output artifact, rendering limits, or what the response contains.

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?

Two tight sentences with the capability front-loaded and the critical constraint second, plus a short category tag. Nothing is padded and every clause carries information.

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 9-parameter image-generation tool with full schema coverage and clear annotations, the description covers what the tool produces and its one required-input rule. It does not mention the returned artifact or format, but with no output schema that gap is minor for an otherwise self-explanatory image tool.

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 100%, so the baseline is 3. The description's only parameter-relevant additions ('Impact-style font', the top/bottom requirement) are already fully spelled out in the font and top_text schema descriptions, so it adds essentially no meaning beyond the structured fields.

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: adding bold top/bottom caption text to an image in Impact-style font. That cleanly separates it from a plain watermark tool, but it never explicitly names an alternative sibling (photo_watermark, photo_editor) that also stamps text, so differentiation is implied rather than stated.

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?

The only usage-directional statement is the hard constraint that at least one of top_text/bottom_text is required, which is a validation rule rather than routing guidance. There is no explicit 'use this when...' versus siblings like photo_watermark or photo_editor; usage is only implied by the meme-caption framing.

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