mcpField
C
Cook (Cooklang recipes)

Cook (Cooklang recipes)

本地服务
cook.md健康医疗33 周前更新

关于 Cook (Cooklang recipes)

Cook 是一个本地 MCP 服务,让 AI Agent 管理文件夹中的 Cooklang 食谱和菜单文件。它支持搜索、校验、编辑、购物清单和库存管理;登录 cook.md 后还可使用营养计算及图片和链接导入。

主要功能

  1. 01读取、搜索与校验食谱
  2. 02编写食谱和菜单文件
  3. 03按菜单生成购物清单
  4. 04追踪库存与临期食材
  5. 05渲染自定义报告
  6. 06营养计算与食谱导入

适用场景

  1. 01规划一周菜单并生成采购清单
  2. 02检查食谱集合中的错误引用
  3. 03根据库存寻找可制作的菜肴
  4. 04从网页或照片导入食谱

MCP 相关

MCP 服务通过工具、提示词和资源向 MCP 客户端提供 Cooklang 食谱操作能力。食谱文件保存在本地指定目录中;营养计算及部分导入功能需要 cook.md 登录。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"cook-md-cook": {
"command": "npx",
"args": [
"-y",
"@cookmd/mcp"
],
"env": {
"COOK_RECIPES_DIR": "<COOK_RECIPES_DIR>"
}
}
}
}
启动命令npx -y @cookmd/mcp
需要配置的环境变量
COOK_RECIPES_DIRRecipe folder. If unset, the client's workspace roots, then the working directory.

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

安装包
npm@cookmd/mcp0.2.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

cook-mcp

一个 MCP 服务,可让你的 AI Agent(Claude Code、Claude Desktop、Cursor、ChatGPT 或任何其他 MCP 客户端)访问你的 Cooklang 食谱收藏。食谱以普通的 .cook 和 .menu 文件形式保存在你拥有的文件夹中。Agent 可以读取、搜索、验证和编写这些文件,生成购物清单、跟踪食品储藏室库存并渲染报告,所有操作都在本地进行,无需账户。使用 cook.md 登录后,它还可以计算营养信息,并从照片和社交链接导入食谱。

安装

Claude Code:

claude mcp add cook -- npx -y @cookmd/mcp

适用于接受 mcpServers 配置的任何客户端:

{
  "mcpServers": {
    "cook": {
      "command": "npx",
      "args": ["-y", "@cookmd/mcp"],
      "env": { "COOK_RECIPES_DIR": "/path/to/recipes" }
    }
  }
}

如果未设置 COOK_RECIPES_DIR,服务将使用客户端共享的工作区文件夹,或客户端启动时所在的文件夹。请参阅如何选择食谱文件夹。

支持的平台:macOS(arm64、x64)和 Linux(x64、arm64、glibc 2.35 或更高版本)。目前尚无 Windows 构建版本。

特定客户端的设置说明:https://cook.md/help/mcp

Claude Code 插件

Claude Code 用户可以安装 cooklang 插件,无需手动添加服务。该插件位于 cooklang/cooklang-skills,包含此服务以及以下技能:

/plugin marketplace add cooklang/cooklang-skills
/plugin install cooklang@cooklang-skills

该插件会以你的 Claude Code 项目文件夹作为食谱根目录启动服务,而 Claude Code 会根据你的请求选择合适的技能(“规划下周的晚餐”“这份食谱有效吗?”)。如果你已经通过 claude mcp add cook 添加了服务,请移除该条目,以免同时运行两个副本。

这些技能也由此服务作为 cooklang://skills/<name> 资源提供:

