mcpField
P
pp-food52

pp-food52

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

关于 pp-food52

pp-food52 是使用 `food52-pp-cli` 检索、同步和分析 Food52 食谱与文章的技能,面向构建食谱工作流的 Agent。它结合在线查询、本地离线搜索和食材匹配。

主要功能

  1. 01搜索和浏览食谱
  2. 02本地同步食谱与文章
  3. 03按现有食材匹配食谱
  4. 04调整份量并整理食谱
  5. 05查找编辑认可的食谱

适用场景

  1. 01根据现有食材寻找食谱
  2. 02离线搜索已同步食谱
  3. 03按用餐人数调整食材用量
  4. 04输出整洁的烹饪步骤

安装

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

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

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

详细介绍

Food52 — Printing Press CLI

前提条件:安装 CLI

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

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

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

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

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

何时使用此 CLI

当 Agent 需要 Food52 品质的食谱(由社区精选并经编辑测试),且不希望渲染浏览器或抓取 HTML 时,请使用此 CLI。食材储备匹配和离线 FTS 命令可将其变成一本方便编辑的食谱集,Agent 可以在不同会话之间将其保存在本地。临时查询请使用实时的 recipes search;针对同一批食谱反复查询,则使用 sync + 离线 search。

何时不使用此 CLI

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

独特功能

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

可持续积累的本地状态
  • pantry match — 查找食材与本地储备重叠的 Food52 食谱,并按匹配覆盖率排序。

    当用户问“用我现有的食材能做什么”时,请使用此命令,而不是一次搜索一道菜。

    food52-pp-cli pantry match --min-coverage 0.7 --json
    
  • search — 对已同步的所有食谱和文章进行全文搜索,并可按类型筛选。

    当查询无法证明使用 Typesense 往返查询的合理性,或处于离线状态时,可使用此命令。

    food52-pp-cli search "miso" --type recipe --json
    
  • sync recipes — 将一个或多个标签的食谱拉取到本地 FTS 索引存储中。

    在进行食材储备匹配或离线搜索前运行此命令,为本地食谱集填充内容。

    food52-pp-cli sync recipes chicken vegetarian --limit 100
    
  • articles for-recipe — 查找已同步且在其 relatedReading 中提及指定食谱的文章。

    当用户想了解所找到食谱背后的编辑背景时,请使用此命令。

    food52-pp-cli articles for-recipe sarah-fennel-s-best-lunch-lady-brownie-recipe
    
他人忽略的编辑信号
  • recipes top — 仅显示 Food52 测试厨房认可的指定标签食谱,并设置最低评分门槛。

    当用户想要“Food52 编辑认可的食谱”,而非任意社区食谱时,请优先使用此命令,而不是广泛搜索。

    food52-pp-cli recipes top chicken --min-rating 4 --limit 5 --json
    
食谱转换
  • scale — 使用食谱的 Schema.org recipeYield,将食材用量调整为不同的份数。

    当用户烹饪的人数与食谱默认份数不同时,请使用此命令。

    food52-pp-cli scale mom-s-japanese-curry-chicken-with-radish-and-cauliflower --servings 8 --json
    
  • print — 将食谱整理为食材清单和编号步骤,不包含导航、图片、广告或评论,可直接通过管道传给 lp,或粘贴到笔记中。

    当用户想要实际按照食谱烹饪,而不是浏览食谱时,请使用此命令。

    food52-pp-cli print sarah-fennel-s-best-lunch-lady-brownie-recipe
    

HTTP 传输

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

发现信号

