餐食建议API

MCP Meal是一个轻量级项目,通过FastMCP和FastAPI构建,提供基于现有食材的餐食建议服务。

  • by alpogi2dmax
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 alpogi2dmax/mcp-meal

使用说明

MCP餐点——通过FastMCP + FastAPI的餐点建议API

MCP餐食 是一个轻量级项目,展示了如何使用 FastMCP 构建并提供可访问的人工智能/大型语言模型(AI/LLM)微服务。
它连接到 TheMealDB(可译为“美食数据库”或保持原名,根据上下文决定是否需要具体翻译) 根据您提供的信息,以下是原文内容的翻译:“基于您手头现有的食材,提供餐点创意的API。”。


项目概述

这个仓库包含三个关键组件:

mcp-meal/
├── server/
│ ├── fastmcp_server.py # Main FastMCP server hosting the meal suggestion tool
│ ├── proxy.py # FastAPI proxy server to expose MCP endpoint to external clients
│ ├── requirements.txt
│
└── client/
└── demo_client_fastmcp.py # Example async client demonstrating usage

特点/特性

  • FastMCP 集成 — 定义一个工具(suggest_meal(即大型语言模型或客户端可以通过MCP协议进行调用)。
  • 智能成分解析 — 解析类似“I have chicken, rice, and garlic.”的自由格式文本
  • 食谱查询 — 从(某处)获取数据 TheMealDB API.
  • HTTP 代理 — 将MCP服务封装在一个FastAPI端点中,以便进行REST风格的使用。
  • 异步客户端演示 — 展示了如何通过编程方式与该服务进行交互。

技术栈

组件 技术
核心 Python 3.9及以上版本
框架 FastAPI
MCP 运行时 FastMCP ≥2.0
HTTP 客户端 requests
服务器运行程序 uvicorn

安装

克隆仓库并安装依赖项:

git clone https://github.com/alpogi2dmax/mcp-meal.git
cd mcp-meal/server

python -m venv .venv
source .venv/bin/activate   # or .venv\Scripts\activate on Windows

pip install -r requirements.txt

运行服务器

这个项目运行了两个轻量级服务器——一个用于FastMCP,另一个用于FastAPI(作为代理)。

  1. 启动FastMCP服务器
cd server
python fastmcp_server.py

默认情况下,它会在(某个端口或地址)启动一个MCP HTTP服务 http://127.0.0.1:8000/mcp 翻译为中文可以是:“http://127.0.0.1:8000/mcp(本地服务器地址,用于访问MCP相关页面)”。不过,通常网址本身在中文语境下不会被翻译,而是直接保留原样,同时根据上下文解释其含义。在这里,“127.0.0.1”是本地主机的IP地址,“8000”是端口号,“mcp”可能是某个特定页面或应用的路径

  1. 启动FastAPI代理

这公开了一个简单的REST端点,用于将请求转发到MCP服务器。

在一个新终端中:

cd server
uvicorn proxy:app --reload --port 5000

代理将在以下地址监听: http://127.0.0.1:5000/mcp/suggest 翻译成中文是:“http://127.0.0.1:5000/mcp/suggest(本地回环地址,端口5000,路径为mcp/suggest)”。不过,通常在中文语境下,我们不会直接翻译网址,而是说明其功能或用途,比如“访问本地服务器上的MCP建议页面(地址:http://127.0.0.1:5000/mcp/suggest)”。但根据您的要求,这里直接给出了网址的直译

示例用法

使用REST API

向Fast API代理发送POST请求:

curl -X POST http://127.0.0.1:5000/mcp/suggest \
     -H "Content-Type: application/json" \
     -d '{"context": "I have chicken, rice, and onions"}'

示例回复:


{
  "recipe": "Chicken Fried Rice",
  "category": "Main Course",
  "area": "Chinese",
  "instructions": "Heat oil, fry chicken pieces...",
  "youtube": "https://www.youtube.com/watch?v=abc123",
  "source": "https://www.themealdb.com/meal.php?i=52874",
  "matched_requested_ingredients": ["chicken", "rice", "onion"]
}

使用演示客户端

您也可以运行异步演示客户端,该客户端直接调用MCP服务器:


cd client
python demo_client_fastmcp.py

输出示例:


Tools: ['suggest_meal']
Result:
 {
   'recipe': 'Beef Stroganoff',
   'category': 'Beef',
   'area': 'Russian',
   'instructions': 'Slice beef thinly...',
   ...
 }

代码亮点

MCP工具定义(fastmcp_server.py)


@mcp.tool()
def suggest_meal(context: str) -> Dict[str, Any]:
    """
    Suggest a meal based on free-text ingredient input.
    Example: "I have chicken, rice, and soy sauce"
    """
  • 解析自然语言的成分列表。
  • 查询TheMealDB API。
  • 返回最相关的食谱匹配结果。

REST 代理设计

proxy.py 使用 FastAPI 包装 MCP 服务器,提供传统的 REST API 接口


@app.post("/mcp/suggest")
async def suggest(req: ProxyRequest):
    async with Client(MCP_HTTP_URL) as client:
        res = await client.call_tool("suggest_meal", {"context": req.context})
        return res

依赖项

服务器/需求.txt


fastmcp>=2.0
requests>=2.28
fastapi>=0.95
uvicorn>=0.22