技能适用场景
cooklang-editing编写新食谱,或编辑并修复 .cook 文件
cooklang-validation检查食谱、文件夹或整个收藏中的错误和失效引用
metadata添加或修复 YAML frontmatter(标题、标签、份数、时间),包括批量更改
recipe-import从 URL、照片或粘贴的文本导入食谱
recipe-search按食材、标签、菜系、课程或记忆中的短语查找食谱
scale-recipe按更多或更少的份数调整食谱
export-recipe将食谱转换为 Markdown、JSON、纯文本或 HTML
organize-collection文件夹布局、元数据审计、货架和食品储藏室配置、整个食谱库检查
meal-planning创建或编辑 .menu 膳食计划
shopping-list根据食谱或计划生成购物清单,按货架分组,并扣除食品储藏室中的库存
pantry跟踪库存、保质期和低库存物品;查询现有食材能做什么
report-authoring使用 render_report 创建自定义 Jinja 报告和打印件
nutrition-reports营养评估和筛查(Cook Basic 或 Pro)
nutrition-goals调整食谱或计划以达到营养目标(Cook Basic 或 Pro)

此代码库中的 skills/ 是规范副本;插件代码库会与其同步。每项技能都位于 skills/<name>/SKILL.md。

工具

免费(本地使用,无需登录)
工具功能
list_recipes列出食谱、菜单或报告模板(kind:recipe、menu、template、all)
read_recipe读取食谱或菜单:源内容以及解析后的食材、厨具、步骤和元数据;可选缩放份量
search_recipes搜索名称和内容,可按标签筛选
validate检查文件、文件夹、整个集合或未保存的内容,查找错误和失效引用
write_recipe保存 .cook 食谱(先验证)
write_menu保存 .menu 菜单(先验证)
write_config保存 config/aisle.conf、config/pantry.conf,或保存在 reports/ 或 config/reports/ 下的 .jinja 报告模板
shopping_list根据食谱和/或菜单生成购物清单:合并重复项目、按货架分组,并扣除食品储藏室中的存货
pantry_list按区域显示食品储藏室中的存货
pantry_expiring即将过期的物品
pantry_depleted库存低于或等于最低库存阈值的物品
pantry_recipes显示利用食品储藏室现有食材可以烹制哪些食谱
pantry_update添加、更新或移除食品储藏室中的物品
render_report使用食谱或菜单作为数据,渲染 jinja 报告模板(普通模板无需登录)
Cook Basic / Pro(cook.md 登录)
工具功能
login启动 cook.md 设备登录;显示代码和 URL
auth_status显示登录状态、方案和导入额度
get_nutrition查询指定食材用量的营养成分
aggregate_nutrition汇总多行食材的营养成分
lookup_ingredient模糊搜索食材目录
convert_units在单位之间进行换算(体积换算为质量需要密度)
check_category检查食材是否属于某个类别
branded_lookup通过条形码或文本查询包装产品
reference_intakes每日参考摄入量表(RDA/DV)
import_recipe将网页、照片或粘贴的文本转换为 Cooklang

从网页或粘贴的文本导入食谱时,import_recipe 无需登录。导入照片和社交媒体链接需要 cook.md 账户,并会使用导入额度。它会返回 Cooklang 文本,但不会保存;Agent 会先验证文本,再调用 write_recipe。render_report 中的营养计算功能也需要 Cook Basic 或 Pro。

提示词和资源

提示词:meal-planning、shopping-list、pantry、import-recipe、edit-recipe、nutrition-report、nutrition-goals、scale-recipe。

资源:

  • cooklang://spec:Cooklang 规范
  • cooklang://syntax:语法参考
  • cooklang://menu-format:.menu 菜单格式
  • cooklang://skills/<name>:Agent 工作指南,上表中每项技能各有一份:cooklang-editing、cooklang-validation、export-recipe、meal-planning、metadata、nutrition-goals、nutrition-reports、organize-collection、pantry、recipe-import、recipe-search、report-authoring、scale-recipe、shopping-list

安全

  • 写入操作仅限食谱根目录。目录外的路径会被拒绝。
  • 每次写入前都会进行验证;无效的 Cooklang 不会保存。
  • 已弃用的 >> 元数据语法会被拒绝。请使用 YAML frontmatter。
  • 没有删除工具。Agent 无法移除您的文件。

已知限制

  • 购物清单中的库存扣减仅在单位相同时有效。例如,食品储藏室中的 1 kg 无法抵消食谱中的 200 g。这是 cookcli-core 的限制。
  • 通常不会跟随食谱文件夹中的符号链接来读取和列出内容。通过不带扩展名的裸名称请求的符号链接,或经由食谱中的 @./ 引用访问的符号链接,仍可能会被跟随。只有当您在食谱中放入指向文件夹外部的符号链接时,才会受到影响。
  • 暂无 Windows 版本。
  • 没有删除工具。

