0.5.0 • Published 4 months ago
redis-mcp-transport v0.5.0
redis-mcp-transport
基于Redis的传输层,为Model Context Protocol (MCP)提供高效可靠的通信方式,支持服务器发送事件(SSE)。 专为支持多用户设计,使单个MCP服务器能够同时处理多个并发会话,实现更高效的资源利用。
特点
- 多会话支持 - 通过Redis消息系统支持单个服务器同时处理多个用户会话
- 基于Redis的可靠消息传递系统,实现会话状态同步与持久化
- 支持服务器发送事件(SSE)实时数据流
- 完全实现Model Context Protocol规范
- 适用于分布式LLM应用架构,支持横向扩展
- 支持水平扩展和高可用性
- 专为Node.js环境优化
安装
npm install redis-mcp-transport
多会话工作原理
Redis-MCP-Transport 通过Redis作为消息中间件,使单个MCP服务器能够同时处理多个用户会话。每个会话都有唯一的会话ID,通过Redis频道进行消息路由,确保消息能准确发送到对应的用户。
此架构特别适合:
- 高流量AI应用需要同时服务多个用户
- 需要扩展模型服务能力的系统架构
- 需要会话状态持久化的应用场景
import express from 'express'
import { RedisMcpTransport } from 'redis-mcp-transport';
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
const REDIS_URL = 'redis://localhost:6379';
const app = express();
// 创建MCP服务器实例
const server = new McpServer({
name: "EchoService",
version: "1.0.0",
});
server.resource(
"greeting",
new ResourceTemplate("greeting://{name}", { list: undefined }),
async (uri, { name }) => ({
contents: [{
uri: uri.href,
text: `Hello, ${name}!`
}]
})
);
// SSE连接端点 - 为每个用户创建唯一会话
app.get("/stream", async (req, res) => {
const sessionId = req.query.sessionId || Date.now().toString();
const transport = new RedisMcpTransport(
'/api',
res,
REDIS_URL
);
await server.connect(transport);
});
// API请求处理端点 - 处理指定会话的请求
app.post("/api", express.json(), async (req, res) => {
const sessionId = req.query.sessionId;
if (!sessionId) {
return res.status(400).send('缺少sessionId参数');
}
const transport = new RedisMcpTransport(
'/api',
sessionId,
REDIS_URL
);
await server.connect(transport);
await transport.handlePostMessage(req, res);
res.end(); // 这里需要立即结束,某些客户端会等待超时再结束连接
});
app.listen(8000, () => {
console.log('MCP服务器运行在 http://localhost:8000');
});
贡献
欢迎贡献!请随时提交 Pull Request 或创建 Issue 讨论新功能或报告问题。
许可
MIT