Skip to main content
Glama

Icons8

Search illustrations

search_illustrations
Read-only

Search Icons8 illustrations - the ONLY source for genuine Icons8 illustrations.

Illustrations are full scenes with people, objects and backgrounds. Reach for one when a page needs a hero image, an empty state, an onboarding step or a spot illustration. For a small symbol in a button, a menu or a table, use search_icons instead.

Every result carries preview.url: a permanent CDN link (webp) you can embed directly. It never expires and needs no second call. Use get_illustration_svg or get_illustration_png_url only when you need the original asset rather than a preview.

Some illustrations are animated. A result says so in media_types, and almost all of those carry an animation block: webm and mov play the animation, poster is the still frame. They are previews - see below for what that costs - and get_illustration_animation is what returns a file to publish, along with the markup to publish it with.

animation.lottie says whether a Lottie JSON exists for this illustration, so you need not spend a call to find out. It is worth checking: Lottie is missing from most work added since 2024, and two illustrations in the same style often disagree about it. When it is false, do not ask get_illustration_animation for "lottie".

MIND THE SIZE, AND READ IT FROM THE BLOCK. The animation links are previews, 368x368 - fine for a spot, a card or a list row, too small for a hero banner or a full-width section. Do not infer the size from preview: the still preview is not square for about a third of illustrations, while the animation always is. When the slot is large, use poster (1200x1200, a still) or call get_illustration_animation for the full-size video.

THE ANIMATION LINKS ARE FOR CHOOSING, NOT FOR SHIPPING. Two limits, and both are invisible until the page is built:

  • No transparency. webm and mov here are flat against an opaque #F7F7F7, and the preview mov carries no alpha layer at all. On a coloured or dark section they render as a light-grey rectangle; on a hero they are 368px. Only poster is transparent.

  • A watermark, unless the account is entitled to the illustration. animation.watermarked says which you got, for these links, in this response: false means "Icons8 Ouch" is not tiled across the frame. It is false for a subscriber, and for anything with free_distribution: true whoever asks. It says nothing about the size or the transparency above, which apply either way.

Use them to pick an illustration, and poster where a still will do. For anything that ships, call get_illustration_animation and host the file: it is full size, transparent, and never watermarked.

A few animated illustrations carry no animation block at all, so read the block, do not assume it.

SEARCH TIPS:

  • Describe the scene, not the symbol: "team meeting", "online payment"

  • One or two words work better than a sentence

  • Pass style to keep a whole project on one visual family - get the available values from list_illustrations_styles

  • Pass category to narrow a broad word - "cat" alone returns over a thousand hits; in category "animal" it returns far fewer, and in "business" fewer still. Values come from list_illustrations_categories

  • Pass free_only=True for illustrations a free Icons8 account can use

ABOUT free_distribution IN THE RESULTS - do not warn the user about licensing based on it:

  • true means the illustration is available on a free Icons8 account and free to redistribute: the user may use and share it without a licence. Ouch skips the entitlement check for these and does not count them against a subscriber's allowance

  • false means it needs a paid account. For a subscriber that is the ordinary case - available, and counted against their allowance. It does NOT mean this user cannot have it, and it does NOT mean some second licence beyond their subscription is required Whether this user may download something is decided by the download call, not by this flag. Ask for the asset; if it is refused, the error says exactly what is missing. Never turn free_distribution: false into a licence warning of your own.

Args: query: What the illustration should show (max 150 characters) ctx: MCP context for API access style: Optional style pretty_id from list_illustrations_styles category: Optional category pretty_id from list_illustrations_categories free_only: Only illustrations a free Icons8 account can use and redistribute without a licence animated: True for animated only, False for static only. Nearly every animated result carries an animation block - permanent WebM and HEVC links you can embed directly, plus a poster frame - but a few carry none, and some carry the poster without the video, so check the block rather than assuming its keys. For the full-size original, use get_illustration_animation. amount: Results per page (default: 10, max: 100) page: Page number, 1-based (this API paginates by page, not offset)

