Agent-readable open-source icon service — 10k+ icons (Lucide, Heroicons, Tabler, Simple Icons) as SVG/PNG on Cloudflare, with keyword+semantic search, MCP server, and llms.txt
git clone https://github.com/asr-aditya/iconserve{
"mcpServers": {
"iconserve": {
"command": "node",
"args": ["/path/to/iconserve/dist/index.js"]
}
}
}MCP Servers overview
# IconServe
A free, agent-readable service that aggregates **10,000+ open-source icons** — [Lucide](https://lucide.dev),
[Heroicons](https://heroicons.com), [Tabler](https://tabler.io/icons), and [Simple Icons](https://simpleicons.org) —
and serves them as **SVG or PNG** at predictable URLs, with keyword + semantic search, an `llms.txt`, and an MCP server.
Runs entirely within the **Cloudflare free tier** (Workers + R2 + Workers AI).
## How an agent uses it
| Need | Do this |
|---|---|
| Embed an icon you know the name of | `GET /i/{name}.svg` (best match) or `/icons/{set}/{name}.svg` |
| Find the right icon | `GET /api/search?q=shopping+cart` → names + ready URLs |
| Read the whole API in one shot | `GET /llms.txt` (or `/llms-full.txt`) |
| Native tool calls | MCP server at `/mcp` (`search_icons`, `get_icon`, `list_sets`) |
| OpenAPI | `GET /openapi.json` |
### Discoverability surfaces (for crawling/browsing agents)
- `GET /icon/{set}/{name}` — crawlable HTML page per icon (preview, usage, JSON-LD `ImageObject` + breadcrumb). `/icon/{name}` 302-redirects to the best match.
- `GET /sitemap.xml` — every icon page (~10k URLs).
- `GET /robots.txt` — explicitly **allows** AI crawlers (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended, …) and points to the sitemap.
- Landing page carries `WebSite`+`SearchAction` and `WebAPI` JSON-LD and Open Graph tags.
- **IndexNow**: key file served at `/{INDEXNOW_KEY}.txt`; `npm run indexnow` pings Bing/Yandex to crawl new or changed URLs instantly (pass paths to submit a subset, e.g. `npm run indexnow /icon/lucide/house`).
### Transforms (query params on any icon URL)
- `color=` hex / CSS color / `currentColor` — e.g. `?color=%23e11d48`
- `size=` `1..2048` px
- `stroke=` `0..20` (line icons)
- `style=` e.g. `solid` (Heroicons), `filled` (Tabler)
- `format=` `svg` | `png`
Example: `/i/shopping-cart.svg?color=crimson&size=48&stroke=1.5`
## Architecture
```
Build (offline, on your machine — no Cloudflare cost)
scripts/ingest.mjs → data/pack/icons.json (id → normalized SVG, currentColor-driven)
data/pack/catalog.json (names, tags, aliases, license, styles)
data/pack/corpus.json (search text per icon)
scripts/embed.mjs → data/pack/embeddings.bin (10k × 384, bge-small-en-v1.5)
data/pack/embed-index.json
Cloudflare
R2 (ICONS) holds the 4 packed artifacts; loaded once per isolate into memory
Workers AI embeds ONLY the query string at search time (same 384-dim model)
Worker routing, color/size/stroke transforms, PNG (resvg-wasm), search, MCP, docs
Assets public/index.html landing page
```
Semantic search = keyword ranking **fused** (reciprocal-rank fusion) with cosine similarity over the
in-memory embeddings. No Vectorize, no per-vector billing, no dimension cap. If `embeddings.bin` is
absent, search gracefully falls back to keyword-only.
## Local development
```bash
npm install
npm run build:data # ingest + embed (embed downloads a ~40MB model once)
npm run upload:r2 # push artifacts into the LOCAL R2 store
npm run dev # http://localhost:8787
```
> In `wrangler dev --local` the Workers AI binding is offline, so search runs keyword-only locally.
> Semantic search activates once deployed (or when running against the remote AI binding).
## Deploy (Cloudflare free tier)
```bash
wrangler login # one-time, opens a browser
npm run deploy # creates the R2 bucket, uploads artifacts, deploys the Worker
```
`npm run deploy` runs [`scripts/deploy.mjs`](scripts/deploy.mjs): it creates the `iconserve-icons`
bucket (idempotent), uploads the four artifacts to **remote** R2, then `wrangler deploy`.
## Adding / updating icon sets
Edit [`scripts/lib/sets.mjs`](scripts/lib/sets.mjs), then re-run `npm run build:data && npm run upload:r2`
(local) or `npm run deploy` (remote). Set priority for `/i/{name}` best-match is `DEFAULT_SET_ORDER` in
[`wrangler.toml`](wrangler.toml).
## Licensing
Icons are redistributed under their original permissive licenses: Lucide (ISC), Heroicons (MIT),
Tabler (MIT), Simple Icons (CC0). Brand marks from Simple Icons are trademarks of their respective
owners — use them per each brand's guidelines.
What people ask about iconserve
What is asr-aditya/iconserve?
+
asr-aditya/iconserve is mcp servers for the Claude AI ecosystem. Agent-readable open-source icon service — 10k+ icons (Lucide, Heroicons, Tabler, Simple Icons) as SVG/PNG on Cloudflare, with keyword+semantic search, MCP server, and llms.txt It has 0 GitHub stars and was last updated today.
How do I install iconserve?
+
You can install iconserve by cloning the repository (https://github.com/asr-aditya/iconserve) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is asr-aditya/iconserve safe to use?
+
asr-aditya/iconserve has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains asr-aditya/iconserve?
+
asr-aditya/iconserve is maintained by asr-aditya. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to iconserve?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy iconserve to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/asr-aditya-iconserve)<a href="https://claudewave.com/repo/asr-aditya-iconserve"><img src="https://claudewave.com/api/badge/asr-aditya-iconserve" alt="Featured on ClaudeWave: asr-aditya/iconserve" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!