旅行MCP服务器
使用构建的模型上下文协议(MCP)服务器。NET,提供包括航班和酒店数据在内的旅行信息。
特性
- GetFlights:搜索可用航班,可选择按目的地过滤(IATA代码)
- Gethotels:按城市搜索可用酒店,可选择过滤
- 使用不区分大小写的过滤
Contains - 从嵌入式JSON文件加载的数据
- 带有C#记录的强类型
- 基于stdio的自定义MCP协议实现(JSON-RPC 2.0)
- 零外部依赖(System.Text.Json除外)
技术
- .NET 8.0:具有最少API的现代C#
- 系统。文本。JSON:快速JSON序列化
- MCP协议:通过stdio自定义实现模型上下文协议
- JSON-RPC 2.0:客户端-服务器通信的标准协议
先决条件
- .NET 8.0 SDK或更高版本
- 带有GitHub Copilot扩展的Visual Studio代码
设置
- 克隆或导航到项目目录
cd TravelMCP- 恢复依赖关系
dotnet restore- 构建项目
dotnet buildVisual Studio代码配置
在VS代码中配置MCP
该项目包括一个预配置的 .vscode/mcp.json 文件。要使用它:
- 在VS Code中打开项目:
code .- 重新加载VS代码: 按
Ctrl+Shift+PDeveloper: Reload Window
- 打开副驾驶聊天: 按
Ctrl+Alt+I
- 验证工具是否可用: 类型
@workspace /tools在聊天
使用GitHub Copilot的MCP服务器
配置后,您可以通过VS Code中的GitHub Copilot Chat与服务器交互:
示例提示:
- “显示所有可用航班”
- “查找飞往拉斯维加斯的航班”
- “旧金山有哪些酒店?”
- “显示所有酒店”
MCP服务器将通过集成工具提供数据。
可用工具
GetFlights
使用可选的目的地过滤搜索可用航班。
参数:
to(可选):IATA目的地代码(例如,“LAS”、“SFO”、“EZE”)
Copilot中的示例用法:
Show me flights to Las Vegas
Find flights with destination SFOGethotels
使用可选的城市过滤搜索可用的酒店。
参数:
city(可选):城市名称(如“拉斯维加斯”、“旧金山”、“布宜诺斯艾利斯”)
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 # Sample flight data
hotels.json # Sample hotel data
Mcp/
McpServer.cs # MCP server implementation
Protocol.cs # JSON-RPC protocol types
Models/
Flight.cs # Flight data model
Hotel.cs # Hotel data model
Program.cs # Application entry point
TravelServer.cs # Business logic and tool handlers
TravelMCP.csproj # Project configuration测试
使用PowerShell脚本进行测试
.\test-server.ps1这将向服务器发送示例MCP请求并显示响应。
使用自动化测试进行测试
cd Tests
dotnet run这将运行自动测试,验证:
- 检索所有航班
- 按IATA代码筛选
- 不区分大小写的部分搜索
- 按城市筛选酒店
关键实施细节
- 不可变记录:使用C#
record数据模型的类型 - 强类型:所有数据都是JSON反序列化的强类型数据
- 灵活的过滤:用途
Contains用于部分搜索 - 不区分大小写:不区分大小写的搜索
- XML文档:IntelliSense的代码注释
- 完整的MCP协议:无外部依赖的自定义实现
- 安全的空处理:具有默认值的可选参数
- JSON 模式:工具的输入模式定义
- 错误处理:根据JSON-RPC 2.0正确的错误响应
未来改进
功能
- 添加日期验证以过滤未来的航班
- 按价格、评级、持续时间进行排序
- 添加组合
GetTravelPackage(destination)搜索航班+酒店的工具 - 附加过滤器:航空公司、价格范围、特定设施
- 增加座位/房间可用性
- 实施预订(模拟)
技术性的
- 连接到真实的航班/酒店API
- 具有时间无效性的数据缓存
- 结构化日志记录(Serilog、NLog)
- 使用xUnit/NUnit进行单元测试
- MCP协议集成测试
- 度量和遥测
- 根据官方列表验证IATA代码
- 多语言支持(i18n)
建筑
- 分层(数据、业务、MCP)
- 依赖注入
- 外部配置(appsettings.json)
- Docker的容器化
- 健康检查
- 限制利率以防止滥用
贡献
这是一个示范项目。欢迎提出建议和改进!
资源
许可证
麻省理工学院
______________________________________________________________________
使用构建。NET和MCP
