MCP server for sending notifications through multiple channels (DingDing, Bark)
Two tools with complete schemas and basic descriptions, but significant gaps in parameter documentation and error guidance. send_notification has 4 parameters but only 2 have descriptions; list_channels has no parameters. Descriptions are present but brief (avg 80 chars, below 194-char baseline). No output schema documented. Error handling returns text strings rather than structured guidance. Tool names follow verb_noun pattern (good), but parameter naming lacks consistency (channel vs msgtype). No tool annotations (readOnlyHint/destructiveHint). STDIO transport caps protocol readiness at 50.
列出当前已注册的所有通知渠道。
通过指定通知渠道发送一条通知。已注册渠道见 list_channels;默认渠道为 dingding。
send_notification: 2 of 4 parameters lack descriptions. 'title' and 'msgtype' have descriptions, but 'channel' description is generic ('通知渠道名称,如 dingding') and 'msgtype' enum values (text|markdown) are not formally declared as an enum constraint in the schema.
No output schema documented for either tool. Callers cannot predict response structure. send_notification returns 'Already sent via channel [X]' (text), list_channels returns 'Registered channels: X, Y, Z' (text). LLMs cannot extract structured data for downstream tool chaining.
Error handling returns plain text error messages ('Error: <message>') with isError=true flag, but does not guide recovery. E.g., 'unknown tool: X' gives no hint to try list_channels first. Missing actionable error guidance per pattern:recovery-guide.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | <=2025-11-25 | v2 |
send_notification accepts 'msgtype' as free-form string with description 'text or markdown, default markdown', but schema does not declare enum constraint. LLMs may pass invalid values like 'html' or 'json'. Constraint must be in schema, not just description text.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). send_notification is destructive (sends external notification) but lacks destructiveHint. list_channels is read-only but lacks readOnlyHint. Agents cannot infer safety properties.