MCP Apps server for Upvote.club — interactive task progress UI in Claude
Single tool with clear naming (get_task_status) and good description (89 chars, action-oriented). Input schema is properly typed with Zod validation and includes minItems constraint. However, output schema is completely undocumented, the tool returns structured data but LLMs cannot see what fields to expect. No error handling guidance. Tool annotations present (readOnlyHint, openWorldHint) but incomplete. Missing parameter descriptions for task_ids array items and no guidance on what constitutes valid task IDs or expected response structure.
Get status and progress of Upvote.club tasks with an interactive progress card UI.
Output schema completely undocumented. Tool returns structured data (tasks array with id, type, status, progress_percentage, actions_completed, actions_required fields) but LLMs cannot see field definitions, types, or constraints. Forces LLMs to guess at response structure.
Parameter 'task_ids' lacks actionable description. Current: 'Task IDs from create_task', does not explain format, valid range, or what happens if IDs are invalid. Should specify: 'Comma-separated positive integers (1-999999). Returns 404 if any ID not found.'
No error handling guidance. Tool can fail (HTTP 404, 500, auth errors) but returns generic toolResult(data, true) without explaining to LLM what went wrong or what to do next. Missing recovery hints like 'If task not found, verify task_ids with list_tasks().'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Tool description does not explain when to use it vs other task-related tools. Mentions 'interactive progress card UI' but does not clarify: Is this for polling? Real-time updates? Batch status checks? When should an agent call this instead of create_task or list_tasks?
No pagination or result limits documented. If task_ids array accepts 1000+ IDs, response could be massive. Tool description should state: 'Accepts up to 100 task IDs per call. Returns full status for each.'