A watchOS app that enables voice dictation and task management on Apple Watch by connecting to Craft via MCP (Model Context Protocol). The iPhone app handles OAuth authentication once, then the Watch app communicates directly with Craft using stored credentials.
Craft Watch exposes 4 tools with minimal definition quality. All tools accept a single 'command' string parameter with no validation, enum constraints, or format guidance. Descriptions are present but generic (50-80 chars), lacking WHEN to use each tool, prerequisites, or error recovery guidance. No input schemas are visible in the source, only parameter names and descriptions. No output schemas documented. Tools 3 and 4 are aliases (read/write) that duplicate tools 1 and 2, violating single-responsibility and composition patterns. No error handling guidance, no pagination, no structured output examples. The server treats Craft CLI as a black box, passing raw command strings without sanitization or injection protection.
Runs a Craft read command (e.g., 'tasks list --scope active'). Executes read-only CLI-style commands against Craft.
Runs a Craft write command (e.g., 'tasks add --markdown "Call Ryan"'). Executes state-modifying CLI-style commands against Craft.
Alias for craft_read. Runs a Craft read command.
Alias for craft_write. Runs a Craft write command.
No input schemas visible in source code. All tools accept a bare 'command' string with no type validation, enum constraints, format patterns, or length limits. LLMs cannot infer valid command syntax.
Duplicate tools (read/write) are aliases for craft_read/craft_write. This violates single-responsibility and forces LLMs to reason about which variant to use. Remove aliases or merge into one canonical set.
No output schemas documented. LLMs cannot predict what fields Craft CLI returns or plan downstream tool calls. Responses are opaque strings.
Command string parameter lacks format guidance, examples, or constraints. Descriptions mention 'e.g. tasks list --scope active' but do not document valid command syntax, required flags, or error cases. LLMs will hallucinate invalid commands.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 36 | <=2025-11-25 | v2 |
No error handling guidance. If a command fails (invalid syntax, permission denied, resource not found), the tool provides no recovery path. LLMs cannot self-correct or ask the user for clarification.