关于 MultiServerMCP
MultiServerMCP 是基于 SSE 的框架,可让单个 MCP 服务接入多个客户端。它提供按 URL 分组管理工具与权限、心跳维护及会话上下文访问。
主要功能
- 01支持多个 SSE 客户端连接
- 02按 URL 分组工具与权限
- 03连接心跳机制
- 04会话与客户端上下文管理
- 05简化工具注册
适用场景
- 01单个服务接入多个客户端
- 02按 URL 路径分组工具
- 03为工具组配置权限
- 04按会话 ID 读取请求数据
MCP 相关
通过 SSE 实现 MCP 服务,并支持为连接的 MCP 客户端注册工具、资源和提示词。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
暂未收录安装方式
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
还没有获取到工具列表
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MultiServerMCP
一个基于 SSE 实现长连接通信的多连接 MCP 服务框架,为 AI 助手提供上下文和功能扩展能力。 目前仅支持 SSE 模式。
🚀 MultiServerMCP — 通过多连接服务框架为 AI 助手扩展能力!
MultiServerMCP 旨在提供一个可靠的服务框架,支持多个客户端连接到同一个服务端,从而高效管理 AI 助手的工具和权限。
🌟 主要特性
- 支持多个客户端通过 SSE 模式连接到同一个服务端
- 按 URL 分组管理工具和权限
- 内置心跳机制,确保连接稳定
- 简化工具注册流程
- 完全兼容 MCP 协议
- 通过
SessionManager进行全局会话管理,可在任何位置访问客户端上下文 - 提供便捷的全局函数,可通过 sessionId 获取请求参数和客户端上下文
📦 安装
npm install multi-server-mcp
# or
yarn add multi-server-mcp
# or
pnpm add multi-server-mcp
🚀 快速开始
完整的服务端示例
import { z } from "zod";
import { MultiServerMCP } from "multi-server-mcp";
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
import { getSseReqQuery } from "multi-server-mcp";
// Create MCP server with URL grouping enabled
const server = new MultiServerMCP(
{
name: "multi server",
version: "1.0.0",
},
{
enableUrlGroups: true,
}
);
// Register a calculator tool that uses request parameters
server.tool("calc/add", { a: z.number(), b: z.number() }, async ({ a, b }, extra) => {
console.log(extra);
// Get query parameters from the SSE connection
const reqQuery = getSseReqQuery(extra.sessionId as string);
console.log(reqQuery);
return {
content: [{ type: "text", text: String(a + b) }],
};
});
// Register a resource template
server.resource(
"greeting",
new ResourceTemplate("greeting://{name}", { list: undefined }),
async (uri, { name }) => ({
contents: [
{
uri: uri.href,
text: `Hello, ${name}!`,
},
],
})
);
// Start the server
server
.start({
transportType: "sse",
})
.then(() => {
console.log(`Server started`);
})
.catch((error) => {
console.error(`Server start failed: ${error}`);
process.exit(1);
});
基本用法
import { MultiServerMCP } from 'multi-server-mcp';
// Create MCP server instance
const server = new MultiServerMCP({
name: 'my-mcp-server',
version: '1.0.0'
});
// Register a tool
server.tool('my-tool', async () => {
return {
content: [{ type: 'text', text: 'Tool executed successfully!' }]
};
});
// Start the server
server.start({
transportType: 'sse',
sse: {
port: 3000,
endpoint: '/mcp',
messagesEndpoint: '/mcp-messages'
}
});
工具分组和权限管理
// Register a tool with grouping
server.tool('group1/group2/my-tool', async () => {
return {
content: [{ type: 'text', text: 'Tool executed successfully!' }]
};
});
// Start server with permission management
server.start({
transportType: 'sse',
enableUrlGroups: true
});
全局访问客户端上下文
import { getSseReqQuery, getClientContextBySessionId } from 'multi-server-mcp';
import { z } from "zod";
// Register a tool that uses request parameters
server.tool("calc/add", { a: z.number(), b: z.number() }, async ({ a, b }, extra) => {
// Get request parameters from the SSE connection
const reqQuery = getSseReqQuery(extra.sessionId as string);
console.log('Query parameters:', reqQuery);
return {
content: [{ type: "text", text: String(a + b) }],
};
});
// In any part of your code, you can also access client's request parameters
function myFunction(sessionId: string) {
// Get query parameters from the SSE connection request
const reqQuery = getSseReqQuery(sessionId);
console.log('Client query parameters:', reqQuery);
// Get the full client context if needed
const clientContext = getClientContextBySessionId(sessionId);
if (clientContext) {
console.log('Client URL groups:', clientContext.urlGroups);
// Access any other client context properties
}
}
🔧 开发指南
目前仅支持 SSE 模式。
支持的工具类型
- 常规工具:
server.tool() - 资源工具:
server.resource() - 提示词工具:
server.prompt()
会话管理
SessionManager 提供单例实例来管理客户端会话:
SessionManager.getInstance():获取单例实例SessionManager.getInstance().getClientContext(sessionId):通过 sessionId 获取客户端上下文SessionManager.getInstance().getReqQuery(sessionId):通过 sessionId 获取请求查询参数SessionManager.getInstance().getSessionCount():获取活动会话数量
为方便使用,还提供了以下全局函数:
getSseReqQuery(sessionId):通过 sessionId 获取请求查询参数getClientContextBySessionId(sessionId):通过 sessionId 获取客户端上下文
🤝 参与贡献
欢迎贡献代码、提交问题和功能请求!
📄 许可证
评论
支持 Markdown
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。