A Model Context Protocol server for sending WeChat messages through automation. Supports sending text messages and scheduling messages with delays to WeChat contacts or groups.
This server has significant definition quality gaps. Both tools have descriptions present but they are minimal (under 100 chars), lack context about when to use them, and do not explain consequences or return values. Parameter descriptions are present but extremely brief. Most critically, no output schemas are documented, the code shows hardcoded result structures in the handlers, but these are not declared in tool definitions, violating the pattern:tool requirement. Error handling exists but is generic (200-char error messages). Security concerns: the tool accepts a contact_name as a string with no validation, no normalization guidance, and no mention of what formats are accepted. The implementation imports a wechat_controller module that is not provided, making actual validation impossible to assess. Tool composition is minimal (only 2 tools) with no support for discovery, listing contacts, or other prerequisite operations. Naming is verb-forward (send_, schedule_) which is good, but parameter naming could be more explicit (contact_name could accept name, ID, phone, or email, ambiguous).
安排在延迟后发送微信消息
向微信联系人或群组发送文本消息
No output schema documented for either tool. Code shows hardcoded result structures with 'content' array and 'type'/'text' fields, but this is not declared in inputSchema or a separate outputSchema field. LLMs cannot predict return structure and must infer from description alone.
Tool descriptions are minimal (under 100 chars) and lack context: no mention of what the tool returns, when to use it vs the other tool, or consequences (this is a WRITE operation, should explicitly state 'This sends an actual message to the specified contact').
contact_name parameter lacks type clarity and validation rules. Ambiguous what format is accepted: is it a WeChat username, display name, phone number, or group ID? Parameter description should specify 'The exact WeChat contact name or group name as it appears in the WeChat app, case-sensitive' or similar. Current description 'The WeChat contact name or group name' is too vague.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 43 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 44 | 2024-11-05+ | v1 |
No error guidance in descriptions. What happens if contact_name does not exist? Can the agent retry? Should it list available contacts first? Error handling in code returns generic strings like 'Failed to send message to {contact_name}', not actionable for recovery.
schedule_wechat_message has no documented behavior for edge cases: What if delay_seconds is negative? Zero? Very large (days)? No min/max constraints declared. 'delay_seconds: integer, 1 - 86400 seconds'). Current description is silent.
No idempotency guidance. Agents retry on transient failures, if send_wechat_message is called twice with the same parameters due to a timeout, does the contact receive two messages or one? This is a WRITE operation; idempotency must be documented (likely: non-idempotent, agent must dedup upstream).
No tool composition or discovery support. No tool to list available contacts, search contacts, or validate a contact name before sending. This forces agents to blindly guess contact names and retry on failure. Per pattern:tool-chain, output should contain references downstream tools need; input should accept natural identifiers (names are ok, but no search mechanism provided).
No security scoping declared. Tools perform WRITE actions (sending messages) but no mention of permissions, audit trails, or access control. Per pattern:scope-declaration, tools should declare required permissions (e.g. 'Requires: write:wechat_messages, user must be authenticated'). None present.