食谱管理服务器

Tandoor MCP Server 是一个用于与 Tandoor Recipe Manager 交互的模型上下文协议服务器,提供食谱创建、餐计划管理、购物清单管理等功能。

  • by starbuck93
  • JavaScript
  • 本地部署
  • 18 星标
  • 更新于
在 GitHub 查看 starbuck93/tandoor-mcp-server

使用说明

Tandoor MCP服务器

一种用于交互的模型上下文协议(MCP)服务器 Tandoor配方管理器.

当前状态

  • ✅ create_tandoor_recipe:成功实施和测试
  • ✅ 创建待办事项计划:成功实施和测试
  • ✅ 获取密码:成功实施和测试
  • ✅ get_meal计划:成功实施和测试
  • ✅ 获取密码详细信息:已实施
  • ✅ get_mal_types:已实施
  • ✅ 获取关键字:已实施
  • ✅ 获取食物:已实施
  • ✅ 获取单位:已实施
  • ✅ get_shopping_list:已实施
  • ✅ add_shopping_list_item:已实现(通过名称查找)
  • ✅ update_shopping_list_item:已实施
  • ✅ remove_shopping_list_item:已实施

特性

  • 在Tandoor中创建包含配料和说明的食谱
  • 将食谱添加到特定日期和膳食类型的膳食计划中
  • 使用各种条件(名称、关键字、食物、评级)搜索食谱
  • 检索按日期范围和膳食类型筛选的膳食计划
  • 检索特定食谱的完整详细信息
  • 列出可用的膳食类型、关键字、食物和单位
  • 管理购物清单项目(查看、添加、更新、删除)

设置

  1. 安装依赖项:

    npm install
    
  2. 构建服务器:

    npm run build
    
  3. 手动运行服务器(用于测试):

    # Windows PowerShell
    $env:TANDOOR_URL = "https://your-tandoor-instance.com"
    $env:TANDOOR_API_TOKEN = "your-api-token"
    node .\build\index.js
    
    # Windows CMD
    set TANDOOR_URL=https://your-tandoor-instance.com
    set TANDOOR_API_TOKEN=your-api-token
    node .\build\index.js
    
    # Linux/macOS
    TANDOOR_URL=https://your-tandoor-instance.com TANDOOR_API_TOKEN=your-api-token node ./build/index.js
    
  4. 在MCP设置中配置:

    {
      "mcpServers": {
        "tandoor": {
          "command": "node",
          "args": ["path/to/tandoor-mcp-server/build/index.js"],
          "env": {
            "TANDOOR_URL": "https://your-tandoor-instance.com",
            "TANDOOR_API_TOKEN": "your-api-token"
          },
          "disabled": false,
          "autoApprove": []
        }
      }
    }
    
  5. 如果你想让一切都自动批准。..

      "autoApprove": [
        "add_shopping_list_item",
        "create_tandoor_meal_plan",
        "create_tandoor_recipe",
        "get_foods",
        "get_keywords",
        "get_meal_plans",
        "get_meal_types",
        "get_recipe_details",
        "get_recipes",
        "get_recipes",
        "get_shopping_list",
        "get_units",
        "remove_shopping_list_item",
        "update_shopping_list_item"
      ]

  1. 添加 ./.clinerules 到您的项目目录
  • 还可以选择添加 ./memory-bank 有一个你喜欢或不喜欢的食物的标记或文本文件列表,以防你想从助理那里得到用餐建议。

可用工具

create_tandoor_recipe

在Tandoor中创建新配方。

参数:

  • name (string,必填):配方的名称。
  • description (字符串,可选):食谱的描述。
  • servings (数字,可选):份数。
  • ingredients_block (string,必填):一个多行的文本块,每行列出一种成分。
  • instructions_block (字符串,必填):详细说明配方说明的多行文本块。

例子:

{
  "name": "Simple Pasta",
  "description": "A quick and easy pasta dish.",
  "servings": 2,
  "ingredients_block": "200g pasta\n2 tbsp olive oil\n1 clove garlic, minced\nSalt and pepper to taste",
  "instructions_block": "1. Cook pasta according to package instructions.\n2. Heat oil in a pan and add garlic.\n3. Drain pasta and add to the pan.\n4. Season with salt and pepper."
}

创建待办事项计划

为特定日期和膳食类型向Tandoor膳食计划添加一个或多个食谱。

参数:

  • title (字符串,可选):膳食计划条目的标题。
  • recipes (array,必填):要添加到计划中的配方名称或ID的数组。
  • start_date (字符串,必填):膳食计划条目的日期(YYYY-MM-DD)。
  • meal_type (string,必填):用餐类型的名称(例如,“Dinner”、“Lunch”)。
  • servings (数字,可选):膳食计划条目的份数(默认值:1)。
  • note (字符串,可选):膳食计划条目的注释。

例子:

{
  "title": "Friday Dinner",
  "recipes": [123, "Simple Pasta"],
  "start_date": "2025-03-29",
  "meal_type": "Dinner",
  "servings": 2,
  "note": "Quick dinner for Friday night."
}

获取密码

根据各种条件在Tandoor中搜索食谱。

