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 .
Agenten stärken
Der eigene Befehl des Herausgebers. Kein PlugMCP-Endpunkt.
Host a copy with our keys and logs.
npx -y [email protected]Claude Code hat keinen Installationslink für einen lokalen Befehl. Kopieren Sie den Befehl unten und führen Sie ihn in einem Terminal aus.
claude mcp add peckish-mcp -- npx -y peckish-mcp@0.6.0In einem Terminal ausführen.
{ "mcpServers": { "peckish-mcp": { "command": "npx", "args": [ "-y", "[email protected]" ] } }}claude_desktop_config.json
Remote-URL oder ein Befehl auf Ihrem Rechner? Worin sich die beiden Installationen unterscheiden
Auf PlugMCP ausführen
A new server you create. It is not this listing's official endpoint. Use the publisher install when you want their URL and their credentials.
StartenVom Herausgeber
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 .
MCP server that lets Claude order food on DoorDash — search, compare real fee-included totals, build carts, and place orders behind a human approval dialog.
dd-cliOne tool layer, three surfaces:
Which one is for me?
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
node --version to check; install from nodejs.org or brew.dd-cli --version at startup and
turns off only what that build can't do (see
dd-cli versions). 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.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)
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.
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).
Things to say:
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
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
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).
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:
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:
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.
docker run -e in your shell history, or a committed
.env. Mint a fresh one with dd-cli export-token when it expires.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.order preview) driving every recommendation.A DoorDash group cart holds items for two kinds of people, and they work differently:
DoorDash issues a per-guest token on that guest's first add. It is a bearer
credential for their sub-cart, it is returned exactly once — cart show never
echoes it and there is no endpoint to fetch it again — and dd-cli's own
guidance is to keep it server-side and out of logs.
So Peckish keeps it. Tokens are stored in ~/.peckish/guests.json (mode
0600) keyed by cart and guest name, stripped out of every tool result before
the model sees one, and therefore never written to the session audit log, which
records a preview of every result. The model works purely in names: it says
"Luke Wulf" and Peckish supplies the right credential. There is no way for the
assistant to read, request or repeat a token, which is the point.
Two consequences worth knowing:
dd-cli is a separate binary on its own release cadence, and every release since
0.2.2 has added flags. Peckish probes dd-cli --version once per process and
degrades instead of breaking:
Two scripts keep this honest:
node scripts/verify-dd-cli.mjs # what YOUR dd-cli actually accepts
node scripts/check-dd-cli-release.mjs # is a newer dd-cli out?
verify-dd-cli.mjs runs the commands Peckish runs against your real,
signed-in binary and reports which flags it accepts and what field names the
responses carry. It is read-only — no carts, no saved addresses, no orders.
Run it after a dd-cli upgrade, or when something Peckish sends comes back
rejected — docs/dd-cli-verification.md is the
checklist for acting on what it reports. check-dd-cli-release.mjs runs weekly in CI and files an issue when
dd-cli publishes a release newer than the one Peckish targets.
Behaviour Peckish applies on its own — like pricing menus against your saved address so promo eligibility is right — stays off until the version check confirms the binary supports it. A flag the model asked for explicitly is always passed through, so an old binary answers with its own error naming the flag rather than Peckish silently ignoring the request. The detected version goes into the session context, so the assistant knows what it can offer and suggests an upgrade only when you ask for something the binary can't do.
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 │
└───────────────┬─────────────────┘
↓
38 typed tools — src/tools.ts (strict: true)
↓
sanitizing wrapper — src/ddcli.ts
↓
dd-cli --json-output → DoorDash
Placing an order always requires an explicit human approval rendered by the surface, not by the model:
Also on every surface:
~/.peckish/logs/*.jsonl.order status confirms.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:
Summary: Help the user order dinner), plus an explicit
user prompt/purpose: "(not shared — Peckish privacy default)" marker.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.
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.
payment-method list sees cards only; wallet defaults (Apple Pay etc.) are
confirmed generically or via the browser checkout URL.MCP server that lets Claude order food on DoorDash — search, compare real fee-included totals, build carts, and place orders behind a human approval dialog.
{ "mcpServers": { "peckish-mcp": { "command": "npx", "args": [ "-y", "[email protected]" ] } }}Tools
Noch keine Tool-Liste. Remote-Server erhalten eine nach dem ersten Health-Check.
FAQ
Kopieren Sie auf dieser Seite die stdio-Konfiguration für Cursor, Claude Desktop, Claude Code oder VS Code. Sie nutzt die Installation des Herausgebers, keinen PlugMCP-Proxy.
In diesem Eintrag ist keine erforderliche Umgebungsvariable aufgeführt.
Peckish läuft lokal über stdio.
Zuletzt geprüft: 2026-11-15. MCP server that lets Claude order food on DoorDash — search, compare real fee-included totals, build carts, and place orders behind a human approval dialog.