Rappi food delivery tools for searching restaurants, browsing menus, managing a cart, and placing orders in Colombia (prices in COP).
Server has 23 tools with consistent naming (verb_noun pattern) and descriptions present for all. However, descriptions are often generic or lack actionable context for LLM selection. Parameter schemas are present but many lack detailed descriptions (e.g., 'offset', 'limit' are minimally documented). Output schemas are not documented. Error handling guidance is absent. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Composition is reasonable, tools chain logically, but descriptions don't explain prerequisites or when to call each tool vs. alternatives.
Add a store to favorites.
Add a product to the shopping cart with optional toppings. Price and product details are auto-fetched.
Browse nearby restaurants without a search query. Returns paginated list of available stores.
Preview or place an order. Use confirm=false to preview, confirm=true to place the order.
Get current shopping cart contents with totals, charges, and store information.
Get list of favorite stores saved by the user.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what does get_restaurant_menu return? What fields are in each item?). Violates pattern:tool and pattern:response-shaper.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (READ_ONLY, WRITE, IRREVERSIBLE). LLMs cannot infer safety properties without explicit hints. Violates current MCP spec (2026-07-28).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Get past orders from memory. Returns order details including items, totals, and dates.
Get the current status and ETA of the active order being tracked.
Get current ordering context: user profile, active address, cart contents, active orders, memory summary, and taste profile.
Get user preferences including dietary restrictions, allergies, and default tip.
Get available toppings/customizations for a product. MUST be called before add_to_cart if product has_toppings=true.
Get personalized recommendations based on user's taste profile and context. Returns scored suggestions including usual orders, time-based, similar products, and new stores.
Get the full menu for a restaurant, organized by categories (corridors). Only works for restaurant store_type.
Get the user's computed taste profile including category preferences, store type preferences, price range, time patterns, topping preferences, top products, top stores, spending, and dietary restrictions.
Quickly reorder all items from a past order.
Remove a store from favorites.
Remove a product from the shopping cart.
Score all items in a restaurant menu by taste match. Returns items ranked by cosine similarity to user's taste vector.
Search for products within a specific store (Turbo, markets, pharmacies). Use when get_restaurant_menu returns empty or for non-restaurant stores.
Search for restaurants, stores, and products by query. Returns all store types (restaurants, Turbo, markets, pharmacies).
Save a user preference (dietary restriction, allergy, default tip, etc.).
Set the delivery tip amount. Persists on Rappi's server.
Search across cached products by semantic meaning (if embeddings enabled) or keyword matching. Understands natural language queries like 'something refreshing'.
Parameter descriptions are minimal. 'offset' and 'limit' appear in 6+ tools with only 1-line descriptions. LLMs need to understand pagination semantics, default behavior, and constraints (e.g., 'offset: Pagination offset (default 0)' lacks min/max bounds). Violates pattern:tool-description.
No error handling guidance. Tools like checkout (IRREVERSIBLE) and add_to_cart lack recovery instructions. If checkout fails, what should the LLM do? Retry? Ask user? Violates pattern:recovery-guide and pattern:error-classification.
Descriptions lack actionable context for LLM selection. E.g., 'Get current shopping cart contents with totals, charges, and store information' doesn't explain when to call get_cart vs. get_ordering_context (which also returns cart). Violates pattern:tool-description.