透過我們構建 Prisma MCP 伺服器的實作案例,了解 MCP 的運作方式,內容涵蓋本地與遠端 MCP 伺服器之間的取捨、@modelcontextprotocol/sdk 套件,以及我們如何賦予 LLM 使用 Prisma CLI 的能力。
了解 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-westregion 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)」等術語。
這種方法很混亂,因為每個 LLM 與工具互動的介面都不同。
例如,如果您希望多個 LLM 都能存取您的檔案系統,您必須針對每個 LLM 分別實作相同的「檔案系統存取工具」。這看起來可能像這樣:
隨著新的 LLM 如雨後春筍般湧現,您可以想像,如果每個 LLM 都有自己專屬的介面來存取外部世界,將會變得多麼混亂。
介紹 MCP:為 LLM 的工具存取制定標準
2024 年 11 月,Anthropic 推出了模型內容協定(Model Context Protocol,簡稱 MCP),作為一種
全新的連接 AI 助理與資料所在系統的標準,這些系統包括內容儲存庫、商業工具和開發環境。
MCP 為連接 AI 系統與外部資料來源提供了一個通用的開放標準。所有實作 MCP 協定的 LLM,只要透過 MCP 伺服器公開功能,現在都能存取相同的工具。
回到之前的例子:有了 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 建構資料驅動的應用程式時,會使用像是 Cursor 或 Windsurf 等 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 用戶端與伺服器所需的一切。
本地與遠端 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 dev 和 prisma init --db 指令作為範例:
每個工具都是透過 server.tool() 註冊的,包含:
- 一個 名稱(name)(以便 LLM 可以參照它)
- 一個 說明(description)(協助 LLM 理解其用途)
- 一個 參數架構(argument schema)(我們使用
zod) - 一個實作該邏輯的 函式(function)
我們所有工具的實作都遵循相同的模式,非常簡單:當呼叫工具時,我們只需生成一個新程序(透過使用 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 是建構網頁應用程式的事實標準,多虧了它對 GitHub Copilot 和 LanguageModelTool API 的免費整合,我們將把 MCP 伺服器的能力帶給所有 Prisma VS Code 擴充套件的使用者 🎉。這意味著 Copilot 很快就能在您的資料庫工作流程中提供更多協助!
與我們分享您的意見
對於 MCP、AI 工具或 Prisma 有任何想法或疑問嗎?歡迎在 X 上與我們聯繫,或是加入我們的 Discord 社群——我們很樂意聽聽您的聲音!
不要錯過下一篇貼文!
訂閱 Prisma 電子報