返回 MCP 目录
public公开dns本地运行

travelmcp

基于.NET构建的旅行信息MCP服务器,提供航班和酒店数据查询功能,支持目的地和城市筛选,通过VS Code Copilot集成使用。

article

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。

安装步骤

  1. 克隆或导航到项目目录
    cd TravelMCP
    
  2. 恢复依赖项
    dotnet restore
    
  3. 构建项目
    dotnet build
    

💻 使用示例

配置VS Code中的MCP

项目包含一个预配置的.vscode/mcp.json文件。使用方法如下:

  1. 在VS Code中打开项目
    code .
    
  2. 重新加载VS Code:按Ctrl + Shift + P ,选择Developer: Reload Window
  3. 打开Copilot聊天窗口:按Ctrl + Alt + I
  4. 验证工具是否可用:在聊天中输入@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代码过滤。
  • 不区分大小写的部分搜索。
  • 按城市过滤酒店。

关键实现细节

  1. 不可变记录:使用C# record类型作为数据模型。
  2. 强类型化:所有数据通过JSON反序列化进行强类型化。
  3. 灵活过滤:使用Contains进行部分搜索。
  4. 不区分大小写:搜索时不区分大小写。
  5. XML文档:代码注释用于智能感知。
  6. 完整的MCP协议:自定义实现,无外部依赖。
  7. 安全的空值处理:可选参数具有默认值。
  8. JSON模式:工具的输入模式定义。
  9. 错误处理:根据JSON - RPC 2.0提供适当的错误响应。

未来改进

功能方面

  • 添加日期验证以过滤未来航班。
  • 实现按价格、评分、时长排序。
  • 添加组合工具GetTravelPackage(destination)以搜索航班 + 酒店套餐。
  • 增加额外的过滤条件:航空公司、价格范围、特定设施。
  • 添加座位/房间可用性信息。
  • 实现预订功能(模拟)。

技术方面

  • 连接到真实的航班/酒店API。
  • 实现带临时失效机制的数据缓存。
  • 结构化日志记录(Serilog、NLog)。
  • 使用xUnit/NUnit进行单元测试。
  • 对MCP协议进行集成测试。
  • 指标和遥测。
  • 根据官方列表验证IATA代码。
  • 多语言支持(i18n)。

架构方面

  • 分层架构(数据层、业务层、MCP层)。
  • 依赖注入。
  • 外部配置(appsettings.json)。
  • 使用Docker进行容器化。
  • 健康检查。
  • 速率限制以防止滥用。

贡献

这是一个演示项目,欢迎提出建议和改进意见!

资源

📄 许可证

MIT


使用.NET和MCP构建

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端