MCP Server com SSE e Autenticação Bearer

MCP Server com SSE e Autenticação Bearer

MCP 服务器,带有 SSE 和 Bearer 身份验证。 (MCP 服务器,带有服务器发送事件 (SSE) 和 Bearer 令牌身份验证。)

br-silvano

开发者工具
访问服务器

README

MCP服务器,支持SSE和Bearer认证

构建

本项目是一个使用 TypeScript 构建的 MCP服务器 (Model Context Protocol) 的实现。它使用 Server-Sent Events (SSE) 进行远程消息传输,并基于 Bearer Token 进行身份验证,从而实现与客户端(例如 LLM 主机,如 Claude Desktop)的安全和实时通信。


目录


概述

本项目实现了一个 MCP 服务器,该服务器公开了可以通过 MCP 协议调用的工具 (tools),使用 SSE 进行实时通信,并通过 Bearer Token 验证请求。 <a href="https://modelcontext.org" target="_blank" rel="noopener noreferrer">在官方网站上了解更多关于 MCP 协议的信息</a>


架构

该项目的架构由以下模块组成:

  • MCP 模块: 负责创建和配置 MCP 服务器,包括注册工具。
  • 中间件: 包括身份验证中间件 (Bearer Token) 和用于处理 JSON 的条件中间件,确保 /messages 端点的数据流不会被不适当地消耗。
  • 路由: 定义 Express 的端点,用于建立 SSE 连接 (/sse) 和接收消息 (/messages)。
  • 配置: 存储身份验证令牌和服务器端口等配置。
  • App: 集中 Express 的配置、中间件和路由的集成以及服务器的启动。

特性和功能

  • SSE 传输: 使用 Server-Sent Events 进行实时远程连接。
  • Bearer 认证: 通过在 Authorization 标头中提供的令牌进行安全验证。
  • 示例工具: 四个简单的工具,执行四个基本的数学运算,演示了 MCP 服务器中工具的注册和执行结构。
  • 模块化结构: 根据 SOLID 原则和 Clean Code 分离职责。
  • 使用 ts-node 开发: 直接执行 TypeScript 文件,无需预编译(非常适合开发和调试)。

要求

  • Node.js (版本 20 或更高)
  • npm
  • TypeScript
  • ts-node (用于开发)
  • 兼容 WSL 的环境(如果适用)

安装和配置

  1. 克隆存储库:

    git clone <URL_DO_REPOSITORIO>
    cd mcp-sse
    
  2. 安装依赖项:

    npm install
    
  3. 配置:

    • 身份验证令牌: 在项目根目录中创建一个 .env 文件,并定义 Bearer 令牌:

      BEARER_TOKEN=meu-token-secreto
      PORT=3001
      
    • 该项目使用环境变量在运行时加载这些配置。


执行

使用 ts-node

在开发过程中,可以无需预编译即可执行服务器:

npm run dev

ℹ️ 注意:package.json 中的 "start" 脚本配置为与 node 一起使用,并且需要通过 tsc 进行预构建。


使用 @modelcontextprotocol/inspector

要通过 Web 界面实时查看和测试 MCP 工具,请执行:

npm run dev:inspect

💡 此命令使用 ts-node 运行项目,无需预先构建。 🔐 该界面将在以下位置可用:http://127.0.0.1:6274


构建和生产环境执行

要编译 TypeScript 文件:

npm run build

然后,执行编译后的版本:

node dist/index.js

序列图

下图说明了 MCP 服务器的通信和使用流程:

@startuml

title "MCP服务器与SSE和Bearer认证的通信流程"

actor "MCP Client" as Client

participant "Express Server" as Express
participant "Auth Middleware" as Auth
participant "Route /sse" as SSERoute
participant "SSE Server Transport" as SSE
participant "MCP Server" as MCP
participant "Route /messages" as MsgRoute

== 建立连接 ==
Client -> Express: GET /sse\n(Authorization: Bearer <token>)
Express -> Auth: 验证 Authorization 标头
Auth --> Express: 令牌有效\n(继续)
Express -> SSERoute: 调用 /sse 路由
SSERoute -> SSE: 创建 SSEServerTransport 的新实例
note right of SSE: 存储 sessionId
SSE -> SSERoute: 返回 transport
SSERoute -> Express: 返回 SSE 响应
Express -> MCP: mcpServer.connect(transport SSE)
MCP -> SSE: 启动通信\n(发送初始消息)
SSE -> Client: 发送 SSE 事件\n(例如:工具列表)

== 发送消息 (POST /messages) ==
Client -> Express: POST /messages?sessionId=XYZ\n(消息体)
Express -> MsgRoute: 调用 /messages 路由
MsgRoute -> SSE: 按 sessionId 查找传输
SSE -> MsgRoute: 找到 Transport
MsgRoute -> SSE: transport.handlePostMessage(request)
SSE -> MCP: 转发收到的消息
MCP -> SSE: 处理消息并返回响应
SSE -> Client: 通过 SSE 发送响应

== 关闭连接 ==
Client -> Express: 关闭 SSE 连接
Express -> SSE: 检测到连接关闭
SSE -> Express: 通知断开连接
Express -> SSERoute: 删除传输 (sessionId)
@enduml

推荐名称: "序列图 - MCP服务器与SSE和Bearer认证的通信流程".


贡献

欢迎贡献!如果您想改进这个项目:

  1. Fork 并克隆存储库。
  2. 为您的功能或修复创建一个分支。
  3. 提交一个包含您的更改的 Pull Request,遵循代码准则并保持 SOLID 原则和 Clean Code。

许可证

本项目根据 MIT License 获得许可。


文档更新于 2025/04/15.

推荐服务器

Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
MCP Package Docs Server

MCP Package Docs Server

促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。

精选
本地
TypeScript
Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
mermaid-mcp-server

mermaid-mcp-server

一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。

精选
JavaScript
Jira-Context-MCP

Jira-Context-MCP

MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

精选
TypeScript
Linear MCP Server

Linear MCP Server

一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

精选
JavaScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Curri MCP Server

Curri MCP Server

通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。

官方
本地
JavaScript