参数:

  • query (字符串,可选):与配方名称匹配的搜索词(模糊匹配)。
  • keywords (整数数组,可选):关键字ID数组。返回与这些关键字中的任何一个匹配的食谱。
  • foods (整数数组,可选):食物ID数组。返回包含这些食物中任何一种的食谱。
  • rating (整数,可选):配方应具有的最小评级(0-5)。
  • limit (整数,可选):要返回的食谱的最大数量。默认值为10。

例子:

{
  "query": "chicken",
  "keywords": [5, 12],
  "rating": 4,
  "limit": 5
}

get_meal计划

从Tandoor检索膳食计划条目,可选择按日期范围和膳食类型进行过滤。

参数:

  • from_date (字符串,可选):开始日期(YYYY-MM-DD),用于过滤膳食计划(包括在内)。
  • to_date (字符串,可选):过滤膳食计划(包括在内)的结束日期(YYYY-MM-DD)。
  • meal_type_id (整数,可选):要过滤的膳食类型ID。

例子:

{
  "from_date": "2025-03-01",
  "to_date": "2025-03-31",
  "meal_type_id": 1
}

获取密码详细信息

检索特定食谱的完整细节。

参数:

  • recipe_id (整数,必填):要检索的配方的ID。

例子:

{
  "recipe_id": 123
}

get_mal_types

列出Tandoor中所有可用的膳食类型。

参数: 无

例子:

{}

获取关键字

列出或搜索关键字。

参数:

  • query (字符串,可选):关键字名称的可选搜索词。
  • root (整数,可选):获取一级子级的可选ID(根为0)。
  • tree (整数,可选):获取树中所有子节点的可选ID。

例子:

{
  "query": "italian"
}

获取食物

列出或搜索食物。

参数:

  • query (string,可选):食物名称的可选搜索词。
  • root (整数,可选):获取一级子级的可选ID(根为0)。
  • tree (整数,可选):获取树中所有子节点的可选ID。

例子:

{
  "query": "chicken breast"
}

获取单位

列出或搜索单位。

参数:

  • query (字符串,可选):单位名称的可选搜索词。

例子:

{
  "query": "gram"
}

get_shopping_list

检索当前购物清单项目。

参数:

  • checked (字符串,可选):按检查状态(“true”、“false”、“both”、“recent”)过滤。默认为“最近”。

例子:

{
  "checked": "false" 
}

add_shopping_list_item

在购物清单中添加一个项目,允许食物/单位名称或ID。

参数:

  • food_name_or_id (字符串或整数,必填):食品的名称或ID。
  • amount (string,必填):所需金额(例如,“1”、“2.5”、“1/2”)。
  • unit_name_or_id (字符串或整数,必填):单位的名称或ID(例如,'cup'、'g'、5)。
  • note (string,可选):项目的可选注释。

示例(使用名称):

{
  "food_name_or_id": "Chicken Breast",
  "amount": "500",
  "unit_name_or_id": "g",
  "note": "For stir-fry"
}

示例(使用ID):

{
  "food_name_or_id": 42,
  "amount": "2",
  "unit_name_or_id": 15
}

update_shopping_list_item

更新现有的购物清单项目(例如,选中/取消选中、更改金额)。

参数:

  • item_id (整数,必填):要更新的购物清单项目的ID。
  • amount (字符串,可选):可选新金额。
  • unit_id (整数,可选):可选的新单元ID。
  • checked (布尔值,可选):可选的新检查状态。
  • note (string,可选):可选的新注释。

示例(勾选项目):

{
  "item_id": 101,
  "checked": true
}

remove_shopping_list_item

从购物清单中删除一个项目。

参数:

  • item_id (整数,必填):要删除的购物清单项目的ID。

例子:

{
  "item_id": 102
}

测试

包含一个测试脚本,以帮助验证服务器功能,而不依赖于MCP连接:

# Set your API token (if not already set in the environment)
$env:TANDOOR_API_TOKEN = "your-api-token"

# Run the test script
npm run test

测试脚本提供了一个简单的菜单,用于:

  1. 列出可用工具
  2. 测试创建配方
  3. 测试将食谱添加到膳食计划中

实现注意事项

Tandoor API对制定膳食计划有一些具体要求:

  1. 这 from_date 字段必须包含时间分量(YYYY-MM-DDT00:00:00)
  2. 这 recipe 字段必须是具有以下属性的对象 id, name,以及 keywords 属性
  3. 这 meal_type 字段必须是具有以下属性的对象 id 和 name 属性
  4. 这 servings 字段必须是字符串,而不是数字

这些要求由MCP服务器自动处理。

故障排除

如果遇到MCP服务器问题:

  1. 确保服务器正在运行并显示 [Setup] Tandoor MCP server running on stdio.
  2. 检查您的Tandoor URL和API令牌是否正确
  3. 在运行服务器的终端中查找错误消息
  4. 验证膳食类型名称是否与Tandoor实例中的名称完全匹配
  5. 使用测试脚本验证MCP系统外的服务器功能
  6. 尝试手动运行服务器,并检查控制台输出以获取详细的错误消息