MCP Server transport for Hono applications について
MCPサーバーに接続するHonoアプリ向けのSSEトランスポート実装です。公式TypeScript SDKをHonoで使う際のレスポンスヘッダーの問題に対応し、SDKの正式対応まで利用できます。
主な機能
- 01Hono向けSSEトランスポート
- 02MCPサーバーへの接続
- 03Honoストリーミングへの対応
活用シーン
- 01HonoアプリでのMCPサーバー構築
- 02HonoプロジェクトへのSSE通信追加
MCP 対応
MCPサーバー向けのSSEトランスポートを提供し、Honoアプリからの接続を可能にします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Hono アプリケーション向けの MCP サーバートランスポート
概要
このプロジェクトは、MCP サーバーに接続する必要がある Hono アプリケーション向けのトランスポートを提供します。公式の TypeScript SDK は express と組み合わせて使用するように設計されています。
指示に従って express を hono に置き換えても、動作しないことがわかるでしょう。環境変数として HttpBinding を設定しても(@hono/node-server の例を参照してください)、レスポンスが送信された後に一部のヘッダーが追加されるため、やはり動作しません。
この実装は、以下の プルリクエスト に着想を得ています。
公式 SDK で Hono が適切にサポートされるまでは、このトランスポートを使用できます。
はじめに
インストール
pnpm add -D hono-mcp-server-sse-transport
使用方法
import { Hono } from 'hono';
import { serve } from '@hono/node-server';
import { streamSSE } from 'hono/streaming';
import { SSETransport } from 'hono-mcp-server-sse-transport';
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
const mcpServer = new McpServer(
{
name: 'your-mcp-server-name',
version: '1.0.0',
},
{
capabilities: {
tools: {},
},
},
);
// here you add your tools
// ...
const app = new Hono();
// to support multiple simultaneous connections we have a lookup object from
// sessionId to transport
const transports: { [sessionId: string]: SSETransport } = {};
app.get('/sse', (c) => {
return streamSSE(c, async (stream) => {
const transport = new SSETransport('/messages', stream);
transports[transport.sessionId] = transport;
stream.onAbort(() => {
delete transports[transport.sessionId];
});
await mcpServer.connect(transport);
while (true) {
// This will keep the connection alive
// You can also await for a promise that never resolves
await stream.sleep(60_000);
}
});
});
app.post('/messages', async (c) => {
const sessionId = c.req.query('sessionId');
const transport = transports[sessionId];
if (transport == null) {
return c.text('No transport found for sessionId', 400);
}
return await transport.handlePostMessage(c);
});
serve(
{
fetch: app.fetch,
port: 3000,
},
);
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。