express-mcp-ハンドラー
モデル コンテキスト プロトコル (MCP)を Express アプリケーションに統合し、LLM とツール間のシームレスな通信を可能にするミドルウェア。
モデルコンテキストプロトコル (MCP) とは何ですか?
モデルコンテキストプロトコル(MCP)は、大規模言語モデル(LLM)を外部データソースやツールと統合するためのオープンプロトコルです。これにより、AIアシスタントは標準化されたインターフェースを介してリアルタイムデータにアクセスし、操作を実行し、さまざまなサービスと対話できるようになります。
特徴
- ステートフル ハンドラー: 1 回限りのリクエストを処理したり、セッション ID と Server-Sent Events (SSE) を使用して長期間有効なセッションを維持したりできます。
- ステートレス ハンドラー: 単純な 1 回限りのやり取りのために、各リクエストを完全に分離して処理します。
- SSE ハンドラー: 専用の GET および POST エンドポイントを使用して、Server-Sent Events (SSE) 経由の Model Context Protocol (MCP) を処理します。
- タイプセーフ API : 信頼性の高い統合のために TypeScript を使用して構築されています。
- 柔軟な構成: カスタマイズ可能なエラー処理、セッション管理、ライフサイクル フック。
- Express 統合: ミドルウェア パターンを使用して Express ルートに直接プラグインします。
インストール
npm 経由でインストール:
または糸:
またはpnpm:
仲間への依存
このパッケージには次のピア依存関係が必要です。
express
>= 4.0.0@modelcontextprotocol/sdk
>= 1.10.2zod
>= 3.0.0
まだインストールしていない場合はインストールしてください。
クイックスタート
始めるための基本的な例を次に示します。
使用法
Express-mcp-handler は、さまざまなユースケースに合わせて 3 つのハンドラー タイプを提供します。
ステートフルモード
statefulHandler
を使用して、クライアントとサーバーの間で再利用可能なセッションを確立します。これは、複数のやり取りにわたってコンテキストを維持するのに最適です。
ステートフル ハンドラー:
- 最初のリクエストで新しいセッションを初期化します(
mcp-session-id
ヘッダーなし) - クライアントが後続のリクエストに含める必要がある
mcp-session-id
ヘッダーを返します。 - サーバーからクライアントにメッセージをプッシュするための Server-Sent Events (SSE) を管理します
- セッションを閉じると自動的にクリーンアップされます
ステートレスモード
セッション管理のない 1 回限りのリクエスト処理にはstatelessHandler
使用します。これは、サーバーレス環境や単純なリクエストに最適です。
各ステートレス リクエスト:
- 新しいトランスポートとサーバーのインスタンスを作成します
- セッション追跡なしで完全な分離を保証
- シンプルな環境やサーバーレス環境に適しています
SSEモード
sseHandlers
を使用して、Server-Sent Events (SSE) 経由の Model Context Protocol (MCP) を処理します。これは、リアルタイムのストリーミング応答に最適です。
SSE ハンドラーは以下を提供します。
- GET /sse : SSEストリームを確立し、
mcp-session-id
ヘッダーを返します。 - POST /messages :
mcp-session-id
クエリパラメータを使用して、SSEトランスポート経由でMCPメッセージを送信します。
APIリファレンス
ステートフルハンドラー
パラメータ | タイプ | 説明 |
---|---|---|
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と型チェックを利用できます。
発達
このプロジェクトに貢献するには:
テスト範囲
このプロジェクトはしっかりとしたテスト範囲をカバーしており、それを維持することを約束しています。
すべての変更は、テストには Jest、カバレッジ レポートには Codecov を使用して、CI/CD パイプラインを通じて検証されます。
継続的インテグレーション
このプロジェクトでは、継続的インテグレーションのためにGitHub Actionsを使用しています。メインブランチへのプッシュとプルリクエストごとに、以下の処理が行われます。
- リントチェックを実行する
- プロジェクトを構築する
- カバレッジ付きテストを実行する
- カバレッジレポートをCodecovにアップロードする
現在の CI ステータスは、この README の上部にあるバッジ、または GitHub リポジトリの[アクション] タブで確認できます。
ライセンス
npmへの公開
まだ npm にログインしていない場合はログインしてください。
パッケージを npm に公開します (prepublishOnly ビルドが実行されます)。
新しいバージョンをバンプ、タグ付け、プッシュするには:
ハンドラーの種類の概要
ハンドラ | シナリオ | セッション | ストリーミング |
---|---|---|---|
ステートレスハンドラー | 1回限りまたはサーバーレスのワークロード | いいえ | いいえ |
ステートフルハンドラー | マルチターンインタラクション | はい | はい |
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.
Model Context Protocol (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