模型上下文协议WebSocket服务器

一个用Go语言编写的MCP兼容的WebSocket服务器,提供双向JSON消息传递和票务管理工具。

  • by samaye-pro
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 samaye-pro/mcp-server

使用说明

概述

该项目功能齐全 模型上下文协议(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)

核心组件

  1. WebSocket处理程序 (handleWebSocket):

    • 将HTTP连接升级到WebSocket
    • 管理客户端连接和消息路由
    • 处理JSON封送和解组
    • 保持双向通信回路
  2. 请求路由器 (handleRequest):

    • 按方法名称路由传入的MCP请求
    • 支持: initialize, tools/list, tools/call
    • 为未知方法返回正确的错误响应
  3. 方法处理程序:

    • 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

未来的增强功能

架构审查建议的潜在改进:

  1. 添加自动握手和工具调用测试
  2. 为消费者记录工具有效载荷和预期数据集
  3. 加强生产部署的WebSocket源代码检查
  4. 通过CRUD操作添加动态票证管理
  5. 实现持久存储(数据库或文件系统)
  6. 添加身份验证和授权