article
README
🚀 基于SSE和Bearer认证的模型上下文协议服务器
本项目实现了一个MCP(Model Context Protocol)服务器,使用TypeScript语言开发。借助Server-Sent Events (SSE) 达成实时通信,利用Bearer Token进行身份验证。项目结构清晰,各功能模块职责明确,能有效满足相关业务需求。
🚀 快速开始
开发环境搭建
- 克隆仓库到本地:
git clone [仓库地址] cd mcp-server - 安装依赖项:
npm install - 启动开发服务器:
npm run dev
生产环境部署
- 编译项目:
npm run build - 执行编译后的文件:
node dist/index.js
✨ 主要特性
- 实时通信:采用SSE技术实现长轮询,确保低延迟的消息传递。
- 身份认证:使用Bearer Token进行无状态认证,提升安全性。
- 模块化结构:各功能模块独立开发,便于维护和扩展。
- 可扩展性:支持添加新工具和服务,灵活适应不同需求。
- 高性能:基于Express框架,具备优秀的性能表现。
- 易用性:提供简洁的API接口,便于集成和使用。
📚 详细文档
项目架构
核心模块
- MCP Module:负责创建和配置MCP服务器实例,管理工具注册及SSE连接。
- 中间件:提供Bearer Token认证、 CORS支持以及请求解析功能。
- 路由:实现了主要接口
/sse和/messages的处理逻辑。 - 配置文件:定义服务器端口、会话过期时间等关键参数。
- 应用层:统筹各模块协同工作,确保服务器正常运行。
系统流程
- 建立连接:
- 客户端通过
GET /sse请求与服务器建立SSE通道,并提供Bearer Token进行认证。 - 服务器验证Token后,创建新的SSE传输实例,并为客户端分配唯一会话ID。
- MCP服务器连接到SSE传输实例,初始化通信并发送工具列表等初始消息。
- 客户端通过
- 消息处理:
- 客户端向
/messages接口发送包含会话ID的消息请求。 - 服务器根据会话ID查找对应的SSE传输实例,并将接收到的消息转发给MCP服务器进行处理。
- 处理完成后,响应结果通过SSE通道回传给客户端。
- 客户端向
- 断开连接:
- 当客户端关闭SSE连接时,服务器检测到状态变化后,清理对应会话ID的传输实例。
序列图
以下是项目的交互流程图:
@startuml
title "基于SSE和Bearer认证的MCP服务器通信流程"
actor "MCP客户端" as Client
participant "Express服务器" as Express
participant "Auth中间件" as Auth
participant "路由 /sse" as SSERoute
participant "SSE传输层" as SSE
participant "MCP服务器" as MCP
participant "路由 /messages" as MsgRoute
== 建立连接 ==
Client -> Express: GET /sse\n(Authorization: Bearer <token>)
Express -> Auth: 验证Bearer Token
Auth -> Client: 200 OK
Client -> SSERoute: 建立SSE通道
SSERoute -> SSE: 创建传输实例
SSE -> MCP: 初始化连接
== 发送消息 ==
Client -> MsgRoute: POST /messages\n(会话ID)
MsgRoute -> SSE: 获取传输实例
SSE -> MCP: 转发消息
MCP -> SSE: 处理结果回传
SSE -> Client: 接收响应
== 断开连接 ==
Client -> SSE: 关闭通道
SSE -> SSERoute: 通知断开
SSERoute -> Express: 清理资源
@enduml
📦 安装指南
项目依赖
- Node.js & npm:确保安装最新稳定版本(推荐v14及以上)。
- ts-node:用于TypeScript文件的直接运行。
- @types/express:Express框架类型定义。
- express:基础Web框架。
- ws:支持WebSocket通信。
🔧 技术细节
展望
未来计划增加以下功能:
- 支持WebSocket协议以提升通信效率。
- 实现消息队列机制,提高系统吞吐量。
- 添加日志记录与监控模块,便于运维管理。
扫码联系在线客服