Schedule a homework task that opens a fresh Claude Code session in a new terminal window at a future due time.
homework-mcp has well-structured tool definitions with complete input schemas and clear descriptions. All three tools are properly registered with JSON Schema validation. However, output schemas are not documented, parameter descriptions lack depth (e.g., no format constraints or validation rules), and error handling lacks recovery guidance. The tool names follow verb_noun convention (homework_schedule, homework_list, homework_cancel) which is good, but descriptions could be more concise and action-oriented. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present despite homework_cancel being reversible and homework_list being read-only.
Cancel a scheduled homework task by id. Throws if id does not exist or task is already firing/fired/cancelled.
List homework tasks. Defaults to status='scheduled' ordered by due_at ascending. Use filter.status to inspect 'firing' (crash candidates) / 'fired' / 'cancelled'.
Schedule a homework task. At due_at, a fresh Claude Code session opens in a new terminal window with your prompt pre-loaded. cwd is auto-captured from the calling process.
Output schemas not documented. LLMs cannot plan downstream operations or extract required fields. homework_schedule returns {id, due_at}, homework_list returns array of {id, due_at, title, status, cwd}, homework_cancel returns {ok: true}, none are formally declared in tool definitions.
Parameter descriptions lack actionable constraints. 'due_at' says 'ISO 8601 datetime with timezone offset, at least 5 minutes in the future' but does not specify format pattern or example. 'prompt' has no length limits or content guidelines. Validation rules are enforced in code but not exposed to LLM.
No tool annotations. homework_cancel is reversible (can be undone by re-scheduling), homework_list is read-only, but neither declares destructiveHint or readOnlyHint. Agents cannot infer safety properties.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Error messages in code are developer-friendly but lack recovery guidance. 'task not found: {id}' does not suggest calling homework_list to discover valid IDs. 'task is already {status}' does not explain what states allow cancellation.
homework_list filter parameter is optional but behavior differs: defaults to status='scheduled' if omitted. This implicit default is not documented in the parameter description, forcing LLMs to guess or experiment.