MCP

PostgreSQL MCP:先看表結構,再跑唯讀查詢

適合要檢查 PostgreSQL schema 或跑唯讀 SQL 的人;須自備連線字串,唯讀交易仍會讀庫且可能帶上密碼,不是零風險。

官方來源 · modelcontextprotocol/server-postgres

安裝

npx -y @modelcontextprotocol/server-postgres postgresql://localhost/mydb

適合誰

適合需要讓模型查看 PostgreSQL 庫表結構、並跑唯讀 SQL 的人。證據寫明:這台 MCP 提供對 PostgreSQL 的唯讀存取,用來檢查 schema 和執行唯讀查詢。

你必須能提供一條可連線的 postgresql:// URL,並且接受模型會讀到表結構與查詢結果。唯讀交易不是「零風險」:它仍要連庫、仍會讀資料,URL 裡還可以帶使用者名稱和密碼。

證據沒有列出用戶端名單。官方頁面在 servers-archived 目錄樹,證據沒有另寫維護狀態,不要預設它仍是現行主推實作。

3 分鐘完成第一次嘗試

走 NPX 主路徑,不要把 Docker 當主安裝。在用戶端 MCP 設定中使用:

"command": "npx",
"args": [
  "-y",
  "@modelcontextprotocol/server-postgres",
  "postgresql://localhost/mydb"
]

把最後的 URL 換成你有權唯讀存取的資料庫。使用者名稱密碼可按證據寫成 postgresql://user:password@host:port/db-name。不要把正式環境寫入帳號或完整密碼貼進對話。

前置條件:本機有 npx;資料庫允許來自該行程的連線;第一次只檢查 schema 或跑一條不會改資料的查詢。

設定位置:用戶端 MCP 伺服器的 command / args。第三個參數就是連線字串。

低風險第一次呼叫:先讀資源 postgres://<host>/<table>/schema 查看某一張表的欄名與型別;或呼叫工具 query,輸入 sql 字串,證據保證它在 READ ONLY 交易中執行。不要嘗試 INSERT/UPDATE/DELETE 來「驗證唯讀」。

成功訊號:用戶端連上後能列出表 schema 資源,或 query 回傳唯讀結果。若連線失敗,先改 URL(本機庫、埠、庫名),不要換成 Docker 再猜。證據對 Docker 只補充:macOS 上若服務在宿主機,用 host.docker.internal。

使用案例

案例 1:弄清某張表有哪些欄。讀取 postgres://<host>/<table>/schema。證據寫明這是從資料庫中繼資料自動發現的 JSON schema,包含欄名與資料型別。沒有給出表名列舉 API;<host> 與 <table> 需按你的實際連線替換。看不到的表不要編造。

案例 2:對已確認存在的表跑一條唯讀查詢。呼叫 query,參數只有 sql。證據保證在 READ ONLY 交易中執行,沒有寫結果分頁、逾時或可執行的 SQL 方言範圍。因此能確認的是:這條 SQL 被當作唯讀查詢送進已連線的庫;不要假設能寫暫存表或呼叫會改狀態的函式。

使用邊界

這是唯讀存取,不是可還原的寫入操作:證據沒有給出 undo。連線字串可含密碼,屬於憑證與資料面暴露。工具只有 query。Docker 與 NPX 是不同路徑,主路徑保持 NPX。證據沒有寫連線池、SSL、唯讀角色強制,也沒有說 READ ONLY 交易能擋住所有副作用(例如有的 SQL 函式仍可能有外部效應,但頁面沒有展開)。頁面位於封存倉庫樹,證據沒有提供替代套件或遷移說明。