mcpField
C
Canuckeats — Canadian Food Delivery

Canuckeats — Canadian Food Delivery

远程服务
github.com/canuckeats地图与出行126 周前更新
代码仓库

关于 Canuckeats — Canadian Food Delivery

Canuckeats 是供 AI Agent 在加拿大城市浏览菜单和下外卖订单的 MCP 服务。它支持通过 UberEats 和 DoorDash 搜索餐厅、验证订单、确认付款及跟踪配送。

主要功能

  1. 01按城市、菜系、名称或价格搜索餐厅
  2. 02查看菜单、价格和选项
  3. 03付款前预览订单总额
  4. 04创建订单并确认付款
  5. 05查询订单状态、跟踪链接和预计送达时间

适用场景

  1. 01查找加拿大城市中的餐厅和菜单选项
  2. 02下单前核对订单总额
  3. 03通过 Agent 下外卖订单
  4. 04查询配送状态和预计送达时间

MCP 相关

通过 Streamable HTTP 提供八种工具,用于发现餐厅、浏览菜单、创建订单、确认付款和跟踪配送。MCP 客户端使用 API 密钥连接托管端点。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.canuckeats.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://mcp.canuckeats.com/mcp需要授权

工具

详细介绍

Canuckeats MCP — AI 驱动的加拿大外卖配送

通过 AI Agent 在加拿大订购 UberEats 和 DoorDash。 Canuckeats 是一项模型上下文协议(MCP)服务,让 AI Agent 可以浏览菜单并在加拿大 89 个城市下真实的外卖订单——无需人工介入。

端点: https://mcp.canuckeats.com/mcp
注册: POST https://mcp.canuckeats.com/register — 免费、即时,无需电子邮件确认
协议: MCP 2024-11-05 — Streamable HTTP
覆盖范围: 17,000+ 家餐厅 · 89 座城市 · 仅限加拿大 · UberEats + DoorDash


为什么 Agent 适合使用 Canuckeats?

希望 AI 助手代为处理外卖的加拿大居民面临一个难题:UberEats 和 DoorDash 没有提供 Agent 可访问的 API。Canuckeats 弥补了这一缺口。接到 “帮我订一份晚餐寿司” 这类任务后,Agent 可以:

  1. 查找用户所在城市、地址附近营业中的餐厅
  2. 浏览完整菜单、价格和配料选项
  3. 在扣款前查看准确的费用明细
  4. 通过一次工具调用下单并确认付款
  5. 跟踪配送状态并向用户报告预计送达时间

每笔订单都会通过真实的 UberEats 或 DoorDash 账户派送——同样的食物、同样的配送员、同样的城市。


获取 API 密钥 — 即时自助注册

无需等待,也无需排队审批。注册 Agent 后,不到 30 秒即可开始调用:

POST https://mcp.canuckeats.com/register
Content-Type: application/json

{
  "agent_name": "MyFoodAgent",
  "email": "[email protected]",
  "description": "AI assistant that orders lunch for remote teams"
}

响应:

{
  "api_key": "your-api-key-shown-once",
  "key_id": "uuid",
  "scopes": ["catalog:read", "orders:write"],
  "medusa_customer_id": "cus_...",
  "mcp_endpoint": "https://mcp.canuckeats.com/mcp",
  "docs": "https://github.com/canuckeats/MCP",
  "message": "Registration successful. Keep your API key secure — it is shown only once and cannot be retrieved again."
}

密钥只会显示一次。 请立即保存。如果丢失,请使用同一电子邮件重新注册——重复的电子邮件会被拒绝,因此每个密钥都要使用唯一的电子邮件地址。

注册限制: 每个 IP 每 24 小时最多注册 5 次。每个电子邮件地址限一个密钥。不接受一次性电子邮件地址。


覆盖哪些城市?

覆盖所有加拿大主要城市:卡尔加里、埃德蒙顿、温哥华、多伦多、渥太华、蒙特利尔、温尼伯、汉密尔顿、伦敦、哈利法克斯、萨斯卡通、里贾纳、基洛纳、维多利亚、阿伯茨福德、巴里、布兰普顿、伯灵顿、本拿比、高贵林,以及 阿尔伯塔省、不列颠哥伦比亚省、安大略省、曼尼托巴省、萨斯喀彻温省、新斯科舍省、新不伦瑞克省 和其他省份的另外 69 座城市。

使用 list_cities 获取包含餐厅数量的最新完整列表。


8 个工具 — 完整订单流程

工具身份验证说明
list_citiesAPI 密钥列出全部 89 座城市及餐厅数量
search_restaurantsAPI 密钥按城市、菜系、名称或价格范围搜索
get_restaurantAPI 密钥餐厅完整详情
get_menuAPI 密钥包含分区、价格和配料选项的完整菜单
validate_orderAPI 密钥预览准确总价——不扣款、不创建订单
create_orderAPI 密钥创建订单和 Stripe PaymentIntent(暂不扣款)
confirm_paymentAPI 密钥扣款并向平台派送订单
get_order_statusAPI 密钥实时状态、跟踪 URL 和预计送达时间

