关于 Tandoor MCP Server
Tandoor MCP Server 将 MCP 客户端连接到 Tandoor Recipe Manager。它通过一组工具支持食谱和膳食计划操作,也可管理购物清单。
主要功能
- 01创建含食材和步骤的食谱
- 02按名称和条件搜索食谱
- 03创建并筛选膳食计划
- 04获取食谱详情和食材列表
- 05管理购物清单项目
适用场景
- 01通过客户端向 Tandoor 添加食谱
- 02按食材、关键词或评分查找食谱
- 03按日期和餐型安排膳食
- 04更新或勾选购物项目
MCP 相关
向 MCP 客户端提供创建和搜索食谱、管理膳食计划、获取 Tandoor 数据及编辑购物清单的工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Tandoor MCP 服务
用于与 Tandoor Recipe Manager 交互的模型上下文协议(MCP)服务。
当前状态
- ✅ 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 中创建包含食材和说明的食谱
- 将食谱添加到指定日期和餐食类型的用餐计划中
- 根据各种条件(名称、关键词、食材、评分)搜索食谱
- 获取按日期范围和餐食类型筛选的用餐计划
- 获取指定食谱的完整详情
- 列出可用的餐食类型、关键词、食材和单位
- 管理购物清单条目(查看、添加、更新、移除)
设置
-
安装依赖项:
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,并在其中放置一份 Markdown 或文本文件,列出你喜欢或不喜欢的食材,以便助手为你推荐餐食。
可用工具
create_tandoor_recipe
在 Tandoor 中创建新食谱。
参数:
name(string,必填):食谱名称。description(string,可选):食谱说明。servings(number,可选):份数。ingredients_block(string,必填):多行文本,每行列出一种食材。instructions_block(string,必填):多行文本,详细说明食谱的制作步骤。
示例:
{
"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."
}
create_tandoor_meal_plan
将一个或多个食谱添加到指定日期和餐食类型的 Tandoor 用餐计划中。
参数:
title(string,可选):用餐计划条目的标题。recipes(array,必填):要添加到计划中的食谱名称或 ID 数组。start_date(string,必填):用餐计划条目的日期(YYYY-MM-DD)。meal_type(string,必填):餐食类型的名称(例如,'Dinner'、'Lunch')。servings(number,可选):用餐计划条目的份数(默认值:1)。note(string,可选):用餐计划条目的备注。
示例:
{
"title": "Friday Dinner",
"recipes": [123, "Simple Pasta"],
"start_date": "2025-03-29",
"meal_type": "Dinner",
"servings": 2,
"note": "Quick dinner for Friday night."
}
get_recipes
根据各种条件搜索 Tandoor 中的食谱。
参数:
query(string,可选):用于匹配食谱名称的搜索词(模糊匹配)。keywords(array of integers,可选):关键词 ID 数组。返回匹配其中任意关键词的食谱。foods(array of integers,可选):食材 ID 数组。返回包含其中任意食材的食谱。rating(integer,可选):食谱应达到的最低评分(0-5)。limit(integer,可选):返回的食谱数量上限。默认值为 10。
示例:
{
"query": "chicken",
"keywords": [5, 12],
"rating": 4,
"limit": 5
}
get_meal_plans
获取 Tandoor 中的用餐计划条目,可选择按日期范围和餐食类型筛选。
参数:
from_date(string,可选):筛选用餐计划的开始日期(YYYY-MM-DD,包含该日期)。to_date(string,可选):筛选用餐计划的结束日期(YYYY-MM-DD,包含该日期)。meal_type_id(integer,可选):用于筛选的餐食类型 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": "italian"
}
get_foods
列出或搜索食物。
参数:
query(字符串,可选):用于搜索食物名称的可选搜索词。root(整数,可选):用于获取第一层子项的可选 ID(根节点为 0)。tree(整数,可选):用于获取树中所有子项的可选 ID。
示例:
{
"query": "chicken breast"
}
get_units
列出或搜索单位。
参数:
query(字符串,可选):用于搜索单位名称的可选搜索词。
示例:
{
"query": "gram"
}
get_shopping_list
获取当前购物清单中的项目。
参数:
checked(字符串,可选):按勾选状态筛选("true"、"false"、"both"、"recent")。默认为 "recent"。
示例:
{
"checked": "false"
}
add_shopping_list_item
向购物清单添加项目,可使用食物名称或 ID,以及单位名称或 ID。
参数:
food_name_or_id(字符串或整数,必填):食物项目的名称或 ID。amount(字符串,必填):所需数量(例如:'1'、'2.5'、'1/2')。unit_name_or_id(字符串或整数,必填):单位的名称或 ID(例如:'cup'、'g'、5)。note(字符串,可选):项目备注。
示例(使用名称):
{
"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(字符串,可选):新的备注。
示例(勾选项目):
{
"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 系统之外验证服务功能
- 尝试手动运行服务,并检查控制台输出中的详细错误消息
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。