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 發出以下指令:

  • "Find all the invoices from last year on my file system."(「找出我檔案系統中去年的所有發票。」)
  • "Create a new database instance in the us-west region for me."(「為我在 us-west 地區建立一個新的資料庫實例。」)
  • "Open a new GitHub issue in a specific repo."(「在特定的儲存庫中開啟一個新的 GitHub Issue。」)

純粹經由網際網路訓練的 LLM 無法協助完成這些任務,因為它無法存取您的檔案系統、資料庫提供者或 GitHub API。

「工具存取」使 LLM 能夠與外部世界互動

在這種情況下,LLM 需要額外的能力來與「外部世界」互動——不僅要超越其網路知識,還要能在其他系統上執行操作。

LLM 提供商已透過實作所謂的工具(tool)存取來回應此需求。不同的提供商使用不同的名稱:OpenAI 稱之為 函式呼叫(function calling),Anthropic 將其稱為 工具使用(tool use),其他人則使用「插件(plugins)」或「動作(actions)」等術語。

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 的貼文。Google Trends 上關於「MCP」的搜尋趨勢也印證了這一點。

如何將 LLM 連接到 MCP 伺服器

要使用 MCP 伺服器功能來增強 LLM,您只需要一個啟動伺服器的 CLI 指令。大多數 AI 工具都接受如下所示的 JSON 設定:

AI 工具會執行該 command,傳遞 args,然後 LLM 便能獲得該伺服器工具的存取權。

建構 Prisma MCP 伺服器

在 Prisma,我們打造了最受歡迎的 TypeScript ORM,以及運行在 Unikernel 上、全球最高效的 Postgres 資料庫

自然地,我們開始思考如何利用 MCP 來簡化開發者的資料庫工作流程。

為什麼要為 Prisma 建構 MCP 伺服器?

許多開發者在使用 Prisma 建構資料驅動的應用程式時,會使用像是 CursorWindsurf 等 AI 編碼工具。

這些 AI 編碼工具具有所謂的代理模式(agent modes),AI 會為您編輯原始碼檔案,您只需要審查接受 AI 提出的建議。它也可以主動提出為您執行 CLI 指令,就像檔案編輯一樣,您需要確認該指令是否真的應該被執行。

由於與 Prisma Postgres 和 Prisma ORM 的許多互動都是由 Prisma CLI 驅動的,我們希望讓 LLM 能夠代您執行 Prisma CLI 指令,例如用於以下工作流程:

  • 檢查資料庫遷移(migrations)的狀態
  • 建立並執行資料庫遷移
  • 使用 Prisma Console 進行身份驗證
  • 配置新的 Prisma Postgres 實例

在 MCP 出現之前,我們必須為每個 LLM 分別實作支援。有了 MCP,我們只需要實作一個伺服器,就能同時支援所有 LLM。

@modelcontextprotocol/sdk 套件:「MCP 的 Express」

在推出 MCP 時,Anthropic 發布了適用於多種程式語言的 SDK。TypeScript SDK 位於 typescript-sdk 儲存庫中,它提供了實作 MCP 用戶端與伺服器所需的一切。

Blog image

本地與遠端 MCP 伺服器

在建構 MCP 伺服器時,您必須決定它是本地(local)運行(與使用者在同一台機器上),還是遠端(remote)運行(在可透過網際網路存取的機器上)。

這取決於伺服器的功能。如果它需要存取使用者的檔案系統,它必須在本地運行。如果它只是呼叫 API,則可以在本地或遠端運行(因為 API 可以從本地和遠端機器呼叫)。

以 Prisma 為例,LLM 主要需要存取 Prisma CLI,以支援開發者的資料庫相關工作流程。Prisma CLI 可能會連接到本地或遠端資料庫實例。然而,因為 CLI 指令是在本地執行的,所以 Prisma MCP 伺服器也必須在本地執行。

賦予 LLM 呼叫 Prisma CLI 指令的能力

Prisma MCP 伺服器非常簡單且輕量——您可以在 GitHub 上瀏覽它的程式碼。它已作為 Prisma CLI 的一部分進行打包,並可透過以下指令啟動:

以下是其基本架構:

parse 函式會在呼叫 prisma mcp --early-access CLI 指令時執行。它會啟動一個使用 StdioServerTransport(相對於 StreamableHTTPServerTransport)的 MCP 伺服器,因為它是在本地執行的。

上述程式碼片段中未顯示 CLI 指令的實際實作,讓我們放大查看 parse 函式,並以 prisma migrate devprisma init --db 指令作為範例:

每個工具都是透過 server.tool() 註冊的,包含:

  1. 一個 名稱(name)(以便 LLM 可以參照它)
  2. 一個 說明(description)(協助 LLM 理解其用途)
  3. 一個 參數架構(argument schema)(我們使用 zod
  4. 一個實作該邏輯的 函式(function)

我們所有工具的實作都遵循相同的模式,非常簡單:當呼叫工具時,我們只需生成一個新程序(透過使用 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 是建構網頁應用程式的事實標準,多虧了它對 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.