Skip to main content
Glama

Icons8

Get illustration animation link

get_illustration_animation
Read-only

Get an animated illustration as a video, a GIF, or a Lottie animation.

ONLY for an illustration whose media_types includes "animated" - check a search_illustrations result first. A static illustration has no animated format, and every format here answers "not found" for it.

THIS is what you publish. The animation links in a search result are a 368px preview with no transparency, and watermarked unless the account is entitled to the illustration; the file this tool returns is full size, transparent, and never watermarked. Reach for the search links while choosing, and for this tool once the choice is made.

Formats, and where each one actually plays:

  • "webm" (default) - VP9 with an alpha channel. Chrome, Firefox, Edge. This is the one to reach for first

  • "mp4-hevc" - HEVC with an alpha channel, in an .mp4 container. Safari only: do NOT make it the single source of a , Chrome and Firefox will show nothing

  • "prores" - ProRes 4444 in a .mov, around 55 MB. A mastering file for a video editor, never for a web page

  • "gif" - full-size GIF, no transparency worth relying on

  • "gif-low" - a smaller GIF, and the ONLY animated format that needs no account. Roughly a third of animated illustrations have none, and nothing in a search result says which

  • "lottie" - a Lottie JSON to render in code. Legacy: illustrations added from 2024 onwards almost never carry it

  • "aep" - the After Effects project the animation was built from

TO PUT AN ANIMATION ON A PAGE, offer both web formats. One alone covers roughly half the browsers. The order is load-bearing: mp4-hevc first.

<video autoplay loop muted playsinline poster="...">
  <source src="....mp4"  type="video/mp4; codecs=hvc1">
  <source src="....webm" type="video/webm">
</video>

Safari answers canPlayType "probably" for webm as well, takes whichever source comes first, and then cannot show VP9's alpha - so a webm listed first gives Safari a black rectangle. Chrome and Firefox skip the HEVC source and fall through to the webm, so putting it first costs them nothing.

The names are this server's, not the API's, and they are deliberately not the API's: upstream, mov-avc returns ProRes and mov-hevc returns an .mp4, so the upstream names describe neither the container nor the codec.

WHICH FORMATS AN ILLUSTRATION HAS VARIES, and two illustrations in the same style often disagree. Do not probe them one by one: ask for the one you want, and if it is missing the answer names every format this illustration does have, so one refusal is enough to choose again.

Every format except "gif-low" needs a signed-in Icons8 account whose plan covers the illustration.

The URL is presigned and expires in one hour - download it now, do not store it. For a link to keep, use animation.webm from the search result.

Args: illustration_id: The id from a search_illustrations result (field illustrations[].id) ctx: MCP context for API access format: One of webm, mp4-hevc, prores, gif, gif-low, lottie, aep

Returns: {"url", "width", "height", "expires_in_seconds"}, or {"error"} explaining what would unlock the format. Every format but gif-low counts toward the paid-download limit: a refusal carries "retry_after_seconds".

Input Schema

NameRequiredDescriptionDefault
formatNowebm
illustration_idYesIllustration id from the results of search_illustrations (field illustrations[].id)

Output Schema

NameRequiredDescriptionDefault
urlNoPresigned download link. Valid for expires_in_seconds. Absent when error is set.
errorNoSet only on failure.
widthNoPixel width of the file.
heightNoPixel height of the file.
expires_in_secondsNoSeconds the url stays valid. One hour.
retry_after_secondsNoSeconds until the download limit resets. Set only when the limit refused the call.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / illustration_id / description
      Added value: +"Illustration id from the results of search_illustrations (field illustrations[].id)"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "error": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Set only on failure.",
      +      "title": "Error"
      +    },
      +    "expires_in_seconds": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Seconds the url stays valid. One hour.",
      +      "title": "Expires In Seconds"
      +    },
      +    "height": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Pixel height of the file.",
      +      "title": "Height"
      +    },
      +    "retry_after_seconds": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Seconds until the download limit resets. Set only when the limit refused the call.",
      +      "title": "Retry After Seconds"
      +    },
      +    "url": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Presigned download link. Valid for expires_in_seconds. Absent when error is set.",
      +      "title": "Url"
      +    },
      +    "width": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Pixel width of the file.",
      +      "title": "Width"
      +    }
      +  },
      +  "title": "IllustrationDownloadResult",
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only cover readOnlyHint/openWorldHint; the description adds the substantive behavioral facts: presigned URL expires in one hour, every format except gif-low requires a paid account, every format but gif-low counts toward the paid-download limit, refusals carry retry_after_seconds, and per-format caveats (mp4-hevc Safari-only, prores ~55MB mastering file, gif-low has no transparency). This is far beyond what annotations provide.

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 purpose and the critical 'animated only' constraint, and nearly every section earns its place given seven format values. It is nonetheless long, and the digression on upstream naming (mov-avc/mov-hevc) and the extended Safari canPlayType rationale carry more detail than an agent strictly needs to select and invoke the tool.

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, and the description still summarizes the return shape ({url, width, height, expires_in_seconds}) and the error shape including retry_after_seconds. Auth requirements, expiry, format availability variability, and browser-compatibility guidance are all covered, leaving no material gap for a two-parameter tool.

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

Parameters5/5

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

Schema coverage is 50% and the schema gives no meaning for the format parameter, so the description carries it: all seven enum-like values (webm, mp4-hevc, prores, gif, gif-low, lottie, aep) are explained with container, codec, transparency, target environment, and default. The illustration_id origin (illustrations[].id) is also restated from the schema.

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 ('Get an animated illustration as a video, a GIF, or a Lottie animation') and immediately scopes it to illustrations whose media_types include 'animated', which separates it from the static get_illustration_png_url/get_illustration_svg siblings. The contrast with the search_illustrations preview links further pins down what this tool uniquely produces.

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

Usage Guidelines5/5

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

Explicit when-to-use and when-not-to-use: 'ONLY for an illustration whose media_types includes "animated" - check a search_illustrations result first', and 'Reach for the search links while choosing, and for this tool once the choice is made.' It also tells the agent not to probe formats one by one and explains that a single refusal enumerates the available formats.

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