跳轉到主要內容

介紹

MCP 伺服器讓你連接自訂資料來源,並在 Cursor 裡面使用。當你需要來自瀏覽器、資料庫,或錯誤與系統日誌等來源的內容脈絡時,這特別好用。設定 MCP 伺服器很直接,搭配 Cursor 可以很快完成。 在這份指南中,我們會帶你建立一個用於 Postgres 的 MCP 伺服器。我們的目標是讓 Cursor 能直接對 Postgres 資料庫執行 SQL 查詢,並以結構化方式公開資料表綱要。
這個教學旨在教你建立 MCP 伺服器的核心基礎。

什麼是 MCP 伺服器?

MCP server 是一個與 Cursor 溝通,並提供外部資料或動作存取的程序。它可以用多種方式實作,但這裡我們用最簡單的方法:在你電腦本機上透過 stdio(標準輸入/輸出串流)執行的伺服器。這樣可以避免複雜的安全性考量,讓我們專注在 MCP 的邏輯本身。 MCP 最常見的使用情境之一是存取資料庫。建置儀表板、跑分析或建立遷移時,經常需要查詢與檢視資料庫。我們的 Postgres MCP 伺服器將支援兩項核心能力:執行任意查詢,以及列出資料表綱要(schema)。 雖然這兩件事都能用純 SQL 完成,MCP 提供的功能讓它們更強大且更通用。Tools 提供一種方式來曝光像執行查詢這類動作,而 resources 讓我們能共享像綱要資訊這種標準化的上下文。稍後在本指南中我們也會看看 prompts,它能啟用更進階的工作流程。 在底層,我們會依賴 postgres npm 套件來對資料庫執行 SQL 陳述式。MCP SDK 會作為這些呼叫的包裝層,讓我們能把 Postgres 的功能無縫整合進 Cursor。

如何建置 MCP 伺服器

建置伺服器的第一步是設定一個新專案。先建立一個新資料夾,然後初始化一個 Bun 專案。
> mkdir postgres-mcp-server
> Bun init
接下來我們會選擇 Blank 專案。樣板設定好之後,就需要安裝必要的相依套件。zod 用來在 MCP SDK 中為輸入/輸出定義 schema
bun add postgres @modelcontextprotocol/sdk zod
接下來,我們會到各個函式庫的 repository,取得各自 README 檔案的原始內容連結。這些連結會在建置 server 時當作 context 使用 現在,我們要定義 server 的行為。為了做到這點,我們會建立一個 spec.md,並寫下高階目標
# 規格

- 允許透過 MCP 環境設定定義 DATABASE_URL
- 透過工具查詢 Postgres 資料
  - 預設為唯讀
  - 設定環境變數 `DANGEROUSLY_ALLOW_WRITE_OPS=true|1` 可啟用寫入操作
-`resources` 形式存取資料表
- 使用 Zod 定義綱要(schema)
如你所見,這是一份相當輕量的規格。需要時盡管補充更多細節。配合 README 的連結,我們會組建出最終的提示詞
請閱讀以下內容,並依照 @spec.md 了解我們的需求。所有必要的相依套件都已安裝
- @https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/refs/heads/main/README.md
- @https://raw.githubusercontent.com/porsager/postgres/refs/heads/master/README.md
有了這三個組成要素(規格、MCP SDK 文件,以及 Postgres 函式庫文件),就能用 Cursor 來腳手架出伺服器實作。Cursor 會幫我們把這些部分串接起來,產生將 MCP SDK 與 Postgres 連結的程式碼。 經過幾輪來回提示後,我們已經有了第一個可運作的 MCP 伺服器版本。想試試看的話,可以用 MCP Inspector
npx @modelcontextprotocol/inspector bun run index.ts

測試 MCP 伺服器

在完成初始實作後,我們可以用 MCP Inspector 來測試。Inspector 提供介面來查看伺服器對外提供的項目,並驗證工具與資源是否如預期運作。我們應確認查詢能成功執行,且能正確回傳結構(schema)資訊。 MCP Inspector 介面 當一切看起來都沒問題時,我們可以把伺服器接到 Cursor 上,並在實際環境中測試。此時,Cursor 會把 Postgres MCP 伺服器視為內建功能,讓我們能直接查詢與檢視資料庫。

下一步

在本機透過 stdio 執行 MCP 伺服器是很好的起點,但團隊通常需要透過 MCP 伺服器共同存取同一個資料庫。這種情況下,就需要把 MCP 伺服器部署成集中式的 HTTP 服務。 將 MCP 伺服器部署起來,相較於各自以 stdio 執行,有幾個好處:
  • 共享資料庫存取: 多位團隊成員可以透過 Cursor 查詢同一個資料庫實例
  • 集中化設定: 結構(schema)更新與權限變更在單一位置管理
  • 強化安全性: 可實作完善的身分驗證、速率限制與存取控制
  • 可觀測性: 可以在整個團隊層面監控使用模式與效能指標
要達成這點,你只要把傳輸方式從 stdio 切換為 HTTP。 雖然我們不會完整講解整個設定流程,但這裡有個不錯的起始提示,可以直接丟給 Cursor
在現有的 MCP 伺服器基礎上,新增一個實作 HTTP 協定的檔案。

將共用邏輯移至 mcp-core,並以名稱為各傳輸實作命名(mcp-server-stdio、mcp-server-http)

@https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/refs/heads/main/README.md 
最終成果可在這裡查看:pg-mcp-server
I