MCP 架構三角色 / stdio vs SSE / 環境設定 / 工具註冊與權限 / launchd 守護 / SSH 通道 / SSE 多客戶端 / 生產穩定性 / 常見問題
如果你最近在把玩 Cursor、Claude Desktop 或 OpenClaw,遲早會碰到同一個問題:MCP Server 跑在哪台機器上更合適?跑在日常桌面上,Shell 權限和檔案系統直接暴露給 Agent;跑在遠端 Linux 上,工具鏈和 macOS 生態不對齊。雲端 Mac mini 正好卡在這兩者的中間——既是 Unix 環境,又有快照隔離,還能跑原生 macOS 工具。這篇指南會從最基礎的 stdio 子程序講起,一步步走到 SSE 多客戶端、launchd 守護,以及真正能 7×24 運行的生產配置。
MCP 架構三角色:Host、Client、Server
在動手之前,先把三個角色的職責說清楚:
- Host——承載使用者介面的應用,例如 Cursor、Claude Desktop 或 OpenClaw。Host 管理一個或多個 Client 的生命週期。
- Client——運行在 Host 內部的協定適配層,負責發現 Server、維護連線並轉發工具呼叫。
- Server——獨立運行的程序,透過標準化協定對外暴露工具(Tools)、資源(Resources) 和提示詞(Prompts)。
Host (Cursor)
└─ Client
└─ [stdio / SSE] ──── Server (MCP 工具程序)
設計原則:Server 程序應以最小權限運行——只註冊當前任務需要的工具,避免「萬能 Agent」一把梭帶來的安全風險。
傳輸層選擇:stdio vs SSE vs WebSocket
| 傳輸方式 | 典型場景 | 雲端 Mac 適配 |
|---|---|---|
| stdio | 本地子程序、SSH 遠端命令 | ✅ 推薦:無公網埠,最簡配置 |
| SSE | 瀏覽器客戶端、多 Host 共享 | 需反向代理 + TLS + 鑑權 |
| WebSocket | 長連線 Gateway 層 | OpenClaw 等 Gateway 用 |
舊方案 每個整合寫一套 REST 膠水層 已被 MCP 統一工具發現協定 取代——Host 啟動時自動拉取 Server 的 tools/list,不必為每個整合寫定制 HTTP 客戶端。這一轉變讓工具整合從「每次從零寫」變成「聲明即用」,個人開發者也能在一個下午接入十幾個 MCP 工具。
傳輸層術語速查
- stdio 傳輸
- Host 以子程序方式啟動 Server,透過 stdin/stdout 交換 JSON-RPC 訊息。程序隨 Host 退出而退出,天然隔離,無網路暴露面。
- SSE(Server-Sent Events)
- Server 監聽 HTTP 埠,Client 透過長連線接收事件推送。支援多客戶端同時連線,但需要配置網路安全。
- 工具發現(tools/list)
- MCP 協定的握手階段:Host 啟動時向 Server 請求 tools/list,獲取工具名稱、參數 schema 和描述,之後按需呼叫對應工具。
- 人在回路(HITL)
- Human In The Loop,讓工具呼叫在敏感操作前暫停等待人工確認,而不是完全交給模型自主決策。
第一步:準備雲端 Mac 環境
選擇節點
延遲與地區
日本、新加坡節點到 GitHub、npm 的延遲通常在 20–60 ms,適合頻繁拉依賴或呼叫海外 API 的 MCP 工具。
記憶體與推理
若要同時跑 MCP Server + 本地小模型(Ollama 7B 級別),建議選 M4 + 16GB 起步。
推薦配置對照表
| 場景 | 最低配置 | 推薦配置 |
|---|---|---|
| 單個 MCP Server(純工具呼叫) | M4 + 8GB | M4 + 8GB |
| MCP + 本地 7B 模型 | M4 + 16GB | M4 + 24GB |
| 多 MCP Server + CI 並行建置 | M4 + 24GB | M4 Pro + 24GB |
初始化環境
# 安裝 Homebrew(若未預裝)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安裝 Node.js
brew install node@20
echo 'export PATH="/opt/homebrew/opt/node@20/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc
# 驗證
node -v && npm -v
第二步:部署 filesystem MCP Server(stdio 模式)
# 啟動 filesystem Server,限定工作區為 /Users/agent/workspace
npx -y @modelcontextprotocol/server-filesystem /Users/agent/workspace
在 Cursor 的 MCP 配置(~/.cursor/mcp.json)裡加入:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/agent/workspace"]
}
}
}
配置要點:按 Ctrl + C 可終止本地 stdio Server;遠端節點請用 launchd 管理程序生命週期(見第四步)。
第三步:用 SSH 通道連線遠端 Cursor
# 把遠端 3000 埠映射到本地(SSE 模式用)
ssh -L 3000:127.0.0.1:3000 user@cloud-mac.zekvps.com
# 直接 SSH 到遠端機器啟動 Server(stdio 模式)
ssh user@cloud-mac.zekvps.com "npx -y @modelcontextprotocol/server-filesystem /workspace"
對於長期穩定運行的場景,推薦用 Tailscale 建立 Mesh VPN,替代手動 SSH 埠映射。
第四步:launchd 守護程式,實現 7×24 運行
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.zekvps.mcp-filesystem</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/opt/node@20/bin/npx</string>
<string>-y</string>
<string>@modelcontextprotocol/server-filesystem</string>
<string>/Users/agent/workspace</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
launchctl load ~/Library/LaunchAgents/com.zekvps.mcp-filesystem.plist
launchctl start com.zekvps.mcp-filesystem
launchctl list | grep mcp
深入了解:launchd 與 systemd 的關鍵差異
| 對比項 | launchd (macOS) | systemd (Linux) |
|---|---|---|
| 設定檔格式 | XML plist | INI-style unit |
| 使用者層服務路徑 | ~/Library/LaunchAgents/ | ~/.config/systemd/user/ |
| 載入命令 | launchctl load | systemctl --user enable |
| 日誌查看 | log stream / 檔案 | journalctl |
在 Mac 上絕對不要安裝 systemd 相關工具來管理 MCP 程序。
安全邊界與權限管控
- 最小目錄權限——只給當前任務需要的目錄,別把
~或/整個放進去。 - 環境變數注入密鑰——API Key 走
env注入,別寫進 plist 然後提交 Git。 - SSE 埠鑑權——若開放 SSE,至少加 Bearer Token + 反向代理 + TLS。
- 快照回滾——出問題恢復快照比重裝主力機快一個數量級。
參考:MCP 官方安全指南建議每個 Server 只註冊當前任務需要的最小工具集,並在工具描述裡明確說明副作用。
小結:如何選擇部署路徑
| 場景 | 推薦部署 |
|---|---|
| 個人實驗、單一 Host | 本地 stdio(或 SSH 到雲端 Mac) |
| 7×24 個人助手、防斷線 | 雲端 Mac + launchd 守護 |
| 團隊共享工具、多 Host | 雲端 Mac + SSE + 反向代理 |
| 高安全合規要求 | 雲端 Mac + Tailscale + 稽核日誌 |
詳見站內 OpenClaw 專欄,裡面有 OpenClaw 與 MCP Server 協同部署的實踐索引。
用雲端 Mac mini 隔離 MCP 實驗與生產環境
M4 獨享節點,按天租用,SSH 開箱即用
新加坡 · 日本 · 韓國 · 香港 · 美國節點可選
若你正準備把 MCP 或 Agent 從 Demo 推到日常運轉,先固定一台可快照的雲 Mac 節點往往比換第五個框架更有效。 查看 ZekVPS 雲端 Mac mini 套餐 — 把實驗環境和生產桌面拆開,部署會踏實很多。