mcpField
P
Peckish — DoorDash ordering

Peckish — DoorDash ordering

本地服务
github.com商业与营销03 天前更新

关于 Peckish — DoorDash ordering

Peckish 是面向 DoorDash 点餐的 AI Agent,可搜索餐厅、比较含费用的总价并构建购物车。它提供终端、网页和 MCP 三种使用方式,所有下单都需用户明确确认。

主要功能

  1. 01搜索餐厅与菜单
  2. 02比较含费用的订单总价
  3. 03构建并预览购物车
  4. 04保存饮食偏好
  5. 05下单前明确确认

适用场景

  1. 01寻找符合预算和送达时限的餐食
  2. 02比较餐厅的实际订单费用
  3. 03重新订购常点餐品
  4. 04查询配送支出

MCP 相关

MCP 服务将 DoorDash 点餐能力提供给 Claude Desktop、Claude Code 等客户端。客户端可浏览并构建购物车;只有能显示确认对话框的客户端才能完成下单。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"cydvilla-peckish": {
"command": "npx",
"args": [
"-y",
"peckish-mcp"
],
"env": {
"DD_CLI_PATH": "<DD_CLI_PATH>"
}
}
}
}
启动命令npx -y peckish-mcp
需要配置的环境变量
DD_CLI_PATHAbsolute path to the dd-cli binary. Only needed if it is not at ~/.local/bin/dd-cli — GUI clients do not inherit your shell PATH.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmpeckish-mcp0.6.0

工具

29

收录的工具列表 · 更新于 2 天前

参数类型必填说明
intentstring是用一行简短说明此请求是为谁提出的以及目标是什么,例如“帮助用户订晚餐”。请勿包含用户的原话、饮食/健康/宗教详情、预算、姓名或其他个人具体信息;应使用概括性目标。

详细介绍

Peckish 🍜

饿了?开口问就行。 一个用于 DoorDash 的 AI 下单 Agent——它会搜索、比较实际总价(含费用)、构建购物车,并且每笔订单都由你确认。基于 Claude 和 DoorDash 官方的 dd-cli 构建。

一层工具,三种使用方式:

使用方式启动命令最适合
终端聊天peckish常驻终端的用户
本地 Web 应用peckish-web → http://localhost:4747面向消费者的界面:店铺卡片、实时报价、停止按钮、订单弹窗
MCP 服务claude mcp add peckish -- npx -y peckish-mcp,或双击 .mcpbClaude Desktop / Claude Code 用户——无需 API 密钥;模型由你的 Claude 订阅提供支持

哪种适合我?

  • 习惯使用终端? → 终端聊天。速度最快,信息最丰富。
  • 想要类似应用的体验? → 本地 Web 应用。提供卡片、实时报价和完善的“下单”按钮。
  • 已经在使用 Claude Desktop 或 Claude Code? → MCP 服务。无需 API 密钥,也无需单独的聊天窗口——Claude 本身就会成为你的下单 Agent,并通过原生对话框请求确认订单。

Peckish 搜索 25 美元以内的晚餐:工具调用开始运行,随后逐步显示包含费用的总价和推荐结果,并在提交订单前通过确认对话框请求批准。
Web 应用的脚本演示——店铺、价格和卡片均为虚构;界面和审批环节都是真实的。

在 Web 上查看 peckish →

更新: 每次发布都会在 Releases 中附上完整说明、所有构建产物和 SHA256SUMS.txt——历史记录请参阅 CHANGELOG.md。关注此仓库(仅关注 Releases)即可接收通知。

一行安装命令——无需克隆 Git 仓库:

npm install -g peckish

更喜欢应用? 下载 Mac 应用(.dmg)——通过引导完成设置,全程无需使用终端。请参阅下方的 Mac 应用。 无论使用哪种方式,所有内容都会在你自己的机器上运行,因为 dd-cli 会在本机保存你的 DoorDash 会话——支持 Mac(Apple Silicon)或 Linux x86_64,包括容器和云沙盒:请参阅 Linux、容器和无头主机。

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

