sticker-mcp
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., "@sticker-mcp send a sticker for my happy mood"
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.
English · 简体中文
sticker-mcp
An MCP server that lets AI send expressive stickers (表情包) directly into the chat, rendered inline via MCP Apps. Comes with a standalone web admin page for managing the sticker library, and tools that let the AI add new stickers for you.
Features
Inline sticker rendering —
send_stickerrenders the image in the conversation via aui://MCP Apps widget (works on claude.ai and ChatGPT web).AI judgement built in — tool descriptions teach the AI to check the library (
list_available_stickers) and pick a sticker matching the conversation's mood, proactively.AI can grow the library —
create_sticker_uploadgives the AI a one-time upload URL on this sticker library for attached image bytes;add_stickerstill accepts an existing image URL. On local stdio there is alsoadd_sticker_by_path.Standalone admin page —
/adminis a plain web page (no MCP host needed): drag & drop / paste upload, batch add, tag editing, search, delete. Optionally protected byADMIN_TOKEN.Simple storage — JSON + image files on disk. No database.
Related MCP server: cove-sticker-mcp
Live preview
Project showcase: https://show.asashiki.com/projects/sticker-mcp.html
Tools
Tool | Purpose |
| Pick a sticker by emotion/scene |
| Catalog of |
| Download an image from an existing public http(s) URL as a sticker with name + tags. It does not accept base64/data URIs. |
| Create a 10-minute one-time PUT URL on this sticker library so the AI can upload attached image bytes directly here, without third-party image hosts. |
| (stdio/local only) Add a sticker from a local file path. |
Transports & endpoints
Local stdio:
node dist/stdio.js(ornpm run dev:stdio).Remote Streamable HTTP:
node dist/server.js, MCP endpoint atMCP_HTTP_PATH(default/mcp/sticker,/mcpkept as alias).HTTP server also serves:
/images/:filename(sticker images for the widget),/admin(management page),/api/stickers(REST for the admin page),/api/stickers/upload/:token(one-time direct uploads created by the MCP tool),/healthz.
Quick start (local)
npm install
npm run build
npm start # Streamable HTTP on :3000
# or stdio for Claude Desktop:
npm run start:stdioClaude Desktop (stdio)
{
"mcpServers": {
"sticker": {
"command": "node",
"args": ["path/to/sticker-mcp/dist/stdio.js"]
}
}
}Remote deployment (claude.ai / ChatGPT web)
Copy
.env.exampleto.envand set at leastPUBLIC_BASE_URL(public HTTPS origin) — the widget loads sticker images fromPUBLIC_BASE_URL/images/*, and that origin is written into the widget CSP. Without it, images are inlined as base64 (fine locally, brittle in hosted iframes).docker compose up -d(or runnode dist/server.jsbehind your reverse proxy).Reverse-proxy
https://your-domain/mcp/stickerto the container's:3000(same path), plus/images/*,/admin,/api/*.In claude.ai -> Settings -> Connectors -> add custom connector with URL
https://your-domain/mcp/sticker. IfMCP_AUTH_PASSWORDis set, the connector will use OAuth dynamic client registration and show the password authorization page.
Hosts cache
ui://resources by URI. If you modify the widget, bump the version suffix insrc/widget/sticker-view-html.ts(mcp-app-v2.html→v3...).
Configuration
See .env.example. Summary:
Variable | Default | Meaning |
| (empty) | Public HTTPS origin; enables URL-based images + CSP. Required for web AI clients. |
|
| HTTP port. |
|
| Streamable HTTP MCP route. |
| PUBLIC_BASE_URL origin | CORS allowlist, comma separated. |
| (empty) | Optional password gate for remote connectors. Leave empty to disable auth. |
|
| stickers.json + images/. |
| (empty) | If set, |
OAuth password auth
Set MCP_AUTH_PASSWORD to enable a minimal OAuth Authorization Code flow for remote connectors. The server exposes OAuth discovery and dynamic client registration, so clients that support automatic registration can connect without a manually configured Client ID. During connection, enter the configured password on the authorization page.
Development
npm run dev # HTTP server with reload
npm run typecheck
npm run build # server (tsup) + widget (IIFE) + admin assetsCode layout: src/mcp.ts (tool/resource registration) · src/server.ts (HTTP transport + REST + static) · src/stdio.ts (local transport) · src/storage.ts (JSON + sharp) · src/widget/ (MCP Apps widget) · src/admin/ (standalone admin page).
License
MIT
Available Tools
5 toolsadd_stickerAdd StickerA
Add an image to the sticker library from an existing public http(s) image URL only. Do not pass data:image URIs or base64 here. If you have the user's attached image bytes/file, call create_sticker_upload instead and upload the original bytes directly to this sticker library. Do not use third-party image hosts. If the user already described what the image is, do not spend tokens visually analyzing it; use the user's description to choose the name and tags. If the user did not describe it, inspect the image enough to choose a short name plus 1-8 emotion/scene tags. Supported formats: png / jpeg / gif / webp / avif, max 8MB.
Inputs: name (required), emotions (required), imageUrl (required). Returns: name, method, emotions, maxBytes, +2 more
add_sticker_by_pathAdd Sticker From Local PathA
Add a new sticker from an image file on this computer (local/stdio mode only). Use when the user gives a local file path. Supported: png / jpeg / gif / webp / avif, max 8MB.
Inputs: name (required), emotions (required), filePath (required).
create_sticker_uploadCreate Sticker Upload URLA
Create a one-time upload URL on this sticker library for the user's attached image bytes/file. Use this when adding a sticker from an attachment. After this tool returns, upload the original image bytes directly to uploadUrl with HTTP PUT and Content-Type image/png, image/jpeg, image/gif, image/webp, or image/avif. The sticker is saved as soon as the PUT succeeds; do not call add_sticker afterwards. Do not upload the image to third-party image hosts. Do not curl the MCP endpoint. If the user already told you what the image is, skip visual analysis and use that description for the name and tags. If not, inspect the image enough to name and tag it. The URL expires in 10 minutes.
Inputs: name (required), emotions (required).
list_available_stickersList Available StickersARead-only
List every sticker in the library with its id, name and emotion/scene tags. Call this once early in a conversation (or when send_sticker reports no match) so you know which moods you can express; afterwards you can call send_sticker directly.
Inputs: no named parameters.
send_stickerSend StickerARead-only
Send an expressive sticker (meme/表情包) that renders as an image in the chat. Use this proactively whenever a sticker would make the reply more fun or expressive — reacting to good/bad news, greeting, teasing, celebrating, comforting. Pick query based on the conversation's mood (an emotion or scene word such as 开心 / 委屈 / 干杯 / good night). If you have not seen the library yet in this conversation, call list_available_stickers first and choose a tag from it. If several stickers match, a random one is chosen — you can pass stickerId to force an exact sticker.
Inputs: query (required), stickerId. Returns: id, name, emotions, imageUrl, +2 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: listing, sending, and three ways to add stickers (URL, attachment, local path). The descriptions explicitly delineate when to use each add variant, so an agent should never be unsure which tool fits.
All names follow a verb_noun snake_case pattern, but 'list_available_stickers' and 'create_sticker_upload' are slightly more verbose than the simple 'send_sticker' and 'add_sticker'. Minor deviations exist, but the pattern is still readable and predictable.
Five tools is well within the ideal 3-15 range. Each tool covers a distinct aspect of sticker management—listing, sending, and adding via three different input sources—without unnecessary redundancy.
The core use case (list and send stickers) is fully covered, and adding stickers supports the three common input types. Missing delete/update operations are minor gaps for a sticker library, but they don't hinder the primary functionality.
Maintenance
Related MCP Connectors
A visual brain for your agents: live, reusable UI fragments and skills to pull into code.
Generate AI images, videos, music, SFX & speech in any AI assistant. Results appear inline in chat.
A living memory and world-building layer for your AI: cards, worlds, personas and agent dispatch.
Build and run AI image, video and on-brand ad workflows from chat, with brand kits and share links.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables humans and AI to share the same PWA sticker library, letting the model list, send, and add stickers through MCP while people use the same drawer.MIT
- AlicenseNot gradedqualityBmaintenanceLocal-first custom sticker library for MCP agents, enabling image import, auto-tagging, search, and context-aware retrieval via standard MCP tools.39MIT
- FlicenseNot gradedqualityCmaintenanceEnables users to upload and tag stickers and GIFs through a web page, then lets Claude browse, select, add, retag, or delete them so it can send an image matching the mood of a conversation. Returns ready-to-paste markdown image links that render in markdown-capable chat interfaces.3-
- AlicenseNot gradedqualityCmaintenanceEnables users to import, tag, search, and retrieve custom stickers by context through MCP, with optional vision model tagging and backup/restore, all local-first and portable.MIT