配方MCP服务器 - .NET 8实现
一个基于.NET 8的全面模型上下文协议(MCP)服务器实现,提供对TheMealDB API食谱数据的访问。该服务器提供了一整套以烹饪为中心的工具、资源和提示,用于美食探索和餐食规划。
特点/特性
🔧 工具
- 搜索食谱按菜品名称搜索食谱,并可自定义结果数量
- 获取食谱详情通过ID检索特定食谱的详细信息
- 创建饮食计划根据选定的食谱生成有条理的饮食计划
- 按首字母搜索查找以特定字母开头的食谱
- 获取随机食谱发现随机食谱以获取灵感
- 测试文件系统验证文件系统操作和权限
- 获取系统信息显示系统和环境信息
📚 资源
- recipes://cuisines 翻译为中文是:“食谱://菜系”浏览所有可用的食谱集
- recipes://meal-plans 翻译为中文是:“食谱://饮食计划”访问已保存的饮食计划
- recipes://stats 翻译成中文是:“食谱://统计数据”查看全面的食谱统计数据
- 食谱:{菜系}探索特定的美食收藏
💡 提示
- 生成食谱搜索提示创建美食探索提示
- 生成膳食规划提示生成全面的膳食计划指南
- 生成烹饪课程提示设计结构化的烹饪课程
- 生成食材探索提示创建以食材为中心的分析提示
- 生成文化美食提示生成探索文化美食的提示
先决条件
- .NET 8.0 SDK 或之后
- 用于访问TheMealDB API的互联网连接
安装与设置
1. 克隆或下载
# If cloning from a repository
git clone
cd mcp-recipe-final
# Or download and extract the source files2. 恢复依赖项
dotnet restore3. 构建应用程序
dotnet build4. 配置(可选)
编辑 appsettings.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
}
}使用方法
命令行选项
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 客户端)
dotnet run -- --transport stdioVS Code 和本地 MCP 客户端的默认模式。
🌐 表示“地球/网络”的意思,但单独使用时,它通常被用作一个符号或表情符号,代表互联网、全球连接或广阔的信息世界。在没有具体上下文的情况下,可以简单地翻译为“网络”或“全球连接”。 HTTP 模式(Web/远程客户端)
dotnet run -- --transport http --port 8080 --host localhost启用HTTP API以实现远程访问和网页客户端功能。
🚀 表情符号“🚀”通常表示火箭、太空探索或快速前进,没有直接的中文翻译,但可以理解为“火箭”或根据上下文译为“飞速前进”等。 渲染云部署
- 将代码推送到GitHub
- 将存储库连接到 渲染
- 使用自动部署渲染
render.yaml并且Dockerfile - 访问方式:
https://your-app.onrender.com/mcp
🐳 表示“海豚”,但在此作为表情符号使用时,没有直接对应的中文翻译,通常保留原样或根据上下文意译为“海豚表情”等。若单纯作为符号描述,则可理解为“海豚”。 Docker 部署
docker build -t recipe-mcp-server .
docker run -p 8080:8080 recipe-mcp-serverHTTP 端点(当使用 --transport http 时)
POST /mcp- 主MCP协议端点GET /health- 健康检查GET /- 服务器信息
示例用法
搜索食谱
# Search for Italian recipes
search_recipes("pasta", 5)
# Get specific recipe details
get_recipe_details("52771")制定饮食计划
create_meal_plan(["52771", "52772", "52773"], "Weekly Italian Menu")探索资源
# 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.jsonAPI集成
这台服务器与……集成 TheMealDB API:
- 按名称搜索:
/search.php?s={dish_name} - 按首字母搜索:
/search.php?f={letter} - 随机食谱:
/random.php - 按ID查找食谱:
/lookup.php?i={recipe_id}
发展
添加新工具
- 定义工具模式(或工具架构)于
ToolService.GetToolsListAsync() - 在(相应位置)实现工具逻辑
ToolService.CallToolAsync() - 添加任何所需的辅助方法
添加新资源
- 在(某处)添加资源定义
ResourceService.GetResourcesListAsync() - 实现资源读取逻辑于
ResourceService.ReadResourceAsync()
添加新提示
- 定义提示模式(或提示框架)在
PromptService.GetPromptsListAsync() - 在(系统/程序中)实现提示生成
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兼容应用程序上进行了测试
故障排除
常见问题
“权限被拒绝”错误
# Ensure write permissions for recipes directory
chmod 755 recipes/“网络超时”错误
- 检查网络连接
- 验证TheMealDB API的可用性
- 调整超时设置
appsettings.json
“端口已被使用”
# Use a different port
dotnet run -- --port 8001做出贡献
- 为仓库创建分支(或:克隆仓库)
- 创建一个特性分支
- 做出你的更改
- 如适用,请添加测试
- 提交一个拉取请求
许可证
此项目遵循MIT许可证授权——详情请参阅LICENSE文件。
致谢
- TheMealDB 集成全面的食谱数据库,支持本地缓存
- TheMealDB(可译为“美食数据库”或保持原名,根据上下文决定是否需要具体翻译)免费食谱数据库API
- 模型上下文协议Anthropic的MCP规范
- .NET 社区框架和生态系统支持
