2025年5月7日

关于 MCP 服务器以及我们如何为 Prisma 构建了一个

通过 Prisma MCP 服务器的实际构建示例,了解 MCP 的工作原理,包括本地和远程 MCP 服务器之间的权衡、@modelcontextprotocol/sdk 包,以及我们如何使 LLM 能够使用 Prisma CLI。

About MCP Servers & How We Built One for Prisma

理解 MCP

在深入了解我们如何构建 Prisma MCP 服务器的技术细节之前,让我们先退一步,从头开始理解 MCP 服务器。

如果 LLM 需要访问专有数据或系统怎么办?

LLM 通过全球互联网上的信息进行训练,能够对互联网上讨论过的最深奥的问题提供准确的答案。

但是,如果您希望 LLM 基于专有数据或系统回答问题?或者代表您执行某种操作?想象一下您向 ChatGPT 提出以下要求:

  • "在我的文件系统中查找去年所有的发票。"
  • "在 us-west 区域为我创建一个新的数据库实例。"
  • "在特定的仓库中打开一个新的 GitHub Issue。"

一个纯粹通过互联网训练的 LLM 将无法帮助您完成这些任务,因为它无法访问您的文件系统、数据库提供商或 GitHub API。

“工具访问”使 LLM 能够与外部世界交互

在这种情况下,LLM 需要额外的能力来与“外部世界”交互——超越其对网络的知识,并在其他系统上执行操作。

LLM 提供商通过实现所谓的工具访问来响应这一需求。各个提供商对此使用不同的名称:OpenAI 称之为函数调用,Anthropic 称之为工具使用,而其他公司则使用“插件”或“动作”等术语。

Blog image

这种方法很混乱,因为每个 LLM 都有不同的工具交互接口。

例如,如果您希望多个 LLM 访问您的文件系统,您需要多次实现相同的“文件系统访问工具”,每次都为特定的 LLM 量身定制。这可能看起来像这样:

随着新的 LLM 不断涌现,您可以想象,如果每个 LLM 都有自己专有的外部世界访问接口,情况会变得多么混乱。

引入 MCP:标准化 LLM 的工具访问

2024 年 11 月,Anthropic 推出了模型上下文协议(Model Context Protocol)(MCP),作为

一种连接 AI 助手与数据所在系统的新标准,包括内容存储库、业务工具和开发环境。

MCP 提供了一个通用、开放的标准,用于连接 AI 系统与外部数据源。所有实现了 MCP 协议的 LLM 现在都可以访问通过 MCP 服务器公开的相同功能。

Blog image

回到之前的例子:使用 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 构建数据驱动型应用程序时,会使用诸如 CursorWindsurf 等 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 客户端和服务器所需的一切。

Blog image

本地 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 devprisma init --db 命令为例进行说明。

每个工具都通过 server.tool() 进行注册,包含:

  1. 一个名称(以便 LLM 可以引用它)
  2. 一个描述(帮助 LLM 理解其目的)
  3. 一个参数模式(我们使用 zod
  4. 一个实现逻辑的函数

我们所有工具的实现都遵循相同的模式,并且非常简单:当工具被调用时,我们只需派生一个新进程(通过使用 execarunCommand 函数)来执行属于它的 CLI 命令。这就是您使 LLM 能够代表用户调用命令所需的全部。

立即试用 Prisma MCP 服务器

如果您好奇想尝试,请将此代码片段粘贴到您偏爱的 AI 工具的 MCP 配置部分:

或者查看我们的文档,了解 Cursor、Windsurf、Claude 或 OpenAI Agents SDK 的具体说明。

添加后,您的 AI 工具将显示 MCP 服务器的状态和可用工具。在 Cursor 中看起来是这样的:

Blog image

超越 MCP:VS Code 中 Prisma 用户的新功能

接下来是什么?虽然 MCP 功能强大,但它仍然需要在 AI 工具中手动设置。

我们的目标是在开发人员已经存在的地方提供帮助。VS Code 是构建 Web 应用程序的实际标准,得益于其对 GitHub Copilot 和 LanguageModelTool API 的免费集成,我们即将把 MCP 服务器的功能带给所有 Prisma VS Code 扩展用户 🎉。这意味着 Copilot 将很快能够更好地协助您的数据库工作流!

与我们分享您的反馈

对 MCP、AI 工具或 Prisma 有任何想法或疑问吗?在 X 上联系我们加入我们的 Discord 社区——我们很乐意听取您的意见!

不要错过下一篇文章!

订阅 Prisma 新闻通讯

© . All rights reserved.