mcpField
P
pp-allrecipes

pp-allrecipes

github.com/mvanhorn其他2.1k192 次安装今天更新
代码仓库

关于 pp-allrecipes

pp-allrecipes 是面向 Agent 和用户的命令行技能,用于读取结构化的 Allrecipes 数据。它通过本地 SQLite 缓存支持食材匹配、评分排序、膳食规划和导出。

主要功能

  1. 01搜索和获取食谱
  2. 02按平滑评分排序
  3. 03按现有食材匹配食谱
  4. 04按饮食类型筛选
  5. 05调整份量并查看营养
  6. 06生成食谱集和购物清单

适用场景

  1. 01查找限时内的高评分食谱
  2. 02根据现有食材挑选食谱
  3. 03合并多道食谱的食材清单
  4. 04将分类食谱导出为 Markdown

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mvanhorn/printing-press-library --skill pp-allrecipes

安装后在 Claude Code 中输入/pp-allrecipes确认已加载。

详细介绍

Allrecipes — Printing Press CLI

前置条件:安装 CLI

此 skill 使用 allrecipes-pp-cli 二进制文件。**调用此 skill 中的任何命令之前,必须确认 CLI 已安装。**如果尚未安装,请先安装:

  1. 使用 Printing Press 安装程序安装。在 macOS/Linux 上,默认将二进制文件安装到 $HOME/.local/bin;在 Windows 上,则安装到 %LOCALAPPDATA%\Programs\PrintingPress\bin:
    npx -y @mvanhorn/printing-press-library install allrecipes --cli-only
    
  2. 验证:allrecipes-pp-cli --version
  3. 确保报告的安装目录位于将调用此 skill 的 Agent/运行时的 $PATH 中。

如果 npx 安装失败(没有 Node、处于离线状态等),请改用 Go 直接安装(需要 Go 1.26.6 或更高版本):

go install github.com/mvanhorn/printing-press-library/library/food-and-dining/allrecipes/cmd/allrecipes-pp-cli@latest

如果安装后 --version 报告“command not found”,说明运行时无法在 $PATH 中找到二进制文件目录。验证成功之前,请勿执行此 skill 中的命令。

何时使用此 CLI

当 Agent 或用户需要将 Allrecipes 数据作为数据使用,而不是作为网页浏览时,请使用此 CLI:搜索经过验证的食谱、以结构化形式获取配料清单、汇总多道食谱的购物清单、按不同份数调整食谱,或根据食品储藏室中的食材筛选。SQLite 本地缓存可加快迭代式膳食规划工作流——每道获取过的食谱都会永久保存,并可通过 pantry、with-ingredient、top-rated 和 dietary 查询。若用户需要比较多个网站(请使用其他工具),或需要已保存食谱、膳食计划等身份验证功能(本 CLI 有意不支持),请勿使用此 CLI。

何时不使用此 CLI

对于需要创建、更新、删除、发布、评论、点赞、邀请、下单、发送消息、预订、购买或更改远程状态的请求,请勿启用此 CLI。此只读 CLI 提供用于检查、导出、同步和分析的命令。

独特功能

这些功能是此 API 的其他工具所不具备的。

可累积的本地状态
  • pantry — 根据你的食品储藏室中的食材为 Allrecipes 食谱评分,查看今晚哪些食谱无需购买食材就能实际烹制。

    当用户问“我现有的食材能做什么”时,只有这个命令能给出答案。

    allrecipes-pp-cli pantry --pantry-file ~/pantry.txt --query brownies --agent
    
  • with-ingredient — 查找所有使用指定食材的缓存食谱,这是针对本地语料库的 SQL 视图。

    当用户想从需要消耗的食材入手,而不是从菜名入手时,使用此命令。

    allrecipes-pp-cli with-ingredient buttermilk --top 10 --agent
    
  • dietary — 使用 JSON-LD 关键词和食材名称模式,按无麸质/纯素/低碳水筛选缓存食谱。

    当饮食限制不可妥协,且用户想要的结果超出网站饮食分类页面所展示的内容时,使用此命令。

    allrecipes-pp-cli dietary --type gluten-free --top 20 --agent
    
