README
🚀 旅行MCP服务器
这是一个使用.NET构建的模型上下文协议(MCP)服务器,可提供包括航班和酒店数据在内的旅行信息。
✨ 主要特性
- GetFlights:搜索可用航班,可选择按目的地(IATA代码)进行过滤。
- GetHotels:搜索可用酒店,可选择按城市进行过滤。
- 使用
Contains进行不区分大小写的过滤。 - 数据从嵌入式JSON文件加载。
- 使用C#记录进行强类型化。
- 通过标准输入输出(JSON - RPC 2.0)自定义实现MCP协议。
- 零外部依赖(除了System.Text.Json)。
📚 详细文档
🔧 技术细节
- .NET 8.0:使用现代C#和最小化API。
- System.Text.Json:快速的JSON序列化。
- MCP协议:通过标准输入输出自定义实现模型上下文协议。
- JSON - RPC 2.0:用于客户端 - 服务器通信的标准协议。
📦 安装指南
前提条件
- .NET 8.0 SDK或更高版本。
- 安装了GitHub Copilot扩展的Visual Studio Code。
安装步骤
- 克隆或导航到项目目录
cd TravelMCP - 恢复依赖项
dotnet restore - 构建项目
dotnet build
💻 使用示例
配置VS Code中的MCP
项目包含一个预配置的.vscode/mcp.json文件。使用方法如下:
- 在VS Code中打开项目:
code . - 重新加载VS Code:按
Ctrl + Shift + P,选择Developer: Reload Window。 - 打开Copilot聊天窗口:按
Ctrl + Alt + I。 - 验证工具是否可用:在聊天中输入
@workspace /tools。
使用MCP服务器与GitHub Copilot交互
配置完成后,您可以通过VS Code中的GitHub Copilot聊天窗口与服务器进行交互: 示例提示:
- "Show me all available flights"(显示所有可用航班)
- "Find flights to Las Vegas"(查找前往拉斯维加斯的航班)
- "What hotels are available in San Francisco?"(旧金山有哪些可用酒店?)
- "Show me all hotels"(显示所有酒店)
MCP服务器将通过集成工具提供数据。
可用工具
GetFlights
搜索可用航班,可选择按目的地进行过滤。 参数:
to(可选):IATA目的地代码(例如,"LAS"、"SFO"、"EZE")
在Copilot中的示例用法:
Show me flights to Las Vegas
Find flights with destination SFO
GetHotels
搜索可用酒店,可选择按城市进行过滤。 参数:
city(可选):城市名称(例如,"Las Vegas"、"San Francisco"、"Buenos Aires")
在Copilot中的示例用法:
Show me hotels in San Francisco
Find hotels in Buenos Aires
数据格式
航班数据
{
"flight_number": "AA1456",
"airline": "American Airlines",
"from": "Miami (MIA)",
"to": "Las Vegas (LAS)",
"departure_time": "2025-11-05T09:45:00",
"arrival_time": "2025-11-05T12:10:00",
"duration": "5h 25m",
"price_usd": 289.99
}
酒店数据
{
"city": "Las Vegas",
"hotel_name": "The Venetian Resort",
"rating": 4.8,
"price_per_night_usd": 289.00,
"address": "3355 S Las Vegas Blvd, Las Vegas, NV 89109, USA",
"amenities": ["Pool", "Casino", "Spa", "Free WiFi"]
}
项目结构
TravelMCP/
Data/
flights.json # 示例航班数据
hotels.json # 示例酒店数据
Mcp/
McpServer.cs # MCP服务器实现
Protocol.cs # JSON - RPC协议类型
Models/
Flight.cs # 航班数据模型
Hotel.cs # 酒店数据模型
Program.cs # 应用程序入口点
TravelServer.cs # 业务逻辑和工具处理程序
TravelMCP.csproj # 项目配置
测试
使用PowerShell脚本进行测试
.\test-server.ps1
这将向服务器发送示例MCP请求并显示响应。
运行自动化测试
cd Tests
dotnet run
这将运行自动化测试,验证以下内容:
- 检索所有航班。
- 按IATA代码过滤。
- 不区分大小写的部分搜索。
- 按城市过滤酒店。
关键实现细节
- 不可变记录:使用C#
record类型作为数据模型。 - 强类型化:所有数据通过JSON反序列化进行强类型化。
- 灵活过滤:使用
Contains进行部分搜索。 - 不区分大小写:搜索时不区分大小写。
- XML文档:代码注释用于智能感知。
- 完整的MCP协议:自定义实现,无外部依赖。
- 安全的空值处理:可选参数具有默认值。
- JSON模式:工具的输入模式定义。
- 错误处理:根据JSON - RPC 2.0提供适当的错误响应。
未来改进
功能方面
- 添加日期验证以过滤未来航班。
- 实现按价格、评分、时长排序。
- 添加组合工具
GetTravelPackage(destination)以搜索航班 + 酒店套餐。 - 增加额外的过滤条件:航空公司、价格范围、特定设施。
- 添加座位/房间可用性信息。
- 实现预订功能(模拟)。
技术方面
- 连接到真实的航班/酒店API。
- 实现带临时失效机制的数据缓存。
- 结构化日志记录(Serilog、NLog)。
- 使用xUnit/NUnit进行单元测试。
- 对MCP协议进行集成测试。
- 指标和遥测。
- 根据官方列表验证IATA代码。
- 多语言支持(i18n)。
架构方面
- 分层架构(数据层、业务层、MCP层)。
- 依赖注入。
- 外部配置(appsettings.json)。
- 使用Docker进行容器化。
- 健康检查。
- 速率限制以防止滥用。
贡献
这是一个演示项目,欢迎提出建议和改进意见!
资源
- Model Context Protocol Specification
- JSON - RPC 2.0 Specification
- .NET Documentation
- System.Text.Json
📄 许可证
MIT
使用.NET和MCP构建
Scan to join WeChat group