环境变量

变量默认值含义
COOK_RECIPES_DIR客户端的根目录,然后是其工作目录菜谱根目录。所有路径均相对于它。设置后始终优先。
COOKMD_BASE_URLhttps://cook.md登录、权限、导入
NUTRITION_API_URLhttps://nutrition.cook.md营养服务
NUTRITION_API_TOKEN无组织密钥或预先生成的令牌。优先于已存储的登录信息。
COOK_MCP_AUTH_PATH~/.config/cook-mcp/auth.json令牌存储位置。旧的 NUTRITION_MCP_AUTH_PATH 仍可用作别名。

如何选择菜谱文件夹

  1. 如果已设置 COOK_RECIPES_DIR,则使用它。不会查询其他位置。
  2. 客户端的 MCP 根目录。如果客户端支持根目录(会将已打开的工作区文件夹共享给服务),则第一个已存在的 file:// 文件夹会成为菜谱根目录。服务会在首次调用菜谱工具时询问,并在客户端报告根目录变更时再次询问。如果客户端在 5 秒内没有回应,服务会使用工作目录,并在稍后再次询问(最多每 30 秒一次)。
  3. 客户端启动服务时所在的文件夹。

根目录是你主动打开的文件夹,因此除非它是 /、你的主目录或位于 Agent 插件安装文件夹内(例如 ~/.codex/plugins/cache/...、~/.gemini/extensions/...,或 CLAUDE_PLUGIN_ROOT 指向的文件夹),否则会使用它。工作目录的检查更严格:如果工作目录本身或向上最多四层的文件夹中存在 .claude-plugin/plugin.json、Agent 插件的 plugin.json 或 gemini-extension.json,也会拒绝使用,因为如果插件在自己的安装文件夹中启动服务,就会暴露错误的文件,并将菜谱写入更新时会被清除的文件夹。如果找不到可用位置,菜谱工具会说明未设置菜谱文件夹及原因,并指出可通过 COOK_RECIPES_DIR 修复;auth_status 会显示 recipe_root_source: "unset"。否则,recipe_root_source 的值为 env、roots 或 cwd。

各客户端的行为:

  • Claude Code 会将其项目文件夹作为根目录发送(已验证),因此无需配置。

  • Codex 不会发送根目录(已在 0.160.1 版本验证),且可能在插件文件夹中启动服务,因此请设置 COOK_RECIPES_DIR:

    codex mcp add cook --env COOK_RECIPES_DIR=/path/to/recipes -- npx -y @cookmd/mcp
    
  • VS Code 和 Cursor 的文档说明支持根目录(此处未经验证)。如果菜谱工具提示未设置文件夹,请在服务的配置中设置 COOK_RECIPES_DIR。

可以询问的内容

  • “根据我的菜谱规划下周的晚餐,并制作购物清单。”
  • “我可以用食品储藏室里的东西做什么?”
  • “检查我的整个菜谱集,找出失效的引用。”
  • “将 https://example.com/some-recipe 导入为菜谱。”
  • “本周计划中有多少蛋白质?”(需要 Cook Basic 或 Pro)

从源代码构建

cargo build --release
cargo test

二进制文件是 target/release/cook-mcp。它通过标准输入输出传输 MCP。cook-mcp login 和 cook-mcp logout 可在终端中管理 cook.md 登录信息。

从 nutrition-mcp 迁移

@cookmd/nutrition-mcp 仍可使用:它现在是一个运行 @cookmd/mcp 的轻量封装。要切换,请将 MCP 配置中的包名称改为 @cookmd/mcp。你的登录信息会保留。

有两项变化。菜谱工具需要设置 COOK_RECIPES_DIR(旧配置未设置此变量),或者从菜谱文件夹启动客户端;如果两者都没有,菜谱工具会告知 Agent 未设置菜谱文件夹。另外,render_report 的路径现在相对于菜谱文件夹。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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