Skip to main content
Glama

image_upload_link

Issues presigned URLs (1 h) to PUT WebP images over HTTP, and returns each one's path. That path works for gallery (the answer states the minimum, in gallery.min; the FIRST one is the cover), for the optional bannerUrl (never repeated in gallery) and inside the description as . Ask for several at once with count. WHAT IS EXPECTED OF EACH IMAGE comes in the answer (aspectRatio): 4:3 ratio with a 4 % tolerance, recommended dimensions, real WebP and maximum size, plus the exact command to convert and reframe it. It is the same ratio the /vender assistant crops to, and whatever does not fit is REJECTED on submit ([IMAGE_ASPECT_RATIO], saying which dimensions it had): the server neither converts nor crops, because framing the product is the seller's job. Inside the description the ratio is not enforced. ANIMATED WebP is accepted in gallery and bannerUrl up to the size per image and the number per template that the answer gives in animated: when the listing is saved the server stores its first frame as a static cover (<path>.poster.webp) and puts that path in the listing, so cards, catalog and every answer show the still frame and only the gallery of the listing page plays it. Over the limits the submission is rejected with [ANIMATED_IMAGE_TOO_HEAVY], [ANIMATED_IMAGE_TOO_LARGE] (a side over the resolution cap) or [TOO_MANY_ANIMATED_IMAGES] ([INVALID_ANIMATED_IMAGE] if it cannot be decoded). The template VIDEO does not go through here: it is uploaded with video_upload_link.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
countNoHow many links to issue in this call (1-21; 1 by default).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
ruleYesThe image rule in one sentence.
linksYesThe links issued, one per image. It can carry FEWER than you asked for if the upload budget ran out halfway.
issuedYesHow many links were actually issued.
galleryYesHow many gallery images the current configuration requires and allows.
animatedYesANIMATED WebP in gallery and bannerUrl: the live limits. When the listing is saved, each animated image is replaced in the listing by its static first frame (`<path>.poster.webp`); only the gallery of the listing page plays the animation.
maxBytesYesMaximum size of each image, in bytes.
expiresAtYesWhen the links expire, in ISO 8601.
expiresInYesThe same thing in plain language (e.g. 1 hour).
aspectRatioYesWhat is expected of every gallery image and of the banner; anything that does not fit is REJECTED on submit.
howToConvertYesThe exact command to convert and re-crop.
instructionsYesWhat to do now with these links.
recommendedMaxPxYesNo side may go over this many pixels.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / animated
      Added value: +{
      +  "additionalProperties": true,
      +  "description": "ANIMATED WebP in gallery and bannerUrl: the live limits. When the listing is saved, each animated image is replaced in the listing by its static first frame (`<path>.poster.webp`); only the gallery of the listing page plays the animation.",
      +  "properties": {
      +    "accepted": {
      +      "description": "Animated WebP is accepted right now (false when maxPerTemplate is 0).",
      +      "type": "boolean"
      +    },
      +    "cover": {
      +      "description": "What the listing stores in place of the animated image.",
      +      "type": "string"
      +    },
      +    "maxBytes": {
      +      "description": "Maximum size of EACH animated image, in bytes (lower than the general maxBytes).",
      +      "type": "number"
      +    },
      +    "maxPerTemplate": {
      +      "description": "Maximum animated images per template, gallery and bannerUrl together.",
      +      "type": "number"
      +    },
      +    "maxSidePx": {
      +      "description": "No side of an animated image may go over this many pixels.",
      +      "type": "number"
      +    },
      +    "rejectedWith": {
      +      "description": "The error prefixes the submission uses when an animated image breaks a limit.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "accepted",
      +    "maxPerTemplate",
      +    "maxBytes",
      +    "maxSidePx",
      +    "cover",
      +    "rejectedWith"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "links",
      -  "issued",
      -  "maxBytes",
      -  "recommendedMaxPx",
      -  "aspectRatio",
      -  "gallery",
      -  "expiresAt",
      -  "expiresIn",
      -  "rule",
      -  "howToConvert",
      -  "instructions"
      -]New value: +[
      +  "links",
      +  "issued",
      +  "maxBytes",
      +  "recommendedMaxPx",
      +  "aspectRatio",
      +  "gallery",
      +  "animated",
      +  "expiresAt",
      +  "expiresIn",
      +  "rule",
      +  "howToConvert",
      +  "instructions"
      +]
  2. Changed23 schema fields changed
    • changedInput schema / properties / count / description
      Previous value: -"Cuántos enlaces emitir en esta llamada (1-21; por defecto 1)."New value: +"How many links to issue in this call (1-21; 1 by default)."
    • changedOutput schema / properties / aspectRatio / description
      Previous value: -"Lo que se espera de cada imagen de galería y del banner; lo que no encaje se RECHAZA al enviar."New value: +"What is expected of every gallery image and of the banner; anything that does not fit is REJECTED on submit."
    • changedOutput schema / properties / aspectRatio / properties / enforcedAt / description
      Previous value: -"Dónde se comprueba la proporción."New value: +"Where the aspect ratio is checked."
    • changedOutput schema / properties / aspectRatio / properties / format / description
      Previous value: -"El único formato admitido: image/webp."New value: +"The only accepted format: image/webp."
    • changedOutput schema / properties / aspectRatio / properties / maxBytes / description
      Previous value: -"El mismo tamaño máximo por imagen."New value: +"The same maximum size per image."
    • changedOutput schema / properties / aspectRatio / properties / ratio / description
      Previous value: -"La proporción exigida, en texto (p. ej. «4:3»)."New value: +"The required aspect ratio, as text (e.g. 4:3)."
    • changedOutput schema / properties / aspectRatio / properties / recommendedHeight / description
      Previous value: -"Alto recomendado en píxeles."New value: +"Recommended height in pixels."
    • changedOutput schema / properties / aspectRatio / properties / recommendedWidth / description
      Previous value: -"Ancho recomendado en píxeles."New value: +"Recommended width in pixels."
    • changedOutput schema / properties / aspectRatio / properties / tolerance / description
      Previous value: -"Cuánto se admite desviarse de esa proporción."New value: +"How far you may deviate from that aspect ratio."
    • changedOutput schema / properties / expiresAt / description
      Previous value: -"Cuándo caducan los enlaces, en ISO 8601."New value: +"When the links expire, in ISO 8601."
    • changedOutput schema / properties / expiresIn / description
      Previous value: -"Lo mismo dicho en lenguaje llano (p. ej. «1 hora»)."New value: +"The same thing in plain language (e.g. 1 hour)."
    • changedOutput schema / properties / gallery / description
      Previous value: -"Cuántas imágenes de galería pide y admite la configuración vigente."New value: +"How many gallery images the current configuration requires and allows."
    • changedOutput schema / properties / gallery / properties / max / description
      Previous value: -"Máximo de imágenes de galería."New value: +"Maximum number of gallery images."
    • changedOutput schema / properties / gallery / properties / min / description
      Previous value: -"Mínimo de imágenes de galería para poder enviar."New value: +"Minimum number of gallery images needed to be able to submit."
    • changedOutput schema / properties / howToConvert / description
      Previous value: -"El comando exacto para convertir y reencuadrar."New value: +"The exact command to convert and re-crop."
    • changedOutput schema / properties / instructions / description
      Previous value: -"Qué hacer ahora con estos enlaces."New value: +"What to do now with these links."
    • changedOutput schema / properties / issued / description
      Previous value: -"Cuántos enlaces se emitieron de verdad."New value: +"How many links were actually issued."
    • changedOutput schema / properties / links / description
      Previous value: -"Los enlaces emitidos, uno por imagen. Puede traer MENOS de los pedidos si el presupuesto de subidas se agotó a mitad."New value: +"The links issued, one per image. It can carry FEWER than you asked for if the upload budget ran out halfway."
    • changedOutput schema / properties / links / items / properties / path / description
      Previous value: -"La ruta que vale para `gallery`, `bannerUrl` o un <img src> de la descripción."New value: +"The path that works for `gallery`, `bannerUrl` or an <img src> inside the description."
    • changedOutput schema / properties / links / items / properties / presignedUrl / description
      Previous value: -"URL prefirmada: sube la imagen con un PUT HTTP y Content-Type image/webp."New value: +"Presigned URL: upload the image with an HTTP PUT and Content-Type image/webp."
    • changedOutput schema / properties / maxBytes / description
      Previous value: -"Tamaño máximo de cada imagen, en bytes."New value: +"Maximum size of each image, in bytes."
    • changedOutput schema / properties / recommendedMaxPx / description
      Previous value: -"Ningún lado puede pasar de estos píxeles."New value: +"No side may go over this many pixels."
    • changedOutput schema / properties / rule / description
      Previous value: -"La regla de las imágenes en una frase."New value: +"The image rule in one sentence."
  3. First observed

TDQS

A4.3/5.0
Behavior5/5

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

No annotations exist, so the description carries the full burden and does so richly: 1 h URL lifetime, PUT-over-HTTP semantics, that the server neither converts nor crops, the exact rejection codes ([IMAGE_ASPECT_RATIO], [ANIMATED_IMAGE_TOO_HEAVY], [ANIMATED_IMAGE_TOO_LARGE], [TOO_MANY_ANIMATED_IMAGES], [INVALID_ANIMATED_IMAGE]), tolerance rules, and the animated-WebP first-frame-to-poster (<path>.poster.webp) storage behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence, but the body is a dense ~250-word run-on with heavy capitalization and stacked parentheticals. Most content is genuinely useful, yet it could be structured into scannable segments instead of one block.

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

Completeness5/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 not be explained, yet the description still covers what the answer carries (aspectRatio, animated limits) plus all rejection paths, aspect-ratio enforcement, and animated handling. Nothing an agent needs to call and interpret this tool is missing.

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 coverage is 100% and the single `count` parameter is fully documented in the schema (1-21, default 1). The description only restates this ('Ask for several at once with `count`') without adding format or edge-case meaning, so it sits at the baseline for high-coverage schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: 'Issues presigned URLs (1 h) to PUT WebP images over HTTP, and returns each one's path.' It explicitly distinguishes itself from the nearest sibling by stating the template VIDEO 'does not go through here: it is uploaded with video_upload_link', so an agent can route correctly without opening schemas.

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?

Gives concrete usage context: the returned paths go into `gallery` (first = cover), `bannerUrl`, and inline <img> in the description, plus when to raise `count`. It names one alternative (video_upload_link) and the condition that selects it, but never contrasts with zip_upload_link or evidence_upload_link, the other upload-link siblings.

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