此 CLI 根据浏览器观察到的流量上下文生成。

  • 捕获覆盖范围:共 0 条网络条目中有 0 条 API 条目
  • 协议:ssr_embedded_data(置信度 100%)、next_data_json(置信度 100%)、rest_json(置信度 100%)、schema_org_jsonld(置信度 100%)
  • 身份验证信号:无
  • 生成提示:browser_http_transport
  • 候选命令:recipes search;recipes browse;recipes get;tags list;verticals list;articles browse;articles get
  • 注意事项:scope_note:Hotline(/hotline、/hotline/questions/)在 pageProps 中仅返回 siteSettings,且不会在 DOM 中渲染任何问题或回答数据。未通过身份验证的抓取工具实际上无法访问社区问答,因此已从 CLI 范围中排除。;scope_note:Shop 端点位于 shop.food52.com 和 food52.myshopify.com/api/2025-01/graphql.json,但需要发现 Shopify Storefront API 令牌;推迟至 v1 之后。;scope_note:buildId(浏览器嗅探时为 Pq8fQj0nm7uTx90i5u0si)和 _app.js 包哈希会在每次 Food52 部署时变化。CLI 的运行时发现机制(从 NEXT_DATA.buildId 获取 buildId,并通过正则表达式从当前的 _app-.js 中提取密钥)可透明地处理轮换。;scope_note:Typesense /collections 端点需要管理员密钥(仅限搜索的密钥会在此处返回 403)。CLI 不会列出集合,而是直接查询已知集合名称 'recipes_production_food52_current'。

命令参考

articles — 浏览和阅读 Food52 美食与生活类别中的故事(文章)

  • food52-pp-cli articles browse — 浏览某个类别(food、life)中的最新 Food52 文章
  • food52-pp-cli articles get — 根据 slug 获取一篇 Food52 文章(故事)

recipes — 按标签浏览 Food52 食谱,并获取单个食谱的详细信息(从 SSR HTML 中嵌入的 Next.js NEXT_DATA 提取)

  • food52-pp-cli recipes browse — 按标签筛选并浏览 Food52 食谱(例如 chicken、breakfast、vegetarian)
  • food52-pp-cli recipes get — 根据 slug 获取单个 Food52 食谱的完整结构化详细信息

