Free · CC0 · MCP server + CLI
Ask for icons.
Get a set that matches.
Describe your app in one sentence. Kuticon builds a matching pack in one style from its 2,431-icon library, as SVG and PNG. Try it here, or let your coding agent call it while it builds.
you Add a tab bar and settings screen. Use one consistent icon set.
I'll get a matching icon pack from Kuticon.
kuticon · draw_icon_pack{ "prompt": "icons for a habit tracker app", "style": "duotone", "count": 8 }
✓ 8 icons · duotone · SVG + PNG → src/assets/icons/
Wired them into TabBar.tsx and Settings.tsx.
- Morning run5 day streak
- Read 20 pagesdone
- Sleep by 112 of 7
- Today
- Stats
- Goals
- Settings
src/App.tsx · built with the pack above
For coding agents
Give your agent its own icon tool.
Set it up once. After that your agent asks Kuticon whenever a screen needs icons, and every pack comes out in the same style. New packs count against a small daily limit; searching the library does not.
Connect your agent. Kuticon runs at https://kuticon.com/mcp: nothing to install, no key. Pick yours.
Paste into Claude Code, Codex, Cursor or any coding agent. It adds the hosted server and asks before overwriting anything.
Add the Kuticon MCP server for yourself (the agent I am talking to now). Server: name "kuticon", remote (Streamable HTTP), URL https://kuticon.com/mcp, no authentication. 1. Register it using your own native method (your CLI's "mcp add" command or your MCP config file). Use user/global scope unless I say otherwise. 2. If a "kuticon" entry already exists, show me what you would change and ask before overwriting anything; back up any file you edit. 3. Reload MCP servers if needed, then confirm it works by calling the kuticon list_styles tool and showing me the result. If you cannot use remote MCP servers, stop and tell me: I can install the local kuticon CLI instead (https://github.com/nyancodex/kuticon-cli). Tell me each command you run, and do not change anything else.
claude mcp add --transport http kuticon https://kuticon.com/mcp
Running the local CLI instead: claude mcp add --scope user kuticon -- kuticon mcp
codex mcp add kuticon --url https://kuticon.com/mcp
Or add [mcp_servers.kuticon] with url = "https://kuticon.com/mcp" to ~/.codex/config.toml.
Running the local CLI instead: codex mcp add kuticon -- kuticon mcp
One click: Add to Cursor or paste this into the file.
{
"mcpServers": {
"kuticon": {
"url": "https://kuticon.com/mcp"
}
}
}
Running the local CLI instead: "command": "kuticon", "args": ["mcp"] in place of the url.
code --add-mcp '{"name":"kuticon","type":"http","url":"https://kuticon.com/mcp"}'
Or put {"servers": {"kuticon": {"type": "http", "url": "https://kuticon.com/mcp"}}} in .vscode/mcp.json.
Running the local CLI instead: code --add-mcp '{"name":"kuticon","command":"kuticon","args":["mcp"]}'
Settings → Connectors → Add custom connector. Name it Kuticon, paste this URL, and leave sign-in off. Free plans allow one custom connector.
https://kuticon.com/mcp
Running the local CLI instead: Settings → Developer → Edit Config, add {"mcpServers": {"kuticon": {"command": "kuticon", "args": ["mcp"]}}}, then restart.
The open-source kuticon CLI runs the same tools on your machine (kuticon mcp) and works without an agent. Install with Go 1.24+, or grab a binary from GitHub Releases.
go install github.com/nyancodex/ kuticon-cli/ cmd/ kuticon@latest
kuticon draw "icons for a neighborhood bakery" --style sticker --count 8 --out ./bakery kuticon search "coffee cup" kuticon get cupcake --format png --size 128 -o cupcake.png kuticon styles
Add --json for scripts, --base-url or KUTICON_URL to point elsewhere. The local CLI's packs count against the studio's daily limit, not the hosted one.
Ask for icons.
“Add icons for the tab bar and settings screen. Flat style, same set.”
MCP tools
draw_icon_packsearch_iconsget_iconlist_styles
HTTP API
GET /api/icons?q=coffee&limit=20search the libraryGET /api/metaevery style, size and choiceGET /icons/{id}/png?size=128one icon as PNG
Why one pack
One app, one look. No more icon soup.
Five icons, five styles
What you get when icons come from wherever.
One Kuticon pack
Same grid, same stroke, same colors. Ask for more later and they still match.
Styles
Ten styles. Pick one and the whole pack follows.
Just added
New icons, just drawn.
See all new →The library grows every day. These are the latest, newest first, and every pack and style can use them right away.
Studio
Want more control? Fine-tune the pack here.
Stroke weight, corners, icon count, file types and PNG sizes. Same engine your agent calls.
API
The same choices, as a request.
The controls above write this body. Plate stays on the desk. It is not a field. A missing field still means 12 icons, both files, and every size.
{
"prompt": "",
"weight": "text",
"cap": "round",
"style": "flat",
"count": 12,
"formats": ["svg", "png"],
"sizes": [16, 24, 32, 48, 64, 128, 256]
}
- That post answers
202with{id, status:"queued", position}. - Read
GET /api/packs/{id}untilstatusisreadyorfailed. - Take the zip at
GET /api/packs/{id}/download.
prompt- The sentence, trimmed, 1…280 characters.
weightfine,text, orbold.caproundorsharp.styleoutline,sticker,blueprint,neon,clay,pixel,duotone,twotone,flatline, orflat. Missing means outline.count- 1 for one icon, or 4, 6, 8, 12, 16, 24 for a pack. Missing means 12.
formats- Any of
svg,png,font(WOFF2, TTF, and CSS),react,vue,sprite(sprite and Figma sheet), andapp(Android and iOS launcher icons). Missing means svg and png. Empty is refused. sizes- PNG sides from 16, 24, 32, 48, 64, 128, 256. Missing means all seven. Ignored when PNG is off. Empty while PNG is on is refused.