MCP server for searching meme/emoticon packages from multiple Chinese sources with concurrent search and deduplication
Two tools with partially documented schemas and descriptions. search_meme has a well-structured input schema with 4 parameters (keyword required, sources/page/limit optional) and clear descriptions. list_sources has an empty input schema but minimal description. Both tools have acceptable descriptions (Chinese language), but lack output schema documentation, error handling guidance, and are missing critical features like pagination metadata. Tools are appropriately named with action verbs (search_, list_). No tool annotations (readOnlyHint, etc.) despite Risk declarations. Code shows stderr logging for debugging but no structured error recovery hints. Parameters lack constraints (enums, min/max ranges) and format specifications.
列出所有可用的表情包数据源及其信息
搜索表情包。支持从多个源并发搜索,返回去重后的结果列表。
list_sources has minimal description (10 chars: '列出所有可用的表情包数据源及其信息') which is adequate but lacks context for LLM selection. Should clarify: when to call, what the return structure contains, how to use it downstream.
Output schemas are completely undocumented. search_meme returns JSON with 'Memes' array and 'DurationMs' field (visible in code), but LLMs cannot see this. list_sources returns source info array but structure is not documented. LLMs need explicit output schema to plan downstream calls and extract required fields.
No pagination guidance. search_meme accepts 'page' and 'limit' parameters but does not document: (a) total count in response, (b) next_cursor or has_more flag, (c) maximum limit value, (d) default pagination behavior. Without pagination metadata, agents cannot determine if results are complete or if more fetching is needed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
'sources' parameter in search_meme lacks enum constraints. Description mentions 'qudoutu, doutula, pdan, sougou, douyin, doutub' but does not declare them as an enum. LLMs will hallucinate invalid source names instead of selecting from the documented list. Use JSON Schema enum or strict format constraint.
Numeric parameters ('page', 'limit') lack min/max constraints and defaults. Code sets default limit to 20 but schema does not document this. Should specify: page >= 1, limit 1-100 (or actual API bounds), and clarify defaults in descriptions.
Error handling returns plain error text without recovery guidance. Code shows 'parameter parsing failed' and 'keyword is empty' but LLMs cannot act on these. Should return: category (retryable/user-fixable/fatal), invalid value, constraint violated, and recovery hint (e.g. 'Try using search_meme with a valid Chinese keyword like 猫 or 狗').
No tool annotations despite clear risk profiles. Both tools are READ_ONLY but schema lacks readOnlyHint annotation. This prevents agents from understanding safety and composition constraints. Annotations (readOnlyHint, destructiveHint, idempotentHint) are current MCP spec features and should be used.