ubereats-order-history-mcp
Provides read-only access to Uber Eats order history, order details, card transactions, receipts, and CSV exports.
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-order-history-mcpShow my Uber Eats orders from last week."
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.
Uber Eats Order History MCP
A read-only MCP server that gives Claude (or any MCP client) your Uber Eats order history: orders, every line item and option, the full fare breakdown, and which card paid how much, when - including tips billed hours after delivery and refunds.
It signs in with the session your Google Chrome already has (no password, ever), drives your real installed Chrome, and reads Uber Eats' own data feeds - the same JSON and receipt documents the website renders from - instead of scraping pages.
Unofficial. Uses the private web endpoints the ubereats.com website itself uses; Uber can change them at any time. Not affiliated with Uber.
Why
Uber Eats receipt emails often omit the items (store orders like Target show only a total), and the "download PDF" link needs a signed-in browser. Card statements show one amount per charge and nothing else. This server closes that gap:
You want | Tool | Source |
What did I order, from where, and what did each part cost? |
| order-history feed (JSON) |
Everything about one order, including each card charge |
| order + receipt |
Which Uber Eats order is this card charge? |
| receipts: card, amount, time per charge |
A spreadsheet |
| orders / items / transactions |
Am I signed in? |
| order-history feed |
Related MCP server: Uber Eats MCP Server
How it works
Claude ──stdio──> ubereats-order-history-mcp
│ 1. copy ubereats.com + uber.com cookies out of Chrome (macOS Keychain
│ consent; never logged) into the connector's own profile
│ 2. launch the REAL installed Chrome (headless) with those cookies,
│ or attach to the one another Claude session already launched
│ 3. open https://www.ubereats.com/robots.txt (tiny, same origin)
└─ 4. fetch() Uber Eats' own RPCs from that page:
POST /_p/api/getPastOrdersV1 order history, 10/page
POST /_p/api/getPastOrderV1 one order
POST /_p/api/getReceiptByWorkflowUuidV1 the receiptTwo receipt layouts. Receipts from about Sep 2025 carry
data-testidhooks. Older ones use Uber's classic table template with no hooks, which is parsed from its fixed text order. Both give the same fields, and on a real account every receipt's charges add up to its total.Root sources, not scraping. Orders come from
getPastOrdersV1JSON: items with unit prices in cents, option add-ons, and fare lines keyed likeeats_fare.subtotal,eats.tax.baseandeats_fare.tip. Card charges come from the receipt document, parsed by its stabledata-testidhooks (payments_0_Card.String,payments_0_AmountCharged, ...). No layout or CSS selectors are used.Checked against itself. Every order reports
itemsMatchSubtotal: whether (unit price + add-ons) × quantity reproduces Uber's subtotal. Where a receipt prints exact line amounts (restaurants), those win. Fare lines are summed into subtotal / tax / fees / tip / discounts that add up to the total.Latest browser, same identity. The installed Chrome is driven directly, with its real version in the user agent. The cookies belong to that Chrome, and Uber's firewall rejects Playwright's bundled Chromium.
Reuse, then repair. Chrome's session is copied in every time the browser opens. Before each tool call a sign-in guard checks the session. If it has expired, the guard re-imports Chrome's cookies and retries with backoff; if that fails, it returns a typed
NOT_SIGNED_INerror, never an empty "success".Retries where they help. Rate limits (429), 5xx errors, a Cloudflare challenge page and a crashed page are retried with backoff, on a fresh page for a challenge. Signed-out and bad-input errors are not.
One browser for every Claude session. The first server launches Chrome with a random local debugging port and a lockfile; others attach to that exact browser (read from its own
DevToolsActivePort), never to a guessable port.Efficient. Paging stops as soon as it passes
start_date. Receipts are fetched 4 at a time and only for orders in range. A 60-day transactions query is about 2–4 seconds.
Tools
All tools are read-only. Nothing here can order, tip, rate, cancel or pay.
get_ubereats_orders
start_date, end_date (inclusive YYYY-MM-DD, order placed date, local time), store (name contains, case- and symbol-insensitive, so "mcdonalds" matches McDonald's®), max_pages (default 60), include_items (default true), include_receipts (default false; adds each order's card charges).
{
"id": "b37637a0-18d4-4316-a445-2e62415bb3fb",
"store": { "name": "Target", "address": "512 2nd Ave, New York, NY 10016" },
"status": "completed", "category": "GROCERY",
"placedAt": "2026-09-21T23:09:58.000Z",
"items": [
{ "title": "Cascade Platinum Dishwasher Detergent Liquid, Fresh (75 fl oz)", "quantity": 1, "unitPrice": 14.39, "lineTotal": 14.39 },
{ "title": "Dealworthy Hdmi High Speed Cable With Ethernet Cable, 6 ft, Black", "quantity": 1, "unitPrice": 10.79, "lineTotal": 10.79 }
],
"fare": { "subtotal": 25.18, "tax": 2.98, "deliveryFee": 0.99, "serviceFee": 7.4, "tip": 0, "discounts": 0, "total": 36.55 },
"itemsMatchSubtotal": true
}get_ubereats_transactions
One row per card charge or refund, the shape of a card statement. start_date (required), end_date, card_last4, store, lookback_days (default 7: tips and refunds post after the order).
[
{ "chargedAt": "2026-06-24T09:48", "amount": 22.3, "brand": "Mastercard", "last4": "2222", "kind": "charge", "isTip": false, "store": "The Home Depot" },
{ "chargedAt": "2026-06-24T11:50", "amount": 2.56, "brand": "American Express", "last4": "1111", "kind": "charge", "isTip": true, "store": "The Home Depot" },
{ "chargedAt": "2026-06-24T17:49", "amount": -6.13, "brand": "Mastercard", "last4": "2222", "kind": "refund", "isTip": false, "store": "The Home Depot" }
]chargedAt is the wall-clock time printed on the receipt (no time zone). A charge the receipt prints without an amount is null, unless it is the ONLY such charge on its receipt. Then it is inferred as the receipt total minus the other charges (the whole total for a single-charge receipt), and flagged amountInferred: true, so it is never mistaken for an amount Uber printed. On a real account no amounts needed inferring: every receipt printed all of them.
get_ubereats_order_details
order_id (UUID), include_receipt (default true). Returns the order plus the parsed receipt: payments, fare lines, printed item amounts and options, pickup and drop-off addresses.
export_ubereats_csv
kind: orders | items | transactions, plus dates and an optional output_path (default ~/Downloads). Files are written 0600, and cells are protected against spreadsheet formula injection.
check_ubereats_auth_status
Reports whether the session works; if not, it tries one repair from Chrome first.
Install
Requirements: macOS, Google Chrome signed in to ubereats.com, Node 20+.
git clone https://github.com/tmedford/ubereats-order-history-mcp.git
cd ubereats-order-history-mcp
npm install && npm run build
claude mcp add ubereats-orders -- node "$PWD/dist/index.js"The first run may show a macOS Keychain prompt for "Chrome Safe Storage". That's macOS asking whether this program may read Chrome's cookie key; choose Allow (or Always Allow).
No browser download is needed: playwright-core drives your installed Chrome.
Configuration (environment, all optional)
Variable | Default | |
| system zone | Zone used to turn timestamps into |
|
|
|
|
| Chrome profile to read cookies from ( |
| Full path to that profile directory instead | |
|
| Chrome binary to drive |
|
| The connector's own browser profile (never Chrome's) |
|
|
Privacy and security
Enforced in code, and each point is covered by tests:
Read-only allowlist.
ALLOWED_OPERATIONSinsrc/ubereats/rpc.tsholds the only three operations the server can call:getPastOrdersV1,getPastOrderV1andgetReceiptByWorkflowUuidV1. Any other name is refused before a request is made, so nothing can order, tip, rate, cancel or pay.The session never leaves Uber Eats. The automation page aborts every request that isn't
https://*.ubereats.com: no trackers, no plaintext, no redirects off-site. There is no telemetry and there are no third-party calls.Cookies: only
ubereats.com/uber.comcookies are decrypted; Chrome's master key is held in memory for one import only. They are then written into the connector's own persistent browser profile,UBEREATS_ORDERS_BROWSER_DATA_DIR(default~/.ubereats-order-history-mcp/browser-data, forced to0700), so the session stays on disk after the server stops, like any browser profile. Delete that directory to remove it; Chrome's own session is untouched. Cookie values are never logged. Chrome's app-bound (v20) cookie encryption is refused, not bypassed.Errors are sanitized. Anything token-shaped (JWTs, long hex or base64 strings) is stripped from error text before it reaches the client, and error snippets are length-capped.
The debugging port is random, bound to
127.0.0.1, and attached to only through the owning profile'sDevToolsActivePortwhile the owner process is alive. Like any local browser, other programs running as your user could reach it while it's open; it's never exposed to the network.Exports are written
0600(re-applied when overwriting), with formula-injection protection.No personal data in the repo. Fixtures are real responses scrubbed by
scripts/scrub-fixtures.mjs, which fails if a known value survives. On top of that,scripts/check-leaks.mjsruns in CI on every push and PR and fails the build on any email, phone number, non-placeholder card number, JWT, session cookie, token or receipt name in any tracked file.captures/(raw data from your account) is gitignored.
Found a security issue? See SECURITY.md.
Limits
History depth: Uber Eats' website serves about two years of orders, and a query that reaches further back returns a warning naming where the history starts. Older orders need Uber's data download.
Missing receipts: occasionally Uber has no receipt for an order; it's reported in
receiptErrors, never silently dropped.Your account only: orders placed from someone else's Uber account (even on your card) aren't visible.
Group orders you didn't create show
isOrderCreator: false.macOS only (the Chrome cookie decryption uses the macOS Keychain).
Development
npm test # unit tests (fixtures, no network)
npm run lint && npm run typecheck && npm run check:leaks
npm run test:e2e # END-TO-END against your real account through the MCP protocoltest:e2e spawns the built server over stdio and calls every tool. It also checks that two servers share one browser, and that a server with no Chrome session returns NOT_SIGNED_IN. Pin exact values with E2E_ORDER_ID, E2E_ORDER_DATE, E2E_ORDER_TOTAL, E2E_ORDER_ITEMS, E2E_CARD_LAST4 and E2E_SPLIT_ORDER_DATE.
When Uber changes a response shape, refresh the fixtures from your own account:
npm run build && node scripts/capture.mjs 3 12 # raw → ./captures (gitignored)
node scripts/scrub-fixtures.mjs <orderIds,...> grocery=<id> split-charges=<id> ...Credits
The Chrome cookie import, shared-browser election and sign-in guard are ported from tmedford/amazon-order-history-csv-download-mcp, a fork of marcusquinn/amazon-order-history-csv-download-mcp (MIT). See CREDITS.md.
MIT licensed.
Available Tools
5 toolscheck_ubereats_auth_statusA
Check whether the connector is signed in to Uber Eats. It reuses the session from your Google Chrome (cookies are copied from Chrome on every start and whenever a call finds the session expired) - it never asks for a password.
| 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 full burden and reveals key behaviors: reuses Chrome session, copies cookies on start and on session expiry, and never asks for a password. It does not specify return format or side effects, but it provides meaningful behavioral context beyond a simple 'check'.
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?
A single, well-structured sentence that leads with the main purpose, then uses a dash to add session-reuse context. No redundant or filler words; front-loaded and efficient.
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, no-output-schema check tool, the description is reasonably complete: it explains what it checks, how it authenticates (via Chrome cookies), and that it never asks for a password. The only gap is not explicitly stating the return value (e.g., boolean), but that is a minor omission for such a simple tool.
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?
No parameters exist and the schema is empty, so the description adds no parameter details, but the baseline for zero-param tools is 4. The description does not need to explain any parameters.
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?
Clearly states the specific action ('Check whether the connector is signed in to Uber Eats') and distinguishes itself from sibling data-retrieval tools (orders, details, transactions, export). The verb 'check' and resource 'auth status' are unambiguous.
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?
Implies the tool is a pre-check for authenticated operations (e.g., before fetching orders) but does not explicitly state when to use it versus alternatives or when not to. No exclusions or direct references to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_ubereats_csvA
Write orders, line items or card transactions to a CSV file (default ~/Downloads). Returns the path and row count.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| store | No | Only orders from stores whose name contains this, e.g. "home depot" or "mcdonalds" (case and symbols ignored). | |
| end_date | No | Inclusive YYYY-MM-DD. | |
| max_pages | No | Default 60. | |
| start_date | No | Inclusive YYYY-MM-DD. | |
| output_path | No | File to write. Default ~/Downloads/ubereats-<kind>-<dates>.csv |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the core side effect (writing a file), the default location, and the return value (path and row count). It omits other behavioral details such as overwrite behavior, auth requirements, and pagination semantics, so it is adequate but not rich.
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 sentences communicate purpose, default behavior, and return value with no filler. The most important information is front-loaded.
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?
The description is reasonably complete for a 6-parameter tool whose schema covers most inputs, and it tells the agent what to expect back. However, with no annotations and no output schema, it leaves out auth, overwrite, and pagination behavior, which an agent may need to invoke it safely.
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 high at 83%, so the schema already documents most parameters. The description adds modest value by glossing 'items' as 'line items' and noting the default output location, but it does not need to repeat parameter details.
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 states a specific verb ('Write'), a concrete resource ('CSV file'), and the three data categories that mirror the `kind` enum. This clearly distinguishes it from the sibling get_* tools, which imply in-memory retrieval rather than file export.
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 usage context is implied: use when the user wants orders/items/transactions written to a CSV file. However, the description does not explicitly contrast this with get_ubereats_orders or get_ubereats_transactions, nor does it state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ubereats_order_detailsA
Everything about one Uber Eats order: items and options, fare breakdown, and (by default) its receipt - every card charge, separately-billed tip and refund with the card brand, last 4 digits, amount and time, plus pickup/drop-off addresses.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Order id (UUID) from get_ubereats_orders. | |
| include_receipt | No | Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does this well by specifying what is returned, noting the receipt is included by default, and naming the card-brand/last-4/time details. It does not explicitly state side effects or error behavior, but the operation is clearly a read-only detail fetch.
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 a single dense sentence that front-loads the purpose and then lists contents in a colon-separated list. Every clause earns its place, though the sentence is slightly overloaded with detail.
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?
Given two simple parameters and no output schema, the description provides a thorough account of what the call returns, including default receipt behavior. Minor gaps remain around what happens when include_receipt is false and any prerequisite auth state, but the definition is largely self-sufficient.
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 parameters. The description adds only minor semantic reinforcement by confirming the receipt is included by default, matching the include_receipt default.
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 clearly identifies the resource ('one Uber Eats order') and enumerates the returned categories: items, fare breakdown, receipt charges, tips, refunds, and addresses. It is distinguishable from sibling tools by its singular-order scope, though it doesn't explicitly name an alternative.
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 description implies this is the tool for fetching details about a specific order, and the schema adds context that the order_id comes from get_ubereats_orders. However, it does not explicitly explain when to choose this over get_ubereats_transactions or get_ubereats_orders, leaving routing largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ubereats_ordersA
List Uber Eats orders newest-first, read from Uber Eats' own order-history feed: store, dates, status, every item with quantity/unit price/options, and the fare breakdown (subtotal, tax, delivery fee, service fee, tip, discounts, total). Stops paging as soon as it passes start_date. Set include_receipts to also attach each order's card charges.
| Name | Required | Description | Default |
|---|---|---|---|
| store | No | Only orders from stores whose name contains this, e.g. "home depot" or "mcdonalds" (case and symbols ignored). | |
| end_date | No | Inclusive YYYY-MM-DD. | |
| max_pages | No | Safety cap, 10 orders per page. Default 60. | |
| start_date | No | Inclusive YYYY-MM-DD (order placed date, local time). | |
| include_items | No | Include line items (default true). | |
| include_receipts | No | Also fetch each order's receipt: card, amount and time of every charge/refund (one extra call per order). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does add useful behavior: source is Uber Eats' order-history feed, pagination stops after start_date, and include_receipts triggers one extra call per order. It does not mention authentication, rate limits, or error behavior, which are notable gaps but not fatal.
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?
Three dense sentences with no wasted words. The purpose is front-loaded, followed by paging behavior and the optional receipt parameter. Every sentence contributes useful information.
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 output schema, the description compensates by listing the returned fields, paging behavior, and the receipt-expansion option. It omits auth concerns and does not explain max_pages/end_date interaction, but those are partially covered by the schema and this is a read-only list operation.
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?
Input schema coverage is 100%, so the baseline is 3. The description adds a small amount of meaning around include_receipts and paging past start_date, but it does not substantially enrich parameter semantics beyond what the schema already provides.
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 a specific verb and resource ('List Uber Eats orders'), the ordering ('newest-first'), and the exact returned data (items, fare breakdown). It is clear enough to distinguish from siblings like get_ubereats_order_details and get_ubereats_transactions, though it does not explicitly name 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 description gives clear context for when this tool is appropriate: it is the order-history feed and optionally fetches receipts. However, it never states when to use an alternative such as get_ubereats_order_details or get_ubereats_transactions, so the boundary to related tools is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ubereats_transactionsA
Every card charge and refund Uber Eats made, one row each - the shape of a card statement: charge time, amount, card brand + last 4, the order and store it paid for, and whether it is a tip billed after delivery. Use this to match bank/card transactions to orders. Charges are kept by their own date, so a tip or refund that posted days after the order is included.
| Name | Required | Description | Default |
|---|---|---|---|
| store | No | Only orders from stores whose name contains this, e.g. "home depot" or "mcdonalds" (case and symbols ignored). | |
| end_date | No | Inclusive YYYY-MM-DD. | |
| max_pages | No | Safety cap on order-history pages. Default 60. | |
| card_last4 | No | Only charges on this card (last 4 digits). | |
| start_date | Yes | Inclusive YYYY-MM-DD (charge date). | |
| lookback_days | No | Also scan orders placed this many days before start_date (late tips/refunds). Default 7. |
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 that tips or refunds posted days after the order are included (behavioral nuance). It also states that charges are kept by their own date. This is useful behavioral context. However, it does not mention pagination behavior, rate limits, or what happens when no transactions exist. It's reasonable but not exhaustive.
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 a single, information-dense paragraph with clear structure: it explains what the tool returns, its purpose, and a key behavioral detail. It's not overly long and front-loads the core value. Minor redundancy (e.g., 'one row each' and 'the shape of a card statement') but overall efficient.
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 read-only lookup tool with 100% schema coverage and no output schema, the description sufficiently orients an agent: what data is returned, why to use it, and a caveat about timing. It lacks details on pagination or output format, but since it's a list tool and the schema covers parameters, this is acceptable. Slightly more on response shape could be added, but it's near-complete.
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 all parameters. The description adds some context: it explains the significance of lookback_days (late tips/refunds) and store filtering case sensitivity, but most parameter semantics are already covered. Baseline 3 is appropriate since the description adds marginal value beyond the schema.
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 clearly states that the tool returns every card charge and refund from Uber Eats, one row each, with specific fields (charge time, amount, card brand + last 4, order and store, tip flag). It distinguishes itself from sibling get_ubereats_orders by focusing on financial transactions rather than order details. The purpose is specific and unambiguous.
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 description says 'Use this to match bank/card transactions to orders,' which is a clear use case. It doesn't explicitly name alternatives or state when not to use it, but it implies a distinct purpose from get_ubereats_orders (which likely focuses on order content rather than charges). It could be stronger by explicitly contrasting with sibling tools, but the context is adequate.
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.
5 tool updates
v0.2.0- First observed
check_ubereats_auth_status - First observed
export_ubereats_csv - First observed
get_ubereats_order_details - First observed
get_ubereats_orders - First observed
get_ubereats_transactions
TDQS
Scored across 5 tools
The tools are mostly distinct: auth check vs. fetching orders, details, transactions, and exporting. However, get_ubereats_orders and get_ubereats_order_details could be confused (both return details), though the former is a list and the latter a single order. Also, get_ubereats_transactions and the receipt in details overlap slightly.
All tools follow a consistent pattern: check_ubereats_auth_status, get_ubereats_orders, get_ubereats_order_details, get_ubereats_transactions, export_ubereats_csv. The verb_noun format is uniform, and the resource is clearly prefixed with 'ubereats'.
With 5 tools, this is well-scoped for the domain of reading Uber Eats data (auth check, order list, order detail, transactions, export). Each tool has a clear, non-redundant purpose, and the count is ideal for a focused connector.
The set covers read and export operations comprehensively, but there is no update/delete or order mutation (e.g., reorder, cancel) since this is a read-only connector. The missing ability to filter or summarize directly might be a gap, but the core purpose of retrieving and exporting order history is covered.
Maintenance
Related MCP Connectors
Pickup orders at Japanese restaurants for AI agents: find stores, read menus, place orders. No auth.
Read-only access to your Drivara fleet — jobs, drivers, vehicles, fuel, profit & analytics.
Capture and organize receipts from your AI chat: totals, categories, ledgers.
Read-only access to a Zoopit account: orders, routes, fleet and live vehicle positions.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables downloading Amazon order history as CSV files with support for orders, items, shipments, and transactions across 16 Amazon regional sites using browser automation.1218 npm20MIT
- FlicenseNot gradedqualityDmaintenanceEnables interaction with Uber Eats for food ordering and delivery management through natural language, acting as a proof-of-concept MCP integration.-
- FlicenseAqualityDmaintenanceAllows AI assistants to browse menus, manage carts, and place orders on Uber Eats through natural language commands.342-
- AlicenseNot gradedqualityBmaintenanceEnables searching restaurants and menu items, viewing availability and full menus, and managing restaurant carts via the private Yandex.Eats web API, secured with single-user OAuth, without exposing sensitive account or location data.8 npmMIT