外卖订单管理服务

一个让AI代理通过MCP工具搜索餐厅并下达外卖订单的服务,支持Uber Eats和Thuisbezorgd平台。

  • by henkas
  • TypeScript
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 henkas/orderfood

使用说明

订购食品MCP

MCP服务器,允许AI代理搜索餐厅并在其上下食品配送订单 优食 和 送回家 通过11个MCP工具。

法律: 根据欧盟指令2009/24/EC第6条,明确允许对互操作性进行逆向工程。这个项目是个人使用和开源研究,不是商业性的,与优步外卖或Just Eat Takeaway无关。


这是给谁的

  • AI高级用户 谁想告诉克劳德或Codex“在附近给我找寿司,把评价最高的选项添加到我的购物车里”,让它真正起作用
  • 开发者 探索面向现实消费者API集成的MCP服务器设计
  • 研究人员 根据欧盟指令2009/24/EC第6条研究逆向工程API互操作性

这不是给谁的

  • 任何寻求全自动“无需触碰任何东西即可下单”体验的人——下单需要在两个平台上都有浏览器支付步骤,目前还不能自动完成(请参阅下面的平台支持)
  • 大量或商业用途-此工具仅适用于个人、单账户使用
  • 需要坚如磐石的会话的用户——优步Eats Cookie将在24-48小时后过期,需要手动刷新;Thuisbezorgd令牌会自动刷新,但API可能会更改,恕不另行通知

特性

工具 说明
search_restaurants 按地点、菜肴或查询查找餐厅
get_restaurant 获取完整的餐厅详细信息和菜单
get_cart 查看当前购物车
add_to_cart 将带有选项的商品添加到购物车
clear_cart 清空购物车
get_saved_addresses 列出已保存的收货地址
get_payment_methods 列出可用的付款方式
place_order 将当前购物车作为订单
track_order 获取实时订单状态
get_order_history 列出过去的订单
cancel_order 取消当前订单
ping_platform 检查平台的auth+连接

所有工具均接受 platform: "ubereats" | "thuisbezorgd" 作为必需参数。

平台支持

能力 优步美食 Thuisbezorgd 备注
搜索餐厅 ✅ ✅
获取餐厅+菜单 ✅ ✅ TB使用SSR HTML抓取
购物车管理 ✅ ✅
已保存地址 -- ✅ UE实时解析地址
付款方式 ✅ ✅
下单 ⚠️ ⚠️ 被浏览器支付流(Apple Pay/iDeal/Adyen)阻止
跟踪订单 ✅ 🚧 尚未捕获TB跟踪端点
订单历史记录 🚧 🚧 UE:端点返回null——正确的请求参数未知;TB:尚未捕获
取消订单 🚧 🚧 尚未捕获端点
健康检查 ✅ ✅ ping_platform 工具验证auth+连接

传说: ✅ 工作·⚠️ 受到外部依赖的阻碍🚧 存根(尚未捕获API)·-不适用

建筑

pnpm工作空间单仓库——TypeScript 5,严格的,纯ESM,Node.js 20+。

packages/
  shared/               @orderfood/shared — normalized types + PlatformClient interface
  ubereats-client/      @orderfood/ubereats-client — Uber Eats REST client
  thuisbezorgd-client/  @orderfood/thuisbezorgd-client — Thuisbezorgd REST client
  mcp-server/           @henkas/orderfood — MCP server + setup CLI
tools/
  api-capture/          mitmproxy addon for capturing API traffic
docs/
  api-reference/        Documented endpoints per platform

先决条件

  • Node.js 20+
  • pnpm 9+
  • Python 3.11+ (仅适用于API捕获工具)

安装

git clone https://github.com/henkas/orderfood.git
cd orderfood
pnpm install
pnpm build

设置

npx @henkas/orderfood setup --platform ubereats
npx @henkas/orderfood setup --platform thuisbezorgd

凭据以加密方式存储在 ~/.orderfood/ (AES-256-GCM)。请参阅 安装指南 了解完整的分步说明,包括在哪里找到Uber Eats Cookie以及Thuisbezorgd OAuth流程的工作原理。

使用Claude代码

claude mcp add orderfood -- npx @henkas/orderfood

或者,如果从源代码运行:

claude mcp add orderfood -- node /path/to/orderfood/packages/mcp-server/dist/index.js

使用Codex

codex mcp add orderfood -- npx @henkas/orderfood

然后和克劳德谈谈:

Find Italian restaurants near Amsterdam Centraal on Thuisbezorgd
Add a Margherita pizza from [restaurant] to my Uber Eats cart
What's in my Thuisbezorgd cart?
Show my Uber Eats payment methods

发展

pnpm install        # install all workspace packages
pnpm typecheck      # type-check all packages
pnpm test           # run all tests
pnpm build          # compile all packages

# Per-package
pnpm --filter @orderfood/shared test
pnpm --filter @henkas/orderfood build

API捕获

平台客户端代码基于mitmproxy对真实应用程序的捕获。要贡献新的端点发现:

  1. pip install mitmproxy
  2. 跟随 tools/api-capture/README.md 在您的设备上安装证书
  3. mitmproxy -s tools/api-capture/capture.py
  4. 使用该应用程序——捕获的通话记录 tools/api-capture/output/{platform}/
  5. 将调查结果记录在 docs/api-reference/{platform}.md

文档

安装指南 安装、验证、连接到您的代理
Uber Eats API参考 发现端点和请求形状
家庭 API 参考 发现端点和请求形状

贡献

看 贡献.md.

安全

证书在静止时加密(AES-256-GCM,来自机器ID的HKDF-SHA256密钥)。看 安全.md 用于漏洞报告过程。

许可证

麻省理工学院——见 许可证.