排名优于网站
  • top-rated — 按贝叶斯平滑后的评分为食谱排名,让经证实受欢迎的食谱胜过只有 1 条评价、评分 5 星的噪声。

    当 Agent 想要的是经过验证的食谱,而不是新上传的 5 星异常值时,请优先使用此命令,而非原始搜索。

    allrecipes-pp-cli top-rated brownies --smooth-c 200 --limit 10 --agent
    
  • quick — 符合严格时间上限的高评分食谱——Allrecipes 的界面无法强制执行时间限制,但本地缓存可以。

    当用户的限制条件是时间而不是菜品时使用,例如“25 分钟内能做什么好吃的”。

    allrecipes-pp-cli quick --max-minutes 30 --query chicken --agent
    
面向 Agent 的工具链
  • cookbook — 将高评分分类中的食谱汇编为一本 Markdown 食谱集,包含目录、配料和做法。

    当用户需要精选合集(礼品、膳食计划包)时,一个命令即可生成。

    allrecipes-pp-cli cookbook --category italian --top 20 --output italian-cookbook.md
    
  • grocery-list — 汇总多道食谱的配料,生成去重且方便 Agent 读取的购物清单。

    在膳食计划结束时使用此命令——调用一次即可替代反复滚动查看配料清单。

    allrecipes-pp-cli grocery-list https://www.allrecipes.com/recipe/9599/quick-and-easy-brownies/ https://www.allrecipes.com/recipe/16354/easy-meatloaf/ --agent
    
可达性缓解
  • doctor — 健康检查会检查响应正文,识别 Cloudflare“Just a moment...”拦截页,然后建议使用浏览器 Chrome 传输方式。

    当 CLI 因机器人检测而无法运行时,Agent 会收到具体且可执行的错误,而不是泛泛的超时提示。

    allrecipes-pp-cli doctor
    

HTTP 传输

此 CLI 使用兼容 Chrome 的 HTTP/3 传输方式访问面向浏览器的端点。常规 API 调用无需常驻浏览器进程。

命令参考

