fastify-mcp について
fastify-mcp は、Fastify アプリケーション内で MCP サーバーを動作させるための Fastify プラグインです。Streamable HTTP とレガシーな HTTP+SSE の両方のトランスポートに対応しており、Fastify を利用している Node.js 開発者を想定しています。
主な機能
- 01Streamable HTTP トランスポートに対応
- 02レガシーな HTTP+SSE トランスポートに対応
- 03Fastify プラグインとして登録
- 04メモリ内での複数セッション管理
- 05connected・terminated・error のセッションイベント
活用シーン
- 01既存の Fastify アプリに MCP エンドポイントを追加
- 02ホストサーバーで複数の MCP セッションを管理
MCP 対応
このプラグインは MCP サーバーを Fastify のルートにマウントし、MCP クライアントが HTTP 経由で接続できるようにします。セッション ID と有効なセッションの対応は、メモリ内で管理されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
fastify-mcp
Model Context Protocol サーバーを Fastify アプリに統合します。
Streamable HTTP トランスポート およびレガシーの HTTP+SSE トランスポート をサポートしています。
使い方
まず、MCP サーバーを定義します。
function createServer() {
const mcpServer = new McpServer({
name: "...",
version: "...",
});
mcpServer.tool("...");
mcpServer.resource("...");
return mcpServer.server;
}
Fastify アプリを作成し、プラグインを登録します。
import { fastify } from "fastify";
import { streamableHttp } from "fastify-mcp";
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
const app = fastify();
app.register(streamableHttp, {
// Set to `true` if you want a stateful server
stateful: false,
mcpEndpoint: "/mcp",
sessions: new Sessions<StreamableHTTPServerTransport>()
createServer,
});
app.listen({ port: 8080 });
より詳細な例については、examples ディレクトリを参照してください。
インストール
# npm
npm install fastify-mcp
# yarn
yarn add fastify-mcp
セッション管理
公式の MCP TypeScript SDK は、複数のセッションの管理を標準ではサポートしていないため、ホストサーバー側でこれを行う必要があります。
このパッケージは、MCP SDK の例で推奨されているように、アクティブな各セッションをそのセッション ID に紐づけるインメモリのマッピングを使用して、複数のセッションを管理します。
セッションイベント
Sessions クラスは以下のイベントを発行します。
connected: 新しいセッションが追加されたときに発行されます。terminated: セッションが削除されたときに発行されます。error: 非同期イベントハンドラーがエラーをスローしたときに発行されます。
const sessions = new Sessions<StreamableHTTPServerTransport>();
sessions.on("connected", (sessionId) => {
console.log(`Session ${sessionId} connected`);
});
sessions.on("terminated", (sessionId) => {
console.log(`Session ${sessionId} terminated`);
});
コントリビューション
このパッケージを使用していて問題が発生した場合は、issue を作成してください。新機能やバグ修正のプルリクエストも歓迎します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。