Mealie模型上下文协议服务器

将Mealie的REST API作为MCP工具暴露给AI代理,支持StreamableHTTP传输,适用于食谱、购物清单和营养计划管理。

  • by ZanzyTHEbar
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 ZanzyTHEbar/mealie-mcp

使用说明

麦蒂

从生成的MCP(模型上下文协议)服务器 米莉 OpenAPI规范公开Mealie的REST API作为AI代理(例如Claude、Cursor)的MCP工具 流式HTTP.

特性

  • 由OpenAPI生成:所有Mealie API终点(食谱、购物清单、用餐计划等)都作为MCP工具进行曝光。
  • 流式HTTP传输:基于HTTP的MCP,因此可以将其部署为web服务并由远程MCP客户端使用。
  • 可配置的基本URL:设置 MEALIE_BASE_URL 或 BASE_URL 指向你的Mealie实例。
  • 认证:Mealie使用OAuth2密码载体。通过env设置Mealie API令牌(或OIDC令牌)。
  • 营养计划:包括 nutrition_tdee_calculate 默认情况下,使用Mifflin St Jeor和Cunningham(当明确要求提供身体脂肪数据时)进行成人TDEE和卡路里目标估算。

快速启动(本地)

npm install
cp .env.example .env
# Edit .env: set MEALIE_BASE_URL and OAUTH_TOKEN_OAUTH2PASSWORDBEARER (or BEARER_TOKEN_OAUTH2PASSWORDBEARER)
npm run build
npm run start:http
  • MCP端点: http://localhost:<PORT>/mcp (默认端口=3031)
  • 测试客户端: http://localhost:<PORT>

要使用其他端口,请设置 PORT 在您的环境或 .env.

环境变量

变量 描述 默认值
PORT HTTP端口(可配置) 3031
MEALIE_BASE_URL 或 BASE_URL Mealie实例URL(例如。 https://mealie.example.com) https://mealie.example.com
BEARER_TOKEN_OAUTH2PASSWORDBEARER 或 OAUTH_TOKEN_OAUTH2PASSWORDBEARER Mealie API代币(来自Mealie Admin→ API令牌,或您的OIDC访问令牌) -
ENRICHMENT_CACHE_ENABLED 启用内存中的食物富集缓存 true
ENRICHMENT_CACHE_TTL_HOURS 缓存TTL以进行价格/营养丰富查找 24

码头工人

docker build -t mealie-mcp .
docker run -p 3031:3031 \
  -e MEALIE_BASE_URL=https://mealie.example.com \
  -e BEARER_TOKEN_OAUTH2PASSWORDBEARER=your-token \
  mealie-mcp

# Different port: docker run -p 3032:3032 -e PORT=3032 -e MEALIE_BASE_URL=... -e BEARER_TOKEN_...=... mealie-mcp

MCP客户端配置

将MCP客户端指向StreamableHTTP URL,例如:

  • 光标:使用URL添加MCP服务器 https://mealie-mcp.yourdomain.com/mcp (如果部署在HTTPS之后)。
  • 克劳德桌面版:在MCP设置中配置服务器URL。

会话标头: mcp-session-id (可选;服务器支持传输/会话重用)。这与 mealie_start_session 该工具目前为未来的集成保留服务器端上下文,而不是为当今的复合工具提供动力。

生成

此服务器是通过以下方式生成的 openapi mcp生成器:

# First export or copy a Mealie OpenAPI document to a local path, e.g.
# /tmp/mealie-openapi.json
# Then run from the repository root:
npx openapi-mcp-generator \
  --input /tmp/mealie-openapi.json \
  --output . \
  --base-url https://mealie.example.com \
  --server-name mealie-mcp \
  --transport streamable-http \
  --port 3031

mealie-openapi.json 未在此存储库中跟踪。更新Mealie规范后重新生成,然后在提交之前检查差异,这样本地自定义工具和文档就不会被盲目覆盖。

测试

  • 棉绒: npm run lint --在TypeScript源代码树和repo测试脚本上运行ESLint。
  • 单元测试 (无网络): npm test --运行确定性食品管道和营养/TDEE测试。
  • 膳食计划测试: npm run test:meal-planning --验证日历安全日期处理和成分规范化助手。
  • 仅营养测试: npm run test:nutrition --验证TDEE方程、目标目标和输入验证。
  • 现场测试 (真正的HTTP): npm run test:live --调用Continente.pt和Open Food Facts来验证食品管道。使用 SKIP_CONTINENTE=1 或 SKIP_NUTRITION=1 跳过不稳定的端点。

杂货刮板

注册的商店清洁工住在下面 src/food-pipeline/scrapers/ 并组装在 src/food-pipeline/scrapers/registry.ts.

  • 用标记未完成的适配器 isStub: true 因此MCP响应发出 stub_disabled 而不是假装商店返回了一个真正的空结果。
  • 移除 isStub 只有当 search() 已实现并返回实数 PriceResult[] 排。
  • food_price_search 丰富工具显示每个商店的结果元数据,以便调用者可以区分 ok, empty, error,以及 stub_disabled.

定制营养工具

nutrition_tdee_calculate 是一个纯计算MCP工具,因此它不需要Mealie凭据。

输入:

  • age_years, sex_for_formula, height_cm, weight_kg, activity_level
  • 可选的 activity_multiplier 为了 activity_level: "custom"
  • 可选的 body_fat_pct 坎宁安
  • 可选的 formula (auto, mifflin_st_jeor, cunningham)
  • 可选的 goal (maintain, cut, gain, custom)以及 goal_delta_kcal

auto 使用Mifflin St Jeor作为主要方程。如果 body_fat_pct 如果提供,坎宁安可能会被遣返 alternative_estimates 作为额外的静息能量参考,但除非 formula: "cunningham" 已通过。

该工具返回静息能量、应用的活动乘数、估计的TDEE、维护和切割/增益目标、归一化输入数据和警告,以帮助代理清楚地解释不确定性。

许可证

MIT。Mealie根据AGPL获得许可;此MCP适配器是单独的层。