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 推出了模型上下文协议 (MCP),作为

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

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

Blog image

回到之前的例子:使用 MCP,您只需要实现发票搜索功能*一次*。然后,您可以通过 MCP 服务器将其暴露给所有支持 MCP 协议的 LLM。这是一个伪代码实现:

Anthropic 显然通过这个标准引起了共鸣。如果你当时在 X 上,你可能每天都会看到好几个 MCP 帖子。"MCP" 的 Google Trends 也说明了同样的情况。

如何将 LLM 连接到 MCP 服务器

您所需要的,只是一个启动服务器的 CLI 命令,即可通过 MCP 服务器功能增强 LLM。大多数 AI 工具都接受如下 JSON 配置:

AI 工具运行 command,传递 args,然后 LLM 就可以访问服务器的工具了。

构建 Prisma MCP 服务器

在 Prisma,我们构建了 最受欢迎的 TypeScript ORM世界上最高效的运行在 unikernels 上的 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,我们可以实现一个服务器,一次性支持所有 LLM。

@modelcontextprotocol/sdk 包:“如同 MCP 的 Express”

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 函数会被执行。它启动一个使用 StdioServerTransport(而非 StreamableHTTPServerTransport)的 MCP 服务器,因为它是在本地运行的。

上述代码片段中未显示的是 CLI 命令的实际实现,让我们深入 parse 函数,以 prisma migrate devprisma init --db 命令为例:

每个工具都通过 server.tool() 注册,带有:

  1. 一个名称(以便 LLM 可以引用它)
  2. 一个描述(帮助 LLM 理解其目的)
  3. 一个参数 schema(我们使用 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 新闻通讯

© . This site is unofficial and not affiliated with Prisma Data, Inc.