Integration with Oda for searching products and managing your shopping cart.
The server registers 18 tools with explicit definitions in src/server.ts. Most tools have descriptions and input schemas visible. However, critical gaps exist: (1) many input schemas use Zod validators that are not fully serialized to JSON Schema format in the MCP registration call, making runtime schema validation unclear; (2) output schemas are completely undocumented, no tool declares what fields or structure it returns; (3) error handling is minimal, tools throw errors without guidance on recovery; (4) some tools (check_login, cart_get_contents, saved_lists_get_all, delivery_get_slots) have empty input schemas but no documented output structure. Average tool score across 18 tools is ~62, reflecting present-but-incomplete documentation.
Remove all items from the shopping cart. Destructive: call only after the user has explicitly asked to clear the cart in the current conversation.
Get the current shopping cart: totals (display_price, item count) and items, with recipe grouping annotated per line.
Read Oda's current cart recommendations as a normalized product list. Read-only; recommendations may be empty when the cart is empty. Set exclude_in_cart to drop products already in the cart.
Remove a product from the cart by product ID. Returns the cart totals and the product's remaining cart lines.
Set the ABSOLUTE quantity of a product in the cart (add/remove apply relative deltas). Counts all cart lines for the product, recipe lines included. Quantity 0 removes it. Returns the cart totals and the product's cart lines.
No output schemas documented for any tool. LLMs cannot plan downstream tool calls or know what fields to extract from responses.
Input schemas use Zod validators but are not explicitly converted to JSON Schema format in registerTool() calls. Schema clarity at registration time is unclear; Zod objects may not serialize properly to MCP protocol.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 58 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 42 | - | v1 |
Check if the user is logged in to Oda.
List upcoming delivery slots grouped by day, with per-slot ordering deadlines and prices. Read-only: no slot can be selected and no order can be placed through this tool.
Add a product to the cart by product ID.
Search for products by keyword or filter.
Read the user's most frequently purchased products from recent Oda order history. Read-only; only use when the user asks for purchase-history-based suggestions.
Add all ingredients from a recipe to the cart with quantities for a specified number of portions.
Get detailed information about a specific recipe, including ingredients with product mappings and cooking instructions.
Search for recipes by keyword or filter.
Add a product to a saved Oda shopping list. This changes the saved list: call only after the user has explicitly confirmed the specific addition in the current conversation.
Add every product and quantity from a saved Oda shopping list to the cart. This changes the cart: call only after the user has explicitly confirmed the specific list in the current conversation.
Remove a product from a saved Oda shopping list. This changes the saved list: call only after the user has explicitly confirmed the specific removal in the current conversation.
Get the user's saved Oda shopping lists and summary counts. Read-only; does not expose private list-sharing links.
Get the products and quantities in a saved Oda shopping list. Read-only; use a list ID from saved_lists_get_all.
product_search and recipe_search descriptions are vague ('Search for products by keyword or filter'). No guidance on what filters are available, pagination behavior, or result limits.
Tools with empty input schemas (check_login, cart_get_contents, saved_lists_get_all, delivery_get_slots) lack documented output structure. Users and LLMs cannot know what fields to expect.
Error handling is minimal. Tools throw errors with no recovery guidance. E.g., if product_search fails, the LLM has no hint to retry or try a different query.
Confirmation parameters (e.g., confirmation: 'UPDATE SAVED LIST', 'CLEAR CART', 'ADD SAVED LIST TO CART') are hardcoded string literals. While this guards against accidental misuse, descriptions do not explain WHY confirmation is required or how the LLM should obtain user consent before calling.
product_add and cart_remove_item descriptions do not document pagination or result limits. product_search lacks page size constraints; recipe_search silent on filter details.