mcpField
M
MCP Server transport for Hono applications

MCP Server transport for Hono applications

本地服务
github.com/NikaBuligini开发工具2975 周前更新

关于 MCP Server transport for Hono applications

供 Hono 应用使用的 MCP 服务端 SSE 传输实现,适用于需要在 Hono 中接入 MCP 的 TypeScript 开发者。它绕过官方 SDK 与 Hono 配合时的响应头问题,可在官方 SDK 支持完善前使用。

主要功能

  1. 01为 Hono 提供 SSE 传输
  2. 02连接 MCP 服务端
  3. 03适配 Hono 流式响应

适用场景

  1. 01在 Hono 应用中构建 MCP 服务
  2. 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

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。