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(作为代理)。
- 启动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”可能是某个特定页面或应用的路径
- 启动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