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 新聞通訊

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