使用说明
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服务器处理“如何”
