ubereats-mcp
Allows AI to interact with Uber Eats using the user's own logged-in Chrome session: search stores and products, view menus, add items to cart with options and quantities, review checkout snapshots, place orders only after explicit confirmation with a confirm_token, and track ongoing delivery orders.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ubereats-mcpfind a good sushi place and add a California roll to my cart"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ubereats-mcp

介绍页:https://saekisui.github.io/ubereats-mcp/
让 AI 在你自己的 Chrome 里帮你点 Uber Eats(有 Uber Eats 的国家都能用,日本站实测最多):搜店 / 搜商品、看菜单、加购、看结算快照,你点头之后才下单,下单后跟配送。
一个 MCP server + 一套 OpenCLI adapter。AI 用的是你 Chrome 里的真实登录态,地址和支付方式只用账号里已经存好的,对话里从不出现卡号或地址。
非官方项目,与 Uber 无关。只在你自己的账号上、花你自己的钱。
它做什么,不做什么
做
搜店、搜菜、搜商品。按商品名搜(ポカリスエット、風邪薬…)会返回超市 / 药店,并附上命中的商品和价格
看菜单:餐厅照常;超市 / 便利店 / 药店的首页只放几排推荐,可以用
query走店内搜索加购:支持选项(多级选项逐级匹配,例如 套餐 → ドリンクM → コカ・コーラ)和数量
结算快照:店名、商品、各项费用、合计、ETA、配送地址、支付方式
下单:只能在 review 之后、拿着 confirm_token 下
查进行中订单的配送进度
不做
不碰支付密码、卡号、地址簿(弹出要编辑地址的框会直接停住)
不过人机验证,不替你预约配送时间
不会自己下单。必须走
ue_review→ 你在对话里明确同意 →ue_place
Related MCP server: doordash-mcp
安全设计
关卡 | 做法 |
价格从哪来 | 只信 |
防串台 | 两个独立锚点:draft 本体的店 uuid 必须等于购物车列表里的店;接口回的商品必须覆盖购物车里的商品。任一不符直接报错,绝不返回混合了两辆车的快照 |
confirm_token | review 时发,10 分钟有效,只能用一次,绑定 draft。place 前再读一次快照,总价 / 店名 / 购物车变了就拒绝 |
上限 |
|
下单那一刻 | 页面合计必须等于接口合计才点;凑单弹窗只点「スキップ」,里面任何带 ¥ 的商品按钮都不碰;认不出的弹窗一律停下,并把按钮列表带回来 |
状态不明 | 返回 |
国家和界面语言
Uber Eats 网址里的 /jp 管的是界面语言,不是国家:显示哪些店、用什么币种,跟着你账号的配送地址走。所以这套东西不分国家,只分界面语言:
| 界面 | 状态 |
| 英文 | 读的部分(搜店 / 菜单 / 购物车 / 结算快照)按同一套接口走;下单这一步还没人在英文界面上真跑过 |
| 日文 | 实测最多:十几单真单,凑单弹窗、地址确认框、假阴性这些坑都踩过 |
价格不认币种(¥ / $ / NT$ / HK$ / £ / € 都能读,12,34 这种逗号小数也认),「当天」按 policy.json 的 timezone(不写就是电脑的时区)算。
在日本以外的地方第一次用,请这样走一遍:
只读命令都跑一下:
whoami/search/store/cart/reviewopencli ubereats place --draft <draft_id> --dry-run:会走到结算页、做完所有校验就停,不下单第一单真下的时候,人在旁边看着。脚本认不出的弹窗会停下,并把弹窗里的按钮列表带回来——把那段报错发个 issue,就能把这个国家的流程补上
准备
Node 20+,以及 OpenCLI(在 1.8.6 上测过):
npm i -g @jackwener/opencli按 OpenCLI 的说明装好 Chrome 的 Browser Bridge 扩展,确认
opencli doctor通过。在这个 Chrome 里登录 ubereats.com,设好配送地址。
拿到本仓库,把 adapter 同步到 OpenCLI(OpenCLI 不认软链目录,必须复制过去;以后改了 adapter 也要再跑一次):
git clone https://github.com/Saekisui/ubereats-mcp.git && cd ubereats-mcp npm run sync先用命令行试一下,都是只读的:
opencli ubereats whoami opencli ubereats search ramen --limit 5想用日文界面就在命令前加
UE_LOCALE=jp。想让 AI 能下单的话,编辑
policy.json,把"enabled"改成true,按自己的情况调上限(账号币种),需要的话写上"timezone"(如"America/New_York")。不改就只能搜、看、加购,不能下单。注册 MCP。以 Claude Code 为例:
claude mcp add ubereats -- node /绝对路径/ubereats-mcp/mcp/server.js要日文界面就加
-e UE_LOCALE=jp;如果 opencli 不在~/.npm-global/bin/opencli,再加-e OPENCLI_BIN=/path/to/opencli。
一单怎么走
你:「帮我点份拉面」
AI:ue_search → ue_store(看菜单)→ ue_add(选好规格)→ ue_cart
AI:ue_review → 把快照原样给你看(店 / 品 / 费用 / 合计 / 地址 / 支付)
你:「好」
AI:ue_place → ue_orders(确认下成、之后跟配送)工具 | 读 / 写 |
| 读:开关、上限、今天已花多少、登录状态 |
| 读 |
| 读( |
| 写:加购物车 |
| 读:每家店一辆车,给出 draft_id |
| 读:结算快照 + confirm_token |
| 写·花钱 |
| 读 |
每次调用都会记一行到本地的 ledger.jsonl(已 gitignore),当日上限按它来算。
不经过 MCP,直接用命令行
opencli ubereats store <店id> --query ポカリ
opencli ubereats add <商品id> --spec "コーラ ポテト(L)" --qty 1
opencli ubereats cart
opencli ubereats review --draft <draft_id>
opencli ubereats place --draft <draft_id> --dry-run # 走到结算页、做完校验就停,不点下单
opencli ubereats orders已知限制
日本 + 日文界面实测最多;英文界面的下单步骤、其他国家的结算流程(比如美国的小费)还没人真跑过,认不出就会停下。Uber 的页面和接口随时会变,坏了先看 PITFALLS.md。
请求别太密。 Uber 有 reCAPTCHA 风控:请求太频繁时,接口会回 403(
botdefense: challenge)。这时去 Chrome 里打开 ubereats.com 手动搜一下、过了验证再用;脚本不会、也不该去碰验证码。浏览器命令请串行跑,别并发。第一次真下单,请人在旁边看着。
药品之类可能弹问诊或确认框,脚本认不出就会停下,需要你自己在 app 里完成。
License
MIT
Available Tools
8 toolsue_addA
Add one item to the cart (a write action). spec = option keywords, space-separated, one per option group (e.g. 'Coke Large' / 'コーラ ポテト(L)'; multi-level options are matched level by level); qty = quantity 1-10. Confirm with ue_cart afterwards.
Notes:
Uber Eats keeps one cart per store; several carts can exist at once.
Adding is not buying. Confirm with the user before adding anything.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 商品 id(ue_store 给的 store:item,或超市的 store:item:section:subsection) | |
| qty | No | 数量 1-10 | |
| spec | No | 选项关键词,空格分隔 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares this is a write action, that the cart is scoped per store while multiple carts may coexist, and that adding is not purchasing and requires user confirmation. It stops short of saying what happens on failure (item unavailable, option mismatch) or whether the response returns the updated cart.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and its write nature, then parameter semantics, then two short bullets with genuinely non-obvious constraints. Every sentence adds information an agent would otherwise have to guess; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter write tool with no annotations and no output schema, the description supplies the mutation semantics, the cart-per-store model, the confirmation workflow, and the verification tool to call next. That is enough for correct invocation without further discovery.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 would apply, but the description goes beyond it: it explains the spec string as space-separated keywords, one per option group, matched level by level, with concrete examples in two languages ('Coke Large' / 'コーラ ポテト(L)'). That materially disambiguates a free-text parameter the schema only labels '选项关键词,空格分隔'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add one item to the cart') and immediately qualifies it as 'a write action', which separates it from read-only siblings like ue_search/ue_cart. The closing note 'Adding is not buying' implicitly draws the boundary with ue_place, so an agent can place the tool without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to ue_cart for post-add verification and instructs 'Confirm with the user before adding anything', which is meaningful pre-use guidance for a mutating tool. It does not, however, state how to obtain the required id (that guidance lives only in the parameter schema, pointing at ue_store).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ue_cartA
List the carts (one per store): draft_id, store, items, most recently changed first.
Use this when:
You've just added something and want to confirm it landed, or need the draft_id for ue_review.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It usefully discloses return fields and sort order, but does not explicitly state that the operation is read-only and side-effect free, nor does it mention pagination, limits, or authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core behavior, then uses a compact "Use this when" list. Every sentence adds actionable information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description adequately explains what is returned and in what order, and links the draft_id to ue_review. It could be slightly more complete by noting scope or read-only safety, but the essential context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the description correctly focuses on output rather than input semantics. There is no parameter ambiguity to resolve, so the baseline is a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb and resource ("List the carts"), clarifies cardinality ("one per store"), and enumerates the returned fields (draft_id, store, items) plus ordering ("most recently changed first"). This is enough for an agent to distinguish it from sibling tools such as ue_add or ue_review.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: after adding an item to confirm it landed, or when the draft_id is needed for ue_review. It does not state when not to use it or name an alternative listing tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ue_ordersA
Active orders and delivery progress.
Use this when:
Right after ue_place, to confirm the order landed — always when ue_place came back unknown or with an error.
While the food is on the way, if the user asks where it is.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. It adds genuine value by prescribing the post-ue_place verification flow, but it never states that this is a read-only operation, whether completed/historical orders are included, or how fresh the delivery progress is. With no output schema either, more disclosure was warranted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines: a front-loaded statement of what it returns, followed by a bulleted 'use when' list. No filler, no repetition of the name, and the most actionable content (call it after ue_place) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read tool with no output schema, the description supplies the decision context an agent needs to call it at the right moment. It is slightly thin on what 'delivery progress' actually contains (status granularity, ETA, history scope), which is the one remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The empty schema leaves nothing to clarify, and the description correctly focuses on invocation timing rather than argument syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource (active orders) and the payload (delivery progress), which is enough for an agent to distinguish it from ue_cart, ue_search, and ue_place. The verb is only implied — there is no explicit 'retrieve/list' — so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete trigger scenarios and ties them to a sibling tool's outcome: confirm after ue_place, especially when ue_place returned unknown or an error, and check while the order is in transit when the user asks location. That is explicit when-to-use guidance with a named alternative (ue_place) and a failure-recovery condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ue_placeA
Place the order. Requires the confirm_token from ue_review; the checkout snapshot is re-read and must still match (total / store / cart) and be within the per-order / per-day caps — otherwise it refuses.
Use this when:
The user has explicitly said yes to the exact review you showed them. Only then.
Notes:
If it comes back status unknown, or with any error after the gates passed, that does NOT mean it failed — the order may well have gone through. Check ue_orders first and tell the user what you find.
Never call ue_place again for the same cart: a second press is a second order and a second charge.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm_token | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does so richly: it discloses the re-read validation gates (total/store/cart), the per-order and per-day caps, the refusal behavior, the idempotency hazard (a second press is a second charge), and crucially the ambiguous-failure semantics ('status unknown ... does NOT mean it failed'). That is exactly the context a mutating, money-moving tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and precondition, then segmented into when-to-use and notes. Every sentence carries operational weight (gates, ambiguous failure, double-charge) with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description still tells the agent everything needed to call it safely: prerequisite token source, what is validated server-side, what refusal means, and how to reconcile an uncertain result. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single parameter is undocumented in the schema, so the description must compensate. It does: confirm_token is stated to come from ue_review and to be re-validated against the snapshot and caps. It stops short of describing format/expiry/lifetime, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Place the order') with unambiguous scope, and names the sibling it depends on (ue_review) and the sibling used to verify outcome (ue_orders). An agent can distinguish it from ue_review and ue_orders without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use gate ('The user has explicitly said yes to the exact review you showed them. Only then.'), plus an explicit when-not ('Never call ue_place again for the same cart'). Alternatives and preconditions are named, not implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ue_policyA
Read the ordering policy: whether ordering is enabled, per-order / per-day caps (in the account's currency), how much was already spent today, and whether the user is logged in to Uber Eats in Chrome.
Use this when:
You're about to add to cart or place an order — check the caps first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does well: 'Read' implies a safe, non-mutating call, and it reveals the surprising environmental dependency on Uber Eats being logged in via Chrome, plus that caps are expressed in the account's currency. It omits failure modes (e.g., what the tool returns when logged out) or rate-limit behavior, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact parts: a front-loaded enumeration of the returned fields followed by a single tiered bullet with the usage trigger. No sentence is padding, and the most decision-relevant information (caps, spend, login state) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the description must describe the return payload, and it does so field by field, including the login-state value an agent may need to branch on. It doesn't cover what happens when ordering is disabled or when Chrome isn't logged in, leaving a small behavioral gap for a tool whose whole purpose is gating downstream actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero parameters, so the baseline is 4 per the rubric. Nothing in the description contradicts or adds parameter meaning, and none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('the ordering policy') and then enumerates exactly what the policy contains: enabled flag, per-order/per-day caps, today's spend, and Uber Eats Chrome login state. This is clearly distinguishable from siblings like ue_add, ue_cart, and ue_place, which mutate or inspect cart/order state rather than policy limits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Use this when' block gives an explicit trigger: before adding to cart or placing an order, check the caps. It clearly signals the pre-flight role relative to ue_add and ue_place, but does not name those siblings or state when this tool is unnecessary, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ue_reviewA
Checkout snapshot for one cart — the only trusted price: store / items / options / subtotal / every fee / total / ETA / delivery address / payment method. Read from Uber's checkout API keyed by draft (not the page), with two independent anchors that throw instead of mixing two carts. Returns a confirm_token (valid ~10 min, single use).
Use this when:
Before placing an order: show the user this exactly as returned; only after they say yes, call ue_place.
| Name | Required | Description | Default |
|---|---|---|---|
| draft | No | 可选:哪一辆购物车(ue_cart 给的 draft_id;缺省 = 最近改动的) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that data is read from the checkout API keyed by draft rather than the rendered page, that two independent anchors 'throw instead of mixing two carts' (error rather than silent cross-contamination), and that the confirm_token is valid ~10 minutes and single-use. It stops short of stating permissions/auth needs or any throttling, so not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first clause, then a short 'Use this when' block. The mid-sentence field enumeration is long, but since there is no output schema it earns its place by telling the agent what will come back. The phrasing 'two independent anchors that throw' is slightly opaque but compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description deliberately enumerates the returned fields (store, items, subtotal, fees, total, ETA, address, payment method) plus the confirm_token lifetime and single-use constraint. Combined with the usage ordering against ue_place, an agent has everything needed to invoke and act on this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and there is only one optional parameter, so the schema already documents `draft`. The description adds only the conceptual framing ('keyed by draft (not the page)'), which is useful context but not parameter-level syntax or default behavior beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Checkout snapshot for one cart', then enumerates exactly what the snapshot contains. It is clearly distinguishable from siblings ue_cart (mutable cart state) and ue_place (order submission) because it positions itself as the trusted read-back step between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Use this when' block gives an explicit condition and an explicit next step: call before placing an order, show the user exactly what is returned, and only call ue_place after confirmation. It names the alternative tool (ue_place) and the gating condition, so the sequencing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ue_searchA
Search Uber Eats (delivers to the account's current address; works in any country Uber Eats serves). Works with store names, dishes and products. Product searches (e.g. 'Gatorade', 'ポカリスエット') return supermarkets / drugstores together with the matching items and prices.
Use this when:
The user asks for delivery ('点个 X' / 'order me X'). Delivery is real food and real money — don't start a delivery order on your own initiative.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 条数,默认 10 | |
| query | Yes | 关键词(店名 / 菜名 / 商品名) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses useful behavior: delivery to the account's current address, country coverage, and that product queries surface supermarkets/drugstores with prices. It omits auth/permission requirements and rate or result-limit behavior, so it is good but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core capability, then a short conditional block. Mostly tight, though the 'real food and real money' clause is a bit of editorializing that doesn't directly help tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter search tool with a complete schema and no output schema, the description covers what is searched, what results look like for product queries, and when to invoke it. Missing only permission/limit behavior and explicit sibling routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so query (store/dish/product keyword) and limit (default 10) are already documented in the schema. The description restates that queries span store names, dishes and products but adds no new syntax, format or constraint detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (Uber Eats) plus the searchable scope: store names, dishes, products. The note that product searches return supermarkets/drugstores with matching items and prices makes the resource behavior concrete and separable from siblings like ue_store or ue_orders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Use this when' block gives an explicit triggering condition (user asks for delivery, e.g. '点个 X' / 'order me X') and a caution against initiating delivery orders autonomously. It does not name alternatives (e.g., use ue_store to browse a specific store's menu), so the routing guidance is clear but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ue_storeA
A store's menu: item ids, names, prices, sections, quick-add, sold out.
Notes:
Supermarkets / convenience stores / drugstores only show a few shelves on their front page — pass query to search inside the store. Their item ids are long (store:item:section:subsection); pass them to ue_add unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | 店 id(ue_search 给的短 id)或店页 URL | |
| query | No | 店里按商品名找(超市 / 药店走店内搜索,按相关度;餐厅按菜名过滤) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses two genuinely useful traits: supermarket/drugstore front pages expose only a subset of shelves, and their item ids are composite long strings (store:item:section:subsection) that must be forwarded unchanged. It omits auth, pagination, and rate-limit behavior, but the operational quirks it does reveal are substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return shape, then a short notes block; every sentence contributes. The field enumeration is justified because no output schema exists, though the mixture of the field-list and the two notes could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description appropriately enumerates returned fields, and it flags the store-type-specific search behavior and id handling. For a 2-parameter, fully schema-documented read tool this is close to complete, with only auth/pagination details missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both id and query. The notes add rationale (why query is needed for supermarkets) and downstream handling of ids, but no new syntax or format detail beyond what the schema states. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource and its contents precisely ('A store's menu: item ids, names, prices, sections, quick-add, sold out'), making clear this is a store-scoped retrieval distinct from the cross-store ue_search. It lacks an explicit verb ('retrieve/get'), but the store-scoped framing differentiates it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains how to use the query parameter (supermarkets/convenience/drugstores only expose a few shelves on the front page, so pass query) and what to do with results ('pass them to ue_add unchanged'). However it never states explicitly when to call ue_store versus ue_search or ue_place; the id-parameter text pointing at ue_search is the only routing hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
ue_add - First observed
ue_cart - First observed
ue_orders - First observed
ue_place - First observed
ue_policy - First observed
ue_review - First observed
ue_search - First observed
ue_store
TDQS
Scored across 8 tools
Each tool maps to a distinct stage of the ordering workflow (policy, search, store, add, cart, review, place, orders) with no overlapping purposes. The descriptions reinforce the intended sequence, so an agent can reliably pick the right tool.
All tools share a consistent 'ue_' prefix and single-token names, which is highly readable. It mixes nouns (ue_policy, ue_cart, ue_orders) and verbs (ue_search, ue_add, ue_place) rather than a strict verb_noun pattern, but the convention is still predictable.
Eight tools map cleanly onto the browse → add → review → place → track lifecycle, with each tool earning its place. Nothing feels redundant or missing for the stated ordering purpose.
The core ordering lifecycle is fully covered with safety gates (policy, review, place, orders). Minor gaps exist: there is no way to remove/modify items from a cart, clear a cart, or cancel an order, which an agent cannot fully work around.
Maintenance
Related MCP Connectors
Pickup orders at Japanese restaurants for AI agents: find stores, read menus, place orders. No auth.
Search live store shelves, verify delivery windows, and run instant AI agent checkouts.
AI food ordering across Canada — 17,000+ restaurants, 89 cities, real UberEats + DoorDash.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to discover and order food from multiple delivery services (DoorDash, UberEats, Grubhub) using A2A protocol and process payments via Stripe with AP2 protocol mandates for cryptographically signed user authorization.1MIT
- AlicenseBqualityDmaintenanceEnables AI agents to search restaurants, browse menus, manage carts, and place orders on DoorDash programmatically. It utilizes a headless browser to interact with DoorDash's GraphQL API and bypass anti-bot protections for the full delivery lifecycle.2212 npm4MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to autonomously order food from Grubhub, including searching restaurants, browsing menus, managing cart, placing orders, and tracking delivery.45 npm1MIT
- AlicenseAqualityBmaintenanceEnables AI agents to shop on DoorDash through 16 consumer tools covering account and order history, restaurant and menu browsing, cart edits, checkout previews, and order placement (including charging a saved card). It authenticates via a user-launched Chrome session on Windows and encrypts session and operation records with Windows DPAPI.1612 npmMIT