MCP流式HTTP网关

一个基于Hono的MCP流式HTTP网关,允许通过HTTP调用本地MCP服务器(通过stdio进行JSON-RPC通信)。

  • by Momijinn
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Momijinn/mcp-hono-gateway

使用说明

mcp-hono网关

Hono制作的“MCP Streamable HTTP网关”。
通过HTTP呼叫在本地运行的MCP服务器(在stdio中说JSON-RPC的服务器)。

能做的事

  • 将MCP服务器作为HTTP的端点公开(POST/GET/DELETE)
  • initialize 启动会话,然后单击 mcp-session-id 继续相同的会话
  • 服务器进程按会话生成,并在会话结束时清理

需要的(本地开发)

  • Node.js
  • uv(uvx 的根目录)

首先移动(本地)

npm install
npm run dev

从浏览器/客户端访问:

open http://localhost:3000

端点列表(MCP可流HTTP)

该应用程序将MCP服务器作为HTTP渠道发布。

  • POST/GET/DELETE /server-time
  • POST/GET/DELETE /aws-pricing
  • POST/GET/DELETE /aws-knowledge
  • POST/GET/DELETE /context7
  • POST/GET/DELETE /tavily
  • POST/GET/DELETE /yfmcp

使用方法(MCP会话流程)

必需页眉

MCP Streamable HTTP必须同时接受“JSON”和“SSE”。

  • Accept: application/json, text/event-stream

会话启动(初始化)

第一个 initialize 如果成功,则将会话标识返回到响应题头。

  • mcp-session-id: <uuid>

以后的请求相同 mcp-session-id 中所述修改相应参数的值。

建议:通过MCP检查器进行确认

与其用curl手动组装JSON-RPC,不如推荐使用MCP Inspector的UI进行连接、沟通确认的方法。

  1. 启动网关(例如: npm run dev)
  2. 启动检查器: npm run inspector
  3. 在浏览器中 http://localhost:6274 的双曲正切值mcp-inspector.json 服务器(例如: aws-pricing)连接

补足:

  • npm run inspector 默认值 --server default-server 来定义自定义外观 mcp-inspector.json)。
  • 如果要在另一台服务器上打开: npm run inspector -- --server aws-knowledge
  • BEARER_TOKEN 启用时,在检查端 Authorization: Bearer <token> 来定义自定义外观。
  • 配置文件为 mcp-inspector.json 在工作空间的边缘http://localhost:3000/<route> 中所述修改相应参数的值。

环境变数

根据需要 .env.example 的 .env 中所述修改相应参数的值。

  • BEARER_TOKEN(可选):设置后,所有路由都将经过Bearer认证(Authorization: Bearer <token> ),模板名称将采用不同的格式
  • AWS_REGION(任意。未指定的话 us-east-1): /aws-pricing 在运行环境中使用
  • AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY(必要时):AWS系MCP服务器参照
  • CONTEXT7_API_KEY(推奨): /context7 中使用(未设定也可以启动/context7 的请求将出错)
  • TAVILY_API_KEY(推奨): /tavily 中使用(未设定也可以启动/tavily 的请求将出错)
  • CLOUDFLARED_TUNNEL_TOKEN(使用Cloudflare Tunnel时): cloudflared 在容器中使用

会话/内存相关(可选)

这个网关 initialize 每次启动MCP服务器进程。 如果客户机忘记关闭会话,则进程将继续占用内存,因此您可以设置自动清理空闲/长寿命会话。

  • MCP_MAX_SESSIONS(compose 既定: 10):同时保持的会话数的上限(超过的话 initialize 的 503 拒绝)
  • MCP_SESSION_IDLE_MS(compose 既定: 300000 =5分钟):自动退出没有此时间访问权限的会话(0 禁用)
  • MCP_SESSION_MAX_LIFETIME_MS(compose 既定: 3600000 =1小时):会话的最大生存时间(0 禁用)
  • MCP_MAX_INIT_BODY_BYTES(compose 既定: 250000 ≒250KB): initialize 的JSON主体过大时 413 拒绝
  • MCP_LOG_MEMORY(任意。1 启用):每分钟 sessions 数字和 process.memoryUsage() 日志输出

码头工人

通过Cloudflare Tunnel公开(compose默认)

compose.yaml 的正常启动 app 和 cloudflared 启动。 此配置允许主机 3000 因为没有发布,所以从本地 http://localhost:3000 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

docker compose up --build

停止/清理:

docker compose down

想在本地敲(带热重装)

使用具有端口公开的dev概要文件。

docker compose --profile dev up --build app-dev

停止/清理:

docker compose --profile dev down

添加MCP服务器

发生器(推荐)

创建根文件+ src/index.ts 中所述修改相应参数的值。

npm run add:mcp -- --name my-tool

常用选项示例:

# uvx (Python パッケージを実行)
npm run add:mcp -- --name aws-like --command uvx --arg 'some.package@latest' --env AWS_REGION

# npx (Node パッケージを実行)
npm run add:mcp -- --name node-mcp --command npx --arg -y --arg @your/mcp-server

手动添加

  1. src/routes/ 路线createMcpProxy 使用)
  2. src/index.ts 的 app.route('/your-path', yourRoute) 添加
  3. 如果需要环境变量 compose.yaml 的,之 environment: 过活
  4. 确认是否为可在容器中执行的命令(uvx / npx 包含在映像中)

生物特征(绒毛/格式)

npm run lint
npm run format
npm run check

在VSCode中加入biome扩展后,保存时的格式/修改会移动(设置为 .vscode/ 配下)。

许可证

MIT许可证