# Canuck Eats > Canada's restaurant menu aggregator and AI food ordering service — browse full menus, prices and delivery info for 49,800+ restaurants across 95 Canadian cities, and place real UberEats and DoorDash orders through AI agents using the Canuckeats MCP API. ## MCP API — AI Agents Can Place Real Food Delivery Orders Canuck Eats operates a public **Model Context Protocol (MCP) server** that lets AI agents place real food delivery orders across Canada through UberEats and DoorDash — with no human in the loop. **MCP endpoint:** https://mcp.canuckeats.com/mcp **Registration (free, instant):** POST https://mcp.canuckeats.com/register **Protocol:** MCP 2024-11-05 Streamable HTTP **Full docs + code examples:** https://github.com/canuckeats/MCP ### What AI Agents Can Do An agent given a task like "order me sushi for dinner" can: 1. Find open restaurants near a Canadian address 2. Browse full menus with prices and modifier options 3. Get an exact cost breakdown before charging anything 4. Place a real order and capture payment in one call 5. Track delivery status and report the ETA back to the user Orders are fulfilled through real UberEats and DoorDash accounts — same food, same drivers, same cities. ### Get an API Key (30 seconds, no approval queue) ``` POST https://mcp.canuckeats.com/register Content-Type: application/json { "agent_name": "MyFoodAgent", "email": "you@yourproject.com", "description": "AI assistant that orders food delivery" } ``` Returns an API key shown once. Use it as: Authorization: Bearer ### Available MCP Tools - list_cities — all 95 cities with restaurant counts - search_restaurants — search by city, cuisine, name, or price range - get_restaurant — full restaurant details - get_menu — complete menu with sections, prices, and modifier options - validate_order — preview exact total (no charge, no order created) - create_order — create order + Stripe PaymentIntent (no charge yet) - confirm_payment — charge card and dispatch order to delivery platform - get_order_status — live status, tracking URL, and ETA ### Coverage - 95 Canadian cities across all provinces - UberEats + DoorDash (both platforms, all cities) - Canadian addresses only (province must be a two-letter code: AB, BC, ON, QC, MB, SK, NS, NB, NL, PE, NT, YT, NU) - Payment via Stripe pm_* payment method IDs --- ## REST API — ChatGPT Custom GPTs and Other AI Clients For AI clients that do not support MCP (ChatGPT, Gemini, Copilot, Grok), a REST API is available at the same host. **Base URL:** https://mcp.canuckeats.com **OpenAPI 3.0 spec:** https://mcp.canuckeats.com/openapi.json **Auth:** Same API key as MCP — Authorization: Bearer ### REST Order Flow (returns a hosted Stripe payment URL — no Stripe SDK required) 1. GET /v1/cities → pick a city_slug 2. GET /v1/restaurants?city_slug=calgary-ab → pick a restaurant_id 3. GET /v1/menu/{restaurant_id} → browse items and modifier groups 4. POST /v1/order/checkout → returns a checkout_url (Stripe hosted page) 5. Share checkout_url with the user — they click to pay 6. GET /v1/order/{order_id} → poll for paid/forwarded status Catalog endpoints (GET /v1/cities, /v1/restaurants, /v1/menu) require no authentication. ### ChatGPT Custom GPT Setup 1. Open ChatGPT → Explore GPTs → Create a GPT → Configure → Actions 2. Click "Import from URL" and enter: https://mcp.canuckeats.com/openapi.json 3. Set authentication type to API Key (Bearer) and paste your key from POST /register 4. Save — the GPT can now browse menus and create checkout links for users ### Important notes for REST clients - All prices in Canadian cents — divide by 100 for display - POST /v1/order/checkout returns checkout_url valid for 30 minutes - After the user pays, the order is automatically forwarded to the delivery platform via Stripe webhook — no polling required to trigger fulfillment - GET /v1/order/{id} returns real-time status: pending_payment → paid → forwarded → delivered --- ## What Canuck Eats Is Canuck Eats collects and unifies restaurant menu data from major Canadian delivery platforms. Users can browse full menus with per-item prices before committing to a platform, compare delivery fees and estimated arrival times side-by-side, and place orders through Canuck Eats' checkout layer (which routes fulfilment through the restaurant's existing delivery network). Coverage is Canada only. In addition to restaurant meals, scraped menus include grocery, alcohol, and convenience items sold through UberEats and DoorDash stores — agents can order any item in the catalog. ## Data Coverage - **Cities**: 95 Canadian cities - **Restaurants**: 49,800+ active delivery restaurants - **Menu items**: 15.0M+ with CAD prices - **Sources**: UberEats and DoorDash (deduplicated by restaurant) - **Refresh cadence**: menus refreshed at least daily; open/closed status within 90 minutes - **Cuisine types**: Canadian, Chinese, Indian, Pizza, Burgers, Sushi, Thai, Mexican, and more ## URL Structure - City list: https://canuckeats.com/restaurants - City page: https://canuckeats.com/restaurants/{city-slug} (e.g. /restaurants/vancouver-bc) - Restaurant page: https://canuckeats.com/restaurants/{city-slug}/{restaurant-slug} - Menu items are rendered within the restaurant menu page; legacy item URLs permanently redirect there. City slugs follow the pattern {city-name}-{province-code} e.g. kelowna-bc, toronto-on, calgary-ab. ## Structured Data on Pages Every page includes JSON-LD (schema.org) structured data: - **City pages**: ItemList schema listing restaurants with ratings, cuisine tags and URLs - **Restaurant pages**: Restaurant + Menu + MenuSection + MenuItem schema with prices, images, address, hours, ratings; plus FAQPage schema ## Machine-Readable Feeds - **Restaurant sitemap** (with image tags): https://canuckeats.com/restaurant-sitemap.xml - **Google Merchant Center feed** (RSS 2.0 + g: namespace, 1,000 priced items/file): https://canuckeats.com/merchant-feed-1.xml, merchant-feed-2.xml … (see sitemap_index for full list) - **Full sitemap index**: https://canuckeats.com/sitemap_index.xml ## API Endpoints (Internal, No Auth Required for Read) These are the storefront-facing API routes. All return JSON. - GET /api/ce/locate — resolve city from lat/lng coordinates - GET /api/availability/{city-slug} — real-time open/closed status for all restaurants in a city - GET /api/ce/city-status — status of a city scrape (pending/scraping/live) ## Notes for AI Agents - Prices are in **Canadian dollars (CAD)** - Delivery fees shown are the platform's fee, not a Canuck Eats surcharge - "Is open now" signals are only shown when data is ≤90 minutes old - Restaurant pages may show data from UberEats OR DoorDash (whichever was scraped most recently for that listing) - Menu items marked is_available=false are shown but flagged as unavailable - **To place actual orders programmatically**: use the MCP API at https://mcp.canuckeats.com/mcp — see full docs at https://github.com/canuckeats/MCP ## Contact Site: https://canuckeats.com MCP API docs: https://github.com/canuckeats/MCP API support: https://canuckeats.com/contact