返回市场
塔多尔-MCP服务器

塔多尔-MCP服务器

作者:starbuck937 星标更新:2025-03-30

项目介绍

Tandoor MCP Server

Tandoor Recipe Manager交互的模型上下文协议(MCP)服务器。

<img src="icon.jpg" width=20% height=20% alt="生成的Gemini图像">

当前状态

  • create_tandoor_recipe: 成功实现并测试
  • create_tandoor_meal_plan: 成功实现并测试
  • get_recipes: 成功实现并测试
  • get_meal_plans: 成功实现并测试
  • get_recipe_details: 已实现
  • get_meal_types: 已实现
  • get_keywords: 已实现
  • get_foods: 已实现
  • get_units: 已实现
  • 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"
       ]
    
  6. ./.clinerules添加到您的项目目录中

  • 可选地,添加./memory-bank,其中包含您喜欢或不喜欢的食材列表,以便助手可以提供餐点建议。

可用工具

create_tandoor_recipe

在Tandoor中创建新的食谱。

参数:

  • name (字符串,必需):食谱的名称。
  • description (字符串,可选):食谱的描述。
  • servings (数字,可选):服务人数。
  • ingredients_block (字符串,必需):多行文本块,列出每行一个配料。
  • instructions_block (字符串,必需):多行文本块,详细说明食谱步骤。

示例:

{
  "name": "简单意面",
  "description": "一道快速简单的意面。",
  "servings": 2,
  "ingredients_block": "200克意面\n2汤匙橄榄油\n1瓣大蒜,切碎\n适量盐和胡椒",
  "instructions_block": "1. 根据包装说明煮意面。\n2. 在锅中加热油并加入大蒜。\n3. 排干意面并加入锅中。\n4. 加入盐和胡椒调味。"
}

create_tandoor_meal_plan

将一个或多个食谱添加到Tandoor的特定日期和餐别类型的餐计划中。

参数:

  • title (字符串,可选):餐计划条目的标题。
  • recipes (数组,必需):要添加到计划中的食谱名称或ID数组。
  • start_date (字符串,必需):餐计划条目的日期(YYYY-MM-DD)。
  • meal_type (字符串,必需):餐别类型名称(例如,“晚餐”,“午餐”)。
  • servings (数字,可选):餐计划条目的服务人数(默认值:1)。
  • note (字符串,可选):餐计划条目的备注。

示例:

{
  "title": "周五晚餐",
  "recipes": [123, "简单意面"],
  "start_date": "2025-03-29",
  123, "简单意面"],
  "start_date": "2025-03-29",
  "meal_type": "晚餐",
  "servings": 2,
  "note": "周五晚上的快速晚餐。"
}

get_recipes

根据各种标准在Tandoor中搜索食谱。

参数:

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

示例:

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

get_meal_plans

从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
}

get_recipe_details

检索特定食谱的全部详细信息。

参数:

  • recipe_id (整数,必需):要检索的食谱ID。

示例:

{
  "recipe_id": 123
}

get_meal_types

列出Tandoor中所有可用的餐别类型。

参数:

示例:

{}

get_keywords

列出或搜索关键词。

参数:

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

示例:

{
  "query": "意大利"
}

get_foods

列出或搜索食材。

参数:

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

示例:

{
  "query": "鸡胸肉"
}

get_units

列出或搜索单位。

参数:

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

示例:

{
  "query": "克"
}

get_shopping_list

检索当前购物清单项目。

参数:

  • checked (字符串,可选):按已检查状态过滤("true","false","both","recent")。默认为"recent"。

示例:

{
  "checked": "false" 
}

add_shopping_list_item

向购物清单添加项目,允许使用食材/单位名称或ID。

参数:

  • food_name_or_id (字符串或整数,必需):食品项目的名称或ID。
  • amount (字符串,必需):所需数量(例如,'1','2.5','1/2')。
  • unit_name_or_id (字符串或整数,必需):单位的名称或ID(例如,'杯','克',5)。
  • note (字符串,可选):项目的可选备注。

示例(使用名称):

{
  "food_name_or_id": "鸡胸肉",
  "amount": "500",
  "unit_name_or_id": "克",
  "note": "用于炒菜"
}

示例(使用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 (字符串,可选):可选的新备注。

示例(勾选项目):

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

remove_shopping_list_item

从购物清单中移除项目。

参数:

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

示例:

{
  "item_id": 102
}

测试

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

# 设置您的API令牌(如果尚未在环境中设置)
$env:TANDOOR_API_TOKEN = "your-api-token"

# 运行测试脚本
npm run test

测试脚本提供了一个简单的菜单来:

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

实现注意事项

Tandoor API在创建餐计划时有一些具体要求:

  1. from_date字段必须包含时间组件(YYYY-MM-DDT00:00:00
  2. recipe字段必须是一个具有idnamekeywords属性的对象
  3. meal_type字段必须是一个具有idname属性的对象
  4. servings字段必须是字符串,而不是数字

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

故障排除

如果您遇到MCP服务器的问题:

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