使用说明
mcp-mac设置
修复通过以下方式管理节点时启动stdio MCP服务器的问题 非易失性存储器 或 fnm --适用于VS Code、Cursor、Claude Code、Claude Desktop以及任何阅读该标准的主机
{"mcpServers": { ... }}JSON配置。
问题
GUI启动的应用程序(VS Code、Cursor、Claude Desktop等)继承了它们的环境 launchd,而不是从交互式shell中。这意味着 ~/.zshrc / ~/.bash_profile 从未获得源代码,并且缺少在Node版本管理器(nvm、fnm)下安装的任何工具 PATH.
当其中一个应用程序试图生成MCP服务器时,它 exec()直接发出命令,然后返回 spawn pnpm ENOENT, command not found,或者——如果你用绝对路径“修复”了它——在升级Node后,绝对路径停止存在,就会出现无声中断。
为什么这通常很难解决
- macOS有意将GUI应用程序环境保持在最低限度,以实现可重复性。
- VS代码 MCP服务器文档 注意这一要求,但不要为版本管理器用户提供修复。
- 绝对路径
pnpm/node/npx每次切换节点版本时都会更改(~/.nvm/versions/node/v20.x.x/bin/pnpm→~/.nvm/versions/node/v22.x.x/bin/pnpm). - 一次硬编码会过时。每次切换时,您都需要一个脚本来重新解析实际路径。
mcp-mac-setup 这样做:
- 检测您的节点版本管理器(fnm、nvm或PNPM_HOME/
which回退)。 - 解决 绝对的 活动路径
node,npx,pnpm,npm二进制文件。 - 重写每一个
stdio目标配置中的MCP服务器条目,以便:command是指向该服务器的正确二进制文件的绝对路径env.PATH用活动代码硬编码bin/第一env.PNPM_HOME/env.NVM_DIR/env.NVM_BIN在相关时设置
支持的主机
任何读取的主机 {"mcpServers": { ... }} JSON。包括:
| 主机 | 用户级配置 | 工作区/项目配置 |
|---|---|---|
| VS代码 | ~/Library/Application Support/Code/User/mcp.json |
.vscode/mcp.json |
| 游标 | (通过项目根) | ./.mcp.json |
| 克劳德代码 | ~/.claude.json |
./.mcp.json |
| 克劳德桌面 | ~/Library/Application Support/Claude/claude_desktop_config.json |
(无--仅限用户级别) |
通过 --target <path> 以特定文件为目标。
快速开始
# rewrite every stdio server in the user-level mcp.json with absolute paths
pnpm dlx @kylebrodeur/mcp-mac-setup --binary auto
# verify everything matches the current Node version (CI-friendly)
pnpm dlx @kylebrodeur/mcp-mac-setup --check
# then reload the host
# VS Code: Cmd+Shift+P → Developer: Reload Window
# Claude Code: restart MCP servers
# Cursor: restart MCP servers
为什么 --binary auto?
不同的MCP服务器使用不同的启动器:
{
"mcpServers": {
"playwright": { "command": "pnpm", "args": ["dlx", "@playwright/mcp"] },
"codegraph": { "command": "npx", "args": ["-y", "@colbymchenry/codegraph", "serve", "--mcp"] },
"custom-shim": { "command": "node", "args": ["./bin/my-mcp-server.js"] }
}
}
--binary auto 重写每个服务器的 command 根据服务器实际使用的内容将匹配的绝对路径添加到解析的Node-bin目录下。 --binary pnpm (v1.0默认)仍然有效,并强制每个服务器通过 pnpm.
CLI选项
| 标志 | 描述 |
|---|---|
--binary <mode> |
auto (每台服务器) |
--server <name> |
仅更新单个命名服务器 |
--target <path> |
写信给 <path> 而不是用户级mcp.json |
--workspace <path> |
读取工作区 .vscode/mcp.json 从 <path> |
--prefer <v> |
检测偏好: auto |
--check |
如果配置与当前运行时匹配,则退出0;1如果需要重写 |
--install-task |
写a .vscode/tasks.json 进入项目 |
--task-dir <path> |
与 --install-task:目标 <path>/.vscode |
例子
# Fix everything in the user-level VS Code mcp.json
pnpm dlx @kylebrodeur/mcp-mac-setup --binary auto
# Fix a single server in a project-root .mcp.json
pnpm dlx @kylebrodeur/mcp-mac-setup --binary auto --server codegraph --target ./.mcp.json
# Force every server through pnpm (v1.0 behavior)
pnpm dlx @kylebrodeur/mcp-mac-setup --binary pnpm
# CI guard: fail the build if the config is stale
pnpm dlx @kylebrodeur/mcp-mac-setup --binary auto --check
# Use fnm even if both nvm and fnm are installed
pnpm dlx @kylebrodeur/mcp-mac-setup --binary auto --prefer fnm
何时重新运行
重新运行 mcp-mac-setup 之后:
- 升级你的Node版本(
nvm use/fnm use) - 切换节点版本管理器
- 添加或删除依赖于的MCP服务器
node/npx/pnpm/npm - 将节点管理的二进制文件移动到新的绝对路径的任何更改
什么被保存下来
该脚本只重写需要更改的字段:
- ✅ 你自己写的绝对路径 (例如。
/opt/custom/binary) → 保留命令;仅env.PATH被注入,以便服务器可以找到自己的助手 - ✅ HTTP/SSE服务器 (
type: "http"或type: "sse") → 完全跳过 - ✅
args数组 → 不变(画廊“exec”→ “dlx”拼写错误修复仍然适用于--binary pnpm) - ✅ 用户定义的环境变量 → 保存,仅
PATH/PNPM_HOME/NVM_*已合并到
VS代码任务
在任何项目中安装一键任务:
pnpm dlx @kylebrodeur/mcp-mac-setup --install-task
然后: Cmd+Shift+P → Tasks: Run Task → Fix MCP runtime path.
回购自己的 .vscode/tasks.json 为贡献者提供相同的任务。
检测优先级
- fnm —
~/.local/share/fnm/aliases/default/bin/ - 非易失性存储器 --阅读
~/.nvm/alias/default(活动版本) - PNPM_主页/
which pnpm--最后手段回退(警告;路径可能不稳定)
用以下方式覆盖优先级 --prefer fnm 或 --prefer nvm.
需求
- macOS或Linux
- 节点≥18
- nvm或fnm管理您的节点安装(PNPM_HOME回退也有效)
贡献
欢迎在 github/kylebrodeur/mcp-mac安装程序.
在本地运行测试套件:
pnpm test