我做了一个 TypeScript 开源工具:把 OpenAPI、Prisma 和 tRPC 直接变成 MCP Tools

6 阅读3分钟

最近在做一个 TypeScript 开源项目:Bridgent AI

它解决的是一个很具体的工程问题:团队已经有 OpenAPI 文档、Prisma schema、Drizzle tables、tRPC router 和大量 Zod 定义,但 AI coding agent 仍然无法直接使用这些能力。

真正阻碍接入的往往不是 MCP 协议本身,而是协议之外的重复工程:工具定义、schema 转换、transport、错误处理、超时,以及最容易被低估的数据库权限边界。

Bridgent AI 的思路是:**已有 schema 就应该成为 single source of truth,不必为了 MCP 再声明一次。 **

从已有定义生成 MCP Tools

当前 Alpha 支持五类 source:

  • defineTool():用 Zod 描述输入,把普通 TypeScript 函数变成 typed tool

  • fromOpenApi():把 OpenAPI 3.x operations 转为 MCP tools

  • fromPrisma():从 Prisma 6.x model 生成查询工具,以及显式开启的审计写工具

  • fromDrizzle():从 Drizzle tables 生成只读 findMany

  • fromTrpc():复用 tRPC v10/v11 router;query 映射为读工具,mutation 默认隐藏

最小的手写工具示例只有几行:


import { createStdioServer, defineTool } from '@bridgent/core'

import { z } from 'zod'

  


await createStdioServer({

  name: 'hello',

  version: '0.0.1',

  tools: [

    defineTool({

      name: 'add',

      description: 'Add two numbers',

      inputSchema: z.object({

        a: z.number(),

        b: z.number(),

      }),

      run: ({ a, b }) => a + b,

    }),

  ],

})

安装并启动:


pnpm add -D @bridgent/cli @bridgent/core zod

bridgent init ./server.ts

bridgent dev ./server.ts

Bridgent AI 采用显式的 server-file 模型:source adapter 负责生成工具,开发者仍然掌握依赖注入、鉴权上下文和最终暴露范围。它不是新的 Agent framework,也不接管 prompt、memory、planning 或模型编排。

同一套 Tools,三种 Transport

生成的工具可以运行在:

  1. stdio:适合本地 Claude Code、Cursor、Codex、Gemini CLI。

  2. Streamable HTTP:适合自托管的共享 MCP Server 和远程调试。

  3. Web Standard fetch handler:适合 Cloudflare Workers、Deno、Bun 等 Web runtime。

仓库还提供了基于官方 MCP SDK Client 的协议级测试,用来验证 stdio、HTTP 与 Web handler 三条链路。

为什么数据库不是“能查就够了”

把数据库交给 AI Agent,最重要的不是生成多少工具,而是默认边界是否可靠。

Bridgent AI 的 Prisma / Drizzle source 采用安全优先的默认值:

  • 数据库默认只读

  • 查询结果有行数上限和 timeout

  • 不暴露 raw SQL

  • Prisma 写工具必须显式开启并加入 allowlist

  • 提交前先 dry-run,正式 commit 需要一次性 preview token

  • 支持 audit sink 与幂等键,降低宿主重试造成重复写入的风险

  • tRPC mutation 同样默认关闭,只有明确 allowlist 后才会生成

这并不意味着 Alpha 已经自动解决所有鉴权问题。业务身份和上下文仍由宿主应用负责;Bridgent AI 提供的是更明确、可测试的工具暴露边界。

当前状态与下一步

当前已经支持 OpenAPI、Prisma、Drizzle、tRPC、Zod,以及 stdio / Streamable HTTP / Web handler。CLI 还提供 initdevserveinspectinspect 可以在打开官方 MCP Inspector 前展示 source 与 capability hints。

项目仍处于 Alpha。下一阶段聚焦 generated tool surface 的本地 policy enforcement;GraphQL 和托管控制台仍属于更后续的生态方向。

如果你在实际项目里接过 MCP,我很想知道:你最希望 AI Agent 复用哪一种已有定义?也欢迎直接试用、提 Issue 或贡献 adapter。

GitHub:github.com/JS-mark/Bri…

文档:js-mark.com/Bridgent/