Server has 6 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-100 chars, mostly adequate) and input schemas with type definitions. However, parameter descriptions are sparse or generic, output schemas are undocumented, and error handling lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint). Naming follows verb_noun convention (listTasks, createTask, completeTask, listProjects, createProject, listLabels), good. But parameter naming inconsistencies (projectId vs project) and missing constraints (priority 1-4 not enforced in schema, dueString format not specified) reduce clarity. No pagination support visible for list operations despite Todoist API supporting it. Average tool score: 58/100.
Mark a task as completed.
Create a new project in Todoist.
Create a new task in Todoist with various optional parameters.
List all labels in your Todoist account. Labels help categorize and filter tasks.
List all projects in your Todoist account.
List tasks from Todoist. You can filter by project, label, or use a custom filter string.
Output schemas undocumented. No visible schema definitions for tool responses (listTasks, createTask, listProjects, listLabels, createProject, completeTask). LLMs cannot plan downstream calls or extract required fields without knowing response structure.
No pagination support in list tools. listTasks, listProjects, listLabels lack limit/offset/page parameters and total count in response. Large result sets will blow context window.
Parameter constraints not enforced in schema. createTask priority is 1-4 but schema shows type:number with no min/max. dueString format ('today', 'tomorrow', 'next Monday') documented in description but not as enum or pattern. LLMs will hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
No error recovery guidance. Error responses (visible in code: 'Failed to get connection credentials', 'Access token not found') are raw messages without actionable next steps. LLM cannot self-correct or retry intelligently.
No tool annotations. Tools lack readOnlyHint (listTasks, listProjects, listLabels are read-only) and destructiveHint (completeTask, createTask, createProject modify state). LLMs cannot infer safety/idempotency without explicit hints.