快速开始(用户指南)

1. 前置条件
  • 搭载 Apple Silicon 的 Mac(M1–M4)或 Linux x86_64——dd-cli 发布构建的两个平台。Peckish 采用本地优先设计:无论在哪台机器上运行,各种使用方式的后端都是这台机器,因为 dd-cli 会在此保存你的 DoorDash 会话。
  • Node.js 20+——运行 node --version 检查;从 nodejs.org 或 brew 安装。
  • DoorDash CLI 访问权限(目前需通过 DoorDash 的候补名单审核)。Peckish 要求 dd-cli ≥ 0.2.1——在 Linux 上则要求 ≥ 0.2.2,这是首个提供 Linux 构建的版本——并以 ≥ 0.2.6(当前版本)为目标。旧版二进制文件仍可正常下单;Peckish 会在启动时读取 dd-cli --version,并仅关闭该版本不支持的功能(请参阅 dd-cli 版本)。从 doordash-oss/doordash-cli 下载发行版,对照公布的值验证 SHA256 校验和,然后:
    # 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
    
    如果这台机器上没有浏览器(例如容器、虚拟机、云沙盒)?请参阅 Linux、容器和无头主机。
  • Anthropic API 密钥,用于终端和 Web 使用方式 (console.anthropic.com)——也可以完全跳过密钥,改用 MCP 使用方式,通过 Claude 订阅使用(第 4 步)。
2. 安装 Peckish
npm install -g peckish

就这样——现在你有三个命令:peckish(终端聊天)、peckish-web(Web 应用)和 peckish-mcp(MCP 服务)。

或从源代码安装(贡献者)
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. 运行它——终端或 Web
export ANTHROPIC_API_KEY=sk-ant-…   # from console.anthropic.com

peckish         # terminal chat
peckish-web     # web app → open http://localhost:4747

启动时,Peckish 会验证你的 DoorDash 登录状态,显示你的默认配送地址,并标记你忘记处理的未结购物车。如果尚未登录或登录已过期,Peckish 会提供帮助:终端会在启动 dd-cli login(会打开浏览器)前征求你的同意,Web 应用会显示登录卡片,而在对话过程中,Agent 也可以在任何界面提供相同的帮助——你批准后,在浏览器中登录,它便会从上次中断处继续。如果设备上没有浏览器,Peckish 会跳过此选项,并告知你如何改用注入令牌的方式——见下文。

4. 或在 Claude 中运行——无需 API 密钥

Claude 本身会成为下单 Agent,模型费用由你的 Claude 订阅承担。选择适合你的客户端:

Claude Code——一行命令:

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

Claude Desktop——从 Releases 下载 peckish-0.2.2.mcpb,然后双击。Claude Desktop 会像安装浏览器扩展一样安装它:无需终端、无需安装 Node,也无需编辑 JSON。

或手动配置 Claude Desktop

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:

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

如果 dd-cli 不在 ~/.local/bin/dd-cli,请添加 "env": { "DD_CLI_PATH": "/your/path/to/dd-cli" }——桌面应用不会继承你的 shell PATH。

Peckish 也已列入 MCP Registry,名称为 io.github.CydVilla/peckish,因此支持浏览注册表的客户端可以直接找到它。

重启 Claude Desktop,然后让它帮你找晚餐。订单确认会以原生对话框显示;无法呈现对话框的客户端可以浏览并构建购物车,但无法下单(默认拒绝)。

5. 日常使用

可以这样说:

  • "帮我找一份 25 美元以内、45 分钟内送达的高蛋白晚餐。不要蘑菇,也不要过高的费用。"
  • "比较排名前两家的实际总价——包括费用。"
  • "从 Sharon Korean 重新订购我常点的餐。"
  • "我上个月在外卖上花了多少钱?"
  • "这家店真的好吗?"(检查网络评价)
  • "绝对不要蘑菇。" → 永久保存;下次会自动应用
  • "从 Whole Foods 给我买牛奶、鸡蛋和一磅碎牛肉。"

