旅行票务服务

一个基于Golang的MCP服务器,用于处理旅行票务的预订、取消和查询操作,支持VS Code集成和内部工作流管理。

  • by sivasiddamoorthy3-cpu
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 sivasiddamoorthy3-cpu/travel-mcp-server

使用说明

GoLang旅行MCP服务器

这是一个完整的、生产就绪的Golang MCP服务器示例,用于旅行操作(预订、获取和取消机票),具有完整的VS Code集成和内部工作流程解释。

步骤1:导航到您的项目

cd /root/go/DCM/Siva-MCP-servers/travel-mcp-server/

第二步:清理和重建

go clean
go mod tidy
go build -o travel-mcp-server main.go

步骤3:验证可执行文件

ls -la travel-mcp-server
chmod +x travel-mcp-server

预期产量:

-rwxr-xr-x 1 root root 15234567 Nov 16 12:50 travel-mcp-server

步骤4:VS代码配置

创建一个名为的文件 mcp.json 在项目根目录中:

{
  "servers": {
    "travel-booking": {
      "type": "stdio",
      "command": "/absolute/path/to/travel-mcp-server",
      "env": {
        "LOG_LEVEL": "info"
      }
    }
  }
}

或者,要通过AssistAnt扩展获得VS Code的原生MCP支持,请创建 .vscode/settings.json: 例如:.vcode服务器/数据/用户/全局存储/助理.assistant/settings/cline_mcp_settings.json 例如:/nolute/path/to/travel mcp服务器意味着==>/root/go/DCM/Siva mcp服务器/travel mcp服务器/travels mcp服务器

{
  "mcp.servers": {
    "travel-booking": {
      "command": "/absolute/path/to/travel-mcp-server",
      "type": "stdio"
    }
  }
}

它如何在内部使用提示

场景:用户向AI代理发出提示

AssistAnt的用户提示:

“我需要预订2025年12月25日从纽约飞往洛杉矶的约翰·史密斯航班,上午10点起飞,下午1点到达。价格为450美元。预订后,把约翰·史密斯的所有票给我看看。"

内部工作流程分解

第一步:人工智能代理的即时分析

AssistAnt收到提示并进行分析:

  • 标识实体:乘客姓名(John Smith)、城市(纽约→ 洛杉矶),时间,价格
  • 确认行动:“书”(要求 book_ticket 工具)和“显示所有门票”(必填 list_tickets 工具)
  • 确定MCP上下文:代理从MCP服务器查询可用工具

步骤2:MCP服务器上下文发现

AI代理查询MCP服务器的能力注册表(通过协议自动完成)。服务器响应如下:

{
  "tools": [
    {
      "name": "book_ticket",
      "description": "Book a travel ticket for a passenger",
      "inputSchema": {
        "type": "object",
        "properties": {
          "passenger_name": {"type": "string"},
          "from": {"type": "string"},
          "to": {"type": "string"},
          "departure_time": {"type": "string", "description": "Format: YYYY-MM-DD HH:MM"},
          "arrival_time": {"type": "string"},
          "ticket_type": {"type": "string"},
          "price": {"type": "number"},
          "currency": {"type": "string"}
        }
      }
    },
    {
      "name": "list_tickets",
      "description": "List all tickets for a specific passenger",
      "inputSchema": {}
    }
  ]
}

步骤3:工具调用(第一次调用)

AssistAnt制定JSON-RPC 2.0请求以进行调用 book_ticket:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "book_ticket",
    "arguments": {
      "passenger_name": "John Smith",
      "from": "New York",
      "to": "Los Angeles",
      "departure_time": "2025-12-25 10:00",
      "arrival_time": "2025-12-25 13:00",
      "ticket_type": "flight",
      "price": 450,
      "currency": "USD"
    }
  }
}

步骤4:MCP服务器处理请求

  • 参数验证: 服务器验证所有必填字段是否存在
  • 业务逻辑: handleBookTicket() 执行:
    • 使用UUID生成唯一的票证ID
    • 创建 Ticket 包含所有详细信息的对象
    • 存储在数据库中(ticketDB 地图)
    • 生成座位号(例如“C23”)
    • 记录预订时间戳
    • 并发管理: 互斥锁确保线程安全的数据库操作

