iconify-mcp
Integrates with the public Iconify icon catalog to list and inspect collections with license details, search icons by name or keyword, fetch individual icons as SVG/PNG with metadata and framework snippets, and generate labeled contact-sheet previews.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@iconify-mcpsearch for arrow icons in lucide and show me the contact sheet"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@sohampatwardhan/iconify-mcp
Unofficial community MCP server for Iconify. It searches the public Iconify catalog, returns each collection's license, and sends PNG previews back as MCP image content so a model can see the icons.
Icon pages link to Icônes, Anthony Fu's icon browser, which is a front end over the same catalog.
![]()
Tools
Tool | What you get |
| Filter the catalog by name, prefix, or category. Each hit includes author, license, icon count, and sample ids. |
| One collection: license, categories, a page of icon names, and a PNG of its sample icons. |
| Keyword search ( |
| One icon ( |
| One labeled contact sheet for a list of ids, or for the top search matches. |
search_icons and get_collection include a preview image by default. Pass preview: false when you only want the JSON.
Iconify search matches names and keywords. It does not search by visual similarity. Use the contact sheet to compare candidates.
Code snippets
get_icon returns the formats Icônes offers:
Iconify name:
lucide:houseSVG and a data URL
Iconify SVG URL:
https://api.iconify.design/lucide/house.svgVue, React, and Svelte components
UnoCSS:
<div class="i-lucide-house"></div>Tailwind (Iconify plugin):
<span class="icon-[lucide--house]"></span>
Snippet SVGs keep currentColor so they inherit text color. Pass color (for example #b45309) when the SVG and the PNG should use a fixed color. PNGs default to #1c1917 on white. Palette icons that do not use currentColor keep their original colors.
Resources
URI | Body |
| Collection list with licenses |
| One collection, including up to 200 icon names |
| SVG |
| 128px PNG on white |
| Metadata and snippets |
iconify:// is the scheme to use. The same resources are also registered on icones:// so older URIs keep working.
Icônes links look like https://icones.js.org/collection/lucide?icon=lucide:house.
Related MCP server: Iconify MCP Server
Setup
Requires Node.js 20 or newer.
npx -y @sohampatwardhan/iconify-mcp@latestThe published bin is iconify-mcp. icones-mcp is a compatibility alias for the same program. Stdio is the default. Logs go to stderr so they stay off the JSON-RPC stream. The MCP server name is iconify-mcp.
Cursor
Add this to ~/.cursor/mcp.json or the project's .cursor/mcp.json:
{
"mcpServers": {
"iconify": {
"command": "npx",
"args": ["-y", "@sohampatwardhan/iconify-mcp@latest"]
}
}
}Claude Desktop
The same mcpServers block goes in the desktop config:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Restart Claude Desktop after saving.
Claude Code
claude mcp add iconify -- npx -y @sohampatwardhan/iconify-mcp@latestVS Code
Create .vscode/mcp.json:
{
"servers": {
"iconify": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@sohampatwardhan/iconify-mcp@latest"]
}
}
}Streamable HTTP
HTTP mode is stateless and has no authentication. Bind it to localhost.
npx -y @sohampatwardhan/iconify-mcp@latest --http --port 3333The MCP endpoint is http://127.0.0.1:3333/mcp. A client config looks like:
{
"mcpServers": {
"iconify": {
"url": "http://127.0.0.1:3333/mcp"
}
}
}GET /health returns ok.
MCP Inspector
The web UI:
npm install
npm run build
npx @modelcontextprotocol/inspector node dist/cli.jsA non-interactive check of the stdio server:
npx @modelcontextprotocol/inspector --cli --method tools/list node dist/cli.js
npx @modelcontextprotocol/inspector --cli --method tools/call \
--tool-name get_icon \
--tool-args-json '{"icon":"lucide:house","size":64}' \
node dist/cli.jsExamples
Search and look at the sheet:
{
"name": "search_icons",
"arguments": { "query": "arrow", "prefix": "lucide", "limit": 8 }
}Fetch one icon as a React component and a 128px PNG:
{
"name": "get_icon",
"arguments": { "icon": "lucide:house", "formats": ["react", "svg", "iconify"] }
}Compare a hand-picked set. This is the call that produced the image at the top of the README:
{
"name": "preview_icons",
"arguments": {
"title": "Lucide",
"columns": 4,
"size": 72,
"icons": [
"lucide:house", "lucide:search", "lucide:heart", "lucide:star",
"lucide:sun", "lucide:moon", "lucide:cloud", "lucide:camera",
"lucide:bell", "lucide:settings", "lucide:user", "lucide:mail"
]
}
}Prompts that work well once the server is connected:
"Search Lucide for a house icon and show me the candidates."
"Get the SVG and a Svelte component for
tabler:brand-github.""Make a contact sheet of weather icons from Phosphor."
Licenses
This server is MIT. See LICENSE.
Icon artwork is not relicensed. Every collection on Iconify has its own license (MIT, Apache-2.0, ISC, CC BY 4.0, and others). list_collections, get_collection, search_icons, get_icon, and preview_icons return that license's title, SPDX id, and URL. SVG snippets include a comment with the collection, author, and license. Read that license before shipping an icon.
Contact-sheet labels are set in Inter, which is bundled under the SIL Open Font License. The license text is in assets/fonts/OFL.txt. Rasterized labels in a PNG are pixels. The font file itself stays under the OFL.
Data source
This server calls the public Iconify API at https://api.iconify.design. Icônes (icones.js.org) is the browsing UI those icon links open. The client uses:
GET /collectionsandGET /collectionGET /searchGET /{prefix}.json?icons=...
SVGs are built locally with @iconify/utils and rasterized with @resvg/resvg-js. The client keeps at least 100ms between requests, caches collection metadata, search results, and icon bodies in memory, and retries 429 and 5xx responses.
The public API is a shared service. Point ICONIFY_API_URL at your own Iconify API instance if you need higher volume.
Variable | Default | Purpose |
|
| API origin |
|
| Minimum gap between API calls |
| enabled | Set to |
Development
npm install
npm run lint
npm test
npm run typecheck
npm run build
node dist/cli.js --help
npm run smokenpm run lint checks TSDoc comments with eslint-plugin-tsdoc (tsdoc/syntax). npm test includes rendering tests and a live call against the public API. npm run smoke starts the built stdio server, calls preview_icons, and writes docs/contact-sheet.png. CI runs npm ci, then lint, typecheck, test, build, and smoke.
prepublishOnly compiles TypeScript into dist/ before the package is packed.
Releasing
The package on npm is @sohampatwardhan/iconify-mcp. Version 0.2.0 is the first version of that scoped package. The old unscoped name icones-mcp stays on the registry as a deprecated package.
Trusted publishing can be attached only after the package exists. Publish 0.2.0 once from a maintainer machine, then add the GitHub Actions publisher, then let tags publish later versions.
npm login
npm ci
npm publish --access publicLeave --provenance off for that local publish. Provenance is added by the GitHub Actions workflow, which has the OIDC token. Do not push a v0.2.0 tag for this bootstrap. The workflow would try to publish 0.2.0 again.
On npmjs.com, open @sohampatwardhan/iconify-mcp → Settings → Trusted publishing (the section is also labeled Trusted Publisher). Choose GitHub Actions and enter:
Field | Value |
Organization or user |
|
Repository |
|
Workflow filename |
|
Environment name | empty |
The filename is release.yml only, not .github/workflows/release.yml. Allow direct npm publish. A publisher created after 3 September 2026 starts with npm stage publish allowed and does not allow npm publish until that action is selected. Leave dist-tag management off. The same link can be created with npm CLI 11.15.0 or newer:
npm trust github @sohampatwardhan/iconify-mcp \
--repo sohampatwardhan/iconify-mcp \
--file release.yml \
--allow-publishThe first successful publish from that workflow has to happen within two days of saving the publisher, or the configuration expires. Cut the next version for that check:
npm version patch # or minor, or major
git push --follow-tagsnpm version writes the version and a vX.Y.Z tag. .github/workflows/release.yml runs on that tag. It refuses the job when the tag is not v plus package.json "version", then runs npm ci, lint, typecheck, test, build, and smoke, publishes with npm publish --provenance --access public, and opens a GitHub Release with generated notes.
Deprecate the old package name after the scoped package is on the registry:
npm deprecate icones-mcp "Renamed to @sohampatwardhan/iconify-mcp"Available Tools
5 toolsget_collectionGet an icon collectionARead-onlyIdempotent
Get one Iconify collection: license, author, category counts, and a page of icon names. By default also returns a PNG contact sheet of the collection's sample icons so you can see the style. Set preview to false to skip the image. Pass category to page icons inside one category.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Icon names per page. Default 80. | |
| offset | No | Offset into the icon name page. Default 0. | |
| prefix | Yes | Collection prefix, such as lucide, mdi, or tabler. | |
| preview | No | Include a PNG of sample icons. Default true. | |
| category | No | Category title to page, or "uncategorized". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, non-destructive, so the safety profile is covered. The description adds a genuinely useful behavioral fact beyond that: by default it returns a PNG contact sheet, which is a potentially heavy payload, and preview=false suppresses it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what is returned and the identity parameter's effect. Minor overlap with schema-declared defaults (preview, category) but no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description tells the agent exactly what fields to expect (license, author, category counts, icon names) plus the default image payload. For a read-only, five-parameter tool this is sufficient to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented including defaults. The description adds only a rationale for preview ("so you can see the style") and a hint about category paging; it does not explain limit/offset interplay beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get one Iconify collection") and enumerates what comes back: license, author, category counts, and a page of icon names. The singular "one" implicitly separates it from list_collections, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operating guidance for options (set preview to false to skip the image; pass category to page inside one category), but never says when to choose this over list_collections, search_icons, or get_icon. Usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_iconGet an iconARead-onlyIdempotent
Get one icon by Iconify id (prefix:name). Returns dimensions, collection, license, alias parent when this name is an alias, the Icônes URL, code snippets, and a PNG you can see. Snippets cover raw SVG, a data URL, Vue, React, Svelte, an UnoCSS class, a Tailwind Iconify class, and the Iconify name. Snippet SVGs stay on currentColor unless color is set. Use preview_icons to compare several icons.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | Yes | Iconify id, for example "lucide:house" or "mdi:home". | |
| size | No | PNG size in pixels. Default 128. | |
| color | No | Hex, CSS color name, or rgb()/rgba(). Omit to keep snippet SVGs on currentColor. PNGs use #1c1917 when omitted. | |
| aliases | No | Also list other names that alias this icon. Requires the collection payload. Default false. | |
| formats | No | Snippet formats to include. Default: all of them. | |
| background | No | PNG background. Default #ffffff. Use "transparent" for no background. | |
| includeImage | No | Include the PNG. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior, and the description adds genuinely new context: the payload includes a visible PNG, an alias parent is surfaced only when the name is an alias, and snippets default to currentColor. That goes beyond the annotation set without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The identification rule and the returned-field inventory are front-loaded, and the closing sentence routes to the sibling. The middle snippet enumeration is list-like and slightly padded, but every sentence still carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and seven parameters, the description does the work of describing the response shape (dimensions, collection, license, alias parent, URL, snippets, PNG) and calls out the visible image. Nothing essential for a correct single call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description restates the currentColor behavior and enumerates snippet formats that the schema enum already lists, adding little meaning the schema does not already carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource ('Get one icon') and pins down the identifier format ('by Iconify id (prefix:name)'), which immediately separates it from search_icons and list_collections. It also names the panel of returned fields, so an agent knows exactly what kind of result to expect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use preview_icons to compare several icons" gives an explicit alternative with the condition that selects it (multiple icons vs. one). It does not mention when to prefer search_icons or get_collection, so the routing is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsList icon collectionsARead-onlyIdempotent
List Iconify collections available on Icônes, including license, author, icon count, category, and sample icon ids. Filter with query, prefix, or category. Does not return icon images; call get_collection or preview_icons to see icons. Icon sets keep their own licenses.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum collections to return. Default 40. | |
| query | No | Case-insensitive match against prefix, name, author, category, tags, or license. | |
| prefix | No | Only collections whose prefix equals or starts with this, such as mdi. | |
| category | No | Only collections whose category contains this text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, non-destructive, open-world behavior. The description adds meaningful context beyond that: it lists the metadata returned, states that icon images are not returned, and notes that each icon set keeps its own license.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core purpose in the first sentence and exclusions immediately after. There is minor redundancy around licensing because license is both listed as returned metadata and restated at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with no output schema, the description does enough: it explains the returned metadata, states what is not returned, and points to alternatives for icons. The only minor gap is that pagination and limit behavior are left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already well documented in the schema. The description reinforces the query, prefix, and category filters but adds little beyond those schema descriptions and does not mention the limit parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: list Iconify collections available on Icônes. It also clarifies the returned fields and explicitly distinguishes itself from get_collection and preview_icons by saying it does not return icon images.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear filtering guidance via query, prefix, or category, and routes image-viewing use cases to get_collection or preview_icons. It does not explicitly compare itself with search_icons, so the alternative guidance is useful but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_iconsPreview iconsARead-onlyIdempotent
Render a labeled PNG contact sheet of several icons so you can compare them in one image. Pass Iconify ids, or a search query plus an optional prefix, and the top matches are drawn. Supports size, color, background, and columns. Each icon's license is included in the text result. At most 24 icons.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Icon size in pixels. Default 64. | |
| color | No | Hex, CSS color name, or rgb()/rgba(). Omit to keep snippet SVGs on currentColor. PNGs use #1c1917 when omitted. | |
| icons | No | Iconify ids to draw, such as ["lucide:house", "lucide:search"]. | |
| limit | No | How many search matches to draw. Default 12. | |
| query | No | Search text used when icons is omitted. | |
| title | No | Optional heading drawn on the sheet. | |
| labels | No | Draw the icon name under each glyph. Default true. | |
| prefix | No | Collection prefix used with query. | |
| columns | No | Number of columns. Default up to 4. | |
| background | No | Sheet background. Default #f7f6f3. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld), so the description's added value is the output shape: a PNG plus a text result carrying each icon's license, and a hard cap of 24 icons. That is useful context for a tool with no output schema, but rendering details such as sheet dimensions or failure behavior when no icons match are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with what the tool produces before the invocation modes and limits. The 'Supports size, color, background, and columns' clause mildly duplicates the schema but still serves as a quick capability scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 optional parameters, no required fields, and no output schema, the description covers the essentials: what is returned (PNG sheet + text with licenses), how to select icons, and the 24-item cap. Remaining detail (title, labels, column defaults) is fully documented in the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 is the floor, but the description adds real meaning by framing 'icons' and 'query'+'prefix' as alternatives ('Pass Iconify ids, or a search query plus an optional prefix'), which the schema only hints at via 'Search text used when icons is omitted.' It also names the tunable knobs (size, color, background, columns) and restates the 24-icon ceiling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and artifact: 'Render a labeled PNG contact sheet of several icons so you can compare them in one image.' This is clearly distinct from the sibling read tools (search_icons, get_icon, list_collections) because it produces a composite visual, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to reach for it ('so you can compare them in one image') and explains the two input modes: explicit Iconify ids, or a search query plus optional prefix. It stops short of exclusions or pointing to siblings for single-icon or text-only lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_iconsSearch iconsARead-onlyIdempotent
Search icons across Iconify, the catalog behind Icônes (https://icones.js.org). Matches icon names and keywords, not arbitrary visual similarity. Returns icon ids, the collection license, and an Icônes URL. By default also returns one labeled PNG contact sheet of the matches so you can see and compare them. Set preview to false for text only.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Icon size in the contact sheet, in pixels. Default 56. | |
| color | No | Hex, CSS color name, or rgb()/rgba(). Omit to keep snippet SVGs on currentColor. PNGs use #1c1917 when omitted. | |
| limit | No | Maximum icons to return. Default 12. | |
| query | Yes | Search text, for example home, arrow, or cloud. | |
| start | No | Offset into the search results. Default 0. | |
| prefix | No | Limit the search to one collection prefix. | |
| columns | No | Contact sheet columns. Default is up to 4. | |
| preview | No | Attach a contact-sheet PNG of the returned icons. Default true. | |
| category | No | Limit the search to icon sets in this Iconify category. | |
| prefixes | No | Limit the search to these collection prefixes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's job is to add context, which it does: it discloses the return payload (icon ids, collection license, Icônes URL) and that a labeled PNG contact sheet is returned by default. It does not mention rate limits or result-count behavior, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences with the resource and matching semantics front-loaded, followed by return contents and the preview opt-out. No filler wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With ten fully documented parameters, rich annotations, and no output schema, the description does the needed extra work of describing the return format and default PNG behavior. Minor gaps remain around result pagination and preview payload cost, but overall it is sufficient to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all ten parameters are already documented, and the description only reinforces the preview toggle and contact-sheet behavior. It adds little meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Search icons across Iconify') and names the underlying catalog. It also clarifies the matching semantics ('matches icon names and keywords, not arbitrary visual similarity'), which distinguishes this search tool from sibling lookup tools like get_icon and preview_icons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: search by name/keyword rather than visual similarity, and 'Set preview to false for text only' tells the agent how to opt out of the PNG payload. It stops short of explicitly routing between siblings such as list_collections or get_icon, so no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.2.1- First observed
get_collection - First observed
get_icon - First observed
list_collections - First observed
preview_icons - First observed
search_icons
TDQS
Scored across 5 tools
Each tool has a distinct resource/action focus: list_collections (catalog browsing), get_collection (one set's metadata + icon page), search_icons (cross-collection discovery), get_icon (single icon details/snippets), preview_icons (visual comparison). The only friction is that search_icons and get_collection both emit PNG contact sheets by default, blurring the line with preview_icons, but the descriptions explicitly steer callers to preview_icons for comparison.
All five names follow a clean snake_case verb_noun pattern (list_collections, get_collection, search_icons, get_icon, preview_icons). Verbs are used consistently and predictably: list/search for discovery, get for single-item retrieval, preview for rendering.
Five tools is well-scoped for an icon catalog browser: one discovery-listing tool, one collection lookup, one search, one item lookup, and one batch preview. Nothing extraneous and no obvious repetition of capability.
The surface covers the full browse lifecycle (list → detail → search → single icon with snippets → visual compare) with no dead ends for typical use. Minor gaps: no tool to fetch/export a raw Iconify collection JSON or bulk icon data, and exhaustive icon enumeration relies on implicit paging inside get_collection.
Maintenance
Related MCP Connectors
Search and fetch SVG icons from 250,000+ icons across 200+ open-source icon sets.
Icons for agentic development: search & fetch 366,000+ open-source icons as SVG/PNG. No API key.
Search open SVG icon packs and fetch exact SVG markup from coding agents through MCP.
A coding agent searches the Icons8 library by keyword and style, then adds the selected icon or illustration to the project. Icons8 draws all of it: 420,000+ icons (130+ styles) and 110,000+ illustrations (340+ styles), so one project doesn't end up with mixed looks. The server lives at https://mcp.icons8.com/mcp/ and signs people in through their Icons8 account in the browser. Downloading PNG is free as long as the project links back to Icons8. SVG is on the paid plan, and that plan makes the link optional.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvide access to Iconify's MCP server with over 200,000 open-source vector ICONS, supporting icon set browsing, searching, and obtaining multi-framework usage examples.42Apache 2.0
- AlicenseNot gradedqualityDmaintenanceProvides access to over 200,000 open-source vector icons from more than 200 icon sets via the Iconify API. It enables users to browse, search, and retrieve specific icon data along with usage examples for popular web frameworks like React, Vue, and Tailwind CSS.305 npm21GPL 3.0
- AlicenseAqualityDmaintenanceProvides access to Iconify's 200,000+ open source vector icons from 200+ icon sets, enabling search, browsing, and retrieval of icon data with framework usage examples.49 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables searching, fetching SVG, and discovering icons from Iconify's 200,000+ icon library across 150+ sets.26 npmMIT