Tandoor MCP Server

Tandoor MCP Server

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

starbuck93

开发者工具
访问服务器

README

Tandoor MCP 服务器

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

<img src="icon.jpg" width=20% height=20% alt="img generated with 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"
      ]

  1. ./.clinerules 添加到您的项目目录
  • (可选)还可以添加 ./memory-bank,其中包含您喜欢或不喜欢的食物的 markdown 或文本文件列表,以防您想要助手提供膳食建议。

可用工具

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",
  "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 server running on stdio.
  2. 检查您的 Tandoor URL 和 API 令牌是否正确
  3. 在服务器运行的终端中查找错误消息
  4. 验证餐点类型名称是否与您的 Tandoor 实例中的名称完全匹配
  5. 使用测试脚本验证 MCP 系统之外的服务器功能
  6. 尝试手动运行服务器并检查控制台输出以获取详细的错误消息

推荐服务器

Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
MCP Package Docs Server

MCP Package Docs Server

促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。

精选
本地
TypeScript
Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
mermaid-mcp-server

mermaid-mcp-server

一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。

精选
JavaScript
Jira-Context-MCP

Jira-Context-MCP

MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

精选
TypeScript
Linear MCP Server

Linear MCP Server

一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

精选
JavaScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Curri MCP Server

Curri MCP Server

通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。

官方
本地
JavaScript