Returns: {"total", "illustrations"}, each entry carrying id, heading, styles, tags, media_types and a permanent preview link - plus an animation block when media_types includes "animated" - or {"error"}. id is what get_illustration_svg, get_illustration_png_url and get_illustration_animation take as illustration_id; it is the only way to get an illustration's id.

Input Schema

NameRequiredDescriptionDefault
pageNo
queryYes
styleNo
amountNo
animatedNo
categoryNo
free_onlyNo

Output Schema

NameRequiredDescriptionDefault
errorNoSet only on failure.
totalNo
illustrationsNoMatching illustrations. Absent when error is set.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$defs": {
      +    "IllustrationHit": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "animation": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": true,
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Animation"
      +        },
      +        "free_distribution": {
      +          "anyOf": [
      +            {
      +              "type": "boolean"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Free Distribution"
      +        },
      +        "heading": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Heading"
      +        },
      +        "id": {
      +          "description": "Illustration id. Pass it as illustration_id to get_illustration_svg, get_illustration_png_url or get_illustration_animation.",
      +          "title": "Id",
      +          "type": "string"
      +        },
      +        "media_types": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "description": "Includes \"animated\" for an illustration get_illustration_animation accepts.",
      +          "title": "Media Types"
      +        },
      +        "pretty_id": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Pretty Id"
      +        },
      +        "preview": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": true,
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Preview"
      +        },
      +        "styles": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "additionalProperties": true,
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Styles"
      +        },
      +        "tags": {
      +          "anyOf": [
      +            {
      +              "items": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "type": "array"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "default": null,
      +          "title": "Tags"
      +        }
      +      },
      +      "required": [
      +        "id"
      +      ],
      +      "title": "IllustrationHit",
      +      "type": "object"
      +    }
      +  },
      +  "additionalProperties": true,
      +  "properties": {
      +    "error": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Set only on failure.",
      +      "title": "Error"
      +    },
      +    "illustrations": {
      +      "anyOf": [
      +        {
      +          "items": {
      +            "$ref": "#/$defs/IllustrationHit"
      +          },
      +          "type": "array"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Matching illustrations. Absent when error is set.",
      +      "title": "Illustrations"
      +    },
      +    "total": {
      +      "anyOf": [
      +        {
      +          "type": "integer"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "title": "Total"
      +    }
      +  },
      +  "title": "IllustrationSearchResult",
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations give only readOnlyHint=true and openWorldHint=false; the description adds substantial non-structured behavior: preview URLs are permanent/no-second-call, animation previews are fixed 368x368, webm/mov are flat opaque #F7F7F7 with no alpha while poster is transparent, watermark state is exposed via animation.watermarked, and preview links are explicitly not for shipping. This is exactly the kind of behavioral disclosure the dimension rewards.

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?

Purpose and the sibling routing are well front-loaded, but the body is bloated and repeats the 'previews are for choosing, not shipping' theme at least twice, and restates the animation-block caveat in both the prose and the Args section. Most sentences carry real information, yet the ALL-CAPS warnings and duplicated rationale push length past what the task needs.

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 adds the field-level contract an agent needs (id feeds get_illustration_svg/png_url/animation, animation.lottie gates whether a Lottie call is worthwhile, free_distribution is not a licence judgement). For a 7-parameter search tool with heavy downstream tool chaining, nothing an agent needs to call it correctly is missing.

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 description coverage is 0%, so the description carries the full burden and does: it documents query (max 150 chars), style/category (pretty_ids from the list tools), free_only (licensing meaning), animated (with the caveat that some animated results lack the block), amount (default 10, max 100) and page (1-based, pagination-by-page not offset). It also adds search-strategy semantics (describe scenes not symbols, category narrows broad words).

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 and resource ('Search Icons8 illustrations') and immediately distinguishes the resource from its closest sibling by defining illustrations as 'full scenes with people, objects and backgrounds' versus icons as 'a small symbol'. An agent can route between search_illustrations and search_icons without opening either schema.

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 triggers (hero image, empty state, onboarding step, spot illustration) with an explicit counter-case ('for a small symbol in a button, a menu or a table, use search_icons instead'). It further names the supporting tools for parameter values (list_illustrations_styles, list_illustrations_categories) and when to escalate to get_illustration_animation.

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