食谱管理服务器

一个用Rust编写的MCP服务器,用于从互联网导入、解析、缩放、格式化和搜索食谱。

  • by nicholaswilde
  • Rust
  • 本地部署
  • 更新于
在 GitHub 查看 nicholaswilde/recipes-mcp-rs

使用说明

:stew:食谱MCP服务器:机器人:

[!警告] 此项目目前正在积极开发中(v0.X.X) 可生产的。功能可能会发生变化,可能会发生重大变化,恕不另行通知。 使用此MCP服务器的风险由您自行承担。

一个用Rust编写的MCP服务器,用于从互联网导入、解析、缩放、格式化和搜索食谱。

:闪光:特征

  • 智能网页抓取: 使用分层策略从各种在线资源中提取食谱 rust-recipe 和 recipe-scraper,包括高级图像和图库提取以及自动指令净化。
  • 配方缩放: 调整任何食谱的份量,自动调整配料数量。
  • 重量转换: 使用以下工具自动将体积测量值(杯、汤匙、茶匙)转换为克重 亚瑟王烘焙配料重量表.
  • 单位制转换: 自动在公制和英制之间转换体积测量值。
  • 营养评估: 根据配料重量自动估算食谱的卡路里和常量营养素(脂肪、碳水化合物、蛋白质)。支持与外部API(如Edamam)集成,以获得更详细的数据,并自动回退到内部估计。
  • 膳食过滤: 根据饮食偏好(如纯素、无麸质)过滤搜索结果和抓取食谱。
  • 警告提取: 捕捉食谱特定的提示、注释和变化。
  • 独立转换工具: 快速将成分字符串列表转换为加权等效值或切换单位系统。
  • 多格式导出: 支持将食谱导出到Markdown、JSON和Cooklang。
  • 配方发现: 集成搜索功能,可从支持的提供商(AllRecipes、Food Network、Serious Eats、TheMealDB、Epicurious、NYT Cooking、BBC Good Food)中查找食谱URL。
  • 缓存: 内置配方缓存,减少冗余网络请求。
  • 灵活运输: 支持两者 stdio 和 HTTP/SSE (服务器发送事件)传输模式。
  • 灵活配置: 支持TOML、YAML和JSON配置文件,以及环境变量和命令行参数。
  • 高可靠性: 代码覆盖率超过90%。

:package:安装

:剪贴板:先决条件

  • 锈 (最新稳定)
  • 任务 (可选,便于开发)

:锤子:构建

cargo build --release

或使用任务:

task build

:火箭:用途

:齿轮:配置

服务器可以通过环境变量、命令行参数或位于 config/ 目录。

基于文件的配置

服务器使用以下基于文件的配置层次结构(后面的文件覆盖前面的文件):

  1. config/default.toml (或 .yaml, .json):基本配置。
  2. config/{RUN_MODE}.toml:环境特定(例如。, config/development.toml). RUN_MODE 默认为 development.
  3. config/local.toml:本地覆盖(不由git跟踪)。

配置选项

选项 环境变量 CLI参数 默认值
配置路径 RECIPES__CONFIG_PATH --config, -c None
日志级别 RECIPES__LOG_LEVEL --log-level info
运输 RECIPES__TRANSPORT --transport stdio
港口 RECIPES__PORT --port 3000
重量换算 RECIPES__WEIGHT_CONVERSION --weight-conversion true
缓存已启用 RECIPES__CACHE_ENABLED --cache-enabled true
缓存目录 RECIPES__CACHE_DIR --cache-dir .cache
营养应用程序ID RECIPES__NUTRITION_APP_ID --nutrition-app-id None
营养应用程序密钥 RECIPES__NUTRITION_APP_KEY --nutrition-app-key None

:扳手:MCP工具

服务器提供了几个用于配方管理和配料处理的工具:

manage_recipes

用于复杂配方操作的统一工具。

论据:

  • action (必填): scrape, scale, format, search,或 nutrition.
  • urls:要抓取的食谱URL列表(需要 scrape,可选用于 scale/format/nutrition).
  • recipes:要缩放、格式化或分析的配方对象列表(如果需要,则需要 urls 未提供)。
  • target_servings:所需份数( scale,其他人可选)。
  • format_type:输出格式(markdown, json,或 cooklang,默认为 markdown).
  • query:搜索查询(必填) search).
  • limit:最大搜索结果(可选 search,默认值5)。
  • provider:要搜索的配方提供者(allrecipes, foodnetwork, seriouseats, themealdb, epicurious, nytcooking, bbcgoodfood).
  • dietary_filters:饮食偏好列表(vegan, vegetarian, gluten-free, dairy-free, keto, paleo).
  • admonition_types:要提取的警告类型列表(tip, note, variation).
  • bypass_cache:如果为true,则绕过缓存并强制执行新请求(可选,默认值:false)。
  • target_system:所需的体积转换单位系统(metric 或 imperial,可选)。

convert_ingredients

快速将体积成分字符串列表转换为克重量或单位系统之间的重量。

论据:

  • ingredients (必填):成分字符串数组(例如。, ["1 cup flour", "2 tbsp sugar"]).
  • target_system:所需的体积转换单位系统(metric 或 imperial,可选)。

:备注:MCP配置示例

{
  "mcpServers": {
    "recipes": {
      "command": "/path/to/recipes-mcp-rs",
      "args": ["--weight-conversion", "true", "--cache-enabled", "true"],
      "env": {
        "RECIPES__LOG_LEVEL": "info"
      }
    }
  }
}

:锤子与扳手:开发

:test_tube:运行测试

task test

:white_check_mark:CI检查(Lint、Format、Test)

task test:ci

:bar_chart:代码覆盖率

该项目保持了高代码质量,测试覆盖率超过90%。

task coverage

:page_facing_up:许可证

此项目根据Apache许可证2.0获得许可。请参阅 LICENSE 文件以获取详细信息。

:writing_hand:作者

该项目于2026年启动 尼古拉斯·王尔德.