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中创建包含配料和说明的食谱
- 将食谱添加到特定日期和膳食类型的膳食计划中
- 使用各种条件(名称、关键字、食物、评级)搜索食谱
- 检索按日期范围和膳食类型筛选的膳食计划
- 检索特定食谱的完整详细信息
- 列出可用的膳食类型、关键字、食物和单位
- 管理购物清单项目(查看、添加、更新、删除)
设置
- 安装依赖项:
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有一个你喜欢或不喜欢的食物的标记或文本文件列表,以防你想从助理那里得到用餐建议。
可用工具
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测试脚本提供了一个简单的菜单,用于:
- 列出可用工具
- 测试创建配方
- 测试将食谱添加到膳食计划中
实现注意事项
Tandoor API对制定膳食计划有一些具体要求:
- 这
from_date字段必须包含时间分量(YYYY-MM-DDT00:00:00) - 这
recipe字段必须是具有以下属性的对象id,name,以及keywords属性 - 这
meal_type字段必须是具有以下属性的对象id和name属性 - 这
servings字段必须是字符串,而不是数字
这些要求由MCP服务器自动处理。
故障排除
如果遇到MCP服务器问题:
- 确保服务器正在运行并显示
[Setup] Tandoor MCP server running on stdio. - 检查您的Tandoor URL和API令牌是否正确
- 在运行服务器的终端中查找错误消息
- 验证膳食类型名称是否与Tandoor实例中的名称完全匹配
- 使用测试脚本验证MCP系统外的服务器功能
- 尝试手动运行服务器,并检查控制台输出以获取详细的错误消息
