An MCP server that provides todo list management tools for the Microsoft Agent Framework. Exposes CRUD operations for todo items stored in a database.
Five tools with clear verb-noun naming (add_, get_, update_, complete_, delete_) and basic descriptions. All tools have input schemas with type definitions and parameter descriptions. However, descriptions are minimal (10-50 chars), lacking context on WHEN to use each tool, prerequisites, or what the LLM should expect. Output schemas are not documented, responses are free-text strings rather than structured objects. Error handling is present but generic ('not found' messages without recovery guidance). No pagination support on get_todo_items despite being a list operation. Missing tool annotations (destructiveHint for delete_todo_item, readOnlyHint for get_todo_items).
Adds a to-do item to database.
Completes a to-do item in the database.
Deletes a to-do item from the database.
Gets a list of to-do items from database.
Updates a to-do item in the database.
Descriptions are too brief (10-50 chars) and lack context. 'Adds a to-do item to database' does not explain WHEN to use this vs other tools, what the return value contains, or whether the operation is idempotent. LLMs need 50-200 char descriptions with WHAT, WHEN, and WHAT-IT-RETURNS.
Output schemas are not documented. All tools return free-text strings (e.g., 'Todo item added: ...'). LLMs cannot plan downstream calls or extract structured data. Responses should be JSON objects with typed fields (id, text, isCompleted, timestamp).
get_todo_items lacks pagination (no limit, offset, or page parameters) and returns all items as a flat list. If the database grows, this will blow the context window. Should accept limit (default 20, max 100) and offset parameters, return total_count and next_offset.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | <=2025-11-25 | v2 |
Error messages are generic ('not found') without recovery guidance. Per pattern:recovery-guide, errors should tell the LLM what to do next. E.g., 'Todo item with ID 5 not found. Call get_todo_items() to see available IDs.'
Missing tool annotations. delete_todo_item should have destructiveHint=true; get_todo_items should have readOnlyHint=true; add_todo_item and update_todo_item should have idempotentHint=false (or true if they are). Annotations help LLMs reason about side effects.