通过 Prisma MCP 服务器的实际构建示例,了解 MCP 的工作原理,包括本地和远程 MCP 服务器之间的权衡、@modelcontextprotocol/sdk
包,以及我们如何使 LLM 能够使用 Prisma CLI。
理解 MCP
在深入了解我们如何构建 Prisma MCP 服务器的技术细节之前,让我们先退一步,从头开始理解 MCP 服务器。
如果 LLM 需要访问专有数据或系统怎么办?
LLM 通过全球互联网上的信息进行训练,能够对互联网上讨论过的最深奥的问题提供准确的答案。
但是,如果您希望 LLM 基于专有数据或系统回答问题?或者代表您执行某种操作?想象一下您向 ChatGPT 提出以下要求:
- "在我的文件系统中查找去年所有的发票。"
- "在
us-west
区域为我创建一个新的数据库实例。" - "在特定的仓库中打开一个新的 GitHub Issue。"
一个纯粹通过互联网训练的 LLM 将无法帮助您完成这些任务,因为它无法访问您的文件系统、数据库提供商或 GitHub API。
“工具访问”使 LLM 能够与外部世界交互
在这种情况下,LLM 需要额外的能力来与“外部世界”交互——超越其对网络的知识,并在其他系统上执行操作。
LLM 提供商通过实现所谓的工具访问来响应这一需求。各个提供商对此使用不同的名称:OpenAI 称之为函数调用,Anthropic 称之为工具使用,而其他公司则使用“插件”或“动作”等术语。

这种方法很混乱,因为每个 LLM 都有不同的工具交互接口。
例如,如果您希望多个 LLM 访问您的文件系统,您需要多次实现相同的“文件系统访问工具”,每次都为特定的 LLM 量身定制。这可能看起来像这样:
随着新的 LLM 不断涌现,您可以想象,如果每个 LLM 都有自己专有的外部世界访问接口,情况会变得多么混乱。
引入 MCP:标准化 LLM 的工具访问
2024 年 11 月,Anthropic 推出了模型上下文协议(Model Context Protocol)(MCP),作为
一种连接 AI 助手与数据所在系统的新标准,包括内容存储库、业务工具和开发环境。
MCP 提供了一个通用、开放的标准,用于连接 AI 系统与外部数据源。所有实现了 MCP 协议的 LLM 现在都可以访问通过 MCP 服务器公开的相同功能。

回到之前的例子:使用 MCP,您只需要实现发票搜索功能一次。然后,您可以通过 MCP 服务器将其暴露给所有支持 MCP 协议的 LLM。这是一个伪代码实现:
Anthropic 显然凭借这一标准引起了共鸣。如果您当时在 X 上,可能每天都会看到多条 MCP 帖子。“MCP”的 Google 趋势也印证了这一点。
如何将 LLM 连接到 MCP 服务器
要为 LLM 增加 MCP 服务器功能,您只需要一个启动服务器的 CLI 命令。大多数 AI 工具接受如下 JSON 配置:
AI 工具运行 command
,传递 args
,然后 LLM 就可以访问服务器的工具了。
构建 Prisma MCP 服务器
在 Prisma,我们构建了最受欢迎的 TypeScript ORM 和在 unikernel 上运行的世界上最高效的 Postgres 数据库。
自然地,我们想知道如何利用 MCP 简化开发人员的数据库工作流。
为什么要为 Prisma 构建 MCP 服务器?
许多开发人员在使用 Prisma 构建数据驱动型应用程序时,会使用诸如 Cursor 或 Windsurf 等 AI 编码工具。
这些 AI 编码工具具有所谓的代理模式,AI 会为您编辑源文件,而您只需审查并接受 AI 的建议。它还可以为您运行 CLI 命令,与文件编辑类似,您需要确认该命令确实应该被执行。
由于与 Prisma Postgres 和 Prisma ORM 的许多交互都是通过 Prisma CLI 驱动的,我们希望 LLM 能够代表您运行 Prisma CLI 命令,例如用于以下工作流:
- 检查数据库迁移状态
- 创建和运行数据库迁移
- 使用 Prisma 控制台进行身份验证
- 配置新的 Prisma Postgres 实例
在 MCP 之前,我们必须为每个 LLM 分别实现支持。有了 MCP,我们可以实现一个单一的服务器,一次性支持所有这些功能。
@modelcontextprotocol/sdk
包:“像 Express 之于 MCP”
Anthropic 在引入 MCP 时,发布了适用于各种语言的 SDK。TypeScript SDK 位于 typescript-sdk
仓库中,提供了实现 MCP 客户端和服务器所需的一切。

本地 vs. 远程 MCP 服务器
构建 MCP 服务器时,您必须决定它是本地运行(在与用户相同的机器上)还是远程运行(在可通过互联网访问的机器上)。
这取决于服务器的功能。如果它需要访问用户的文件系统,则必须在本地运行。如果它只是调用 API,则可以是本地或远程的(因为 API 可以从本地和远程机器调用)。
对于 Prisma,LLM 主要需要访问 Prisma CLI,以便支持开发人员进行数据库相关的工作流。Prisma CLI 可以连接到本地或远程数据库实例。然而,由于 CLI 命令是在本地执行的,因此 Prisma MCP 服务器也必须是本地的。
使 LLM 能够调用 Prisma CLI 命令
Prisma MCP 服务器非常简单轻巧——您可以在 GitHub 上探索它。它已作为 Prisma CLI 的一部分进行打包,可以使用以下命令启动:
其基本结构如下:
当调用 prisma mcp --early-access
CLI 命令时,parse
函数会被执行。它启动一个 MCP 服务器,该服务器使用 StdioServerTransport
(而非 StreamableHTTPServerTransport
),因为它在本地运行。
上面代码片段中未显示的是 CLI 命令的实际实现,让我们放大 parse
函数,以 prisma migrate dev
和 prisma init --db
命令为例进行说明。
每个工具都通过 server.tool()
进行注册,包含:
- 一个名称(以便 LLM 可以引用它)
- 一个描述(帮助 LLM 理解其目的)
- 一个参数模式(我们使用
zod
) - 一个实现逻辑的函数
我们所有工具的实现都遵循相同的模式,并且非常简单:当工具被调用时,我们只需派生一个新进程(通过使用 execa
的 runCommand
函数)来执行属于它的 CLI 命令。这就是您使 LLM 能够代表用户调用命令所需的全部。
立即试用 Prisma MCP 服务器
如果您好奇想尝试,请将此代码片段粘贴到您偏爱的 AI 工具的 MCP 配置部分:
或者查看我们的文档,了解 Cursor、Windsurf、Claude 或 OpenAI Agents SDK 的具体说明。
添加后,您的 AI 工具将显示 MCP 服务器的状态和可用工具。在 Cursor 中看起来是这样的:

超越 MCP:VS Code 中 Prisma 用户的新功能
接下来是什么?虽然 MCP 功能强大,但它仍然需要在 AI 工具中手动设置。
我们的目标是在开发人员已经存在的地方提供帮助。VS Code 是构建 Web 应用程序的实际标准,得益于其对 GitHub Copilot 和 LanguageModelTool API 的免费集成,我们即将把 MCP 服务器的功能带给所有 Prisma VS Code 扩展用户 🎉。这意味着 Copilot 将很快能够更好地协助您的数据库工作流!
与我们分享您的反馈
对 MCP、AI 工具或 Prisma 有任何想法或疑问吗?在 X 上联系我们或加入我们的 Discord 社区——我们很乐意听取您的意见!
不要错过下一篇文章!
订阅 Prisma 新闻通讯