手写命令

  • food52-pp-cli recipes search <query> — 通过 Typesense 搜索 Food52 食谱(自动从公开 JS 包中发现主机和仅限搜索的密钥)
  • food52-pp-cli recipes top <tag> — 仅显示某个标签下经 Test Kitchen 认可的食谱,可选设置最低评分(--min-rating)
  • food52-pp-cli articles browse-sub <vertical> <subvertical> — 浏览 Food52 文章的子类别(例如 food baking、food drinks、life travel)
  • food52-pp-cli articles for-recipe <slug> — 查找已同步文章中 relatedReading 提及指定食谱 slug 的文章
  • food52-pp-cli tags list — 列出从首页导航中发现的 Food52 食谱标签(chicken、breakfast、vegetarian、dessert、pasta 等)
  • food52-pp-cli sync recipes <tag> [<tag>...] — 将一个或多个标签下的食谱拉取到本地 FTS 索引存储中
  • food52-pp-cli sync articles <vertical> [<subvertical>] — 将某个类别(或子类别)的文章列表拉取到本地存储中
  • food52-pp-cli search <query> — 在本地存储中搜索食谱和文章(FTS5,离线)
  • food52-pp-cli pantry add <ingredient> [<ingredient>...] — 将食材添加到本地食品储藏室
  • food52-pp-cli pantry list — 显示本地食品储藏室
  • food52-pp-cli pantry remove <ingredient> — 从食品储藏室中移除一种食材
  • food52-pp-cli pantry match — 查找食材与食品储藏室相符(或大部分相符)的已同步食谱
  • food52-pp-cli scale <slug-or-url> — 按不同份数调整食谱食材用量(从食谱的 JSON-LD 中解析 recipeYield)
  • food52-pp-cli print <slug-or-url> — 输出简洁、便于烹饪的食谱视图(食材 + 编号步骤,不含导航和图片,可直接粘贴或……
  • food52-pp-cli open <slug-or-url> — 输出 Food52 食谱或文章的 URL;传入 --launch 可在默认浏览器中实际打开
查找合适的命令

当你知道想做什么,却不知道哪个命令能完成时,直接向 CLI 提问:

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

which 会根据自然语言能力查询,从此 CLI 精选的功能索引中找出最匹配的命令。退出码 0 表示至少找到一个匹配项;退出码 2 表示没有足够确定的匹配项——请改用 --help,或尝试更具体的查询。

使用示例

查找一道经 TK 认可且食材少于 5 种的鸡肉食谱
food52-pp-cli recipes search chicken --tag 5-ingredients-or-fewer --json --select 'hits.document.title,hits.document.slug,hits.document.testKitchenApproved'

使用标签筛选 Typesense 搜索结果,只返回 Agent 选择食谱所需的字段。

获取完整的 JSON 格式食谱,用于后续膳食规划
food52-pp-cli recipes get mom-s-japanese-curry-chicken-with-radish-and-cauliflower --json --select 'recipe.title,recipe.recipeDetails.ingredients,recipe.recipeDetails.instructions,recipe.averageRating'

提取结构化的食材和步骤,供膳食规划器或购物清单生成器使用。

一次性构建离线工作日晚餐食谱集
food52-pp-cli sync recipes weeknight quick-and-easy 30-minutes-or-fewer && food52-pp-cli search 'weeknight' --json

将三个高价值标签提取到本地存储,然后通过 FTS5 查询——在飞机上也能使用。

我现在能做些什么?
food52-pp-cli pantry match --min-coverage 0.6 --json --select 'matches.title,matches.coverage,matches.missing_ingredients'

将本地食品储备与所有已同步的食谱进行比对,返回你基本上能做出来的食谱。

身份验证设置

无需身份验证。

运行 food52-pp-cli doctor 以验证设置。

Agent 模式

为任何命令添加 --agent。该参数会展开为:--json --compact --no-input --no-color --yes。

  • 支持管道传输 — JSON 输出到 stdout,错误输出到 stderr

  • 支持筛选 — --select 保留部分字段。点分路径可深入嵌套结构;数组会逐元素遍历。对于输出冗长的 API,此功能对控制上下文大小至关重要:

    food52-pp-cli articles get best-mothers-day-gift-ideas --agent --select id,name,status
    
  • 支持预览 — --dry-run 显示请求内容,但不会发送

  • 适用于离线环境 — 有本地 SQLite 存储时,同步和搜索命令可使用该存储

  • 非交互式 — 不会进行提示,所有输入均通过标志指定

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

响应封装

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

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

解析 .results 获取数据,并查看 .meta.source 以确认数据来自实时 API 还是本地存储。只有当 stdout 连接到终端时,才会将易读的 N results (live) 摘要打印到 stderr;通过管道传输的使用者或 Agent 会在 stdout 上获得纯 JSON。

Agent 反馈

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

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

条目保存在本地的 ~/.food52-pp-cli/feedback.jsonl 中。除非设置了 FOOD52_FEEDBACK_ENDPOINT,且传入了 --send 或设置了 FOOD52_FEEDBACK_AUTO_SEND=true,否则不会进行 POST。默认情况下,反馈仅保存在本地。

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

输出传递

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

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

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

命名配置

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

food52-pp-cli profile save briefing --json
food52-pp-cli --profile briefing articles get best-mothers-day-gift-ideas
food52-pp-cli profile list --json
food52-pp-cli profile show briefing
food52-pp-cli profile delete briefing --yes

显式标志始终优先于配置值;配置值优先于默认值。agent-context 会在 available_profiles 下列出所有可用配置,让能够自省的 Agent 在运行时发现这些配置。

退出码

代码含义
0成功
2用法错误(参数错误)
3未找到资源
5API 错误(上游问题)
7请求过于频繁(等待后重试)
10配置错误

参数解析

解析 $ARGUMENTS:

  1. 为空、help 或 --help → 显示 food52-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/food52/cmd/food52-pp-mcp@latest
    
  2. 在 Claude Code 中注册:
    claude mcp add food52-pp-mcp -- food52-pp-mcp
    
  3. 验证:claude mcp list

直接使用

  1. 检查是否已安装:which food52-pp-cli 如果未找到,请提供安装选项(参见本技能顶部的先决条件)。
  2. 根据用户查询,从上文的独特功能和命令参考中选择最合适的命令。
  3. 使用 --agent 标志执行:
    food52-pp-cli <command> [subcommand] [args] --agent
    
  4. 如果有歧义,查看子命令帮助:food52-pp-cli <command> --help。

评论

支持 Markdown