Let your AI manage your real grocery list — unofficial Listonic MCP server
Server has 5 well-named tools with clear verb-noun patterns (get_*, add_*, edit_*, delete_). Descriptions are present and contextual (avg ~150 chars), explaining WHEN to use each tool. Input schemas are properly typed with JSON Schema. However, output schemas are completely undocumented, no return type specifications visible. Error handling is minimal; tools will fail silently on auth/API errors without recovery guidance. Parameter descriptions are adequate but lack format constraints (e.g., no enum for list_id validation, no min/max for batch sizes). The server instructions are excellent, but individual tool descriptions could be more concise and LLM-optimized.
Add one or MANY items in a single call — batch whole recipes, don't loop.
Remove items entirely from the list.
Edit one or MANY items in a single call — most often to check/uncheck while shopping ("got the milk").
Fetch the grocery list. Call this FIRST before editing/deleting, to get ItemIDs. Checked items ([x]) = the user most likely already HAS them at home. Unchecked items ([ ]) = still to buy.
All shopping lists on the account, with their ListIDs. Use when the user has several lists ("weekend BBQ", "pharmacy") — every other tool takes an optional list_id to target one; without it they use the default list (the pinned --list-id, or the account's first list).
No output schemas documented. Tools return strings (e.g., _fmt_items returns formatted text), but LLMs cannot plan downstream calls or extract structured data without knowing return types. Responses should be JSON objects with typed fields.
Error handling is absent. Tools call resp.raise_for_status() which will throw on API failures, but no try-catch or recovery guidance. LLMs receive raw HTTP errors with no actionable next steps (e.g., 'login failed' should suggest 'check credentials and restart').
list_id parameter accepts free-form strings with no validation or enum. LLMs cannot know valid list IDs without calling get_lists first. Parameter description should state 'From get_lists response; empty = default list' more explicitly.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
add_items and edit_items accept unbounded arrays with no documented limit. An LLM could attempt to add 10,000 items in one call, causing API timeouts or rate-limit failures. Specify max array length (e.g., 50 items per call).
Destructive operations (delete_items) lack confirmation or dry-run support. An agent could accidentally delete all items without user approval. Consider adding a 'confirm' parameter or a separate 'preview_delete' tool.