Skip to main content
Glama

Icons8

Get icon animation

get_icon_animation
Read-only

Get an animated icon's motion, as Lottie, GIF or animated PNG.

Only an icon whose search result says isAnimated has one, and about one icon in fifty does. Find them with search_icons(animated=True). Every animated hit already carries permanent animation.gif and animation.apng links, so reach for this tool for the Lottie, or to learn what size a link actually renders at.

Pick by what you are building:

  • "lottie" returns the animation as compact Lottie/Bodymovin JSON text - parse it, then hand it to lottie-web, Rive, SwiftUI or Android. It is vector, so it scales to any size and size does not apply. Prefer it on the web - but it is the paid format, so it needs an Icons8 sign-in or a personal API key. "gif" and "apng" need none.

  • "gif" plays anywhere with no player.

  • "apng" keeps a real alpha channel, so it sits on a coloured background without a matte.

gif and apng come in one size: the one the icon's style draws at. Most styles ignore a requested size - m_outlined renders 24, ios11 30, color 48, office80 80 - and only a few scale. So ask without a size and use what comes back; the result says what it was. If you need a particular size, that is what Lottie is for.

Icons8 publishes no animated SVG for icons. An animated icon's SVG is a still frame, and so are its png, jpg and webp.

Args: icon_id: The id from a search_icons result (field icons[].id) ctx: MCP context for API access format: "lottie", "gif" or "apng" (default: "gif"). "lottie" needs a credential; the other two do not size: Pixels, for gif and apng only. Leave it out and you get whatever size this icon's style draws at, with "size" in the result saying which - that is the normal way to call this. Naming a size the icon is not drawn at is refused rather than returning a link that misstates it. A Lottie is vector, so this is not applied to it

Returns: For "lottie", a dictionary whose "lottie" is the animation as a compact JSON string - parse it before handing it to a player. For "gif" and "apng", a dictionary with a "url" that is permanent and needs no credential, and the "size" in pixels it renders at - absent only if the host answered something this server could not measure. On failure, an "error" saying what to ask for instead. A Lottie counts toward the paid-download limit: a refusal carries "retry_after_seconds" and the free "animation" links

Input Schema

NameRequiredDescriptionDefault
sizeNo
formatNogif
icon_idYesIcon id from the results of search_icons (field icons[].id)

Output Schema

NameRequiredDescriptionDefault
urlNoPermanent gif or apng link. Absent for lottie and when error is set.
sizeNoPixel width the gif or apng renders at. Absent when the host answered something this server could not measure.
errorNoSet only on failure.
lottieNoThe animation as compact Lottie JSON text. Set only for format "lottie".
animationNoPermanent gif and apng links. Set only when the download limit refused a lottie call.
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 / icon_id / description
      Added value: +"Icon id from the results of search_icons (field icons[].id)"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "animation": {
      +      "anyOf": [
      +        {
      +          "additionalProperties": true,
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Permanent gif and apng links. Set only when the download limit refused a lottie call.",
      +      "title": "Animation"
      +    },
      +    "error": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Set only on failure.",
      +      "title": "Error"
      +    },
      +    "lottie": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "The animation as compact Lottie JSON text. Set only for format \"lottie\".",
      +      "title": "Lottie"
      +    },
      +    "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"
      +    },
      +    "size": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Pixel width the gif or apng renders at. Absent when the host answered something this server could not measure.",
      +      "title": "Size"
      +    },
      +    "url": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Permanent gif or apng link. Absent for lottie and when error is set.",
      +      "title": "Url"
      +    }
      +  },
      +  "title": "IconAnimationResult",
      +  "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 readOnly/openWorld; the description adds substantial behavioral context beyond that: 'lottie' requires an Icons8 sign-in or personal API key while gif/apng need none, Lottie counts toward a paid-download limit, refusals carry 'retry_after_seconds', and unavailable sizes are refused rather than silently misreported. Credential and rate-limit disclosure like this is exactly what annotations cannot express.

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?

Well front-loaded and organized with a bolded sizing caveat and bulleted format selection, so it is easy to scan. It is nonetheless long for a 3-parameter tool, and the point that gif/apng links already come free is stated twice (once up top, once in the format list), which is mild redundancy.

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?

Given an output schema exists, the description still helpfully documents return shapes (parsed Lottie JSON string, permanent credential-free url plus size, error objects). Auth requirements, failure modes, and the size-omission default are all covered, leaving nothing an agent needs to call this correctly.

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 only 33% (only icon_id documented), so the description carries the burden and does it well: format values and their auth/implications, and size semantics including that Gif/APNG render at fixed per-style sizes (with concrete examples), that size is ignored for Lottie, and that mismatched sizes are refused.

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?

States a specific verb+resource ('Get an animated icon's motion') and immediately names the returned formats (Lottie, GIF, animated PNG). It cleanly distinguishes itself from siblings get_icon_svg and get_icon_png_url by explaining that those return still frames for animated icons.

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?

Explicitly names the discovery path (search_icons(animated=True)), states the precondition (only isAnimated icons qualify, ~1 in 50), and tells the agent when NOT to use it (gif/apng links already come with animated hits, so use this for Lottie or sizing). It then gives per-format selection guidance for lottie vs gif vs apng with build context.

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