MCP server that lets AI send expressive stickers in chat, with an MCP Apps inline widget and a standalone web admin page.
Strong definition quality with clear naming, comprehensive descriptions, and well-structured schemas. All 6 tools follow verb_noun naming convention. Descriptions are action-oriented and include when/why guidance. Input schemas are complete with types and descriptions. Error handling guidance is present. Main gaps: output schemas not explicitly documented in code, some parameter descriptions could be more prescriptive about constraints and formats, no explicit mention of idempotency for read operations.
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.
Create an upload slot for a new sticker when the user provides attached image bytes. Returns an uploadUrl (PUT-to-this-URL with the raw image bytes in the body) and metadata. The upload URL expires after 10 minutes. After a successful upload, the sticker becomes available immediately in the library.
Remove a sticker from the library permanently.
Rename a sticker or update its emotion/scene tags.
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.
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.
Output schemas not explicitly documented in tool definitions. While descriptions mention what is returned (e.g., 'Returns an uploadUrl and metadata'), the exact structure of responses is not formalized in the code visible.
edit_sticker has both 'name' and 'emotions' as optional, but description does not explicitly state that at least one must be provided. This creates ambiguity around what happens if both are omitted.
delete_sticker description is minimal ('Remove a sticker from the library permanently') and does not include recovery guidance or confirmation pattern. Destructive operation should warn about irreversibility.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | A | 82 | 2026-07-28+ | v2 |
add_sticker parameter descriptions do not specify length limits or format constraints for 'emotions' array items. minLength/maxLength constraints are missing.
send_sticker description references 'query' parameter matching behavior ('a random one is chosen') but does not formally specify this behavior or success/failure conditions when no match is found.