一、MCP 协议概览:AI 时代的"通用工具协议"
这是一段普通正文段落,演示 strong 加粗、em 斜体、b 标签粗体、行内 mcp-server 代码、键盘组合键 Cmd+Shift+P、已废弃的 JSON-RPC 2.0 直调,以及 需要高亮的核心结论。若你在 vmzig 控制台 已租用 Mac mini M4 节点,可按本文步骤直接上手隔离部署。
Model Context Protocol(MCP)由 Anthropic 于 2024 年底发布,旨在解决 AI Host(如 Cursor、Claude Desktop)与外部工具之间的 N×M 对接困境:原本每对 Host-Tool 组合都需各写一套集成,MCP 将其收敛为一层标准协议。2026 年已被 OpenAI、Google、微软等主流生态广泛采纳。
架构师提示: MCP 的核心价值不在于"又一个 API 标准",而在于它把 工具发现(Discovery)、调用(Invocation)、上下文注入(Context Injection) 三件事标准化了。把 MCP Server 跑在独立远程 Mac 上,可避免污染本地开发环境与密钥。
二、Host-Client-Server 三层模型
MCP 三角色详解
各角色职责
| 角色 | 职责 | 典型产品 |
|---|---|---|
| MCP Host | 发起工具发现与调用的 AI 应用 | Cursor、Claude Desktop |
| MCP Client | Host 内的协议适配层,维护与 Server 的 1:1 连接 | Host 内置 |
| MCP Server | 暴露工具、资源与提示词的独立进程 | filesystem、git、sqlite 等 |
最小权限原则
远程节点应遵循最小权限:每个 MCP 项目使用独立 Unix 用户,SSH 密钥按项目隔离,日志写入独立目录。生产环境绝对不允许以 root 账户运行 MCP Server。
工具清单(ul)
- 使用 vmzig Mac mini M4 作为隔离沙箱(24GB 独占物理机)
- 通过 SSH 端口转发暴露 MCP 端口,外部不可直接访问
- 在
~/.cursor/mcp.json中注册 Server 端点 - 定期轮换 SSH 密钥(建议每 90 天一次)
部署步骤(ol)
- 在 vmzig 控制台租用 Mac mini M4 节点并获取 SSH 凭证
- 创建专用用户
mcp-isolated - 安装 Node.js LTS 与 MCP SDK(
npm install -g @modelcontextprotocol/sdk) - 编写
server.ts,声明工具定义 - 启动 Server 并用
mcp-cli验证工具列表
三、本地与远程 Mac MCP 对比
场景对比表格
| 维度 | 本地 MCP | 远程 Mac MCP(vmzig M4) |
|---|---|---|
| 隔离性 | 低,共享主账户 | 高,独立 Unix 用户 |
| 算力上限 | 受本机负载限制 | M4 24GB 独占物理机 |
| 密钥安全 | 易与日常开发混用 | 按项目隔离 SSH 密钥 |
| 多 Agent 并行 | 资源竞争严重 | 多 Session SSH,互不干扰 |
| 适用场景 | 快速原型验证 | 团队合规、生产级部署 |
四、远程部署实战:SSH 隔离配置
代码块:创建隔离用户
# 在远程 Mac 上创建隔离用户并配置目录权限
sudo sysadminctl -addUser mcp-isolated -password -
sudo mkdir -p /Users/mcp-isolated/mcp-workspace
sudo chown mcp-isolated:staff /Users/mcp-isolated/mcp-workspace
代码块:启动 MCP Server
// server.ts — 以 Filesystem MCP Server 为例
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server({ name: "vmzig-fs", version: "1.0.0" }, {
capabilities: { tools: {} }
});
// 工具定义:列出目录
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [{ name: "list_dir", description: "列出目录内容", inputSchema: { type: "object" } }]
}));
const transport = new StdioServerTransport();
await server.connect(transport);
定义列表(dl):常用环境变量
- MCP_HOST
- MCP Server 监听地址,默认
127.0.0.1,远程部署时保持 localhost 并通过 SSH 转发 - MCP_PORT
- 监听端口,默认
3000,可按项目自定义以避免冲突 - NODE_ENV
- 运行环境,生产部署设为
production,开启性能优化与错误上报 - SSH_KEY_PATH
- SSH 私钥路径,建议存放于
~/.ssh/project-name_ed25519
折叠块(details):SSH 端口转发命令
点击展开:SSH 端口转发完整命令
将远程 Mac 的 3000 端口映射到本机,供 Cursor MCP Client 连接:# 建立 SSH 隧道(后台运行)
ssh -N -f -L 3000:127.0.0.1:3000 \
-i ~/.ssh/vmzig_ed25519 \
mcp-isolated@your-vmzig-node.com
# 验证隧道状态
lsof -i :3000
断开隧道:
pkill -f "ssh -N -f -L 3000"
五、图片与媒体展示
上图展示了 vmzig 节点的物理形态。每台均为 独立 Mac mini M4,不与其他用户共享任何资源。
六、引用与分隔示例
安全警告: 永远不要把 MCP Server 直接暴露到公网(如设置
MCP_HOST=0.0.0.0)。SSH 端口转发是最安全的远程访问方式——只有持有私钥的用户才能建立隧道。
七、嵌套列表与混合元素
完成部署后,按以下清单验收——嵌套列表中可混用 code 与 强调:
- 网络层
- 端口可达:
curl http://localhost:3000/health返回{"status":"ok"} - 防火墙规则:Ctrl+C 停止后端口即关闭
- 工具层
- 工具列表非空:
mcp-cli list-tools --server 3000 - 工具调用成功:返回预期数据格式
- 日志层
- 无
EPERM权限错误 - 日志路径独立,不混入主账户日志
有序验收步骤:
- 启动 MCP Server
- 建立 SSH 隧道
- 在 Cursor 的
mcp.json注册端点 - 重启 Cursor,确认工具出现在工具栏
- 执行一次实际工具调用,查看日志输出
总结: 本探针文章刻意覆盖 BLOG_WRITER_CHECKLIST §1 所需的全部 Prose 裸标签——h2~h5、p、strong/b/em/a/code/kbd/del/mark、ul/ol/li/dl/dt/dd、pre/pre+code、table/thead/tbody/tr/th/td、blockquote、hr、img/figure/figcaption、details/summary——为 CSS 选择器验收提供完整覆盖面。在 vmzig M4 远程节点上隔离运行 MCP Server,是兼顾安全与性能的最佳实践。
常见问题
探针文章为什么要覆盖全部 Prose 元素?
Markdown 渲染产物均为裸 HTML 标签,CSS 选择器必须能直接命中 h2、table、kbd 等元素,否则未来文章会出现样式缺失。
在 vmzig 远程 Mac 上如何隔离 MCP Server?
推荐为每个 MCP 项目创建独立 Unix 用户,通过 SSH 端口转发连接,避免与主开发环境共享密钥与文件权限。