Skip to main content
Glama

Peckish 🍜

Feeling peckish? Just ask. An AI ordering agent for DoorDash β€” it searches, compares real totals (fees included), builds the cart, and you approve every order. Built on Claude and DoorDash's official dd-cli.

One tool layer, three surfaces:

Surface

Start

Best for

Terminal chat

peckish

Living in the terminal

Local web app

peckish-web β†’ http://localhost:4747

Consumer-friendly UI: store cards, live quote, Stop button, order modal

MCP server

claude mcp add peckish -- npx -y peckish-mcp, or the double-click .mcpb

Claude Desktop / Claude Code users β€” no API key needed; your Claude subscription powers the model

Which one is for me?

  • Comfortable with a terminal? β†’ Terminal chat. Fastest, most informative.

  • Want something that feels like an app? β†’ Local web app. Cards, live quote, a proper Place-order button.

  • Already use Claude Desktop or Claude Code? β†’ MCP server. No API key, no separate chat window β€” Claude itself becomes your ordering agent, and order confirmation appears as a native dialog.

peckish on the web β†’

Updates: every release ships with full notes, all artifacts, and a SHA256SUMS.txt on Releases β€” see CHANGELOG.md for the history. Watch the repo (Releases only) to get notified.

Install in one line β€” no git clone:

npm install -g peckish

Prefer an app? Download the Mac app (.dmg) β€” guided setup, no terminal at any step. See Mac app below. Everything runs on your own machine either way, because dd-cli holds your DoorDash session there β€” a Mac (Apple Silicon) or Linux x86_64, including containers and cloud sandboxes: see Linux, containers and headless hosts.

you β€Ί Find me a high-protein dinner under $25 that can arrive within 45
      minutes. Avoid mushrooms and excessive fees.

βš™ search_restaurants {"query":"grilled chicken bowls","limit":8}  βœ“ 2.1s
βš™ get_menu {"store_id":"35406455","filter":"chicken"}             βœ“ 1.8s
βš™ list_carts {"store_id":"35406455"}                              βœ“ 1.2s
βš™ add_items_to_cart {…}                                           βœ“ 2.4s
βš™ preview_order {"cart_uuid":"…"}                                 βœ“ 3.9s

Best fit: Sharon Korean Kitchen (4.8β˜…, ~24 min) β€” Grilled Chicken Bulgogi
Bowl, $16.95. No mushrooms listed. Total with fees: $21.40 on your Visa
ending 1234. Suggested Dasher tip is $3.50 β€” that, another amount, or none?
~$0.04 turn Β· $0.04 session

Get started (user guide)

1. Prerequisites

  • A Mac with Apple Silicon (M1–M4) or Linux x86_64 β€” the two platforms dd-cli publishes builds for. Peckish is local-first: whichever machine you run it on is the backend on every surface, because that's where dd-cli holds your DoorDash session.

  • Node.js 20+ β€” node --version to check; install from nodejs.org or brew.

  • DoorDash CLI access (currently waitlist-gated by DoorDash). Peckish 0.4.0 requires dd-cli β‰₯ 0.2.1 β€” on Linux, β‰₯ 0.2.2, the first release with Linux builds. Download the release from doordash-oss/doordash-cli, verify the SHA256 checksum against the published value, then:

    # macOS (Apple Silicon)
    tar -xzf dd-cli-v*-darwin-arm64.tar.gz && cd dd-cli-v*-darwin-arm64
    # Linux (x86_64)
    tar -xzf dd-cli-v*-linux-amd64.tar.gz && cd dd-cli-v*-linux-amd64
    
    bash install.sh          # both platforms β€” installs to ~/.local/bin/dd-cli
    dd-cli login             # sign in to DoorDash in your browser

    No browser on that machine (container, VM, cloud sandbox)? See Linux, containers and headless hosts.

  • An Anthropic API key for the terminal/web surfaces (console.anthropic.com) β€” or skip the key entirely and use the MCP surface with your Claude subscription (step 4).

2. Install Peckish

npm install -g peckish

That's it β€” you now have three commands: peckish (terminal chat), peckish-web (web app), and peckish-mcp (MCP server).

git clone https://github.com/CydVilla/peckish.git
cd peckish
npm install
npm test          # optional: 25 unit tests, no network needed
npm run dev       # terminal chat (or: npm run web / npm run mcp)

3. Run it β€” terminal or web

export ANTHROPIC_API_KEY=sk-ant-…   # from console.anthropic.com

peckish         # terminal chat
peckish-web     # web app β†’ open http://localhost:4747

On boot Peckish verifies your DoorDash sign-in, shows your default delivery address, and flags any open carts you forgot about. If sign-in is missing or expired, Peckish offers to fix it for you: the terminal asks before launching dd-cli login (which opens your browser), the web app shows a sign-in card, and mid-conversation the agent can offer the same assist on any surface β€” you approve, sign in in the browser, and it picks up where it left off. On a machine with no browser, Peckish skips that offer and tells you how to inject a token instead β€” see below.

4. Or run it inside Claude β€” no API key

Claude itself becomes the ordering agent, and your Claude subscription pays for the model. Pick whichever fits your client:

Claude Code β€” one line:

claude mcp add peckish -- npx -y peckish-mcp

Claude Desktop β€” download peckish-0.2.2.mcpb from Releases and double-click it. Claude Desktop installs it like a browser extension: no terminal, no Node install, no JSON editing.

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "peckish": {
      "command": "npx",
      "args": ["-y", "peckish-mcp"]
    }
  }
}

If dd-cli isn't at ~/.local/bin/dd-cli, add "env": { "DD_CLI_PATH": "/your/path/to/dd-cli" } β€” desktop apps don't inherit your shell PATH.

Peckish is also listed in the MCP Registry as io.github.CydVilla/peckish, so clients that browse the registry can find it directly.

Restart Claude Desktop and ask it to find you dinner. Order confirmation appears as a native dialog; clients that can't render dialogs can browse and build carts but cannot place orders (fail closed).

5. Everyday use

Things to say:

  • "Find me a high-protein dinner under $25 that can arrive within 45 minutes. Avoid mushrooms and excessive fees."

  • "Compare the real totals at the top two β€” fees included."

  • "Reorder my usual from Sharon Korean."

  • "What did I spend on delivery last month?"

  • "Is this place actually good?" (checks web reviews)

  • "Never mushrooms, ever." β†’ saved permanently; applied automatically next time

  • "Get me milk, eggs, and a pound of ground beef from Whole Foods."

Placing an order always ends with an explicit confirmation you perform β€” typing yes in the terminal, clicking Place order in the web modal, or approving the dialog in Claude Desktop. Before that, Peckish must show you the itemized quote, confirm the tip, and name the card being charged. Decline anything and it backs off.

Controls & housekeeping

Where

What

Terminal

/prefs saved preferences Β· /cost session spend Β· /reset new conversation Β· /quit Β· Ctrl+C stops a running turn

Web

