通过我们如何构建 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 推出了模型上下文协议 (MCP),作为
一种将 AI 助手连接到数据所在系统的新标准,包括内容存储库、业务工具和开发环境。
MCP 提供了一个通用、开放的标准,用于将 AI 系统与外部数据源连接。所有实现 MCP 协议的 LLM 现在都可以访问相同的功能,如果它通过 MCP 服务器暴露出来。
回到之前的例子:使用 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 构建数据驱动型应用程序时,会使用 Cursor 或 Windsurf 等 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 客户端和服务器所需的一切。
本地 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 dev 和 prisma init --db 命令为例:
每个工具都通过 server.tool() 注册,带有:
- 一个名称(以便 LLM 可以引用它)
- 一个描述(帮助 LLM 理解其目的)
- 一个参数 schema(我们使用
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 新闻通讯