express-mcp-处理程序
用于将模型上下文协议 (MCP)与 Express 应用程序集成的中间件,实现 LLM 和工具之间的无缝通信。
什么是模型上下文协议(MCP)?
模型上下文协议 (MCP)是一个用于集成大型语言模型 (LLM) 与外部数据源和工具的开放协议。它使 AI 助手能够通过标准化接口访问实时数据、执行操作并与各种服务交互。
特征
- 有状态处理程序:可以处理一次性请求或使用会话 ID 和服务器发送事件 (SSE) 维护长期会话。
- 无状态处理程序:完全隔离地处理每个请求,以实现简单的一次性交互。
- SSE 处理程序:使用专用的 GET 和 POST 端点处理服务器发送事件 (SSE) 上的模型上下文协议 (MCP)。
- 类型安全 API :使用 TypeScript 构建,可实现可靠集成。
- 灵活的配置:可定制的错误处理、会话管理和生命周期挂钩。
- Express 集成:使用中间件模式直接插入 Express 路由。
安装
通过 npm 安装:
或纱线:
或者 pnpm:
对等依赖关系
此软件包需要以下对等依赖项:
express
>= 4.0.0@modelcontextprotocol/sdk
>= 1.10.2zod
>= 3.0.0
如果尚未安装,请安装它们:
快速入门
这是一个帮助您入门的基本示例:
用法
Express-mcp-handler 提供三种处理程序类型以适应不同的用例:
状态模式
使用statefulHandler
在客户端和服务器之间建立可重用的会话,非常适合在多个交互之间维护上下文:
有状态处理程序:
- 在第一个请求上初始化一个新会话(没有
mcp-session-id
标头) - 返回客户端必须在后续请求中包含的
mcp-session-id
标头 - 管理服务器发送事件 (SSE),将消息从服务器推送到客户端
- 关闭时自动清理会话
无状态模式
使用statelessHandler
进行一次性请求处理,无需会话管理,非常适合无服务器环境或简单请求:
每个无状态请求:
- 创建一个新的传输和服务器实例
- 确保完全隔离,无需会话跟踪
- 适用于简单或无服务器环境
SSE模式
使用sseHandlers
通过服务器发送事件 (SSE) 处理模型上下文协议 (MCP),非常适合实时流响应:
SSE 处理程序提供:
- GET /sse :建立 SSE 流并返回
mcp-session-id
标头 - POST /messages :使用
mcp-session-id
查询参数通过 SSE 传输发送 MCP 消息
API 参考
statefulHandler
范围 | 类型 | 描述 |
---|---|---|
server | McpServer | McpServer 实例来处理协议逻辑 |
options.sessionIdGenerator | () => string | 返回唯一会话 ID 的函数 |
options.onSessionInitialized | (sessionId: string) => void | *(可选)*使用新会话 ID 调用的回调 |
options.onSessionClosed | (sessionId: string) => void | *(可选)*会话关闭时调用的回调 |
options.onError | (error: Error, sessionId?: string) => void | *(可选)*发生错误时调用的回调 |
options.onInvalidSession | (req: express.Request) => void | *(可选)*访问无效会话时调用的回调 |
无状态处理程序
范围 | 类型 | 描述 |
---|---|---|
serverFactory | () => McpServer | 为每个请求返回一个新的服务器实例的函数 |
options.sessionIdGenerator | () => string | *(可选)*覆盖传输会话 ID 生成 |
options.onClose | (req: express.Request, res: express.Response) => void | *(可选)*请求/响应周期结束时触发的回调 |
options.onError | (error: Error) => void | *(可选)*处理过程中发生错误时触发的回调 |
sse处理程序
范围 | 类型 | 描述 |
---|---|---|
serverFactory | ServerFactory | 为每个 SSE 连接返回一个新的McpServer 的工厂函数 |
options.onError | (error: Error, sessionId?: string) => void | *(可选)*发生错误时调用的回调,接收error 和可选的sessionId |
options.onClose | (sessionId: string) => void | (可选) SSE 会话关闭时调用的回调,接收sessionId |
错误处理
所有处理程序类型都通过其选项支持自定义错误处理:
TypeScript 支持
此包使用 TypeScript 编写,并为所有导出提供类型定义。使用 TypeScript 时,您将获得完整的 IntelliSense 和类型检查。
发展
为该项目做出贡献:
测试覆盖率
该项目具有可靠的测试覆盖率并承诺对其进行维护。
所有更改均通过我们的 CI/CD 管道进行验证,使用 Jest 进行测试并使用 Codecov 进行覆盖率报告。
持续集成
本项目使用 GitHub Actions 进行持续集成。每次推送到主分支和拉取请求都会:
- 运行 Lint 检查
- 构建项目
- 运行覆盖测试
- 将覆盖率报告上传到Codecov
您可以在此 README 顶部的徽章中或 GitHub 存储库的“操作”选项卡中查看当前 CI 状态。
执照
发布到 npm
如果尚未登录,请登录 npm:
将包发布到 npm(将运行您的 prepublishOnly 构建):
要提升、标记和推送新版本:
处理程序类型一览
处理程序 | 设想 | 会议 | 流媒体 |
---|---|---|---|
无状态处理程序 | 一次性或无服务器工作负载 | 不 | 不 |
statefulHandler | 多轮互动 | 是的 | 是的 |
sse处理程序 | 实时 SSE 流 | 是的 | 是的 |
故障排除
缺少mcp-session-id
标头
确保客户端包含初始请求上返回的mcp-session-id
标头。
交通连接提前关闭
验证网络连接并确保客户端正确处理 SSE 事件。
变更日志
该项目所有值得注意的变化都记录在CHANGELOG.md中。
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
将模型上下文协议 (MCP) 集成到 Express 应用程序中的实用程序,提供有状态会话管理和无状态请求处理选项。
Related MCP Servers
- -securityAlicense-qualityMCP Server simplifies the implementation of the Model Context Protocol by providing a user-friendly API to create custom tools and manage server workflows efficiently.Last updated -43TypeScriptMIT License
- -securityAlicense-qualityMCP Server provides a simpler API to interact with the Model Context Protocol by allowing users to define custom tools and services to streamline workflows and processes.Last updated -132TypeScriptMIT License
- AsecurityAlicenseAqualityA Model Context Protocol (MCP) server that provides tools for managing todo items, including creation, updating, completion, deletion, searching, and summarizing tasks.Last updated -104TypeScriptMIT License
- AsecurityFlicenseAqualityA Model Context Protocol (MCP) server that provides a simple sleep/wait tool, useful for adding delays between operations such as waiting between API calls or testing eventually consistent systems.Last updated -167JavaScript