MCP server for Bark push notification service, enabling AI clients to send iOS push notifications, register devices, and manage Bark servers
Five tools with complete schemas and descriptions, but significant quality gaps. All tools have descriptions (10-50 chars, below the 50-200 char baseline for LLM optimization). Schemas are present and properly typed, but parameter descriptions are minimal and lack actionable guidance. No error handling documentation, no enum constraints for constrained inputs (e.g., 'level' accepts 'critical|active|timeSensitive|passive' but is a free-form string), and no output schema documentation. Tool names follow verb_noun convention (push, device_register, device_check, server_ping, server_info) but descriptions are terse Chinese text that doesn't explain WHEN to use each tool or what happens on failure. Parameter descriptions lack format/range guidance (e.g., 'volume(0-10)' is in description but not enforced as a constraint). No idempotency hints, no recovery guidance for errors.
检查设备是否已注册
注册新的推送设备
发送推送通知到 iOS 设备
获取 bark-server 服务器信息
检查 bark-server 是否可连通
Descriptions are terse (10-50 chars) and lack LLM-optimized guidance. 'Check device is registered' does not explain when to call this vs other tools, what happens on success/failure, or what the return value means.
Constrained inputs (e.g., 'level: critical|active|timeSensitive|passive') are documented in description text but not declared as enums in the schema. LLMs cannot parse free-form string constraints and will hallucinate invalid values.
No output schema documentation. Callers do not know what fields to expect from push, device_register, device_check, server_ping, or server_info responses. This breaks tool chaining and forces LLMs to guess at response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 47 | 2026-07-28+ | v2 |
No error handling guidance. If push fails (invalid device key, network error, server down), the tool returns a generic error. LLMs do not know whether to retry, ask the user, or try a different tool.
Parameter descriptions lack format/range guidance. 'volume(0-10)' is mentioned in description but not enforced as a constraint. 'archive: true|false' and 'call: true|false' are strings, not booleans, creating type confusion.