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 restaurantsbrowse_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 restaurantssearch_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 searchget_store_info(store_id)— store hours, charges, addressget_store_categories(store_id)— browse aisles/categoriesget_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 contentsremove_from_cart(store_id, product_id)— remove itemget_product_toppings(store_id, product_id)— customization optionsget_tip_suggestions()— get suggested tip amounts for current cartset_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 orderstrack_order(order_id)— real-time state, ETA, driver positionget_order_detail(order_id)— full order summary with productsget_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 balanceget_rappi_favorites()— favorite stores from Rappiget_taste_profile()— computed taste profile from order historyget_recommendations()— smart suggestions based on habitsget_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_balanceif the user asks about payment options
Step 2: Find What They Want
If user wants to see what's available:
- Call
explore_verticalsto show all store types (Restaurants, Turbo, Markets, Farmacia, Licores, etc.)
If user asked for something specific (e.g., "order me a burger"):
- Call
search_restaurantswith 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_restaurantsto show nearby options - Let them pick, then call
get_restaurant_menufor the full menu
If user wants to reorder:
- Call
get_order_historyto show past orders - Use
quick_reorderwith 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 > 0are 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, thenset_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 loginin 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_preferencesfor dietary restrictions and allergies — filter recommendations accordingly - Use
get_rappi_favoritesto suggest stores the user likes - After a successful order, mention they can reorder with
/rappi-reordernext time