让 AI 帮你点外卖:左边是标题,右边是一段对话——想吃拉面、结算快照、好呀、下单了
Uber Eats · MCP

让 AI
帮你点外卖

你点头,才下单。
小玫瑰 × Claude
一个 MCP server 加一套 OpenCLI adapter。AI 在你自己的 Chrome 里,用你的登录态帮你点 Uber Eats:搜店、看菜单、加购、给你看结算快照,你在对话里点头之后才下单,下完还能跟配送。地址和支付只用账号里存好的,对话里从不出现卡号和地址。

一单怎么走

How an order goes
想吃拉面,大碗的
ue_search · ue_store · ue_add
结算快照ue_review
醤油ラーメン 大盛り ×1¥1,080
サービス料¥162
配達手数料¥278
合计¥1,520
送到家里,要下单吗?
好呀✓
下单了,19:40 到
ue_place · ue_orders

做什么,不做什么

Scope

做

  • 搜店、搜菜、搜商品。按商品名搜(ポカリスエット、風邪薬…)会连带返回超市 / 药店里命中的商品和价格
  • 看菜单;超市 / 便利店 / 药店的首页只放几排,可以走店内搜索
  • 加购,支持选项(多级选项逐级匹配)和数量
  • 结算快照:商品、各项费用、合计、ETA、地址、支付方式
  • 你点头后下单,然后跟配送进度

不做

  • 不碰支付密码、卡号、地址簿。弹出要编辑地址的框,直接停住
  • 不过人机验证,不替你预约配送时间
  • 不会自己下单。一定走 ue_review → 你在对话里明确同意 → ue_place

安全设计

Gates before your money moves

价格只信结算快照

按 draft 查 Uber 的结算接口,不读页面。结算页无视 URL 参数,永远显示「当前活跃的那辆车」,读页面会把 A 店的商品配上 B 店的价钱。

防串台

两个独立锚点:draft 本体的店必须等于购物车列表里的店,接口回的商品必须覆盖购物车里的商品。对不上就报错,绝不给你一份混了两辆车的快照。

confirm_token

review 时发一张,10 分钟有效,只能用一次,绑定那辆车。下单前再读一遍快照,总价、店名、购物车有一样变了就拒绝。

上限默认关着

policy.json 里不写 "enabled": true 就不能下单。单笔、当日上限都在这里,这个文件只该由你本人改。

下单那一刻

页面合计必须等于接口合计才点。凑单弹窗只点「スキップ」,带 ¥ 的按钮一个不碰;认不出的弹窗一律停下,把按钮列表带回来。

状态不明,先查单

返回 unknown 或报错,不等于没下成。先用 ue_orders 查,绝不重按:重按就是第二单、第二笔钱。

国家和语言

Any country Uber Eats serves

Uber Eats 网址里的 /jp 管的是界面语言,不是国家:显示哪些店、用什么币种,跟着你账号的配送地址走。所以它不分国家,只分界面语言。价格不认币种,¥、$、NT$、HK$、£、€ 都能读。

英文界面 · 默认

  • 读的部分(搜店、菜单、购物车、结算快照)走同一套接口
  • 下单这一步还没人在英文界面上真跑过

日文界面 · UE_LOCALE=jp

  • 实测最多:十几单真单
  • 凑单弹窗、地址确认框、假阴性这些坑都踩过
在日本以外第一次用:先把只读命令都跑一遍,再用 place --dry-run 走到结算页(只校验、不下单),第一单真下时人在旁边看着。脚本认不出的弹窗会停下,并把按钮列表带回来,把那段报错发个 issue,就能把这个国家补上。

准备

Setup
  1. Node 20+ 和 OpenCLI(在 1.8.6 上测过)
    npm i -g @jackwener/opencli
  2. 装 Chrome 扩展:按 OpenCLI 的说明装好 Browser Bridge 扩展,确认 opencli doctor 通过。
  3. 登录 Uber Eats:在这个 Chrome 里登录 ubereats.com,设好配送地址。
  4. 拿到仓库,把 adapter 同步过去(OpenCLI 不认软链目录,改了 adapter 要再跑一次)
    git clone https://github.com/Saekisui/ubereats-mcp.git
    cd ubereats-mcp
    npm run sync
  5. 先用命令行试一下(都是只读的)
    opencli ubereats whoami
    opencli ubereats search ramen --limit 5
    想用日文界面,就在命令前加 UE_LOCALE=jp。
  6. 想让 AI 能下单,就编辑 policy.json,把 "enabled" 改成 true,按自己的情况调上限(账号币种),需要的话写上 "timezone"。不改的话,只能搜、看、加购。
  7. 注册 MCP(以 Claude Code 为例;要日文界面加 -e UE_LOCALE=jp,opencli 不在 ~/.npm-global/bin/opencli 的话再加 -e OPENCLI_BIN=…)
    claude mcp add ubereats -- node /绝对路径/ubereats-mcp/mcp/server.js

八个工具

Tools
ue_policy开关、上限、今天花了多少、登录状态读
ue_search搜店 / 搜菜 / 搜商品读
ue_store菜单;带 query 走超市店内搜索读
ue_add加购物车(选项、数量)写
ue_cart一家店一辆车,给出 draft_id读
ue_review结算快照 + confirm_token读
ue_place下单花钱
ue_orders进行中的订单和配送进度读

已知限制

Limits