与Tandoor Recipe Manager交互的模型上下文协议(MCP)服务器。
<img src="icon.jpg" width=20% height=20% alt="生成的Gemini图像">安装依赖项:
npm install
构建服务器:
npm run build
手动运行服务器(用于测试):
# 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
在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": []
}
}
}
如果希望所有操作都自动批准...
"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"
]
将./.clinerules添加到您的项目目录中
./memory-bank,其中包含您喜欢或不喜欢的食材列表,以便助手可以提供餐点建议。在Tandoor中创建新的食谱。
参数:
name (字符串,必需):食谱的名称。description (字符串,可选):食谱的描述。servings (数字,可选):服务人数。ingredients_block (字符串,必需):多行文本块,列出每行一个配料。instructions_block (字符串,必需):多行文本块,详细说明食谱步骤。示例:
{
"name": "简单意面",
"description": "一道快速简单的意面。",
"servings": 2,
"ingredients_block": "200克意面\n2汤匙橄榄油\n1瓣大蒜,切碎\n适量盐和胡椒",
"instructions_block": "1. 根据包装说明煮意面。\n2. 在锅中加热油并加入大蒜。\n3. 排干意面并加入锅中。\n4. 加入盐和胡椒调味。"
}
将一个或多个食谱添加到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": "周五晚上的快速晚餐。"
}
根据各种标准在Tandoor中搜索食谱。
参数:
query (字符串,可选):匹配食谱名称的搜索词(模糊匹配)。keywords (整数数组,可选):关键词ID数组。返回匹配这些关键词中的任何一个的食谱。foods (整数数组,可选):食材ID数组。返回包含这些食材中的任何一个的食谱。rating (整数,可选):食谱应具有的最低评分(0-5)。limit (整数,可选):返回的最大食谱数量,默认为10。示例:
{
"query": "鸡肉",
"keywords": [5, 12],
"rating": 4,
"limit": 5
}
从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
}
列出Tandoor中所有可用的餐别类型。
参数: 无
示例:
{}
列出或搜索关键词。
参数:
query (字符串,可选):关键词名称的可选搜索词。root (整数,可选):可选ID以获取第一级子节点(0表示根节点)。tree (整数,可选):可选ID以获取树中的所有子节点。示例:
{
"query": "意大利"
}
列出或搜索食材。
参数:
query (字符串,可选):食材名称的可选搜索词。root (整数,可选):可选ID以获取第一级子节点(0表示根节点)。tree (整数,可选):可选ID以获取树中的所有子节点。示例:
{
"query": "鸡胸肉"
}
列出或搜索单位。
参数:
query (字符串,可选):单位名称的可选搜索词。示例:
{
"query": "克"
}
检索当前购物清单项目。
参数:
checked (字符串,可选):按已检查状态过滤("true","false","both","recent")。默认为"recent"。示例:
{
"checked": "false"
}
向购物清单添加项目,允许使用食材/单位名称或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
}
更新现有的购物清单项目(例如,勾选/取消勾选,更改数量)。
参数:
item_id (整数,必需):要更新的购物清单项目的ID。amount (字符串,可选):可选的新数量。unit_id (整数,可选):可选的新单位ID。checked (布尔值,可选):可选的新已检查状态。note (字符串,可选):可选的新备注。示例(勾选项目):
{
"item_id": 101,
"checked": true
}
从购物清单中移除项目。
参数:
item_id (整数,必需):要移除的购物清单项目的ID。示例:
{
"item_id": 102
}
包含一个测试脚本,帮助验证服务器功能而不依赖于MCP连接:
# 设置您的API令牌(如果尚未在环境中设置)
$env:TANDOOR_API_TOKEN = "your-api-token"
# 运行测试脚本
npm run test
测试脚本提供了一个简单的菜单来:
Tandoor API在创建餐计划时有一些具体要求:
from_date字段必须包含时间组件(YYYY-MM-DDT00:00:00)recipe字段必须是一个具有id、name和keywords属性的对象meal_type字段必须是一个具有id和name属性的对象servings字段必须是字符串,而不是数字这些要求由MCP服务器自动处理。
如果您遇到MCP服务器的问题:
[Setup] Tandoor MCP服务器正在stdio上运行。