recipes — 带有 Schema.org Recipe JSON-LD 标记的 Allrecipes 公开食谱页面

  • allrecipes-pp-cli recipes get — 按 ID + slug 获取食谱;返回经过解析的 JSON-LD Recipe。需要通过 `auth login...
  • allrecipes-pp-cli recipes search — 搜索与查询相匹配的 Allrecipes 食谱(无需 Cloudflare clearance)。

手写命令

  • allrecipes-pp-cli recipe <url-or-id> — 按 URL 或 ID 获取并呈现单个食谱
  • allrecipes-pp-cli search <query> — 搜索 Allrecipes 食谱(实时 + 缓存)
  • allrecipes-pp-cli top-rated <query> — 搜索并按贝叶斯平滑评分排序(先验值为 4.0,默认 C=200)
  • allrecipes-pp-cli quick — 从缓存中选出符合严格时间限制且评分最高的食谱
  • allrecipes-pp-cli pantry — 根据与食品储藏室文件的重合度为缓存食谱评分
  • allrecipes-pp-cli with-ingredient <ingredient> — 反向索引:使用指定食材的缓存食谱
  • allrecipes-pp-cli dietary — 按无麸质 / 纯素 / 低碳水筛选缓存食谱(严格屏蔽指定食材)
  • allrecipes-pp-cli cookbook — 将评分最高的类别或菜系汇编成 Markdown 食谱集
  • allrecipes-pp-cli grocery-list <urls...> — 汇总多份食谱中的食材,生成去重后的购物清单(如果提供 --pantry-file,则扣除其中的食材)
  • allrecipes-pp-cli scale <url> — 按目标份数调整食谱用量
  • allrecipes-pp-cli nutrition <url> — 显示食谱的营养信息(每份及总量)
  • allrecipes-pp-cli ingredients <url> — 显示解析后的食谱食材
  • allrecipes-pp-cli instructions <url> — 显示编号的烹饪步骤
  • allrecipes-pp-cli reviews <url> — 显示食谱评价摘要
  • allrecipes-pp-cli category <slug> — 浏览某个类别中的食谱(例如 dessert、weeknight)
  • allrecipes-pp-cli cuisine <slug> — 按菜系浏览食谱
  • allrecipes-pp-cli ingredient <name> — 浏览以某种主要食材为特色的食谱
  • allrecipes-pp-cli occasion <slug> — 按场合浏览食谱(节日、工作日晚餐、聚会)
  • allrecipes-pp-cli article <url> — 提取 Allrecipes 文章页面的正文
  • allrecipes-pp-cli gallery <url> — 从 Allrecipes 汇总图集提取食谱链接
  • allrecipes-pp-cli cook <slug> — 显示厨师档案及其食谱
  • allrecipes-pp-cli export <url> — 将食谱导出为 Markdown
  • allrecipes-pp-cli sync — 刷新已过期的缓存食谱
  • allrecipes-pp-cli cache — 检查、列出或清除本地食谱缓存
  • allrecipes-pp-cli doctor — 诊断连接、Cloudflare clearance 状态和缓存健康状况

新鲜度约定

此打印版 CLI 仅为已注册的、由存储支持的读取命令路径提供有界的新鲜度保障。在 --data-source auto 模式下,这些路径会检查 sync_state,并可能在读取本地数据前执行有界刷新。--data-source local 不会刷新。--data-source live 会读取 API,且不会修改本地存储。设置 ALLRECIPES_NO_AUTO_REFRESH=1 可跳过新鲜度钩子,而不更改数据源选择。

当 JSON 输出使用生成的来源信息封装时,新鲜度元数据会显示在 meta.freshness。请将其视为适用于所覆盖命令路径的当前缓存新鲜度,而非完整历史回填或 API 特定增强的保证。

查找合适的命令

当你知道想做什么,却不知道该用哪个命令时,可以直接询问 CLI:

allrecipes-pp-cli which "<capability in your own words>"

which 会根据自然语言描述的功能查询,从此 CLI 精选的功能索引中匹配最合适的命令。退出代码 0 表示至少找到一个匹配项;退出代码 2 表示没有足够可信的匹配项,此时可改用 --help,或缩小查询范围。

操作示例

排名前 5 的布朗尼,仅保留排名字段
allrecipes-pp-cli top-rated brownies --limit 5 --agent --select rank,title,url,rating,reviewCount,madeItCount

贝叶斯平滑会消除仅有 1 条评价却获 5 星的异常值;--select 会将载荷缩减为 Agent 实际会用到的字段。

规划三顿工作日晚餐和一份购物清单
allrecipes-pp-cli quick --max-minutes 30 --query chicken --limit 3 --agent | xargs allrecipes-pp-cli grocery-list --pantry-file ~/pantry.txt --agent

组合两个命令:快速筛选工作日晚餐,然后直接汇总食材储备情况并生成购物清单。

编制一本个人意大利食谱集
allrecipes-pp-cli cookbook --category italian --top 20 --output ~/italian-cookbook.md

按贝叶斯评分提取排名前 20 的食谱,并生成带目录的 Markdown 食谱集。

用储藏室里的食材烹饪
allrecipes-pp-cli pantry --pantry-file ~/pantry.txt --max-missing 2 --agent --select title,url,have,missing

本地索引会根据食材重合度为缓存的食谱排序;--max-missing 2 会保留至多还需两种食材的食谱。

严格无麸质筛选并精简字段
allrecipes-pp-cli dietary --type gluten-free --top 20 --agent --select title,url,rating,recipeIngredient

严格屏蔽指定食材,并使用 JSON-LD 标签筛选;--select 仅提取标题、网址、评分和食材,供 Agent 核验。

身份验证设置

浏览和搜索无需身份验证。食谱详情页需要 Cloudflare clearance Cookie——运行一次 allrecipes-pp-cli auth login --chrome,即可从浏览器获取。此操作用于通过机器人防护验证,并非登录 Allrecipes 账户:无需用户名、密码,也不会使用与用户绑定的令牌。此 CLI 不支持需要实际 Allrecipes 账户的已保存食谱、用餐计划或个人资料功能。

运行 allrecipes-pp-cli doctor 验证设置。

Agent 模式

在任意命令中添加 --agent。它等同于:--json --compact --no-input --no-color --yes。

  • 可通过管道传递——JSON 输出到 stdout,错误输出到 stderr

  • 可筛选——--select 可保留部分字段。带点路径可深入嵌套结构;数组会逐项遍历。在冗长 API 中,这对缩小上下文至关重要:

    allrecipes-pp-cli recipes get mock-value mock-value --agent --select id,name,status
    
  • 可预览——--dry-run 会显示请求,但不会发送

  • 支持离线使用——有本地 SQLite 存储时,同步和搜索命令可使用该存储

  • 非交互式——绝不显示提示,每项输入都通过标志传入

  • 只读——请勿使用此 CLI 执行创建、更新、删除、发布、评论、点赞、邀请、下单、发送或其他修改数据的请求

响应封装

从本地存储或 API 读取数据的命令,会在输出中附带来源信息封装:

{
  "meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
  "results": <data>
}

解析 .results 获取数据,并查看 .meta.source 以确定数据来自实时来源还是本地。当 stdout 连接到终端时,stderr 才会输出人类可读的 N results (live) 摘要;通过管道传递或由 Agent 使用时,stdout 只会输出纯 JSON。

Agent 反馈

当你或 Agent 发现此 CLI 有异常之处时,请记录下来:

allrecipes-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
allrecipes-pp-cli feedback --stdin < notes.txt
allrecipes-pp-cli feedback list --json --limit 10

条目会保存在本地 ~/.allrecipes-pp-cli/feedback.jsonl。除非设置了 ALLRECIPES_FEEDBACK_ENDPOINT,并且传入了 --send 或设置了 ALLRECIPES_FEEDBACK_AUTO_SEND=true,否则绝不会发送 POST 请求。默认情况下,反馈仅保存在本地。

记录让你感到意外的地方,而不是提交错误报告。简短、具体、写成一行:这才是会不断积累价值的内容。

输出传递

每个命令都支持 --deliver <sink>。输出除了写入 stdout(也可以替代 stdout)之外,还会发送到指定目标,因此 Agent 无需手动通过管道传递即可路由命令结果。支持三种目标:

目标效果
stdout默认值;仅写入 stdout
file:<path>以原子方式将输出写入 <path>(先写临时文件,再重命名)
webhook:<url>将输出正文 POST 到该 URL(使用 --compact 时,内容类型为 application/json 或 application/x-ndjson)

遇到未知方案时会拒绝请求,并返回结构化错误,指出支持的方案。Webhook 请求失败时会返回非零退出代码,并在 stderr 中记录 URL 和 HTTP 状态码。

命名配置

配置是保存的一组标志值,可在多次调用中重复使用。当计划任务中的 Agent 每次运行都使用相同配置调用同一命令时,可以使用配置——这是 HeyGen 的“Beacon”模式。

allrecipes-pp-cli profile save briefing --json
allrecipes-pp-cli --profile briefing recipes get mock-value mock-value
allrecipes-pp-cli profile list --json
allrecipes-pp-cli profile show briefing
allrecipes-pp-cli profile delete briefing --yes

显式标志的优先级始终高于配置值;配置值的优先级高于默认值。agent-context 会在 available_profiles 下列出所有可用配置,方便进行自省的 Agent 在运行时发现它们。

退出代码

代码含义
0成功
2用法错误(参数错误)
3未找到资源
4需要身份验证
5API 错误(上游问题)
7受到速率限制(等待后重试)
10配置错误

参数解析

解析 $ARGUMENTS:

  1. 为空、help 或 --help → 显示 allrecipes-pp-cli --help 的输出
  2. 以 install 开头 → 以 mcp 结尾 → 安装 MCP;否则 → 参见上文的先决条件
  3. 其他任何内容 → 直接使用(作为带有 --agent 的 CLI 命令执行)

安装 MCP 服务

  1. 安装 MCP 服务:
    go install github.com/mvanhorn/printing-press-library/library/food-and-dining/allrecipes/cmd/allrecipes-pp-mcp@latest
    
  2. 在 Claude Code 中注册:
    claude mcp add allrecipes-pp-mcp -- allrecipes-pp-mcp
    
  3. 验证:claude mcp list

直接使用

  1. 检查是否已安装:which allrecipes-pp-cli 如果未找到,请提供安装选项(参见本技能开头的先决条件)。
  2. 将用户查询匹配到上文“独特功能”和“命令参考”中的最佳命令。
  3. 使用 --agent 标志执行:
    allrecipes-pp-cli <command> [subcommand] [args] --agent
    
  4. 如果不明确,请查看子命令帮助:allrecipes-pp-cli <command> --help。

评论

支持 Markdown