Bioicons MCP Server
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., "@Bioicons MCP Serversearch for a DNA helix icon and download the SVG"
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.
Bioicons MCP Server
⚠️ Third-Party / Unofficial Implementation
This is an independent, community-developed MCP server and is not the official MCP server for bioicons.com. This project is not affiliated with, endorsed by, or sponsored by bioicons.com or its creator. The official bioicons.com website can be found at https://bioicons.com.
Version 0.1.0
A Model Context Protocol server for bioicons.com — a free library of 2800+ high quality science illustrations.
Table of Contents
Related MCP server: brain-mcp-icon-visual
Overview
Bioicons MCP Server bridges bioicons.com — a curated library of open-source SVG illustrations for the life sciences — and any AI client that supports the Model Context Protocol (MCP), such as Claude Desktop, Cursor, or Cline.
With this server, your AI assistant can:
🔍 Search the entire bioicons.com icon library (2800+ icons)
📋 Inspect icon metadata (name, category, license, author)
📥 Download SVG files to your local filesystem
🏷️ Understand licensing and attribution requirements for each icon
What is bioicons.com?
Created by Simon Duerr, bioicons.com is an open platform providing high-quality vector illustrations for scientific figures. All icons are available as SVG files under permissive licenses (CC0, CC BY, CC BY-SA, MIT, BSD) and can be used in Inkscape, Adobe Illustrator, Microsoft Office, and more.
Features
Feature | Description |
✅ Full-text search | Search icons by keyword; multiple tokens are AND-matched |
✅ Category filtering | Filter by 37 bio-science categories |
✅ License filtering | Filter by CC0 / CC BY / CC BY-SA / MIT / BSD |
✅ SVG retrieval | Fetch raw SVG source of any icon |
✅ Local download | Save SVG files to a specified directory |
✅ Rich metadata | Full icon info including license URL and attribution requirements |
✅ Bilingual | Category descriptions in English and Chinese |
✅ stdio transport | For Claude Desktop, Cursor, and other local clients |
✅ SSE transport | For remote / web-based clients |
✅ In-memory cache | Metadata cached for 1 hour to minimise network requests |
✅ Prompt template | Built-in "find science icons" prompt |
Quick Start
Prerequisites
Python ≥ 3.10
Network access to
https://bioicons.comAn MCP-compatible client (recommended: Claude Desktop or Cursor)
60-Second Setup
# 1. Enter the project directory
cd Bioicons-MCP
# 2. Create and activate a virtual environment
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS / Linux
source .venv/bin/activate
# 3. Install dependencies
pip install -r requirements.txt
# 4. Install the package (editable mode)
pip install -e .
# 5. Verify installation
bioicons-mcp --helpExpected output:
usage: bioicons-mcp [-h] [--transport {stdio,sse}] [--host HOST] [--port PORT]
MCP server for bioicons.com — high quality science illustrations.Installation
Option A: From source (recommended)
git clone <your-repo-url> Bioicons-MCP
cd Bioicons-MCP
pip install -e .Option B: Run directly without installing
cd Bioicons-MCP
pip install -r requirements.txt
python -m bioicons_mcp --transport stdioClient Configuration
Claude Desktop
Edit the Claude Desktop config file:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"bioicons": {
"command": "python",
"args": ["-m", "bioicons_mcp"],
"env": {
"PYTHONIOENCODING": "utf-8"
}
}
}
}Tip: If you're using a virtual environment, replace
"python"with the full path to the Python executable, e.g."C:\\Bioicons-MCP\\.venv\\Scripts\\python.exe".
Cursor
Navigate to Settings → MCP and add:
{
"mcpServers": {
"bioicons": {
"command": "python",
"args": ["-m", "bioicons_mcp"]
}
}
}Cline (VS Code)
In .cline/mcp_settings.json:
{
"mcpServers": {
"bioicons": {
"command": "python",
"args": ["-m", "bioicons_mcp"],
"disabled": false,
"autoApprove": []
}
}
}SSE Mode (Remote Deployment)
Start the SSE server:
bioicons-mcp --transport sse --host 0.0.0.0 --port 8080Then configure your client with the SSE URL:
http://<server-ip>:8080/sseTools Reference
The server exposes 5 tools that AI clients can call automatically.
1. list_categories — List All Categories
Lists every bioicons.com category with icon counts and descriptions.
Parameters:
Parameter | Type | Required | Default | Description |
|
| No |
| Language for descriptions |
Example:
list_categories(language="en")Sample output:
# bioicons.com Icon Categories
Total icons: 2829
- **All_icons** (2829 icons): All available icons on bioicons.com
- **Amino-Acids** (31 icons): Amino acid illustrations
- **Animals** (384 icons): Animal and model organism illustrations
- **Chemistry** (92 icons): Chemistry illustrations
...2. search_icons — Search Icons
Search the icon library by keyword, with optional category and license filters.
Parameters:
Parameter | Type | Required | Default | Description |
|
| ✅ | — | Search keywords (space-separated, all must match) |
|
| No |
| Category filter |
|
| No |
| License filter |
|
| No |
| Max results (cap: 500) |
Example:
search_icons(query="alanine", category="Amino-Acids", limit=10)License slugs:
Slug | Full name | Attribution required |
| CC0 (Public Domain) | No |
| CC BY 3.0 | Yes |
| CC BY 4.0 | Yes |
| CC BY-SA 3.0 | Yes |
| CC BY-SA 4.0 | Yes |
| MIT | Yes |
| BSD 3-Clause | Yes |
3. get_icon — Get SVG Content
Fetch the raw SVG source of a specific icon.
Parameters:
Parameter | Type | Required | Description |
|
| ✅ | Icon name (without |
|
| No | Category slug for exact matching |
|
| No | License slug for exact matching |
|
| No | Author slug for exact matching |
If only
nameis provided, the first matching icon is returned.
Example:
get_icon(name="alanine")4. download_icon — Download SVG to Disk
Save an icon's SVG file to the local filesystem.
Parameters:
Parameter | Type | Required | Default | Description |
|
| ✅ | — | Icon name |
|
| No |
| Save directory (auto-created) |
|
| No | icon name | Custom filename |
|
| No |
| Category slug |
|
| No |
| License slug |
|
| No |
| Author slug |
Example:
download_icon(name="PyTorch", save_dir="./icons", filename="pytorch.svg")The tool will also display an attribution reminder if the icon's license requires it.
5. get_icon_info — Get Icon Metadata
Return detailed metadata for a specific icon, including license name, URL, and attribution requirements.
Parameters:
Parameter | Type | Required | Description |
|
| ✅ | Icon name |
|
| No | Category slug |
|
| No | License slug |
|
| No | Author slug |
Sample JSON output:
{
"name": "alanine",
"category": "Amino-Acids",
"license": {
"slug": "cc-0",
"name": "CC0 (Public Domain)",
"url": "https://creativecommons.org/publicdomain/zero/1.0/",
"requires_attribution": "no"
},
"author": "B--Gideon-Bergheim",
"svg_url": "https://bioicons.com/icons/cc-0/Amino-Acids/B--Gideon-Bergheim/alanine.svg"
}Prompts
The server includes one reusable prompt template:
find_science_icons
Find science illustrations based on a natural-language description.
Parameters:
Parameter | Type | Required | Description |
|
| ✅ | Natural-language description of the desired icon |
|
| No | Optional category to narrow the search |
Example usage:
"Find me an icon of a DNA double helix"
The AI will automatically call search_icons with the keyword "DNA" and suggest the most relevant icons.
Transport Modes
stdio (default)
For local MCP clients (Claude Desktop, Cursor, etc.):
bioicons-mcp # default stdio
bioicons-mcp --transport stdio # explicitSSE
For remote deployment or web-based clients:
bioicons-mcp --transport sse --host 0.0.0.0 --port 8080SSE endpoints:
Connection URL:
http://<host>:<port>/sseMessage endpoint:
http://<host>:<port>/messages/
Project Structure
Bioicons-MCP/
├── src/
│ └── bioicons_mcp/
│ ├── __init__.py # Package init, version
│ ├── __main__.py # Enable: python -m bioicons_mcp
│ ├── server.py # MCP Server core (tools, prompts, transport)
│ ├── client.py # Async bioicons.com API client (with cache)
│ ├── models.py # IconInfo data model
│ ├── constants.py # Constants: URLs, licenses, category descriptions
│ └── py.typed # PEP 561 type marker
├── tests/
│ └── test_server.py # Unit tests (no network required)
├── pyproject.toml # Project metadata & build config
├── requirements.txt # Runtime dependencies
├── requirements-dev.txt # Development dependencies
├── LICENSE # MIT License
├── README.md # English documentation (this file)
├── README_CN.md # Chinese documentation
└── examples/
├── claude_desktop_config.json # Claude Desktop config example
├── cursor_mcp_config.json # Cursor config example
└── cline_mcp_settings.json # Cline config exampleDevelopment
Running Tests
pip install -r requirements-dev.txt
pytest tests/ -vLinting & Type Checking
ruff check src/ tests/
mypy src/Architecture
┌─────────────────┐ MCP (stdio/SSE) ┌──────────────────┐
│ MCP Client │ ◄───────────────────► │ bioicons-mcp │
│ (Claude, etc.) │ │ Server │
└─────────────────┘ └────────┬──────────┘
│
│ Async HTTP
▼
┌──────────────────┐
│ bioicons.com │
│ (GitHub Pages) │
│ │
│ icons.json │
│ categories.json │
│ authors.json │
│ */icon.svg │
└──────────────────┘Key design decisions:
BioiconsClientcommunicates with bioicons.com viahttpx.AsyncClient, fetching JSON metadata in parallel and caching it for 1 hour.IconInfois an immutable dataclass (frozen=True, slots=True) with amatches_querymethod that mirrors the bioicons.com website's search logic.constants.pycentralises all static information for easy maintenance when the upstream site changes.SVG URL construction follows bioicons.com's deterministic path:
/icons/{license}/{category}/{author}/{name}.svg.
Licensing
This MCP Server
The server code is licensed under the MIT License. See LICENSE.
Icons on bioicons.com
Icons accessed through this server are hosted by bioicons.com and each has its own license. Always check and respect the license of each icon you download.
License | Attribution required | Notes |
CC0 | No | Public domain, free to use |
CC BY 3.0/4.0 | Yes | Attribute the author |
CC BY-SA 3.0/4.0 | Yes | Attribute + share-alike |
MIT | Yes | Retain copyright notice |
BSD | Yes | Retain copyright notice |
Attribution example:
alanine icon by B--Gideon-Bergheim is licensed under CC0 (https://creativecommons.org/publicdomain/zero/1.0/)
FAQ
Q1: I get ModuleNotFoundError: No module named 'mcp'
Install the dependencies:
pip install -r requirements.txtQ2: Search returns no results
Verify network access to
https://bioicons.comThe search is case-insensitive but requires all whitespace-separated tokens to appear in the icon name
Try broader keywords (e.g. "DNA" instead of "dna_replication_fork")
Q3: Tools don't appear in Claude Desktop
Restart Claude Desktop
Check the JSON syntax of your config file
Verify the Python path is correct (use an absolute path)
Q4: Can I use this offline?
bioicons.com is a static website and metadata must be fetched online. Offline mode is not currently supported, but you could manually download icons.json and modify client.py to read from a local file.
Q5: Which Python versions are supported?
Python 3.10 and above.
Contributing
Contributions are welcome! Please read our Contributing Guidelines before submitting a pull request.
To report a security vulnerability, see our Security Policy.
Disclaimer
This project is a third-party, unofficial MCP server implementation for bioicons.com. It is not created, maintained, or endorsed by bioicons.com or its creator Simon Duerr. The official bioicons.com website is independently operated at https://bioicons.com.
This project simply provides an MCP adapter that interfaces with the publicly accessible data on bioicons.com. All icons accessed through this server remain the property of their respective authors and are subject to their individual licenses.
This project is an independent, third-party community MCP adapter and is not officially affiliated with or endorsed by bioicons.com.
Available Tools
5 toolsdownload_iconA
Download an icon's SVG file from bioicons.com and save it to the local filesystem. Returns the saved file path.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Icon name (without .svg). | |
| author | No | Author slug (optional). | |
| license | No | License slug (optional). | |
| category | No | Category slug (optional). | |
| filename | No | Custom file name (with or without .svg). Defaults to the icon name. | |
| save_dir | No | Directory where the SVG file should be saved. Created if it does not exist. Defaults to the current working directory. | . |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the key side effect (writes a file to the local filesystem) and the return value (saved file path), which is the most important behavior for a write tool. However, it says nothing about overwrite behavior, permissions, network/rate-limit constraints, or failure modes.
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?
Two sentences, zero waste, with the action and the source front-loaded and the return value last. Nothing is repeated from the schema.
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?
There is no output schema, but the description covers the return value explicitly, and all parameters are fully documented in the schema. For a simple single-file download tool the only real gap is the absence of overwrite/permission behavior.
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%, including defaults and the 'created if it does not exist' note on save_dir, so the schema already documents all six parameters. The description adds no parameter-level meaning beyond that, which is the baseline-3 case.
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 ('Download an icon's SVG file'), names the source (bioicons.com), and states the effect (save to local filesystem) plus the return value. This is clear enough to distinguish it from the read-only siblings (get_icon, get_icon_info), though it never names an alternative 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?
Usage is only implied: you use this when you need the SVG persisted to disk rather than fetched into context. No when-to-use/when-not guidance and no mention of when get_icon would be the better choice, so the agent must infer the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_iconA
Fetch the SVG content of a specific icon from bioicons.com. Provide either the exact icon name or all four identifying fields (name, category, license, author). The SVG source is returned as text.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Icon name (without .svg extension). | |
| author | No | Author slug. If omitted, the first icon matching *name* is used. | |
| license | No | License slug. If omitted, the first icon matching *name* is used. | |
| category | No | Category slug. If omitted, the first icon matching *name* is used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the return shape ('SVG source is returned as text') but says nothing about failure behavior when an icon is not found, ambiguity resolution beyond the schema's fallback note, or rate/auth limits. Partial coverage of the behavioral surface.
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 purpose, then invocation rule, then return type. No filler or repetition of the tool name.
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 4-parameter read tool with no annotations and no output schema, the description covers purpose, invocation and return type. It omits error/no-match behavior and disambiguation guidance, leaving gaps an agent might hit in practice.
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 adds genuine value by explaining the either/or resolution strategy — exact name alone, or all four identifying fields together — which is an invocation constraint not spelled out in the schema itself.
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 (Fetch) and resource (SVG content of an icon) with the source named (bioicons.com), which is clear and concrete. It does not, however, differentiate itself from siblings like get_icon_info or download_icon, which an agent could confuse with this one.
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 invocation guidance ('Provide either the exact icon name or all four identifying fields'), which helps the agent know how to supply parameters. It says nothing about when to choose this tool over get_icon_info or download_icon, so alternative selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_icon_infoB
Return detailed metadata for a specific icon: name, category, license (with full name and URL), author, SVG download URL, and attribution requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Icon name (without .svg). | |
| author | No | Author slug (optional). | |
| license | No | License slug (optional). | |
| category | No | Category slug (optional). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the return contents (including attribution requirements and the SVG URL), which is genuinely useful because there is no output schema. It says nothing, though, about behavior on a missing icon, whether the optional author/license/category params act as filters or disambiguators, or any permissions/rate limits.
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?
A single front-loaded sentence that packs the verb, resource, and return contents with zero filler. Every clause earns its place.
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, the description correctly compensates by enumerating the returned metadata fields, which is the most important missing piece. The remaining gap is selection guidance against the closely-related get_icon and download_icon siblings.
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 documented in the schema and the baseline is 3. The description adds only marginal semantic value — the parenthetical '(with full name and URL)' hints that the license field is structured — and does not explain how the optional author/license/category params change the lookup.
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 ("Return detailed metadata for a specific icon") and enumerates the exact fields returned, so the agent knows this is a metadata lookup rather than a download. However, it does not distinguish itself from the near-identical sibling get_icon, nor explain how it relates to download_icon, leaving the agent to guess between them.
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?
There is no when-to-use guidance, no mention of prerequisites, and no named alternative — despite a sibling named get_icon that appears to serve a very similar purpose. Usage is only implied by the listed return fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesA
List all icon categories available on bioicons.com, each with the number of icons and descriptions in both English and Chinese.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Language for category descriptions: 'en' for English, 'zh' for Chinese. | en |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. 'List all' implies a read-only operation and it discloses returned fields (icon counts and bilingual descriptions), but it omits pagination, ordering, authentication, or rate-limit behavior.
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?
A single efficiently structured sentence with no filler. The core action and returned content are front-loaded.
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 one-parameter read tool with no output schema, the description gives enough context about what is returned. It could be more complete by explaining how the language parameter affects the bilingual descriptions.
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 the language enum is already documented. The description mentions English and Chinese descriptions but does not clarify how that relates to the single language parameter, adding little parameter-specific meaning and creating mild ambiguity.
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: list all icon categories available on bioicons.com. It also says what each category includes, making it clearly distinct from sibling tools that fetch, search, or download individual 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?
The description implies browsing/discovery usage by saying it lists all categories, but it does not explicitly say when to use this instead of search_icons or get_icon. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_iconsA
Search the bioicons.com icon library by keyword. Returns matching icons with name, category, license, author and a direct SVG download URL. Optionally filter by category and/or license.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default 50, max 500). | |
| query | Yes | Search keywords. The search is case-insensitive and every whitespace-separated token must appear in the icon name. | |
| license | No | Filter by license slug (e.g. 'cc-0', 'mit', 'bsd', 'cc-by-4.0', 'cc-by-sa-4.0'). Empty string means no license filter. | |
| category | No | Filter by category slug (e.g. 'Amino-Acids', 'Chemistry'). Use 'All_icons' (default) to search all categories. | All_icons |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the returned field set and that filtering is optional, which is useful behavioral context. It omits other traits an agent would want: read-only/safety profile, pagination behavior beyond the limit param, rate limits, and auth requirements. Disclosing the return shape is real value, but the behavioral picture is incomplete.
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 the purpose, then return values, then filters; no filler. Slightly more could be said about routing, but nothing present is wasted.
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 read-only search tool with no output schema, explaining the returned fields (including the SVG URL) is exactly the missing piece and it is supplied. The schema fully covers the parameters, and the absence of annotations makes the safety/profile omission a modest gap rather than a fatal one.
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 query, limit, license, and category are all documented in the schema itself; the baseline is 3. The description only restates optional category/license filtering and adds no syntax or format detail 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 (Search) and resource (bioicons.com icon library) scoped to keyword search, and enumerates what comes back (name, category, license, author, SVG URL). It never contrasts against siblings like get_icon or list_categories, so an agent must infer the boundary, but the core purpose is unambiguous.
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?
'Search ... by keyword' plus 'Optionally filter by category and/or license' implies the discovery use case, which is adequate for a search tool. However there is no explicit when-to-use-vs-alternatives guidance (e.g. use this to find icons, then get_icon_info or download_icon), leaving the agent to infer routing among four siblings.
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.1.0- First observed
download_icon - First observed
get_icon - First observed
get_icon_info - First observed
list_categories - First observed
search_icons
TDQS
Scored across 5 tools
get_icon, download_icon, and get_icon_info all target a single icon and could be momentarily confused, but descriptions clearly separate them (SVG text vs. saved file vs. metadata). list_categories and search_icons are cleanly distinct discovery tools.
All five tools follow a consistent verb_noun snake_case pattern: download_icon, list_categories, search_icons, get_icon, get_icon_info. No deviations or mixed conventions.
Five tools is well-scoped for an icon library: discovery (list/search), inspection (info), and retrieval (get/download) each earn their place without redundancy.
The surface covers discovery, metadata, SVG retrieval, and download, forming a full lifecycle. Only minor gaps like bulk download or pagination controls prevent a perfect score.
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.
Multilingual semantic SVG icon search with previews for AI coding agents. 20,000+ icons.
Search SVG metadata and buy licensed commercial SVG exports for coding agents.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables AI assistants to search, browse, and download professional icons from The Noun Project directly within MCP-compatible environments. It supports SVG and PNG formats with customizable styles and provides optimized modes for free and paid API tiers.750 npm7MIT
- FlicenseNot gradedqualityDmaintenanceVisual icon search, retrieval, and comparison for AI agents. Search 200k+ icons semantically, render side-by-side comparison grids, and retrieve raw SVG markup — all tools return images so vision-capable LLMs can see the icons.1-

Svg/icons MCPofficial
AlicenseNot gradedqualityCmaintenanceEnables AI coding tools to search, inspect, recommend, and export SVG icons from svgicons.com for use in design systems, frontend projects, and AI-assisted workflows.MIT- AlicenseCqualityDmaintenanceEnables AI-powered icon search, generation, and download from 275,000+ icons with web-based authentication and subscription plans.17 npmMIT