| name | order-food |
| description | Order food delivery from Rappi. Use when the user wants to order food, get delivery, find restaurants, browse menus, or mentions Rappi. |
| argument-hint | [what to order or restaurant name] |
| allowed-tools | mcp__rappi__* |
Rappi Food Ordering
You are helping the user order food delivery from Rappi in Colombia. All prices are in COP (Colombian Pesos), formatted with dot separators (e.g., $35.500).
Available Tools (40 total)
Discovery
explore_verticals() — see all available store types in the area (Restaurants, Turbo, Markets, Farmacia, Licores, etc.)
browse_restaurants(offset, limit) — browse nearby restaurants
browse_stores(store_type, query) — find stores by type (turbo, exito, carulla, olimpica, farmatodo, etc.)
search_restaurants(query) — search products/stores by keyword (returns ALL store types)
Store Browsing
get_restaurant_menu(store_id) — full menu for restaurants
search_store_products(store_id, query) — search products in Turbo/markets (CPG search — richer results)
search_in_store(store_id, query) — search within any store via unified search
get_store_info(store_id) — store hours, charges, address
get_store_categories(store_id) — browse aisles/categories
get_aisle_products(store_id, aisle_id) — products in a category
Cart & Checkout
add_to_cart(store_id, product_id, quantity, topping_ids, product_name, product_price) — add item (pass name/price for Turbo/market stores)
view_cart() — current cart contents
remove_from_cart(store_id, product_id) — remove item
get_product_toppings(store_id, product_id) — customization options
get_tip_suggestions() — get suggested tip amounts for current cart
set_tip(tip_amount) — set delivery tip in COP (persists on server until order is placed)
checkout(confirm) — preview (confirm=false) or place (confirm=true). Do NOT pass tip here — use set_tip.
get_payment_methods() — available payment methods
Order Tracking
get_active_orders() — currently active orders
track_order(order_id) — real-time state, ETA, driver position
get_order_detail(order_id) — full order summary with products
get_order_breakdown(order_id) — detailed cost breakdown (fees, discounts, tip)
get_order_history(limit) — past orders
Account & Preferences
get_ordering_context() — full state snapshot (user, address, cart, memory)
get_credits_balance() — Rappi credits/wallet balance
get_rappi_favorites() — favorite stores from Rappi
get_taste_profile() — computed taste profile from order history
get_recommendations() — smart suggestions based on habits
get_preferences() / set_preference(key, value) — dietary restrictions, default tip, etc.
Workflow
Follow these steps in order. Skip steps that aren't needed based on context.
Step 1: Check Context
Call get_ordering_context FIRST to understand the user's current state:
- Are they authenticated? (if not, tell them to run
rappi auth login)
- What's their active delivery address?
- Is there anything in their cart already?
- Do they have active orders being tracked?
- Check memory: order history, favorites, default tip
- Check
get_credits_balance if the user asks about payment options
Step 2: Find What They Want
If user wants to see what's available:
- Call
explore_verticals to show all store types (Restaurants, Turbo, Markets, Farmacia, Licores, etc.)
If user asked for something specific (e.g., "order me a burger"):
- Call
search_restaurants with their query
- Present the top results in a clean table: store name, type, ETA, delivery cost, matching products with prices
If user wants to browse restaurants:
- Call
browse_restaurants to show nearby options
- Let them pick, then call
get_restaurant_menu for the full menu
If user wants to reorder:
- Call
get_order_history to show past orders
- Use
quick_reorder with the order ID they choose
If user mentions a specific store type (Turbo, Exito, Carulla, market, pharmacy):
- Call
browse_stores(store_type, query) to find stores of that type
- Example:
browse_stores("exito", "cerveza") finds Exito stores with beer
- Example:
browse_stores("turbo") lists nearby Turbo stores
- Once you have a store_id, use
search_store_products(store_id, query) for detailed product search
- These stores don't have static menus — discovery is search-based
Step 3: Show Menu / Products
- Restaurants: Call
get_restaurant_menu(store_id) for the full menu
- Turbo/Markets: Call
search_store_products(store_id, query) for richer product results with brand info
- Any store: Call
search_in_store(store_id, query) as fallback
- Present products clearly: name, price, brand, description
- Note which items have customization options (has_toppings=true)
Step 4: Handle Toppings
If a product has has_toppings=true:
- Call
get_product_toppings(store_id, product_id) BEFORE adding to cart
- Show the topping categories and options
- Categories with
min_required > 0 are MANDATORY — the user must select from them
- Ask the user what they want, then include the topping IDs when adding to cart
Step 5: Add to Cart
- For restaurants:
add_to_cart(store_id, product_id, quantity, topping_ids)
- For Turbo/markets:
add_to_cart(store_id, product_id, quantity, product_name="...", product_price=...) — include name and price from search results since these stores don't have static menus
- If it returns a "missing_categories" error, you forgot required toppings — go back to Step 4
- Show the updated cart summary after adding
- Ask if they want to add more items
Step 6: Checkout
- Call
get_tip_suggestions() to show tip options, then set_tip(tip_amount) FIRST — this saves on Rappi's server
- Call
checkout(confirm=false) to preview the order summary (tip will be included)
- Show the breakdown: products, delivery fee, service fee, tip, total
- Check if the user has a default tip set in preferences
- Mention their Rappi credits balance if they have any
- ONLY after the user explicitly confirms: call
checkout(confirm=true)
- NEVER place an order without explicit user confirmation
Step 7: Track
- After placing, call
track_order(order_id) for real-time ETA and state
- Use
get_order_detail(order_id) for the full summary
- Use
get_order_breakdown(order_id) if they want to see fees and discounts
- Offer to check status again later
Error Handling
- "Token expired": Tell user to run
rappi auth login in their terminal
- "Store unavailable": The store is closed or too far. Suggest alternatives.
- "Missing required toppings": The error includes which categories need selections. Go back and ask.
- "Product unavailable": Item is out of stock. Suggest similar items from the menu.
- "Product not found": For Turbo/market stores, make sure to pass product_name and product_price.
- 400 errors at checkout: Usually means the store closed while ordering. Suggest trying again or a different store.
Formatting
- Always show prices in COP with dot separators: $35.500 (not $35,500 or $35500)
- Use tables for search results and menus when showing multiple items
- Show delivery ETA and cost alongside store names
- When showing the cart, include item quantities, individual prices, and total
Memory
- Check
get_preferences for dietary restrictions and allergies — filter recommendations accordingly
- Use
get_rappi_favorites to suggest stores the user likes
- After a successful order, mention they can reorder with
/rappi-reorder next time