Server data from the Official MCP Registry
Order food on DoorDash — compare real fee-included totals; you approve every order.
Order food on DoorDash — compare real fee-included totals; you approve every order.
Valid MCP server (2 strong, 4 medium validity signals). No known CVEs in dependencies. ⚠️ Package registry links to a different repository than scanned source. Imported from the Official MCP Registry. 1 finding(s) downgraded by scanner intelligence.
9 files analyzed · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: DD_CLI_PATH
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-cydvilla-peckish": {
"env": {
"DD_CLI_PATH": "your-dd-cli-path-here"
},
"args": [
"-y",
"peckish-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
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?
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 Mac either way, because DoorDash sign-in lives in your keychain.
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.tar -xzf dd-cli-v*-darwin-arm64.tar.gz && cd dd-cli-v*-darwin-arm64
bash install.sh # installs to ~/.local/bin/dd-cli
dd-cli login # sign in to DoorDash in your browser (stored in keychain)
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: 13 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 expired, run
dd-cli login again and restart.
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
| 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 | Run dd-cli login in a terminal, restart Peckish |
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 |
| 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).
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 isn't code-signed yet, so macOS will refuse a plain double-click the first time. Right-click the app → "Open" → "Open" (or approve it under System Settings → Privacy & Security). This is only needed once.
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.
order preview) driving every recommendation.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
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:
~/.peckish/logs/*.jsonl.order status confirms.| 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/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 | 13 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) |
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.Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.