关于 MCP Server transport for Hono applications
供 Hono 应用使用的 MCP 服务端 SSE 传输实现,适用于需要在 Hono 中接入 MCP 的 TypeScript 开发者。它绕过官方 SDK 与 Hono 配合时的响应头问题,可在官方 SDK 支持完善前使用。
主要功能
- 01为 Hono 提供 SSE 传输
- 02连接 MCP 服务端
- 03适配 Hono 流式响应
适用场景
- 01在 Hono 应用中构建 MCP 服务
- 02为 Hono 项目接入 SSE 通信
MCP 相关
该项目提供 MCP 服务端的 SSE 传输层,使 Hono 应用能够连接 MCP 服务端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
暂未收录安装方式
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
还没有获取到工具列表
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
用于 Hono 应用的 MCP 服务传输层
概述
本项目为需要连接 MCP 服务的 Hono 应用提供了一种传输层。官方 TypeScript SDK 是为与 express 配合使用而设计的。
如果你尝试按照他们的说明操作,只是把 express 换成 hono,你会发现它无法工作。即使你将 HttpBinding 设置为环境变量(参见 @hono/node-server 的示例),
它仍然无法工作,因为某些响应头会在响应发送之后才被添加到响应中。
本实现受到了以下 pull request 的启发。
在官方 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,
},
);
评论
支持 Markdown
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。