配方MCP服务器 - .NET 8实现
一个基于.NET 8的全面模型上下文协议(MCP)服务器实现,提供对TheMealDB API食谱数据的访问。该服务器提供了一整套以烹饪为中心的工具、资源和提示,用于美食探索和餐食规划。
特点/特性
🔧 工具
- 搜索食谱按菜品名称搜索食谱,并可自定义结果数量
- 获取食谱详情通过ID检索特定食谱的详细信息
- 创建饮食计划根据选定的食谱生成有条理的饮食计划
- 按首字母搜索查找以特定字母开头的食谱
- 获取随机食谱发现随机食谱以获取灵感
- 测试文件系统验证文件系统操作和权限
- 获取系统信息显示系统和环境信息
📚 资源
- 食谱:{菜系}探索特定的美食收藏
💡 提示
- 生成食谱搜索提示创建美食探索提示
- 生成膳食规划提示生成全面的膳食计划指南
- 生成烹饪课程提示设计结构化的烹饪课程
- 生成食材探索提示创建以食材为中心的分析提示
- 生成文化美食提示生成探索文化美食的提示
先决条件
- .NET 8.0 SDK 或之后
- 用于访问TheMealDB API的互联网连接
安装与设置
1. 克隆或下载```bash
If cloning from a repository
git clone
cd mcp-recipe-final
Or download and extract the source files
### 2. 恢复依赖项```bash
dotnet restore
3. 构建应用程序```bash
dotnet build
### 4. 配置(可选)
编辑 `appsettings.json` 自定义设置:```json
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"Server": {
"Host": "0.0.0.0",
"Port": 8000
},
"RecipeService": {
"ApiBaseUrl": "https://www.themealdb.com/api/json/v1/1",
"RequestTimeoutSeconds": 10
}
}
使用方法
命令行选项```bash
dotnet run -- [options]
Options:
--port Port to run the server on (default: 8000)
--host Host to bind the server to (default: 0.0.0.0)
--transport Transport method - stdio or http (default: stdio)
--help Show help information
### 运行服务器
#### 📡(天线/卫星天线/广播信号发射器) **STDIO 模式(本地 MCP 客户端)**```bash
dotnet run -- --transport stdio
VS Code 和本地 MCP 客户端的默认模式。```bash
dotnet run -- --transport http --port 8080 --host localhost
启用HTTP API以实现远程访问和网页客户端功能。
1. 将代码推送到GitHub
1. 将存储库连接到 渲染
1. 使用自动部署渲染 `render.yaml` 并且 `Dockerfile`
1. 访问方式: `https://your-app.onrender.com/mcp````bash
docker build -t recipe-mcp-server .
docker run -p 8080:8080 recipe-mcp-server
HTTP 端点(当使用 --transport http 时)
POST /mcp- 主MCP协议端点GET /health- 健康检查GET /- 服务器信息
示例用法
搜索食谱```bash
Search for Italian recipes
search_recipes("pasta", 5)
Get specific recipe details
get_recipe_details("52771")
#### 制定饮食计划```bash
create_meal_plan(["52771", "52772", "52773"], "Weekly Italian Menu")
探索资源```bash
View all available cuisines
recipes://cuisines
Explore Italian recipes
recipes://italian
Check meal plans
recipes://meal-plans
## 项目结构```
RecipeServer/
├── Models/
│ ├── Mcp/ # MCP protocol models
│ │ └── McpModels.cs
│ └── Recipe/ # Recipe data models
│ └── RecipeModels.cs
├── Services/
│ ├── Interfaces/
│ │ └── IServices.cs # Service interface definitions
│ ├── McpServer.cs # Core MCP message handling
│ ├── RecipeApiService.cs # TheMealDB API integration
│ ├── ToolService.cs # MCP tools implementation
│ ├── ResourceService.cs # MCP resources implementation
│ └── PromptService.cs # MCP prompts implementation
├── .vscode/ # VS Code configuration
│ ├── launch.json # Debug configurations
│ └── tasks.json # Build tasks
├── Program.cs # Application entry point
├── appsettings.json # Configuration file
├── RecipeServer.csproj # Project file
├── build.sh # Build script
└── README.md # This documentation
数据存储
服务器自动创建一个 recipes/ 存储目录:
- 食谱集锦按菜系/菜品类型组织
- 饮食计划已保存的餐食计划数据
- 搜索结果按字母缓存的搜索结果
目录结构示例:```
recipes/
├── italian/
│ └── recipes_info.json
├── pasta/
│ └── recipes_info.json
├── meal_plans/
│ ├── weekly_italian_menu.json
│ └── dinner_ideas.json
└── by_letter/
└── letter_a_search.json
## API集成
这台服务器与……集成 TheMealDB API:
- **按名称搜索**: `/search.php?s={dish_name}`
- **按首字母搜索**: `/search.php?f={letter}`
- **随机食谱**: `/random.php`
- **按ID查找食谱**: `/lookup.php?i={recipe_id}`
## 发展
### 添加新工具
1. 定义工具模式(或工具架构)于 `ToolService.GetToolsListAsync()`
1. 在(相应位置)实现工具逻辑 `ToolService.CallToolAsync()`
1. 添加任何所需的辅助方法
### 添加新资源
1. 在(某处)添加资源定义 `ResourceService.GetResourcesListAsync()`
1. 实现资源读取逻辑于 `ResourceService.ReadResourceAsync()`
### 添加新提示
1. 定义提示模式(或提示框架)在 `PromptService.GetPromptsListAsync()`
1. 在(系统/程序中)实现提示生成 `PromptService.GetPromptAsync()`
## 错误处理
该服务器包含全面的错误处理机制:
- **网络故障**优雅的API超时处理
- **文件系统错误**权限和访问错误管理
- **JSON解析**数据保护格式错误
- **MCP协议**符合标准的错误响应
## 记录日志
结构化日志记录是通过配置实现的 `appsettings.json`:
- **信息**一般操作日志
- **警告**非关键问题
- **错误**异常和故障日志
## 性能考量
- **Async/await(异步/等待)**所有的输入/输出操作都是异步的
- **HTTP客户端重用**共享的HttpClient实例
- **文件缓存**搜索结果已本地缓存
- **内存效率**尽可能采用流式JSON处理
## 兼容性
### .NET 版本
- **主要的,重要的**。.NET 8.0
- **兼容的**。.NET 6.0+(带有一些小修改)
### 操作系统
- **Windows**全面支持
- **macOS(发音为“Mac OS”)**全面支持
- **Linux(发音为“利尼斯”)**全力支持
### MCP 客户端
- 兼容任何MCP 2024-11-05协议客户端
- 已在Claude Desktop及其他MCP兼容应用程序上进行了测试
## 故障排除
### 常见问题
#### “权限被拒绝”错误```bash
# Ensure write permissions for recipes directory
chmod 755 recipes/
“网络超时”错误
- 检查网络连接
- 验证TheMealDB API的可用性
- 调整超时设置
appsettings.json
“端口已被使用”```bash
Use a different port
dotnet run -- --port 8001
```
做出贡献
- 为仓库创建分支(或:克隆仓库)
- 创建一个特性分支
- 做出你的更改
- 如适用,请添加测试
- 提交一个拉取请求
许可证
此项目遵循MIT许可证授权——详情请参阅LICENSE文件。
致谢
- TheMealDB 集成全面的食谱数据库,支持本地缓存
- 模型上下文协议Anthropic的MCP规范
- .NET 社区框架和生态系统支持
