StreamShortcut MCP Server for Cloudflare Workers - A lightweight Shortcut MCP with one tool and eight actions for managing Shortcut stories, epics, and comments
Single tool 'shortcut' with action dispatch pattern. Tool has a description and input schema with 12 parameters, but exhibits significant structural issues: (1) Tool name 'shortcut' is a noun, not a verb, violates naming convention and provides no hint about what the tool does. (2) Input schema uses union type for 'query' parameter and overloads parameter semantics across 8 actions, parameters are context-dependent and descriptions don't clearly explain which params apply to which actions. (3) Parameter descriptions are terse (20-40 chars) and lack actionable detail on valid ranges, formats, or interdependencies. (4) No output schema documented, LLMs cannot predict response structure. (5) Error handling returns only text in ToolResult but provides no recovery guidance or categorization. (6) Single monolithic tool violates composition pattern: should be split into search_stories, get_story, update_story, add_comment, create_story, get_epic, call_api, and help_shortcut.
StreamShortcut - A single tool with action dispatch supporting eight operations: search stories, get story details, update story properties, add comments, create new stories, get epic details with associated stories, raw REST API access, and help documentation
Tool name is a noun ('shortcut'), not a verb. Violates verb_noun naming convention. LLMs cannot infer action from the name alone.
Single monolithic tool with 8 actions violates single-responsibility principle. 'shortcut' does search, get, update, comment, create, epic, api, and help, should be 8 separate tools (search_stories, get_story, update_story, etc.).
Parameter 'query' uses union type (string | object) with action-dependent semantics. Not all params apply to all actions. Descriptions do not clearly state which params are required/used for each action.
No output schema documented. LLMs cannot predict response structure (fields, types, pagination). Returns only text content.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | - | v1 |
Parameter descriptions are terse (20-40 chars) and lack actionable constraints. E.g. 'Story or epic ID' doesn't explain valid formats ('704', 'sc-704', URL). No examples of filter object structure for 'query' param.
Error handling returns plain text errors but does not categorize as retryable/user-fixable/fatal or provide recovery guidance. Stack traces and missing IDs offered no context for LLM action.
'owner' parameter accepts string ('me', username, mention name) but no enum or alternatives listed. LLMs may guess wrong format.