16 tools with complete schemas and descriptions. Naming follows verb_noun convention (list_, create_, update_, delete_). Descriptions are present but generic (avg ~80 chars, below 194-char baseline). Parameters have types and descriptions. Output schemas not documented. Error handling minimal, no recovery guidance or actionable error messages. Missing tool annotations (readOnlyHint, destructiveHint). Risk classification present in metadata but not in tool descriptions themselves.
Authenticate and store a Microsoft To Do account
Create a new checklist item in a task
Create a new To Do list
Create a new task in a To Do list
Delete a stored Microsoft To Do account
Delete a checklist item
Delete a To Do list
Output schemas not documented. LLMs cannot infer what fields to expect from tool responses (e.g., formatTask returns id, title, status, dueDate, etc.). Without documented output schemas, agents cannot plan downstream tool calls or extract required data.
Destructive tools (delete_account, delete_list, delete_task, delete_checklist_item) lack confirmation or dry-run support. Agents can irreversibly delete data without a safety gate. No tool annotations (destructiveHint) to signal risk to the LLM.
Error handling returns raw Graph API errors (formatGraphError) without recovery guidance. Example: 'PATCH /me/todo/lists/xyz/tasks/abc failed (400): Invalid request' tells the LLM nothing about what to do next. No categorization (retryable vs user-fixable vs fatal).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Delete a task
Get details of a specific task
List stored Microsoft To Do accounts
List all checklist items in a task
List all To Do lists for an account
List all tasks in a To Do list
Set the default stored Microsoft To Do account
Update a checklist item
Update an existing task
Tool descriptions are generic and under 100 chars (e.g., 'List all To Do lists for an account'). Baseline is 194 chars. Missing context on WHEN to use each tool, dependencies, and what the response contains. LLMs cannot distinguish between list_lists and list_tasks without reading parameter names.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk metadata exists in the provided data but is not exposed in tool definitions. LLMs cannot infer which tools are safe to retry or which modify state without reading descriptions.