快速入门:60 秒内完成连接

Python(使用 mcp SDK)
import asyncio, json
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async def main():
    async with streamablehttp_client(
        "https://mcp.canuckeats.com/mcp",
        headers={"Authorization": "Bearer YOUR_API_KEY"}
    ) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()

            # Find restaurants
            result = await session.call_tool("search_restaurants", {
                "city_slug": "vancouver-bc",
                "query": "sushi",
                "limit": 5
            })
            restaurants = json.loads(result.content[0].text)
            print(f"Found {restaurants['total']} sushi spots in Vancouver")

asyncio.run(main())
TypeScript / Node.js
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"

const client = new Client({ name: "my-agent", version: "1.0" }, { capabilities: {} })
await client.connect(new StreamableHTTPClientTransport(
  new URL("https://mcp.canuckeats.com/mcp"),
  { requestInit: { headers: { Authorization: "Bearer YOUR_API_KEY" } } }
))

const result = await client.callTool({ name: "list_cities", arguments: {} })
const cities = JSON.parse(result.content[0].text)
console.log(`${cities.length} cities available`)
Claude Desktop 集成

将以下内容添加到 Claude Desktop MCP 配置文件(claude_desktop_config.json):

{
  "mcpServers": {
    "canuckeats": {
      "type": "streamable-http",
      "url": "https://mcp.canuckeats.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

然后向 Claude 提问:“帮我从卡尔加里任意一家店订一份意大利辣香肠披萨,送到 400 4 Ave SW, Calgary AB T2P 0J4。”


完整下单流程

list_cities                  →  get city slug (e.g. "calgary-ab")
  ↓
search_restaurants           →  get restaurant id
  ↓
get_menu                     →  get menu_item_id + modifier options
  ↓
validate_order               →  confirm total (no charge)
  ↓
create_order                 →  get order_id + stripe_payment_intent_id
  ↓
confirm_payment              →  charge pm_... and dispatch
  ↓
get_order_status (poll)      →  track until delivered

请参阅 docs/examples/order-flow.md,查看包含真实请求/响应示例的逐步说明。


速率限制

端点限制
/register每个 IP 每 24 小时最多注册 5 次
所有工具(常规)每个密钥每分钟 60 次请求
create_order、confirm_payment每个密钥每分钟 10 次请求

每个 MCP 响应都会包含 X-RateLimit-Limit 和 X-RateLimit-Remaining 响应标头。


Agent 关键信息

  • 仅支持加拿大地址。 省份必须使用两个字母的代码:AB、BC、ON、QC、MB、SK、NS、NB、NL、PE、NT、YT、NU。
  • 支付方式: confirm_payment 接受 Stripe pm_* 支付方式 ID。Agent 的运营方必须提供有效的 Stripe 支付方式,且该支付方式已在 Stripe 中设置完毕。
  • 订单会自动派送。 confirm_payment 成功后,订单会在 2–5 分钟内转发至 UberEats 或 DoorDash。使用 get_order_status 跟踪订单。
  • 自动选择配送平台,依据该餐厅是否在相应平台的目录中。
  • 菜单项上的 source_id 仅供内部使用——你无需直接引用。调用 create_order 时只需使用 menu_item_id(整数 id 字段)。
  • 修饰项为可选项。 如果菜单项包含必选修饰项(例如饮料尺寸),省略这些修饰项可能会导致订单在平台端失败。查看 modifier_groups[].min_selections 可确定哪些修饰项为必选项。
  • 支持预约配送,可通过 create_order 中的 scheduled_for ISO 8601 字段设置。省略此字段即可使用尽快配送。

支持的配送平台

平台覆盖范围
UberEats全部 89 个城市
DoorDash全部 89 个城市

订单会提交至提供所需餐厅的平台。每家餐厅的 source 字段("ubereats" 或 "doordash")会告诉你将使用哪个平台。


加拿大城市 — 完整列表

阿尔伯塔省 · 不列颠哥伦比亚省 · 马尼托巴省 · 新不伦瑞克省 · 纽芬兰省 · 新斯科舍省 · 安大略省 · 爱德华王子岛省 · 魁北克省 · 萨斯喀彻温省

使用 list_cities 获取实时列表。主要城市包括:

阿尔伯塔省: Calgary、Edmonton、Red Deer、Lethbridge、Airdrie、Medicine Hat、Grande Prairie、Fort McMurray
BC: Vancouver、Surrey、Burnaby、Richmond、Kelowna、Abbotsford、Victoria、Coquitlam、Langley
安大略省: Toronto、Ottawa、Hamilton、London、Brampton、Mississauga、Barrie、Windsor、Kitchener、Ajax、Aurora
魁北克省: Montreal(部分区域)
草原省份和大西洋省份: Saskatoon、Regina、Winnipeg、Halifax、Moncton、Fredericton


API 参考


支持

  • 问题 / 疑问: 在此仓库中提交 GitHub issue
  • API 密钥丢失: 使用其他电子邮件重新注册,或发送邮件至 [email protected]
  • 订单问题: 发送邮件至 [email protected],并附上你的 order_id
  • 网站: canuckeats.com

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。