萬物皆可連接:手綁 MCP 協議把 IDE、資料庫與本地 API 接到 Claude
為何 MCP 對進階使用者很重要
MCP 出現之前,每個 IDE 各自發明外掛格式。Anthropic 的 Model Context Protocol 標準化了 AI 用戶端如何探索能力:列出 tools → 以 JSON 參數呼叫 tool → 回傳結構化結果。這表示同一套 Postgres 唯讀伺服器可同時服務 Claude Desktop、Cursor 與其他 MCP 主機,無需為每個平台重寫整合。
硬核開發者關注 MCP,因為:
- 資料庫成為可查詢的上下文,不必每次對話都貼 schema dump
- 內部 API(帳務、功能旗標、部署狀態)以型別化 tools 呈現,取代脆弱的複製貼上
- IDE + Agent 工具鏈可共用同一套 MCP 目錄——若你也在遠端 Mac 上跑 Claude Code 替代方案或 OpenClaw
官方參考:Model Context Protocol 規格與 Anthropic MCP 文件。
MCP 架構 60 秒速覽
┌─────────────┐ JSON-RPC ┌──────────────────┐
│ MCP Host │ ◄──────────────► │ MCP Server │
│ (Claude / │ tools/resources │ (your custom code)│
│ Cursor) │ │ → DB / API / CLI │
└─────────────┘ └──────────────────┘
| 角色 | 範例 | 職責 |
|---|---|---|
| Host | Claude Desktop、Cursor、Claude Code | 啟動伺服器、發送 tools/call、渲染結果 |
| Server | 你的 Node/Python 二進位 | 實作 list_tools、call_tool、可選的 resources/read |
| Transport | stdio、SSE | 在主機與伺服器之間承載 JSON-RPC 訊息 |
深度規則:每個信任邊界一個伺服器。不要把正式環境寫入權限與實驗性 Shell tools 放在同一個伺服器二進位——拆成不同行程,這樣撤銷一個設定區塊時不會影響另一個。
傳輸方式決策矩陣
| Transport | 延遲 | 最適情境 | 設定檔(典型) |
|---|---|---|---|
| stdio | 最低 | 筆電本機 DB、單人使用 | claude_desktop_config.json、Cursor mcp.json |
| SSE (HTTP) | +1 hop | NAS、遠端 Mac、Docker sidecar 上的伺服器 | 主機 URL http://host:port/sse |
| Streamable HTTP(較新主機) | 類似 SSE | 同 SSE;請確認主機版本 | 依各主機文件 |
| 情境 | 建議 transport |
|---|---|
| 與 Claude Desktop 同機的 SQLite 檔案 | stdio |
| 辦公室 LAN 上的 PostgreSQL | 跳板機上的 SSE 伺服器,或透過 SSH wrapper 的 stdio |
| 5 個內部 REST 微服務 | 一個閘道 MCP 伺服器,暴露命名空間化的 tools |
| 團隊共用 tool 目錄 | 常駐主機上的中央 MCP 伺服器(見遠端 Mac 部署) |
模式 1 — 資料庫 MCP 伺服器
目標:讓模型對 PostgreSQL、MySQL 或 SQLite 執行唯讀 SQL(或預定義查詢)。
設計約束:
- 盡可能暴露具名 tools(
query_sales_summary、list_tables),而非任意原始 SQL - 強制列數上限(如最多 200 列)與語句逾時(如 5 秒)
- 絕不讓模型傳遞連線字串——在伺服器環境變數中從
DATABASE_URL載入
範例 tool 介面:
| Tool 名稱 | 輸入 | 輸出 |
|---|---|---|
postgres_query_readonly | { "sql": "SELECT ..." } | JSON 列 + 欄位名稱 |
describe_table | { "table": "orders" } | 來自 information_schema 的欄位型別 |
使用唯讀 DB 角色:GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_reader;
模式 2 — 本地 REST API 閘道
目標:將現有 HTTP 端點包裝為 MCP tools,讓 Claude 不必在對話視窗中持有長效 API 金鑰。
閘道模式:
Claude → MCP tool "deploy_status" → your server → GET https://internal/api/v1/deployments
實作要點:
- 每個 tool 對應一個 HTTP 方法 + 路徑模板
- 呼叫 fetch 前以 schema(Zod、Pydantic)驗證輸入
- 回應過大時回傳截斷 JSON(前 8 KB)並附
truncated: true旗標 - 在伺服器端記錄 correlation ID;勿在 tool 結果中回顯機密
與 多智能體編排搭配時,OpenClaw worker 可透過 MCP 呼叫相同內部 API,取代 ad-hoc curl。
模式 3 — IDE 與 Repo 橋接
Cursor 與 Claude Code 已內建 MCP 用戶端支援。你的自訂伺服器可暴露:
- Repo tools:
git_diff_summary、run_linter(沙箱化) - Doc resources:
file://或resources/read讀取AGENTS.md、OpenAPI 規格 - ECC / 外掛 hooks:ECC 安裝後,新增 MCP tools 包裝團隊的
ecc腳本
IDE 橋接建議維持 stdio-local,除非整個團隊共用同一台遠端開發機。
八步驟實戰手冊
步驟 1 — 安裝官方 SDK
Node(多數主機建議):
mkdir mcp-company-gateway && cd mcp-company-gateway
npm init -y
npm install @modelcontextprotocol/sdk zod pg
Python 替代方案:pip install mcp(見 MCP Python SDK)。
步驟 2 — 建立最小伺服器腳手架
建立 src/index.ts:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new McpServer({ name: "company-gateway", version: "1.0.0" });
server.tool("ping", {}, async () => ({
content: [{ type: "text", text: "pong" }],
}));
const transport = new StdioServerTransport();
await server.connect(transport);
執行一次:npx tsx src/index.ts — 應阻塞等待 stdio(無輸出屬正常)。
步驟 3 — 新增唯讀 Postgres tool
export DATABASE_URL="postgresql://mcp_reader:****@127.0.0.1:5432/app"
註冊 postgres_query_readonly,以 Zod 驗證 SQL 必須以 SELECT 開頭(伺服器端拒絕 ; 與 DDL 關鍵字)。
步驟 4 — 在 Claude Desktop 註冊
編輯 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS):
{
"mcpServers": {
"company-gateway": {
"command": "npx",
"args": ["tsx", "/absolute/path/mcp-company-gateway/src/index.ts"],
"env": { "DATABASE_URL": "postgresql://mcp_reader@127.0.0.1:5432/app" }
}
}
}
重新啟動 Claude Desktop。在新對話中確認錘子/tools 圖示列出 ping 與 postgres_query_readonly。
步驟 5 — 在 Cursor 註冊
專案或全域 .cursor/mcp.json:
{
"mcpServers": {
"company-gateway": {
"command": "npx",
"args": ["tsx", "/absolute/path/mcp-company-gateway/src/index.ts"]
}
}
}
重新載入 Cursor 視窗。從 Agent 面板測試相同的 ping tool。
步驟 6 — 為遠端主機暴露 SSE(選用)
當 MCP 伺服器跑在遠端 Mac(團隊堡壘機或租用的 M4)時:
# Example: SDK HTTP/SSE transport on port 8787 — bind localhost only unless behind VPN
node dist/sse-server.js --port 8787 --host 127.0.0.1
透過 SSH tunnel 將主機設定指向 url: "http://127.0.0.1:8787/sse":
ssh -L 8787:127.0.0.1:8787 user@remote-mac
絕勿將未認證的 MCP SSE 埠暴露到公網。
步驟 7 — 機密與沙箱化
| 規則 | 原因 |
|---|---|
機密僅放在伺服器 env,絕不放入 tool 參數 | 防止 prompt injection 外洩 |
| 正式與 staging 使用不同伺服器 | 避免跨環境誤查 |
子行程 tools 以 timeout 與 allowlist 限制 | 阻擋 rm -rf 類失誤 |
步驟 8 — 以 MCP Inspector 驗證
npx @modelcontextprotocol/inspector npx tsx src/index.ts
在信任主機 UI 之前,手動呼叫 tools/list 與 tools/call。記錄每次 tool 呼叫的時間戳與 OS 使用者(不含對話內容)以供稽核。
安全與沙箱檢查清單
- 唯讀 DB 角色用於分析 tools;寫入 tools 僅放在開發機上的第二個伺服器
- 每個 tool 都做輸入驗證;拒絕超過 32 KB 的巢狀物件
- 包裝內部 API 時,從伺服器行程設定網路 egress allowlist(iptables 或 macOS 防火牆)
- SaaS OAuth — 在伺服器內實作 token 刷新;對模型僅暴露不透明的
tool_ok
何時在專用 Mac 上跑 MCP
筆電休眠會終止 stdio 伺服器。希望共用 MCP 目錄(8 位工程師共用同一套 Postgres tools)的團隊,常將伺服器跑在常駐 Apple Silicon Mac——本機桌機或小型遠端節點——再透過 SSH tunnel 或 VPN 連線。
這是基礎設施選擇,非 MCP 硬性要求。16 GB M4 可舒適運行 3–5 個輕量 MCP 伺服器行程(各約 80–150 MB)加 Node 工具鏈;若同一台機器還跑 Docker 資料庫,請加 RAM。
疑難排解
錯誤:Connection closed 啟動後立即關閉
現象:Claude Desktop 日誌顯示伺服器 exit code 1。
修復:在 Terminal 執行相同的 command + args;修正缺少的 tsx、錯誤的絕對路徑,或啟動時拋出的例外。MCP 主機不會在 UI 中顯示 stderr。
錯誤:Tool not found / 工具列表為空
現象:設定 JSON 中伺服器名稱拼錯,或主機未重新載入。
修復:以 jq . claude_desktop_config.json 驗證 JSON;完全退出並重新開啟主機 App(非僅關閉視窗)。
錯誤:SSE 404 或 CORS 失敗
現象:遠端 URL 路徑錯誤(/sse vs /mcp)。
修復:對照 SDK HTTP transport 文件中的路徑;以 ssh -L tunnel,設定中使用 127.0.0.1。
建議路徑
| 你的情境 | 建議做法 |
|---|---|
| 獨立開發,DB 在筆電 | stdio + Claude Desktop + Cursor mcp.json |
| 團隊內部 API | 一個閘道 MCP 伺服器,命名空間化 tools |
| DB 在 LAN,筆電在外 | 跳板機上的 MCP 伺服器 + 到 SSE/stdio 的 SSH tunnel |
| 重型 Agent + MCP 同一台機 | 若 Docker DB 與 OpenClaw 扇出共用主機,建議 24 GB RAM |
| 全新專案 | 先以 Inspector + ping tool 起步,再上正式 SQL |
若 X → Y:若資料在另一台機器,把 MCP 伺服器放在資料旁邊再 tunnel 到主機——不要讓 Claude 直接連公網上的資料庫埠。
常見問題
MCP 與 ChatGPT 外掛有何不同?
MCP 是開放、主機無關的 JSON-RPC 協議,有多語言 SDK。外掛是平台專屬格式。MCP 伺服器以你控制的本地或遠端行程執行;主機僅負責啟動或連線。
MySQL 或 SQLite 能否像 PostgreSQL 一樣連接?
可以。伺服器實作(驅動程式與 SQL 方言)不同,但 MCP 介面(list_tools、call_tool)相同。請使用唯讀連線與方言專屬防護(僅允許 SELECT)。
Claude Code 是否支援 MCP 自訂伺服器?
截至 2026 年,Claude Code 與 Cursor 皆支援類似 Claude Desktop 的 MCP 用戶端設定,路徑依產品而異——請查閱 Anthropic 與 Cursor 現行文件中的 mcpServers 位置。你撰寫的伺服器程式碼可在各主機間重用。
一個 MCP 伺服器應暴露幾個工具?
每個伺服器建議維持在約 20 個工具以下,以確保模型路由可靠。目錄成長時拆成 billing-gateway、data-gateway、ops-gateway 等獨立伺服器——各在主機設定中顯示為獨立區塊。
暴露寫入工具(DELETE、deploy)是否安全?
僅在非正式環境伺服器上使用,並需明確的人工確認流程。共用設定優先使用唯讀 tools;寫入操作放在第二個 MCP 伺服器,僅資深開發者在個人設定中啟用。
繼續 MCP 與 Agent 實戰
本文聚焦手綁 MCP 自訂伺服器。若你需要遠端 Mac 常駐環境、Claude Code 替代方案,或 OpenClaw 多智能體編排,可從下列指南接續閱讀。