步骤5:MCP服务器返回响应

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\n  \"status\": \"success\",\n  \"ticket_id\": \"a1b2c3d4-e5f6-7890-1234-567890abcdef\",\n  \"message\": \"✅ Ticket booked successfully for John Smith\",\n  \"ticket\": {\n    \"id\": \"a1b2c3d4-e5f6-7890-1234-567890abcdef\",\n    \"passenger_name\": \"John Smith\",\n    \"from\": \"New York\",\n    \"to\": \"Los Angeles\",\n    \"departure_time\": \"2025-12-25 10:00\",\n    \"arrival_time\": \"2025-12-25 13:00\",\n    \"price\": 450,\n    \"currency\": \"USD\",\n    \"status\": \"booked\",\n    \"booked_at\": \"2025-11-11T08:03:00Z\",\n    \"seat_number\": \"C23\",\n    \"ticket_type\": \"flight\"\n  }\n}"
      }
    ]
  }
}

步骤6:工具调用(第二次调用)

AssistAnt现在呼叫 list_tickets 显示所有预订:

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "list_tickets",
    "arguments": {
      "passenger_name": "John Smith"
    }
  }
}

步骤7:MCP服务器处理第二个请求

  • 数据库查询: 服务器锁定并迭代 ticketDB
  • 过滤: 只返回与“John Smith”匹配的门票
  • 响应格式: 返回包含所有匹配票证的结构化JSON

步骤8:AI代理向用户呈现结果

AssistAnt综合这两种响应并呈现给用户:

预订确认:

✅ 已成功为约翰·史密斯预订航班

  • 门票ID: a1b2c3d4-e5f6-7890-1234-567890abcdef
  • 路线: 纽约→ 洛杉矶
  • 出发: 2025年12月25日上午10:00
  • 到达时间: 2025年12月25日下午1:00
  • 座位: C23
  • 价格: $450.00
  • 状态: 已预订

约翰·史密斯的所有门票:

  • 上面显示的航班预订(状态:已预订)

第二个示例:取消工作流

用户提示:

“取消ID为a1b2c3d4-e5f6-7890-1234-567890abcdef的机票,因为我需要重新安排。”

第一步:快速识别

AssistAnt识别操作:“取消”→ cancel_ticket 所需工具

第二步:工具调用

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "cancel_ticket",
    "arguments": {
      "ticket_id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
      "reason": "User needs to reschedule"
    }
  }
}

步骤3:服务器处理

  • 在数据库中查找票
  • 更新状态至 StatusCanceled
  • 记录取消时间戳
  • 计算退款(450美元的90%=405美元)
  • 返回带有退款详细信息的确认函

第四步:人工智能响应

✅ 门票取消成功!

  • 门票ID: a1b2c3d4-e5f6-7890-1234-567890abcdef
  • 退款金额: $405.00
  • 取消原因: 用户需要重新安排
  • 取消时间: 美国标准时间2025-11 08:05:30

步骤5:运行完整的系统

终端1:启动MCP服务器

./travel-mcp-server

输出:

🚀 Starting Travel Booking MCP Server...
✅ MCP Server initialized. Waiting for connections...

终端2(或VS代码):

  • 使用MCP集成打开AssistAnt或VS代码
  • 粘贴上面显示的用户提示
  • 观看AssistAnt无缝编排多个工具调用

内部架构摘要

组件 角色 技术
Golang服务器 通过JSON-RPC 2.0协议公开工具 mark3labs/mcp-go SDK
工具处理程序 每个操作的业务逻辑 带上下文处理的Go函数
线程安全 防止共享数据库中的竞争条件 sync.RWMutex
协议传输 AssistAnt和服务器之间的通信 STDIO(标准输入/输出)
持久层 内存中的票证存储 Go map 带有UUID密钥
类型系统 执行前验证参数 Go结构+JSON模式

此实现演示了MCP服务器如何充当人工智能推理和现实世界系统之间的桥梁——AssistAnt处理“什么”和“为什么”,而MCP服务器处理“如何”