MCP

H3 MCP 相关工具。

defineJsonRpcHandler()

创建一个实现 JSON-RPC 2.0 规范的 H3 事件处理器。

**安全默认设置:**请求必须具有 JSON Content-Type(CSRF,参见 validateContentType),跨源请求会被拒绝(CSRF 和 DNS 重绑定,参见 allowedOrigins),批处理请求上限为 50 个(扇出放大,参见 maxBatchSize)。

示例:

app.post(
  "/rpc",
  defineJsonRpcHandler({
    methods: {
      echo: ({ params }, event) => {
        return `在路径 \`${event.url.pathname}\` 上收到 \`${params}\``;
      },
      sum: ({ params }, event) => {
        return params.a + params.b;
      },
    },
  }),
);

defineJsonRpcWebSocketHandler()

创建一个实现基于 WebSocket 的 JSON-RPC 2.0 的 H3 事件处理器。

这是一个可选功能,允许通过 WebSocket 连接进行 JSON-RPC 通信,支持双向消息传递。每个传入的 WebSocket 文本消息都会被处理为 JSON-RPC 请求,并将响应发送回对端。

**安全性:**与 defineJsonRpcHandler() 不同,此处理器不会检查请求的 Origin。WebSocket 升级不受 CORS 约束,因此任何源上的页面都可以打开一个携带访问者 Cookie 的连接(跨站 WebSocket 劫持)。请在 upgrade 钩子中验证 Origin,并抛出一个 Response 以中止连接。

示例:

app.get(
  "/rpc/ws",
  defineJsonRpcWebSocketHandler({
    methods: {
      echo: ({ params }) => {
        return `收到: ${Array.isArray(params) ? params[0] : params?.message}`;
      },
      sum: ({ params }) => {
        return params.a + params.b;
      },
    },
  }),
);

示例:

// 额外的 WebSocket 钩子
app.get(
  "/rpc/ws",
  defineJsonRpcWebSocketHandler({
    methods: {
      greet: ({ params }) => `你好,${params.name}!`,
    },
    hooks: {
      open(peer) {
        console.log(`对等连接已连接: ${peer.id}`);
      },
      close(peer, details) {
        console.log(`对等连接已断开: ${peer.id}`, details);
      },
    },
  }),
);