使用说明
概述
该项目功能齐全 模型上下文协议(MCP)WebSocket服务器 用Go写的。服务器实现了MCP规范,通过端口8080上的WebSocket提供双向JSON消息传递。
服务器公开了三个票证管理工具,它们返回硬编码的票证数据以供演示:
- get_pending_tickets:退回待处理的门票
- get_done_tickets:退还已完成的门票
- get_todo_tickets:退还todo门票
主要特点
- 上运行的MCP兼容WebSocket服务器
ws://localhost:8080/ws - 正确的MCP握手
initialize方法 - 通过以下方式发现工具
tools/list方法 - 工具执行通过
tools/call方法 - 具有正确请求/响应ID跟踪的双向JSON消息传递
- 无效方法和未知工具的错误处理
- 三个具有预定义数据集的票证管理工具
用户选项
首选沟通方式:简单的日常语言。
系统架构
后端架构
语言:转到1.24.4
框架:原生Go与大猩猩/websocket库
服务器类型:WebSocket服务器(不是HTTP REST)
核心组件
-
WebSocket处理程序 (
handleWebSocket):- 将HTTP连接升级到WebSocket
- 管理客户端连接和消息路由
- 处理JSON封送和解组
- 保持双向通信回路
-
请求路由器 (
handleRequest):- 按方法名称路由传入的MCP请求
- 支持:
initialize,tools/list,tools/call - 为未知方法返回正确的错误响应
-
方法处理程序:
handleInitialize:返回符合MCP的服务器功能handleToolsList:返回可用的工具定义handleToolCall:按名称执行请求的工具
MCP消息结构
- MCP请求:带有id、方法和参数的传入请求
- MCP响应:带有id、结果和错误的传出响应
- MCP错误:包含代码和消息的错误结构
- 工具调用参数:工具执行参数(工具名称和参数)
- 初始化参数:初始化握手的参数
工具实施
每个工具返回一个固定的票数据集:
- 工具没有参数(不需要输入参数)
- 响应格式:
{"tickets": [...]} - 每张票都有:id、标题、状态
文件结构
.
├── main.go # Complete MCP server implementation
├── go.mod # Go module definition
├── go.sum # Go dependency checksums
├── .gitignore # Excludes build artifacts
└── replit.md # This documentation file
MCP合规性
服务器实现了以下MCP协议功能:
初始化响应
{
"id": "request-id",
"result": {
"protocolVersion": "1.0",
"serverInfo": {
"name": "go-mcp-demo",
"version": "1.0.0"
},
"capabilities": {
"tools": {
"call": {"enabled": true},
"list": {"enabled": true, "listChanged": false}
}
}
}
}
工具列表响应
返回三个工具定义,其中JSON Schema作为输入(所有工具都不需要参数)。
工具呼叫响应
根据请求的工具名称返回工单数据集。
外部依赖项
Go模块
- 大猩猩/websocket (v1.5.3):WebSocket协议实现
- 用途:处理WebSocket连接升级和消息帧
- 用于与MCP客户端进行双向通信
开发工具
- Go 1.24.4:编译器和运行时
- Go模块:依赖关系管理
运行服务器
服务器配置为通过“MCP服务器”工作流自动运行:
- 命令:
go run main.go - 端口:8080
- 端点:
/ws - 输出:控制台日志
启动时,服务器显示: MCP Server running on ws://localhost:8080/ws
未来的增强功能
架构审查建议的潜在改进:
- 添加自动握手和工具调用测试
- 为消费者记录工具有效载荷和预期数据集
- 加强生产部署的WebSocket源代码检查
- 通过CRUD操作添加动态票证管理
- 实现持久存储(数据库或文件系统)
- 添加身份验证和授权