MultiServerMCP について
MultiServerMCPは、1つのMCPサーバーで複数のクライアント接続を扱うSSEベースのフレームワークです。URL単位のツール・権限管理、ハートビート、セッションコンテキスト参照を備えます。
主な機能
- 01複数のSSEクライアント接続
- 02URL単位のツール・権限グループ
- 03接続ハートビート機能
- 04セッションとクライアントコンテキスト管理
- 05簡易なツール登録
活用シーン
- 011つのサーバーで複数クライアントに対応
- 02URLパスごとのツール分類
- 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 からクライアントコンテキストを取得します
🤝 貢献
貢献、問題の報告、機能リクエストを歓迎します!
📄 ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。