Stop button cancels a turn Β· New chat resets Β· header chip shows session cost Β· click the address chip to switch your delivery address (editing an address's text happens on doordash.com β€” Peckish picks it up automatically)

Both

Preferences live in ~/.peckish/preferences.json; a full audit log of every tool call and confirmation is written to ~/.peckish/logs/*.jsonl

Cost: defaults are tuned for low spend at decent quality β€” claude-sonnet-5 at medium effort, prompt caching on the system prefix and conversation tail, and server-side context editing that prunes stale menu payloads in long sessions. The cost meter shows the approximate spend per turn and per session. Max quality: DD_AGENT_MODEL=claude-opus-4-8 DD_AGENT_EFFORT=high. (On MCP, the client chooses and pays for the model.)

Troubleshooting

Symptom

Fix

DoorDash sign-in is missing or expired

Accept the built-in sign-in assist (it runs dd-cli login for you), or run it in a terminal yourself

The same, on a headless Linux box

There's no browser to sign in with: dd-cli export-token on a machine that has one, then DD_CLI_ACCESS_TOKEN=… here (details)

Auth errors right after upgrading dd-cli

New CLI versions can need fresh scopes β€” sign in again (assist, dd-cli login, or a fresh export-token)

Anthropic authentication failed

export ANTHROPIC_API_KEY=… in the same shell, restart

dd-cli binary not found

Install dd-cli (step 1) or set DD_CLI_PATH=/path/to/dd-cli

no dd-cli build for your machine

dd-cli ships macOS arm64 and Linux x86_64 only β€” Intel Macs and Linux arm64 can't run Peckish

Web app port in use

PECKISH_PORT=5757 peckish-web

A turn ran away

Ctrl+C (terminal) / Stop (web) β€” history rolls back cleanly

Env vars: DD_AGENT_MODEL (default claude-sonnet-5), DD_AGENT_EFFORT (low–max, default medium), DD_CLI_PATH, PECKISH_PORT (default 4747), DD_CLI_ACCESS_TOKEN (read by dd-cli itself β€” browserless sign-in).


Related MCP server: doordash-mcp

Mac app

A double-clickable app for people who never want to see a terminal: download Peckish-x.y.z-arm64.dmg from Releases, drag Peckish to Applications, and open it.

First launch (Gatekeeper): the app is ad-hoc signed but not notarized (no paid Apple Developer ID), so macOS won't open it on a plain double-click the first time. Right-click the app β†’ "Open" β†’ "Open" (or approve it under System Settings β†’ Privacy & Security). Only needed once.

If macOS instead says "Peckish is damaged and can't be opened", you have a build from before this was fixed, or the download quarantine got confused. Clear it once and it opens normally:

xattr -cr /Applications/Peckish.app

First-run setup happens in the app β€” three buttons, no terminal:

  1. DoorDash CLI β€” one-click guided install (downloads the official release, verifies its SHA256 checksum before running anything). If you don't have dd-cli access yet, there's a waitlist link.

  2. Sign in to DoorDash β€” opens your browser; the app detects when you're done. Your sign-in lives in the macOS keychain.

  3. Anthropic API key β€” paste it once; it's stored encrypted with Electron safeStorage (keychain-backed), never in plain text.

Then Open Peckish β€” same web app, same order-confirmation modal, same safety gates; the app is just a shell that runs the local server for you on a random localhost-only port. Requires Apple Silicon; Node.js is not required (the app bundles its own runtime).

Building it yourself: cd desktop && npm install && npm run dist β†’ desktop/dist/Peckish-*.dmg.

The .dmg is the one Mac-only surface. The terminal, web and MCP surfaces all run on Linux too:


Linux, containers and headless hosts

dd-cli v0.2.2 added Linux (amd64) builds, so all three Peckish surfaces run on Linux x86_64 unchanged β€” same tools, same order gate, same audit log. Install dd-cli from the same release page (asset dd-cli-v<version>-linux-amd64.tar.gz, verify its SHA256, bash install.sh), then npm install -g peckish. If you put the binary somewhere other than ~/.local/bin/dd-cli, set DD_CLI_PATH β€” Peckish also checks /usr/local/bin/dd-cli and your PATH.

With a desktop session (DISPLAY or WAYLAND_DISPLAY set), nothing changes: dd-cli login opens your browser and the built-in sign-in assist works exactly as it does on a Mac.

Without one β€” a container, a VM, a cloud sandbox, SSH with no forwarding β€” the browser flow cannot complete, so Peckish stops offering it (no spawned login that hangs forever, no "run dd-cli login" advice that can't work) and points at the token path instead:

# 1. on a machine that HAS a browser (dd-cli β‰₯ 0.2.2)
dd-cli export-token

# 2. in the environment that runs Peckish
export DD_CLI_ACCESS_TOKEN='<the token>'
peckish            # or peckish-web / peckish-mcp

dd-cli picks the token up from the environment Peckish passes down, so every surface authenticates without a keychain or a browser.

  • That token is live access to your DoorDash account β€” it can place real orders. Treat it like a password: keep it in your runtime's secret store, not in an image layer, a docker run -e in your shell history, or a committed .env. Mint a fresh one with dd-cli export-token when it expires.

  • The order gate does not change. Placing an order still needs your explicit approval on the surface you're using (typed yes, the web modal, or the MCP dialog) β€” headless means no browser, not unattended ordering.

  • peckish-web in a container binds 127.0.0.1 inside the container by design, so a published port (-p 4747:4747) can't reach it. Run the container with --network host (Linux), or use the terminal or MCP surface, which need no port at all.

  • Not supported: Linux arm64 and Intel Macs β€” dd-cli publishes no build for either, and Peckish says so explicitly instead of failing obscurely.


What it does

  • Search β†’ menus β†’ cart β†’ preview β†’ confirm β†’ submit, with the real fee/ETA quote (order preview) driving every recommendation.

  • Comparison shopping: builds carts at up to 3 finalists, compares true totals + fee share + ETA, recommends one, deletes the losers.

  • Fee tactics: promo scanning with consent, pickup-vs-delivery comparison, DoorDash credits surfaced, DashPass status shown.

  • Memory: dietary rules and habits persist across sessions and surfaces.

  • History: "my usual" from order frequency, honest spend breakdowns from receipts, reorders with silent-drop detection.

  • Web reviews via Claude's server-side web search (never used for prices β€” dd-cli is the only source of truth for ordering data).

  • Group carts (new in 0.4.0): "start a group order for the team, $25 each" β€” creates a shareable cart link, optional per-person spend limit, host reviews and submits when everyone's in.

  • Express delivery (new): asks for Priority when you want it fastest β€” offered per-cart, priced into the quote before you approve.

  • Credits control (new): DoorDash credits apply by default; say "don't use my credits" to opt out for an order.

  • Enterprise chains (new): Domino's, Sweetgreen, Dave's Hot Chicken and other big chains are now orderable (dd-cli β‰₯ 0.2.1).

  • Work benefits (company budgets + expense codes), scheduled delivery, pickup, groceries/retail/pets/alcohol.

Architecture

terminal REPL          local web app           MCP client (Claude Desktop…)
 src/index.ts           src/web.ts + public/    src/mcp.ts
      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚  (client's model reasons;
                   ↓                                 β”‚   server instructions guide it)
     Claude agent loop, streaming                    β”‚
     src/agent.ts Β· claude-sonnet-5 Β· strict tools   β”‚
     Β· adaptive thinking Β· context editing           β”‚
     Β· prompt caching Β· web_search Β· cost meter      β”‚
                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                   ↓
                 28 typed tools β€” src/tools.ts (strict: true)
                                   ↓
                 sanitizing wrapper β€” src/ddcli.ts
                                   ↓
                 dd-cli --json-output  β†’  DoorDash

Safety model

Placing an order always requires an explicit human approval rendered by the surface, not by the model:

Surface

The gate

Terminal

Type yes at a prompt

Web

"Place order" modal (declines automatically after 5 min)

MCP

Client elicitation dialog; clients without elicitation cannot place orders (fail closed)

Also on every surface:

  • Strict tool schemas β€” the API guarantees tool arguments validate before any handler runs (no malformed-argument class).

  • Abortable turns β€” Ctrl+C / Stop rolls history back to the turn start.

  • Audit log β€” every tool call, argument set, duration, confirmation outcome, and submit result in ~/.peckish/logs/*.jsonl.

  • Tip confirmed + card named before any submit ask; submit never auto-retries (not idempotent); success reported only after order status confirms.

  • Merchant text treated as data (widget/assistant-instruction fields stripped); read-only CLI calls retry once on transient errors, mutations never do.

  • Web server is localhost-only (Host + Origin checks).

What Peckish shares with DoorDash

dd-cli β‰₯ 0.2.1 requires an --intent note on every command, which DoorDash says it may review for research and product improvement. DoorDash's documented format asks for your verbatim prompt β€” but food prompts routinely contain dietary, health, and religious signals, which DoorDash's own guidance says to avoid. So Peckish defaults to privacy:

  • What is sent: a one-line goal summary authored by the model at generic altitude (e.g. Summary: Help the user order dinner), plus an explicit user prompt/purpose: "(not shared β€” Peckish privacy default)" marker.

  • What is never sent by default: your verbatim words, dietary rules, budgets, names, saved preferences, or conversation content.

  • Opt in to the full format: set PECKISH_INTENT_VERBATIM=1 and the intent will include your opening request verbatim, as DoorDash's docs ask.

Independent of intent, DoorDash necessarily sees the API traffic itself (searches, carts, orders) β€” that's inherent to ordering.

Repo map

File

What it is

src/index.ts

Terminal REPL surface (abort, cost lines, /cost)

src/web.ts + public/index.html

Web surface: SSE streaming, cards, Stop, confirm modal, Origin guard

src/mcp.ts

MCP stdio server: 28 tools + session context, instructions, elicitation gates

src/agent.ts

System prompt + streaming tool loop (beta: context editing; web_search; usage)

src/tools.ts

Tool schemas (strictified) + handlers; menu trimming/filtering

src/ddcli.ts

execFile wrapper: envelope parsing, UI-field stripping, error mapping, bounded read-only retry

src/platform.ts

Supported dd-cli targets + whether sign-in can use a browser here or needs an injected token

src/confirm.ts

Pluggable confirmation gates (fail closed)

src/costs.ts / src/logger.ts

Cost accounting Β· JSONL audit log

src/prefs.ts

Preference persistence (~/.peckish/)

tests/unit.test.ts

25 unit tests (npm test), no network needed

desktop/

Electron shell for the Mac app (.dmg): onboarding + server launcher, no agent logic

packages/mcp/

The peckish-mcp npm package β€” a launcher so npx -y peckish-mcp starts the MCP server

extension/

Claude Desktop extension (.mcpb): manifest + vendored server. node build-manifest.mjs && mcpb pack . peckish.mcpb

server.json

MCP Registry metadata (io.github.cydvilla/peckish)

Releasing

Everything ships from one tag. .github/workflows/release.yml publishes both npm packages, registers the MCP Registry entry, builds the .mcpb and the .dmg, and attaches both to the GitHub release:

npm version patch          # or edit the versions by hand
git push && git push --tags

Every publish step is skip-if-already-published, so re-running a tag after a failure is safe. .github/workflows/ci.yml runs typecheck, tests, a metadata consistency check, and a real MCP handshake on every push.

scripts/check-consistency.mjs guards the metadata that spans files and drifts silently β€” the registry namespace casing, matching server.json name and mcpName, the 100-character registry description cap, and the extension's advertised tool list. Run it locally before tagging.

npm β€” either configure trusted publishing on npmjs.com for both peckish and peckish-mcp (provider: GitHub Actions, repo CydVilla/peckish, workflow release.yml) so no secret is needed, or add an NPM_TOKEN repository secret using a granular access token with "bypass 2FA" enabled.

MCP Registry β€” nothing to configure. The workflow authenticates with mcp-publisher login github-oidc, and GitHub's OIDC token proves the repo owner is CydVilla, which grants the io.github.CydVilla/* namespace.

Mac app signing β€” the .dmg is built unsigned. Notarized builds would need an Apple Developer ID plus CSC_LINK/CSC_KEY_PASSWORD and notarization secrets.

Notes & limitations

  • Local-first by design: hosted delivery (SMS bots, voice) would require DoorDash's partner API β€” your own machine is the backend here.

  • One open cart per store (DoorDash rule) β€” Peckish collision-checks and asks.

  • payment-method list sees cards only; wallet defaults (Apple Pay etc.) are confirmed generically or via the browser checkout URL.

  • Age-restricted items can't be submitted by an agent β€” checkout URL fallback.

  • Popularity data is deliberately unused (per dd-cli guidance); web reviews fill that gap with attribution.

  • Cost figures are close estimates from token usage at list prices.

Available Tools

29 tools
add_items_to_cartA

Add items to a cart (creates one if no cart_uuid passed and none open at the store). APPEND semantics: re-adding an item_id SUMS quantities. Items need item_id + item_name + quantity; customizations go in nested_options[] (entries: id, name, quantity, optional recursive options[]). On required-options failure the response lists required_options[] β€” ask the user to choose, then retry. Check list_carts first.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesItems to add, e.g. [{"item_id":"123","item_name":"Salad","quantity":1,"nested_options":[{"id":"456","name":"Ranch","quantity":1}]}]
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
menu_idYesMenu ID from get_menu (restaurants) or build_grocery_list/item details (grocery)
store_idYesStore ID the items belong to
cart_uuidNoExisting cart to append to (omit to create/append to store's open cart). For someone else's group cart: pass their cart_uuid to join as a participant.
group_cartNoCreate a shareable GROUP cart (no cart_uuid), or join another person's group cart (with their cart_uuid). Response carries group_cart_url β€” share it with participants.
fulfillmentNoMode for a NEW cart (default delivery)
spend_limit_centsNoPer-participant spend limit in CENTS for a NEW host-pays group cart (2500 = $25). Requires group_cart; cannot combine with cart_uuid. Omit for unlimited.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate non-readonly, non-destructive, and open-world. Description adds APPEND semantics, error handling for required options, and group cart features. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Packed with information in a structured flow: core action, specifics, error handling, then predecessor tool. Slightly verbose but every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but description mentions response includes required_options[] and group_cart_url. Lacks other return fields like cart totals or status. Adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% but description adds context: intent guidelines (no personal details), group_cart behavior, spend_limit_cents explanation, and fulfillment default. Enriches parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool adds items to a cart, with APPEND semantics that sum quantities. Distinguishes from siblings like 'list_carts' (pre-check), 'show_cart' (view), and 'remove_cart_item' (remove).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Advises checking 'list_carts' first, retrying on required_options failure, and asking user to choose. Explains when to use cart_uuid vs create. Does not explicitly list when not to use, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_promoA

Apply a promo to a cart. Campaign promos from list_promos need promo_code + campaign_id + ad_group_id + ad_id; user-typed codes need only promo_code. On failure: check subtotal vs the promo's stated minimum. Re-preview after.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idNoCampaign promos only
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
cart_uuidYesCart UUID
promo_codeYesCode string
ad_group_idNoCampaign promos only
campaign_idNoCampaign promos only

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint=false, destructiveHint=false), the description adds that failure requires checking subtotal against the promo's minimum, and that re-preview is needed. This provides useful behavioral context without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences: purpose, conditional requirements, and failure advice. It is front-loaded and every sentence adds essential information, with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters (3 conditional) and no output schema, the description covers the core action, conditional fields, and failure handling. It omits prerequisites like cart existence or promo validity, but these are reasonable gaps given the conciseness and schema coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes all parameters (100% coverage). The description adds value by clarifying the conditional necessity of campign fields (ad_id, ad_group_id, campaign_id) only for campaign promos, which goes beyond the schema's static descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Apply a promo to a cart' with a specific verb and resource. It distinguishes between campaign promos and user-typed codes, and contrasts with sibling tools like list_promos and remove_promo by focusing on the apply action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit conditional usage: for campaign promos, specific fields are needed; for user-typed codes, only promo_code. It also advises on failure handling. However, it does not explicitly state when not to use this tool versus alternatives like remove_promo.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_grocery_listA

Resolve a grocery/pantry list to real products at one store (raw ingredients only β€” NOT restaurant food). STATELESS: every call REPLACES the list, so always send the complete list. Weight items take decimal quantity (0.5 = half lb) only when purchase_type is MEASUREMENT; eggs are per dozen. Verify resolved items[].name with the user before carting. Vague asks: cap at 20 items and show your picks.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes[{"name":"milk"},{"name":"ground beef","quantity":0.5}]
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
servingsNoOnly when the user says 'for N people' β€” display-only
store_idNoPin to a store (takes precedence over desired_mx_name)
desired_mx_nameNoPreferred merchant name, e.g. 'Whole Foods'

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate write operation (readOnlyHint=false) and interactive (openWorldHint=true). Description adds stateless behavior, input rules for quantity, and verification step with user, providing context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is a single paragraph but packs essential information without fluff. Could be better structured with bullet points, but remains concise and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description covers statefulness, input format, quantity rules, verification, and vague ask handling. No major gaps for a 5-parameter tool with good annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but description adds extra meaning: items example format, quantity decimal rule tied to purchase_type (though not in schema), and intent field guidelines. Adds value beyond schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool resolves a grocery/pantry list to real products at one store, raw ingredients only. It distinguishes from sibling tools like search_restaurants and get_menu by specifying 'NOT restaurant food'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the tool is stateless and replaces the list, requiring the complete list each time. Also provides guidance for vague asks to cap at 20 items and show picks, but does not explicitly list alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_cartA
Destructive

Empty a cart and abandon it (cart_uuid becomes invalid). Only on user request/consent β€” e.g. replacing a stale cart at the same store.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
cart_uuidYesCart UUID to abandon

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds context beyond annotations: cart becomes invalid, user consent required. Aligns with destructiveHint=true and readOnlyHint=false. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with key action and effect, no filler. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Effect is clear, but lacks mention of prerequisites (e.g., cart must exist) or side effects for openWorldHint. Adequate given low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema describes both parameters fully; description adds no extra meaning beyond what schema provides. Baseline score due to high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it empties and abandons a cart, making the UUID invalid. Distinguishes from siblings like remove_cart_item (single item removal) and list_carts (listing).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Only on user request/consent' and gives example (replacing stale cart). Does not mention alternatives or when not to use, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_itemsA
Read-only

Search items inside ONE retail/grocery store by name β€” returns item_ids for cart adds, keyed per query. Empty for restaurants (use get_menu there).

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
queriesYesOne or more item names, e.g. ['milk','eggs']
store_idYesRetail/grocery store ID

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and destructiveHint=false; description adds that results are 'keyed per query' and confirms item_ids are returned. No contradiction, and description adds value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste. Front-loaded with core purpose and essential usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only search tool with 3 required parameters and no output schema, the description covers purpose, usage, and return value. Slight room for example use but sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. Description adds context about return value (item_ids for cart adds) but does not deepen parameter semantics significantly. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Search items inside ONE retail/grocery store by name' with specific verb and scope. It distinguishes from sibling 'get_menu' by noting empty results for restaurants and directing to use that tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides context: 'returns item_ids for cart adds' suggests typical usage. Also includes when-not-to-use: 'Empty for restaurants (use get_menu there)', directly naming an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_storesA
Read-only

Discover NON-restaurant stores near the default address (16-mile radius): grocery (default), alcohol, convenience, pets, retail, or nv (all non-restaurant). distance_meters is meters β€” divide by 1609 for miles. Restaurant queries belong in search_restaurants.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoOptional latitude override (pass with lng)
lngNoOptional longitude override (pass with lat)
maxNoMax stores (default 10)
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
verticalNoMerchant type (default grocery)

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false. Description adds that it uses a default 16-mile radius and lat/lng overrides, giving useful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus a unit conversion note, front-loaded with purpose. Every sentence is essential with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple discovery tool, the description covers scope, radius, optional overrides, and exclusion of restaurants. No output schema, but return format is implied. Complete enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. Description adds value by explaining the unit conversion for distance_meters and that vertical defaults to grocery.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool discovers non-restaurant stores near the default address, lists verticals, and explicitly distinguishes from sibling tool 'search_restaurants'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use (non-restaurant stores) and when not (restaurants go to search_restaurants). Also provides unit conversion hint for distance_meters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_checkout_urlA

Browser checkout URL for a cart β€” FALLBACK ONLY, for edits the CLI can't make: swap payment method, opt out of credits, change address mid-checkout, enter a promo code, or finish an age-restricted order. Do not offer by default after previews.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
cart_uuidYesCart UUID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds context that the tool is a fallback for specific edits, revealing behavioral intent beyond annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The description front-loads the core purpose and immediately qualifies it as a fallback, followed by concrete usage examples and a prohibition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two parameters and no output schema, the description covers purpose, fallback nature, specific use cases, and when not to offer it. It lacks mention of the return format (a URL is implied) but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema provides 100% coverage for both parameters, including detailed intent description. The tool description adds overall context but does not elaborate on parameter meaning beyond what the schema already conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides a browser checkout URL for a cart and explicitly marks it as a fallback. It lists specific edit scenarios (swap payment method, opt out of credits, etc.), distinguishing it from sibling tools like preview_order and submit_order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage guidance: 'FALLBACK ONLY' and 'Do not offer by default after previews.' It explains when to use (e.g., for edits CLI cannot make) but does not explicitly name alternative tools for other contexts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_grocery_item_detailsA
Read-only

Details for a retail/grocery item (pricing, options) + menu_id fallback source for grocery cart adds. Restaurants: use get_restaurant_item_details.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
item_idYesItem ID from find_items or build_grocery_list
store_idYesStore ID

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only behavior is covered. The description adds the 'menu_id fallback source for grocery cart adds' context, which is a useful behavioral note beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loading the main purpose and immediately providing the key distinction for restaurants. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only details tool with no output schema, the description explains what is returned (pricing, options) and a special fallback behavior. It is largely complete, though could mention return format or single-item nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter is well-described. The description does not add new parameter-level details beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns details (pricing, options) for a retail/grocery item and explicitly distinguishes from the restaurant counterpart via sibling mention. The verb 'get' and resource 'details' are specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly advises to use get_restaurant_item_details for restaurants, providing a clear when-not-to-use. However, it does not compare to other sibling tools like find_items or build_grocery_list, though the purpose is distinct enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_menuA
Read-only

Fetch a restaurant's menu: returns menu_id (needed for cart adds and item details), store_is_open, and items with item_id, name, description, price, category, has_required_modifiers, orderability. Large menus are capped β€” pass filter (case-insensitive substring on name/description/category) to narrow.

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoOptional substring filter, e.g. 'chicken'
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
store_idYesStore ID from search_restaurants or order history

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, but the description adds valuable behavioral context: menu results may be capped, filter helps manage large menus, and returns menu_id needed for cart adds. It also mentions store_is_open and orderability. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The first sentence front-loads the core purpose and key returns. The second sentence adds a critical usage detail (capping and filter) succinctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description fully explains the return structure: menu_id, store_is_open, items with multiple fields. It also covers the limitation (capped menus) and how to handle it (filter). For a menu retrieval tool, this is comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 3 parameters. The description adds value beyond the schema by explaining that filter is a case-insensitive substring on name/description/category and that menu_id is needed for cart adds. This enriches the parameter semantics beyond the basic schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb 'Fetch' clearly indicates the action, and 'restaurant's menu' identifies the resource. It explains what is returned (menu_id, store_is_open, items with fields) and distinguishes from siblings like get_restaurant_item_details by focusing on the full menu.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states it fetches a menu and notes that large menus are capped, suggesting use of the filter parameter. While it doesn't explicitly list when not to use or alternatives, the context implies it's for menu retrieval and the filter is for narrowing. Sibling tools like get_restaurant_item_details are for item details, not full menus.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_order_historyA
Read-only

Past orders (default 50 orders / 90 days, max 100 / 365): store, items, total, order_uuid, is_reorderable, fulfillment_type. Use to analyze habits ('my usual'), find reorder targets, or locate a specific past order (scan all results; if page_full, re-query higher/wider).

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoMax orders 1-100 (default 50)
daysNoWindow in days, up to 365 (default 90)
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavioral details beyond annotations: defaults (50/90 days), maxes (100/365), field list, and pagination behavior ('if page_full, re-query higher/wider'). Annotations already declare readOnlyHint=true and destructiveHint=false, so no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence conveys defaults, fields, use cases, and pagination advice without waste. Front-loaded with key constraints (defaults and maxes). Efficient and well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers returned fields and pagination, essential for a read-only tool with no output schema. Lacks mention of ordering (likely most recent first) and error handling, but given low complexity and presence of openWorldHint, it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3 applies. Description repeats default and max values already in schema descriptions for max and days. Adds no new meaning for intent parameter beyond what schema says ('one short line stating who this is for'). No marginal value added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly specifies verb+resource: 'Past orders' with returned fields (store, items, total, order_uuid, is_reorderable, fulfillment_type). Differentiates from sibling tools like get_order_status or get_receipt by focusing on historical data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use: analyze habits, find reorder targets, locate a past order. Includes pagination hint. However, does not explicitly exclude alternatives like get_order_status or reorder, leaving some inference up to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_order_statusA
Read-only

Check whether a submitted order went through: successful | pending (check again) | action_required (user must verify in app) | failed | not_found.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
order_uuidYesFrom submit response or order history

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description is not required to restate safety. It adds behavioral context by listing possible statuses and their meanings (e.g., 'pending' means check again, 'action_required' means user action needed). There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that wastes no words. It efficiently conveys the core purpose and the set of possible outcomes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description covers the purpose and return values adequately. However, it does not explain the role of the 'intent' parameter (described in schema) or how the tool handles edge cases like invalid UUIDs. Still, the listed statuses include 'not_found', so it is mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters. The description does not add any additional meaning beyond what the schema already provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Check') and resource ('whether a submitted order went through') and clearly distinguishes this tool from siblings like 'submit_order' or 'get_order_history'. It enumerates possible statuses, making the purpose precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly guides usage by stating 'check whether a submitted order went through' and listing statuses like 'pending (check again)', which suggests when to call this tool (e.g., after submission). However, it does not explicitly mention when not to use it or name alternatives, so it falls short of a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_receiptA
Read-only

Itemized receipt for one past order (subtotal, fees, tax, tip, total, card last4). Sensitive β€” show only to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
order_uuidYesOrder UUID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true (safe read) and destructiveHint=false. The description adds behavioral context: it returns an itemized receipt with specific fields (subtotal, fees, tax, tip, total, card last4) and a sensitivity note. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences: the first states the purpose and return contents, the second provides a critical usage guideline. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with no output schema, the description covers what it returns and the sensitivity. It could mention prerequisites (e.g., order must exist) but given the sibling tools and annotations, it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the schema already documents both parameters. The description does not add extra meaning beyond the schema, which is acceptable. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Itemized receipt for one past order' with a clear verb+resource (get receipt) and scope (one past order). It distinguishes from siblings like get_order_status and get_order_history by specifying the detailed financial breakdown.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a key usage guideline: 'Sensitive β€” show only to the user,' indicating when to use (for displaying receipt to the user) and a constraint (not to share). However, it lacks explicit alternatives or when-not-to-use instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_restaurant_item_detailsA
Read-only

Full details for one restaurant menu item: price, description, and extras[] customization groups (each with options[] holding option_id choices, min/max selections). REQUIRED before adding any item with has_required_modifiers. Pass selected options[].option_id values as nested_options when adding to cart (never extra_id).

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
item_idYesItem ID from get_menu (i_ prefix handled automatically)
menu_idYesmenu_id from get_menu
store_idYesRestaurant store ID

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations: it explains the output contains nested customization groups (extras with options), and clarifies a prerequisite for cart addition. The annotations (readOnlyHint, openWorldHint, destructiveHint) are consistent and the description complements them well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph of three sentences, each earning its place: purpose, prerequisite, and usage instruction. Information is front-loaded with the core output details first. No redundant or unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 required params and no output schema, the description provides adequate context: what is returned (price, description, extras with options), when to use (required before adding items with modifiers), and how to use the output. Minor missing details like error handling do not detract significantly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add significant parameter-level details beyond the schema; it focuses on the overall output and usage. No contradiction or omission regarding parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns full details for a restaurant menu item including price, description, and extras customization groups. It distinguishes from sibling tools like get_menu and add_items_to_cart by specifying its role as a prerequisite and detailing the output structure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool: REQUIRED before adding any item with has_required_modifiers. Provides specific instructions on how to use the returned data: pass options[].option_id as nested_options when adding to cart, and notes never to use extra_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_session_contextA
Read-only

Load the user's ordering context: default delivery address, saved dietary/budget preferences, and current local time. Call once at the start of an ordering conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short goal line, e.g. 'Help the user order food'. No user verbatim or personal specifics.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that the tool loads address, preferences, and local time, adding context beyond the annotations (readOnlyHint, openWorldHint, destructiveHint) which already indicate safe read-only behavior. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first delivers the core purpose, second gives usage guidance. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple context-loading tool with one parameter and annotations providing safety profile, the description adequately explains what the tool returns and when to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers the single parameter 'intent' completely (100%), so the description adds no additional parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool loads the user's ordering context including default delivery address, dietary/budget preferences, and local time, which is a distinct resource from sibling tools that handle search, cart, or order management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Call once at the start of an ordering conversation', giving clear context for when to use, though it does not mention scenarios where it should not be used or provide alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_store_detailsA
Read-only

Store business metadata incl. printable_address β€” use when the user needs to know WHICH physical location a store is ('which Starbucks?').

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
store_idYesStore ID

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds the specific output (printable_address) but does not elaborate on other behavioral aspects, which is acceptable given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single focused sentence that front-loads the key purpose and usage context. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of a read-only metadata retrieval tool, the description, schema, and annotations together provide sufficient context. The description mentions the key output (printable_address) to set expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description does not add extra information about parameters, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool retrieves store business metadata including printable_address, and explicitly ties it to the use case of identifying a physical location (e.g., 'which Starbucks?'). This distinguishes it from sibling tools like find_stores.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Directly states when to use (identifying a physical location), but does not explicitly mention when not to use or provide alternatives, though the sibling context implies find_stores for searching.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_addressesA
Read-only

List the user's saved DoorDash delivery addresses (label, printable address, default flag). Use to resolve 'home'/'work' references. Delivery always uses the account default address.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true. The description adds value by stating the tool returns specific fields (label, printable address, default flag) and its role in resolving references. It does not contradict annotations and provides sufficient behavioral context for a read-only operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action and output, followed by a usage hint. Every sentence adds value with no redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one parameter, no output schema), the description is complete. It explains the returned fields (label, printable address, default flag) and provides a clear use case. No additional information (e.g., pagination) is necessary for typical usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with one parameter described. The tool description does not provide additional semantics about the 'intent' parameter beyond what the schema already states. The parameter description itself is more about usage guidelines than parameter details, but the schema carries the burden. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists saved DoorDash addresses with specific fields (label, printable address, default flag). It also provides context for its use (resolving 'home'/'work' references), distinguishing it from sibling tools like list_payment_methods or set_default_address.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies when to use the tool: to resolve address references like 'home'/'work'. It also notes that delivery always uses the account default address, implying the agent should check the default flag. However, it does not explicitly state when not to use this tool or mention alternatives such as set_default_address.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_cartsA
Read-only

List the user's open (unsubmitted) carts: cart_uuid, store, items, timestamps (epoch ms). ALWAYS check this before creating a cart at a store β€” only one open cart per store is allowed; if one exists, ask the user whether to extend or replace it.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
store_idNoOptional: filter to one store

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description correctly aligns as safe and non-destructive. It adds value by specifying returned fields (cart_uuid, store, items, timestamps) and the one-cart-per-store rule, though it does not mention potential pagination or filtering behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words. The first sentence states the purpose and return format; the second provides critical usage guidance. Information is front-loaded and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple list operation, strong annotations, and no output schema, the description covers core aspects: what it returns, when to use it, and the constraint. However, it could be slightly more explicit that this is user-scoped (implied) and that results are unsorted. Overall, complete enough for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add new meaning beyond what the schema provides; it references store and items in the return but does not elaborate on the 'intent' or 'store_id' parameters. Thus, it meets the baseline without improvement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists the user's open (unsubmitted) carts and specifies the return fields (cart_uuid, store, items, timestamps). It distinguishes from siblings like show_cart or delete_cart by focusing on open carts and providing a pre-creation check use-case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to always check this before creating a cart at a store, explains the constraint (only one open cart per store allowed), and instructs the agent to ask the user whether to extend or replace if one exists. This provides clear when-to-use and alternative handling guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_payment_methodsA
Read-only

Saved cards + which is default. Cards ONLY β€” wallets/gift cards are invisible here; never conclude 'no payment method' from an empty list (offer checkout-url instead).

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context: it only returns cards, not other payment methods, and describes how to interpret an empty list. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the core purpose. The second sentence adds a critical caveat and alternative action. No wasted words. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one parameter and no output schema, the description provides all necessary context: what is listed (cards, default), what is not (other payment methods), and how to interpret an empty result. Fully adequate with annotations and schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one parameter 'intent' with 100% coverage (description in schema). The tool description does not mention or supplement this parameter, so it adds no additional semantic value beyond the schema. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists saved cards and identifies the default. It explicitly warns that only cards are included, not wallets/gift cards, and advises against concluding 'no payment method' from an empty list. This provides specific verb+resource and distinguishes the tool's scope from potential alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description not only says when to use the tool (to get saved cards and default) but also explicitly states when not to (do not conclude no payment method from an empty list) and suggests an alternative action (offer checkout-url instead). This provides clear and actionable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_promosA
Read-only

Campaign promos eligible at a store for this user (may be empty β€” that's normal). To apply one to a cart use apply_promo with all four ids; preview_order shows what's actually discounting a cart.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
store_idYesStore ID

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, openWorldHint=true, destructiveHint=false. The description adds value by noting that emptiness is normal and explaining the relationship to other tools, but does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The key information is front-loaded, mentioning the purpose and then usage guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no output schema, the description covers what it returns (eligible promos), handles edge cases (empty), and guides to related tools, making it fully informative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 the parameters. The description adds no extra meaning beyond what's in the schema, hence baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies listing 'campaign promos eligible at a store for this user', which is a specific verb and resource. It distinguishes from siblings like apply_promo and preview_order by mentioning their roles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when the list may be empty ('that's normal'), and directs to apply_promo to apply a promo and preview_order to see discounts, providing clear alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_orderA

Authoritative pricing + logistics for a cart (read-only, no charge): display_summary (show VERBATIM to the user), quote {net_total_before_tip = the real total, line_items fee breakdown, tips_suggestion (cents), delivery_availability ETAs, credits, PIN requirement, work budgets}, and the default card (brand+last4). Re-run after ANY cart change. Pass include_work_benefits when the user mentions work/office/company/team/expense or delivers to a Work address. Budget checks: compare the user's cap against net_total_before_tip (tip adds on top).

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
priorityNoRequest Priority (express) delivery β€” a paid, faster upgrade. Delivery-only; incompatible with pickup and scheduled_time. Verify quote.delivery_availability.delivery_options[] contains delivery_option_type 'PRIORITY' before promising it; pass the same flag at submit.
cart_uuidYesCart UUID
fulfillmentNoMUTATES the cart's mode before pricing β€” only pass when the user explicitly asked to switch
scheduled_timeNoISO 8601 UTC (e.g. 2026-07-19T23:00:00Z) for scheduled delivery; omit for ASAP
no_apply_creditsNoOpt OUT of applying DoorDash credits (they apply by default β€” do not prompt about them). Pass ONLY when the user explicitly asks not to use credits; all-or-nothing; pass the same flag at submit.
selected_budget_idNoApply a specific work budget id from a prior preview
include_work_benefitsNoSet on ANY work/company/team/expense signal

TDQS

A4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states 'read-only, no charge' but the annotations have readOnlyHint=false, which contradicts the claim. This is a serious inconsistency that confuses the agent about whether the tool mutates state. No other behavioral traits are described beyond the contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and runs on, making it hard to parse quickly. It lacks front-loading and could be more structured with bullet points. However, it contains useful information with minimal fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having 8 parameters and no output schema, the description covers all critical aspects: what the tool outputs, when to rerun, parameter special cases, and budget handling. It is fully self-contained for the agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the description adds significant context beyond the schema: it explains that fulfillment mutates the cart mode, no_apply_credits should only be passed on explicit user request, and priority is incompatible with pickup/scheduled_time. This greatly aids correct parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides 'Authoritative pricing + logistics for a cart' and lists specific outputs (display_summary, quote, default card). The purpose is distinct from sibling tools like submit_order or add_items_to_cart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes explicit guidance: 'Re-run after ANY cart change', when to pass include_work_benefits, and budget comparison advice. It also tells how to use specific outputs like 'display_summary (show VERBATIM to the user)'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_cart_itemA

Remove one line item from a cart. cart_item_id = items[].id from show_cart (NOT the menu item_id).

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
cart_uuidYesCart UUID
cart_item_idYesCart-line id from show_cart items[].id

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate non-readonly and non-destructive, but description only says 'Remove,' which aligns. No contradictions, but no additional behavioral context (e.g., idempotency, side effects).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with no wasted words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple removal tool with no output schema, the description is adequate. It explains the parameter origin, which helps agents. Minor gap: no mention of return values or error handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and description adds crucial clarification that cart_item_id comes from items[].id in show_cart, not the menu item_id, which is valuable beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool removes a line item from a cart, specifying the resource (cart) and action (remove). It distinguishes from siblings by mentioning cart_item_id from show_cart, differentiating it from add_items_to_cart or show_cart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when removing a cart item but does not explicitly state when to use or avoid this tool, lacking guidance on alternatives or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_preferenceC

Delete a saved preference note (exact text match).

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYesExact note text to remove
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.

TDQS

C2.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description claims deletion, which is destructive, but annotations set destructiveHint=false, creating a contradiction. No additional behavioral details (e.g., side effects, idempotency, or error behavior) are provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, 7 words, no redundancy. Appropriate length for a simple deletion tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks critical information such as behavior when note not found, success confirmation, or error handling. For a deletion operation, these gaps reduce completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The tool description adds no new meaning beyond what the schema provides, so baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (Delete) and resource (saved preference note) with constraint (exact text match). It differentiates from save_preference as the inverse operation, but does not elaborate further.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like save_preference or other preference-related tools. The description lacks context for appropriate usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_promoA

Remove an applied promo (pass the same ids used at apply). Re-preview after.

ParametersJSON Schema
NameRequiredDescriptionDefault
ad_idNoIf used at apply
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
cart_uuidYesCart UUID
promo_codeYesCode to remove
ad_group_idNoIf used at apply
campaign_idNoIf used at apply

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true) already indicate a non-read-only, non-destructive mutation. The description adds 'Re-preview after' as behavioral advice but does not elaborate on side effects, permissions, or error states. With annotations present, a score of 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the main action. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple mutation tool with no output schema, the description covers the core action and provides a practical next step ('Re-preview after'). However, it omits mention of return values or error cases, which would be helpful for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by stating 'pass the same ids used at apply', explaining the role of optional parameters (ad_id, ad_group_id, campaign_id) beyond their schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource ('Remove an applied promo') and distinguishes itself from siblings like `apply_promo` and `list_promos`. The mention of passing same ids as apply adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives implicit guidance by instructing to pass the same ids used at apply and to re-preview after. However, it does not explicitly state when to use this tool vs alternatives or provide exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reorderA

Create a NEW cart from a past order. Check list_carts for the store first (one open cart per store). Afterwards ALWAYS preview_order and diff items vs the original β€” out-of-stock items drop silently; call out any drops before asking about submitting.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
order_uuidYesFrom get_order_history orders[].order_uuid

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description warns that out-of-stock items drop silently, a key behavioral trait. No contradiction with annotations (readOnlyHint=false, destructiveHint=false).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: first states purpose, second gives prerequisite, third gives post-action steps. Front-loaded, efficient, no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two parameters and no output schema, the description covers the full workflow: what it does, prerequisites, side effects, and required follow-up steps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already describes both parameters adequately. The description adds no additional meaning beyond the schema's description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a NEW cart from a past order,' specifying the verb and resource. It differentiates from siblings like show_cart and preview_order by framing the tool as the initial step to reorder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says to check list_carts first due to one open cart per store, and mandates preview_order and diff items after calling this tool. This provides clear when-to-use and post-requisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_preferenceA

Persist a durable user preference across sessions (dietary rule, allergy, budget habit, tip default). Save when the user states one ('no mushrooms ever', 'I usually tip 20%'). Keep each note short and self-contained.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYesThe preference, e.g. 'Avoid mushrooms in all dishes'
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true), the description adds value by specifying durability across sessions and typical use cases. It aligns with annotations and provides behavioral context beyond what annotations offer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and contains no unnecessary words. Every sentence is essential.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and 2 required params, the description covers what to save, when to save, and content guidelines. It is complete enough for an AI agent to use correctly, though it omits what happens after saving.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and already describes both parameters. The description adds a guideline to keep notes short and self-contained, but does not significantly enhance understanding of the 'intent' parameter beyond the schema's detailed description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool persists a durable user preference across sessions, with specific examples (dietary rule, allergy, budget habit, tip default). It distinguishes from siblings like remove_preference by specifying when to save (when user states a preference).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Save when the user states one' and advises to keep notes short and self-contained, giving clear usage context. However, it does not explicitly state when not to use this tool or mention alternatives like remove_preference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_restaurantsA
Read-only

Search nearby restaurants by free-text query. Defaults to the user's default saved address location when lat/lng omitted. Returns store_id, name, distance, delivery_time estimate, rating. Stores with is_link_out=true cannot be ordered through this agent. Restaurant-focused β€” use find_stores for grocery/retail/pharmacy/pets/alcohol.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoOptional latitude override
lngNoOptional longitude override
limitNoMax results (default 8)
queryYesSearch text, e.g. 'grilled chicken bowls'
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds context about defaulting to user's address and the limitation on link_out stores, aligning with the safe read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences: purpose, default behavior, and differentiation from sibling. No fluff, front-loaded with key info.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers inputs, defaults, output fields, and sibling comparison. With no output schema, describing return fields is sufficient. Could optionally mention the output is an array, but not necessary given the list of fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter descriptions. The description adds extra context: lat/lng default to user's saved address, and intent should be a generic goal without personal specifics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool searches nearby restaurants by free-text query and lists the return fields, clearly differentiating it from the sibling tool find_stores for grocery/retail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear guidance on when to use (restaurant search) vs find_stores (grocery/retail/pharmacy/pets/alcohol), explains default location behavior, and warns about link_out stores not being orderable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_default_addressA
Destructive

Change the ACCOUNT-WIDE default delivery address (persists across app/web). Prompts the user y/N in the terminal before applying. Only call when the user asked to deliver somewhere else.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
address_idYesaddresses[].address_id from list_addresses
printable_addressYesHuman-readable address, shown in the confirmation prompt

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark destructiveHint=true, but the description adds important behavioral details: the change is account-wide and persists, and there is a user confirmation prompt before applying. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words, front-loaded with the main action. Efficient and easy to digest.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 3 parameters and no output schema, the description covers key behaviors: persistence, scope, and confirmation prompt. Could mention the need for user permission, but overall complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and parameter descriptions are clear. The tool description adds context that address_id comes from list_addresses, but this is a minor addition over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it changes the account-wide default delivery address, which persists across app/web. This is specific and distinguishes it from sibling tools like list_addresses.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Only call when the user asked to deliver somewhere else,' providing a clear usage context. It could mention when not to use, but the guideline is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

show_cartA
Read-only

Show cart contents (no pricing β€” use preview_order for that). items[].id is the cart-LINE id used by remove_cart_item; items[].item_id is the menu item id. Don't swap them.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
cart_uuidYesCart UUID

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and non-destructive behavior. The description adds value by detailing the output structure (items array with different ID fields) and issuing a warning about not swapping them, providing behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. The first sentence states the core purpose and a key exclusion, and the second sentence delivers essential usage warnings. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description compensates by explaining the output structure and critical ID distinctions. It tells the agent what to expect and how to use the results, making it sufficiently complete for this read-only tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description does not add extra meaning to the input parameters beyond what the schema already provides. The description's ID guidance pertains to output, not input, so it meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Show cart contents' and distinguishes itself from 'preview_order' by noting it does not include pricing. It also specifies the roles of different IDs, making the tool's purpose precise and differentiated from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description advises when not to use this tool ('no pricing β€” use preview_order for that') and provides crucial guidance on ID semantics. While it does not explicitly cover all usage scenarios, the given instructions are clear and actionable for an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_orderA
Destructive

Place the order β€” charges the user's real payment method. HARD GATE: the terminal asks the user to type 'yes'; a decline returns declined_by_user. Call ONLY after: (1) preview shown, (2) tip explicitly confirmed (delivery; pickup = 0 without asking), (3) payment method named to the user, (4) the user clearly said to place it. NOT idempotent β€” never retry without checking get_order_status first. Report success only when final_status.status == 'successful'.

ParametersJSON Schema
NameRequiredDescriptionDefault
intentYesOne short line stating who this is for and the goal, e.g. 'Help the user order dinner'. DO NOT include the user's verbatim words, dietary/health/religious details, budgets, names, or other personal specifics β€” a generic goal is expected.
team_idNoWork benefits: quote.team_id from preview
priorityNoMUST match the preview: pass iff the previewed quote used priority
budget_idNoWork benefits: chosen budget id
cart_uuidYesCart UUID
tip_centsYesDasher tip in CENTS (500 = $5.00). 0 only on explicit decline or pickup.
fulfillmentNoOnly to match a mode explicitly set at preview
expense_codeNoRequired when budget expense_code_mode != NONE
expense_notesNoRequired when budget is_expense_note_required
scheduled_timeNoMust match the value used in preview, if any
team_account_idNoWork benefits: budget's team_account_id when present
no_apply_creditsNoMUST match the preview: pass iff the user opted out of credits there
confirmation_summaryYesShort human-readable summary shown at the terminal gate: store, items, total, tip, card (brand+last4), ETA

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses destructive behavior (charges real payment), hard gate requiring user confirmation, and non-idempotency. Adds context beyond annotations, no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, front-loaded with the main action, and well-structured with clear bullet-point-like conditions. Every sentence adds value without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers behavioral context, preconditions, and success condition. No output schema, but description partly addresses return values. Could be more explicit about the response structure, but sufficient for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage with detailed descriptions for all 13 parameters. The description adds no additional parameter semantics beyond the schema, so baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Place the order' and resource 'order', with specifics about charging the user's real payment method. Distinguishes from sibling tools like preview_order and get_order_status as the final submission step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists four preconditions for calling, states it is not idempotent and to never retry without checking get_order_status first, and provides clear when-to-use guidance.

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. Dates show when Glama detected each change.

  1. 29 tool updatesv0.1.0
    • First observedadd_items_to_cart
    • First observedapply_promo
    • First observedbuild_grocery_list
    • First observeddelete_cart
    • First observedfind_items
    • First observedfind_stores
    • First observedget_checkout_url
    • First observedget_grocery_item_details
    • First observedget_menu
    • First observedget_order_history
    • First observedget_order_status
    • First observedget_receipt
    • First observedget_restaurant_item_details
    • First observedget_session_context
    • First observedget_store_details
    • First observedlist_addresses
    • First observedlist_carts
    • First observedlist_payment_methods
    • First observedlist_promos
    • First observedpreview_order
    • First observedremove_cart_item
    • First observedremove_preference
    • First observedremove_promo
    • First observedreorder
    • First observedsave_preference
    • First observedsearch_restaurants
    • First observedset_default_address
    • First observedshow_cart
    • First observedsubmit_order

TDQS

A4/5.0

Scored across 29 tools

Disambiguation5/5

Each tool targets a distinct operation or resource, with clear boundaries between restaurant and grocery domains, cart management steps, and preferences. Descriptions include explicit disambiguation instructions, preventing confusion.

Naming Consistency5/5

All tool names use a consistent verb_noun pattern in snake_case, with predictable prefixes like list_, get_, add_, remove_, delete_, preview_, submit_, and find_. The only minor deviation is 'show_cart' instead of 'get_cart', but it fits the overall pattern.

Tool Count4/5

At 29 tools, the count is high but justified by the breadth of functionality covering restaurants, grocery/retail, cart lifecycle, orders, addresses, payment, promos, and preferences. The scope demands this many distinct operations.

Completeness5/5

The tool surface covers the full ordering lifecycle: cart creation/modification/display/delete, order preview/submit/status/history/receipt, address management, payment method listing, promo management, and preference persistence. Gaps are addressed via fallback (get_checkout_url) or implicit mechanisms (add sums quantities).

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CydVilla/peckish'

If you have feedback or need assistance with the MCP directory API, please join our Discord server