下单始终以你亲自明确确认结束——在终端输入 yes、在网页弹窗中点击 Place order,或在 Claude Desktop 中批准对话框。在此之前,Peckish 必须向你展示逐项报价、确认小费,并说明将扣款的银行卡。拒绝任何一项,它都会停止操作。

控制与日常管理

位置内容
终端/prefs 已保存的偏好设置 · /cost 会话花费 · /reset 开始新对话 · /quit · Ctrl+C 停止正在运行的回合
网页Stop 按钮可取消回合 · New chat 可重置 · 标题栏标签显示会话费用 · 点击地址标签切换配送地址(编辑地址文本需前往 doordash.com — Peckish 会自动获取更新)
两者偏好设置保存在 ~/.peckish/preferences.json;每次工具调用和确认的完整审计日志会写入 ~/.peckish/logs/*.jsonl

**费用:**默认设置经过调整,可在保持良好质量的同时减少花费——使用中等工作强度的 claude-sonnet-5,对系统前缀和对话尾部启用提示词缓存,并使用服务端上下文编辑,在长会话中清理过时的菜单内容。费用表会显示每个回合和每个会话的大致花费。最高质量:DD_AGENT_MODEL=claude-opus-4-8 DD_AGENT_EFFORT=high。(使用 MCP 时,由客户端选择模型并支付费用。)

故障排查

症状解决方法
DoorDash sign-in is missing or expired接受内置的登录辅助流程(它会为你运行 dd-cli login),或自行在终端运行该命令
无头 Linux 机器上出现同样的问题没有可用于登录的浏览器:在有浏览器的机器上运行 dd-cli export-token,然后在此处设置 DD_CLI_ACCESS_TOKEN=…(详情)
升级 dd-cli 后立即出现身份验证错误新版 CLI 可能需要新的权限范围——重新登录(使用辅助流程、dd-cli login,或重新运行 export-token)
Anthropic authentication failed在同一个 shell 中运行 export ANTHROPIC_API_KEY=…,然后重启
dd-cli binary not found安装 dd-cli(步骤 1),或设置 DD_CLI_PATH=/path/to/dd-cli
你的机器没有对应的 dd-cli builddd-cli 仅提供 macOS arm64 和 Linux x86_64 版本——Intel Mac 和 Linux arm64 无法运行 Peckish
网页应用端口被占用PECKISH_PORT=5757 peckish-web
回合运行失控Ctrl+C(终端)/ Stop(网页)——历史记录会正常回滚

环境变量:DD_AGENT_MODEL(默认 claude-sonnet-5)、DD_AGENT_EFFORT (low–max,默认 medium)、DD_CLI_PATH、PECKISH_PORT(默认 4747)、 DD_CLI_ACCESS_TOKEN(由 dd-cli 自行读取——用于无浏览器登录)。


Mac 应用

适合不想看到终端的用户,只需双击即可打开:从 Releases 下载 Peckish-x.y.z-arm64.dmg,将 Peckish 拖到“应用程序”文件夹,然后打开它。

**首次启动(Gatekeeper):**该应用经过临时签名,但未经公证(没有付费的 Apple Developer ID),因此 macOS 首次不会通过双击直接打开它。右键点击应用 →“打开”→“打开”(或在“系统设置”→“隐私与安全性”中批准)。只需操作一次。

如果 macOS 显示 “Peckish 已损坏,无法打开”,说明你使用的是修复前的构建版本,或者下载文件的隔离标记出了问题。清除一次后即可正常打开:

xattr -cr /Applications/Peckish.app

首次运行设置在应用中完成——三个按钮,无需使用终端:

  1. DoorDash CLI — 一键引导安装(下载官方版本,并在运行任何内容之前验证其 SHA256 校验和)。如果你还无法使用 dd-cli,这里提供候补名单链接。
  2. 登录 DoorDash — 打开浏览器;应用会检测你何时完成登录。登录信息保存在 macOS 钥匙串中。
  3. Anthropic API key — 粘贴一次即可;密钥会通过 Electron safeStorage 加密存储(由钥匙串提供支持),绝不会以明文保存。

然后点击 Open Peckish — 使用相同的 Web 应用、相同的订单确认弹窗和相同的安全保护;该应用只是一个外壳,会在随机的仅限 localhost 的端口上为你运行本地服务。需要 Apple Silicon;不需要 Node.js(应用已自带运行时)。

自行构建:cd desktop && npm install && npm run dist → desktop/dist/Peckish-*.dmg。

.dmg 是唯一仅适用于 Mac 的使用方式。终端、Web 和 MCP 使用方式也都可在 Linux 上运行:


Linux、容器和无头主机

dd-cli v0.2.2 新增了 Linux(amd64)构建版本,因此 Peckish 的三种使用方式都能在 Linux x86_64 上原样运行——工具、订单审批门槛和审计日志均相同。从同一发布页面安装 dd-cli(文件为 dd-cli-v<version>-linux-amd64.tar.gz,验证其 SHA256,然后运行 bash install.sh),再运行 npm install -g peckish。如果将二进制文件放在 ~/.local/bin/dd-cli 以外的位置,请设置 DD_CLI_PATH——Peckish 也会检查 /usr/local/bin/dd-cli 和你的 PATH。

有桌面会话时(已设置 DISPLAY 或 WAYLAND_DISPLAY),一切照旧:dd-cli login 会打开浏览器,内置的登录辅助功能也和在 Mac 上完全相同。

没有桌面会话时——例如容器、虚拟机、云沙盒或未启用转发的 SSH 会话——浏览器流程无法完成,因此 Peckish 不再提供该流程(不会启动后无限等待的登录流程,也不会给出无法执行的“运行 dd-cli login”建议),而是引导你使用令牌方式:

# 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 会从 Peckish 传入的环境变量中读取令牌,因此所有使用方式都能在没有钥匙串或浏览器的情况下完成身份验证。

  • 该令牌可实时访问你的 DoorDash 账户——它可以下真实订单。请像对待密码一样保管它:将其存放在运行时的密钥存储中,不要放入镜像层、shell 历史记录中的 docker run -e 命令或已提交的 .env 文件中。令牌过期后,使用 dd-cli export-token 创建新令牌。
  • **订单审批门槛不会改变。**下单仍需在你使用的界面上明确批准(输入 yes、使用 Web 弹窗或 MCP 对话框)——无头模式意味着没有浏览器,不意味着无人值守下单。
  • 容器中的 peckish-web 按设计绑定到容器内部的 127.0.0.1,因此发布端口(-p 4747:4747)无法访问它。请在 Linux 上使用 --network host 运行容器,或使用无需端口的终端或 MCP 使用方式。
  • **不支持:**Linux arm64 和 Intel Mac——dd-cli 未发布适用于这两种平台的构建版本,Peckish 会明确说明这一点,而不会只报出难以理解的错误。

功能介绍

  • 搜索 → 菜单 → 购物车 → 预览 → 确认 → 提交,由真实的费用/预计送达时间报价(order preview)驱动每项推荐。
  • 比价购物:为最多 3 个最终候选项创建购物车,对比实际总价、费用占比和预计送达时间,推荐一个并删除其他选项。
  • 费用优化:经你同意后扫描促销,对比自取与配送,显示 DoorDash 额度和 DashPass 状态。
  • 记忆:饮食规则和习惯会跨会话、跨界面保留。
  • 历史记录:根据订单频率推荐“我的常点”,从收据中如实拆分支出,重新下单时检测已无货的商品。
  • 通过 Claude 的服务端网页搜索查看评论(绝不用于查询价格——dd-cli 是订单数据的唯一事实来源)。
  • 团体购物车(0.4.0 新增):“为团队发起团体订单,每人 25 美元”——创建可分享的购物车链接,可选设置每人消费限额,等所有人加入后由发起人审核并提交。
  • 访客子购物车(新增):为完全没有 DoorDash 账号的人下单——“给 Luke Wulf 加一份素食卷饼”会把他们的商品放入团体购物车中的专属子购物车。他们无需登录,也无需安装任何东西。每次都用相同的方式称呼他们,他们的商品就会归在一起;询问“谁下单了?”即可查看已记录的人员。DoorDash 为每位访客发放的凭证由 Peckish 保管,不会向你或模型显示——请参阅访客子购物车。
  • 优先配送(新增):想要最快送达时,可选择优先配送——每个购物车均会提供此选项,并在你批准前计入报价。
  • 额度控制(新增):DoorDash 额度默认会使用;下单时说“不要使用我的额度”即可选择不使用。
  • 大型连锁品牌(新增):现在可以订购 Domino's、Sweetgreen、Dave's Hot Chicken 等大型连锁品牌(dd-cli ≥ 0.2.1)。
  • 搜索筛选条件(新增):“找一家便宜的、30 分钟内能送到的店”会在服务端缩小搜索范围——仅限 DashPass、价格等级、预计送达时间上限、搜索半径——而不是先拉取 30 条结果再逐一筛选。
  • 促销感知菜单(新增):菜单和商品详情会显示商店当前的促销活动及符合条件的商品,并根据配送地址计算价格,因此你还在挑选时就能看到优惠,不必等到结账。
  • 一眼查看自取选项(新增):搜索结果会按商店显示当前是否可自取、是否可预约自取,或商店稍后才营业——费用让你烦恼时,这项信息很有用。
  • 预约下单(新增):商店当前歇业时,系统会提示“6 点营业,我可以预约”,而不是将其从结果中移除。
  • 按重量计价的商品(新增):熟食柜台、肉铺和农产品商品可按各自单位输入小数数量;Peckish 会说明总价为估算值,因为最终收费取决于实际重量。
  • 地址查找(新增):配送到尚未保存的地址——Peckish 会解析地址,让你选择准确匹配项,并在保存前征求你的同意(该地址会成为账号默认地址)。
  • 实时订单跟踪(新增):“我的餐食到哪儿了?”会根据完整订单进度回答——下单、配送进度、当前预计送达时间、延迟趋势、取消原因——而不只是告诉你“订单是否成功”。
  • 工作福利(公司预算和费用代码)、预约配送、自取、生鲜/零售/宠物/酒类、团体订单历史记录。

访客子购物车

DoorDash 拼单购物车中有两类人,他们的使用方式各不相同:

  • 参与者拥有自己的 DoorDash 账户。他们打开拼单购物车链接,并以自己的身份添加商品。Peckish 会通过链接代表你加入拼单。
  • 访客没有账户,也不会接触 DoorDash。发起人使用自己的账户代他们添加商品,放入标记了访客姓名的子购物车中。这样一来,团队里只有一个人使用命令行时,也能实现“大家告诉我想要什么”这样的协作方式。

DoorDash 会在访客首次添加商品时,为其发放一个专属令牌。这是该访客子购物车的持有者凭证,只会返回一次——cart show 不会再次显示它,也没有接口可以重新获取。dd-cli 自己也建议将其保存在服务端,切勿写入日志。

因此,Peckish 会妥善保管这些令牌。令牌以购物车和访客姓名为键,存储在 ~/.peckish/guests.json 中(权限模式为 0600);在模型看到任何工具结果之前,令牌都会从结果中剔除,因此也不会写入记录每条结果预览的会话审计日志。模型只需使用姓名:它说“Luke Wulf”,Peckish 就会提供对应的凭证。助手无法读取、请求或复述令牌,这正是设计目的。

请注意以下两点:

  • 拼写很重要。“Luke Wulf”和“Luke Wolf”是两个不同的访客,分别拥有两个子购物车。Peckish 会忽略大小写和多余空格,但仅此而已。
  • **文件很重要。**在购物车进行中删除文件,会导致受影响访客的连续记录丢失——唯一的恢复方法是用相同姓名重新添加他们,这会创建新的商品清单。订单提交或购物车删除后,Peckish 会移除该购物车的访客信息,并清理超过 30 天的数据。

dd-cli 版本

dd-cli 是一个独立的二进制程序,有自己的发布节奏;自 0.2.2 版以来,每次发布都会新增标志。Peckish 会在每个进程中探测一次 dd-cli --version,并在不支持时降级运行,而不是直接报错:

dd-cli在 Peckish 中启用的功能
≥ 0.2.1基础支持:每条命令都使用 --intent,企业连锁店
≥ 0.2.2Linux 构建版本、无界面登录所用的 export-token
≥ 0.2.3find_address / add_address、完整的订单状态生命周期、历史记录中的拼单订单
≥ 0.2.4菜单和商品详情中的促销信息、使用已保存的 address_id 搜索
≥ 0.2.5搜索筛选条件、各门店的自取可用情况、预约时段、按重量计价的商品
≥ 0.2.6使用指定银行卡付款、DoubleDash、跨零售商价格比较、Meal Manager 日历、保存地址但不将其设为默认地址

以下两个脚本可验证这些信息:

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 会使用你实际登录的二进制程序运行 Peckish 所用的命令,并报告它接受哪些标志,以及响应中包含哪些字段名称。它是只读的——不会创建购物车、保存地址或下订单。升级 dd-cli 后,或 Peckish 发送的内容被拒绝时,请运行此脚本;如何根据报告采取行动,请参阅检查清单 docs/dd-cli-verification.md。check-dd-cli-release.mjs 会在 CI 中每周运行一次;如果 dd-cli 发布了比 Peckish 目标版本更新的版本,就会创建一个问题。

Peckish 自动执行的行为(例如,使用你已保存的地址查询菜单价格,以准确判断促销资格)会等到版本检查确认二进制程序支持后才启用。模型明确请求使用的标志始终会传递,因此旧版二进制程序会返回自身的错误并指出该标志,而不是由 Peckish 悄悄忽略请求。检测到的版本会写入会话上下文,因此助手会知道可以提供什么功能,并且只会在你请求二进制程序不支持的功能时建议升级。

架构

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

安全模型

下单始终需要由交互界面而非模型呈现明确的人类批准:

界面确认方式
终端在提示时输入 yes
Web“下单”模态框(5 分钟后自动拒绝)
MCP客户端引导对话框;不支持引导的客户端无法下单(默认拒绝)

此外,所有界面都具备以下特性:

  • 严格的工具架构——API 保证在任何处理程序运行前验证工具参数(不存在参数格式错误这一类情况)。
  • 可中止的轮次——Ctrl+C / Stop 会将历史记录回滚到轮次开始时。
  • 审计日志——每次工具调用、参数集、耗时、确认结果和提交结果都会记录在 ~/.peckish/logs/*.jsonl 中。
  • 提交订单前,必须确认小费并指定卡片;提交操作不会自动重试(不具备幂等性);只有在 order status 确认成功后才会报告成功。
  • 商家文本会被视为数据(剥除 widget/助手指令字段);只读 CLI 调用遇到瞬时错误时会重试一次,变更操作则不会重试。
  • Web 服务仅监听本机(检查 Host 和 Origin)。

Peckish 与 DoorDash 共享的内容

dd-cli ≥ 0.2.1 要求每条命令都附带 --intent 说明,DoorDash 表示可能会审核该说明,用于研究和产品改进。DoorDash 文档要求的格式会包含你的原始提示词,但食品相关提示词通常包含饮食、健康和宗教方面的信息,而 DoorDash 自己的指导建议避免提供这些信息。因此,Peckish 默认保护隐私:

  • **发送的内容:**由模型撰写的一行目标摘要,采用概括性表述(例如 Summary: Help the user order dinner),以及明确的 user prompt/purpose: "(not shared — Peckish privacy default)" 标记。
  • **默认绝不会发送的内容:**你的原话、饮食规则、预算、姓名、已保存的偏好或对话内容。
  • **选择使用完整格式:**设置 PECKISH_INTENT_VERBATIM=1,intent 就会按 DoorDash 文档的要求,逐字包含你最初提出的请求。

无论 intent 内容如何,DoorDash 都必然会看到 API 流量本身(搜索、购物车、订单)——这是下单过程固有的一部分。

仓库结构

文件说明
src/index.ts终端 REPL 界面(中止、费用明细、/cost)
src/web.ts + public/index.htmlWeb 界面:SSE 流式传输、卡片、Stop、确认模态框、Origin 防护
src/mcp.tsMCP stdio 服务:38 个工具 + 会话上下文、指令、引导确认关卡
src/agent.ts系统提示词 + 流式工具循环(测试版:上下文编辑;web_search;用量)
src/tools.ts工具架构(严格化)+ 处理程序;菜单精简/筛选
src/ddcli.tsexecFile 封装:信封解析、UI 字段剥除、错误映射、有限次数的只读重试
src/platform.ts支持的 dd-cli 目标,以及登录能否在此使用浏览器或需要注入令牌
src/confirm.ts可插拔的确认关卡(默认拒绝)
src/costs.ts / src/logger.ts费用统计 · JSONL 审计日志
src/prefs.ts偏好持久化(~/.peckish/)
tests/unit.test.ts108 个单元测试(npm test),无需网络
desktop/Mac 应用(.dmg)的 Electron 外壳:初始设置 + 服务启动器,不含 Agent 逻辑
packages/mcp/peckish-mcp npm 包——一个启动器,用于通过 npx -y peckish-mcp 启动 MCP 服务
extension/Claude Desktop 扩展(.mcpb):清单 + 随附服务。node build-manifest.mjs && mcpb pack . peckish.mcpb
server.jsonMCP Registry 元数据(io.github.cydvilla/peckish)

发布

所有内容都通过一个标签发布。.github/workflows/release.yml 会发布两个 npm 包、注册 MCP Registry 条目、构建 .mcpb 和 .dmg,并将二者附加到 GitHub 发布页面:

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

每个发布步骤都采用已发布则跳过的机制,因此失败后重新运行标签发布是安全的。.github/workflows/ci.yml 会在每次推送时运行类型检查、测试、元数据一致性检查和实际的 MCP 握手测试。

scripts/check-consistency.mjs 会检查跨文件且容易悄然出现偏差的元数据——Registry 命名空间的大小写、server.json 中匹配的名称和 mcpName、Registry 描述的 100 个字符上限,以及扩展程序声明的工具列表。打标签前请在本地运行。

自动化的一次性设置

npm — 可在 npmjs.com 上为 peckish 和 peckish-mcp 配置可信发布(提供方:GitHub Actions,仓库为 CydVilla/peckish,工作流为 release.yml),这样就不需要密钥;或者添加 NPM_TOKEN 仓库密钥,并使用启用了“绕过 2FA”的细粒度访问令牌。

MCP Registry — 无需配置。工作流使用 mcp-publisher login github-oidc 进行身份验证,GitHub 的 OIDC 令牌可证明仓库所有者是 CydVilla,从而获得 io.github.CydVilla/* 命名空间。

Mac 应用签名 — .dmg 未签名构建。要构建经过公证的版本,需要 Apple Developer ID,以及 CSC_LINK/CSC_KEY_PASSWORD 和公证密钥。

说明与限制

  • 按设计优先在本地运行:托管式交付(短信机器人、语音)需要 DoorDash 的合作伙伴 API——此处由你自己的机器充当后端。
  • 每家商店只能有一个未结购物车(DoorDash 规则)——Peckish 会检查冲突并询问。
  • payment-method list 只能查看银行卡;钱包默认支付方式(Apple Pay 等)会通过通用方式确认,或通过浏览器结账 URL 确认。
  • Agent 无法提交年龄受限商品——可回退到结账 URL。
  • 按照 dd-cli 的建议,刻意不使用人气数据;网页评价会注明来源,以弥补这一不足。
  • 费用数据是根据按目录价格计算的 Token 使用量得出的近似估算。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。