Skip to main content
Glama

Icons8

Get icon SVG

get_icon_svg
Read-only

Get an icon as SVG by its ID - PREFERRED FORMAT for Icons8 icons. SVG format provides scalable, crisp icons suitable for web applications. Personal API key is required for SVG access.

RECOMMENDED: Use this tool instead of PNG when possible for better quality and scalability.

An animated icon's SVG is a still frame - Icons8 publishes no animated vector. The result then carries a "note" saying so and an "animation" block with the motion, so no further call is needed.

Args: icon_id: The id from a search_icons result (field icons[].id) ctx: MCP context for API access

Returns: Dictionary containing the SVG content. For an animated icon it also carries a "note" saying the SVG is a still frame and an "animation" block of permanent gif and apng links. On failure, an "error" describing what the Icons8 API said - a rejected key is reported, not returned as an empty icon. Counts toward the paid-download limit: a refusal carries "retry_after_seconds" and a free PNG "url"

Input Schema

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

Output Schema

NameRequiredDescriptionDefault
svgNoSVG markup of the icon. Absent when error is set.
urlNoFree 24px PNG link. Set only when the download limit refused the call.
noteNoSet only for an animated icon: the SVG is a still frame.
errorNoSet only on failure.
animationNoPermanent gif and apng links. Set for an animated icon, and when the download limit refused the 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 for an animated icon, and when the download limit refused the call.",
      +      "title": "Animation"
      +    },
      +    "error": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Set only on failure.",
      +      "title": "Error"
      +    },
      +    "note": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Set only for an animated icon: the SVG is a still frame.",
      +      "title": "Note"
      +    },
      +    "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"
      +    },
      +    "svg": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "SVG markup of the icon. Absent when error is set.",
      +      "title": "Svg"
      +    },
      +    "url": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "default": null,
      +      "description": "Free 24px PNG link. Set only when the download limit refused the call.",
      +      "title": "Url"
      +    }
      +  },
      +  "title": "IconSvgResult",
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint=true), and the description adds substantial non-obvious behavior: API key requirement, the still-frame caveat for animated icons plus the accompanying note/animation block, error surfacing, and the paid-download limit with retry_after_seconds and free PNG fallback.

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 the purpose and the format preference, and the behavioral caveats earn their space. The 'PREFERRED FORMAT' and 'RECOMMENDED' lines say the same thing twice, and the Args/Returns boilerplate is partly redundant with the schema and output schema.

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?

For a paid, key-gated fetch tool this is complete: it covers the id source, error/limit behavior, and the animated-icon edge case. An output schema exists, yet the return-shape notes add value rather than padding.

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% for the single icon_id parameter, and the description only restates its provenance (icons[].id from search_icons) with no added format or syntax detail. Baseline 3 is appropriate when the schema fully carries the parameter.

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 (get) and resource (icon SVG) by ID, and explicitly frames itself as the preferred SVG format versus the PNG sibling. An agent can distinguish it from get_icon_png_url 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?

Gives an explicit recommendation ('Use this tool instead of PNG when possible') with the reason (quality/scalability), and names the source of the required id (search_icons results). The alternative is named and the selecting condition is stated.

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