关于 Canuckeats — Canadian Food Delivery
Canuckeats 是供 AI Agent 在加拿大城市浏览菜单和下外卖订单的 MCP 服务。它支持通过 UberEats 和 DoorDash 搜索餐厅、验证订单、确认付款及跟踪配送。
主要功能
- 01按城市、菜系、名称或价格搜索餐厅
- 02查看菜单、价格和选项
- 03付款前预览订单总额
- 04创建订单并确认付款
- 05查询订单状态、跟踪链接和预计送达时间
适用场景
- 01查找加拿大城市中的餐厅和菜单选项
- 02下单前核对订单总额
- 03通过 Agent 下外卖订单
- 04查询配送状态和预计送达时间
MCP 相关
通过 Streamable HTTP 提供八种工具,用于发现餐厅、浏览菜单、创建订单、确认付款和跟踪配送。MCP 客户端使用 API 密钥连接托管端点。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mcp.canuckeats.com/mcpclaude mcp add --transport http canuckeats-canuckeats https://mcp.canuckeats.com/mcp{"mcpServers":{"canuckeats-canuckeats":{"type":"http","url":"https://mcp.canuckeats.com/mcp"}}}在 Cursor 中打开{"servers":{"canuckeats-canuckeats":{"type":"http","url":"https://mcp.canuckeats.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"canuckeats-canuckeats":{"type":"http","url":"https://mcp.canuckeats.com/mcp"}}}{"mcpServers":{"canuckeats-canuckeats":{"serverUrl":"https://mcp.canuckeats.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
https://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 可以:
- 查找用户所在城市、地址附近营业中的餐厅
- 浏览完整菜单、价格和配料选项
- 在扣款前查看准确的费用明细
- 通过一次工具调用下单并确认付款
- 跟踪配送状态并向用户报告预计送达时间
每笔订单都会通过真实的 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_cities | API 密钥 | 列出全部 89 座城市及餐厅数量 |
search_restaurants | API 密钥 | 按城市、菜系、名称或价格范围搜索 |
get_restaurant | API 密钥 | 餐厅完整详情 |
get_menu | API 密钥 | 包含分区、价格和配料选项的完整菜单 |
validate_order | API 密钥 | 预览准确总价——不扣款、不创建订单 |
create_order | API 密钥 | 创建订单和 Stripe PaymentIntent(暂不扣款) |
confirm_payment | API 密钥 | 扣款并向平台派送订单 |
get_order_status | API 密钥 | 实时状态、跟踪 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接受 Stripepm_*支付方式 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_forISO 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
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。