使用 chezmoi 的 Codex、Claude、Cursor 和 Copilot 的单一 MCP 配置
Source: Dev.to
当你在多台机器上使用多个编码代理时,MCP 配置漂移是不可避免的——除非你将 一个文件设为真相来源。
以下指南展示了一个实用、可复现的设置,适用于:
- Codex
- Claude Code
- Cursor
- GitHub Copilot(包括 VS Code 和 Copilot‑coding‑agent 场景)
核心思路
- 在你的
chezmoi源状态中保留一个规范的 MCP 清单。 - 从该清单生成每个工具的原生配置格式。
- 让
chezmoi管理符号链接 / 模板以及机器特定的值。
所有四个工具都使用相同的概念字段来建模 MCP 服务器:
| 字段 | 含义 |
|---|---|
| Server name | 工具使用的标识符 |
| Transport type | stdio(本地) 与 远程 http/sse |
| Command + args + env | 本地服务器使用 |
| URL + headers / auth | 远程服务器使用 |
不同之处在于 文件位置 和 模式结构。
与其手动编辑四种格式,你只需维护 一个标准化模型,然后将其投射到每个目标文件中。
工具特定存储细节
| 工具 | MCP 存放位置 | 格式 | 备注 |
|---|---|---|---|
| Codex | ~/.codex/config.toml(可选的项目覆盖位于 .codex/config.toml) | TOML | 条目位于 [mcp_servers.] 下 |
| Claude | ~/.claude/settings.json, .claude/settings.json, .claude/settings.local.json(MCP 配置位于 ~/.claude.json(用户/本地范围)和 .mcp.json(项目范围)) | JSON | 将 .mcp.json 视为可在仓库中共享的 MCP 表面;将机密信息保留在仓库之外 |
| Cursor | ~/.cursor/mcp.json(项目:.cursor/mcp.json) | JSON | 使用 mcpServers 数组;支持基于命令和 URL 的 MCP |
| VS Code | 工作区:.vscode/mcp.json;用户配置文件:mcp.json | JSON | 原生 MCP 功能 |
| Copilot coding agent | ~/.copilot/mcp-config.json(或等价路径) | JSON | 与 VS Code MCP 使用相同的模式,并显式包含 type(local、stdio、http、sse) |
标准 MCP 清单
创建一个描述所有服务器的单个 YAML 文件。例如:
# dot_config/mcp/servers.yaml
servers:
github:
transport: http
url: "https://api.githubcopilot.com/mcp/"
headers:
Authorization: "Bearer ${GITHUB_TOKEN}"
filesystem:
transport: stdio
command: "npx"
args: ["-y", "@modelcontextprotocol/server-filesystem", "/Users/lukas"]
env:
NODE_NO_WARNINGS: "1"
提示: 将机密(
${GITHUB_TOKEN})存储在加密/私有文件中(参见下文 安全性)。
目录结构(chezmoi 源状态)
~/.local/share/chezmoi/
├─ .chezmoitemplates/
│ └─ mcp/
│ ├─ codex-config.toml.tmpl
│ ├─ claude-mcp.json.tmpl
│ ├─ cursor-mcp.json.tmpl
│ ├─ vscode-mcp.json.tmpl
│ └─ copilot-mcp-config.json.tmpl
├─ dot_config/
│ └─ mcp/
│ └─ servers.yaml ← canonical model (committed)
├─ dot_codex/
│ └─ config.toml.tmpl
├─ dot_claude/
│ └─ mcp_servers.json.tmpl
├─ dot_cursor/
│ └─ mcp.json.tmpl
├─ dot_vscode/
│ └─ mcp.json.tmpl
└─ dot_copilot/
└─ mcp-config.json.tmpl
.chezmoitemplates目录下的文件是可复用的代码片段。- 以
.tmpl为后缀(或位于.chezmoitemplates中)的文件会被识别为模板。 - 如
.chezmoi.os、.chezmoi.hostname等机器信息可在模板中使用。
示例模板逻辑
{{- /* Render internal server only on work laptop */ -}}
{{- if eq .chezmoi.hostname "work-laptop" -}}
{
"name": "internal",
"type": "http",
"url": "https://internal.example.com/mcp/",
"headers": {
"Authorization": "Bearer ${INTERNAL_TOKEN}"
}
}
{{- end -}}
您还可以根据 .chezmoi.os、.chezmoi.hostname 或任何自定义事实,来变更文件系统根目录、公司专用服务器等。
Source‑State Attributes (chezmoi)
| Prefix | Purpose |
|---|---|
symlink_ | 创建符号链接目标 |
private_ | 将文件标记为私有(限制权限) |
encrypted_ | 使用 age/gpg 加密(适用于令牌、头部) |
Recommended split
- Committed –
servers.yaml(拓扑结构,非机密数据) - Encrypted / private – 每台机器的机密(令牌,密码)
将环境变量引用(${GITHUB_TOKEN})渲染到最终的工具配置中。
转换规则(一次性,在模板中)
| 标准字段 | Codex(TOML) | Claude / Cursor / VS Code / Copilot(JSON) |
|---|---|---|
transport: stdio | [mcp_servers.] 下的 command、args、env | command、args、env、type: "stdio" |
transport: http(或 sse) | [mcp_servers.] 下的 url、headers | url、headers、type: "http"(或 "sse") |
| 可选的每工具键 | 避免,除非绝对必要 | 如有需要,在 servers.yaml 中的 overrides 映射里保留 |
应用配置
# From your chezmoi repo root
chezmoi apply
chezmoi 将会:
- 使用规范的
servers.yaml(以及任何加密/私有文件)渲染每个模板。 - 将生成的文件放置在相应的位置:
~/.codex/config.toml ← MCP block
~/.claude.json or .mcp.json ← projection
~/.cursor/mcp.json
.vscode/mcp.json
~/.copilot/mcp-config.json
切勿直接编辑生成的目标文件 —— 始终修改源模型或模板,然后重新运行
chezmoi apply。
Security & Reproducibility
- 严格的可复现性 – 从模板生成 所有 配置文件;仅对源文件进行编辑。
- 机密处理 – 将令牌保存在
encrypted_文件或外部密钥管理器中;在模板中通过环境变量引用它们。 - 版本控制 – 只提交规范模型(
servers.yaml)和模板文件。
快速参考链接
- chezmoi – templating guide,machine facts,source‑state attributes
- OpenAI Codex MCP – advanced config docs
- Anthropic Claude Code MCP – settings overview
- Cursor MCP – official docs page confirming first‑class MCP support
- VS Code MCP – workspace (
.vscode/mcp.json) and user config - GitHub Copilot MCP – coding‑agent configuration
TL;DR
- 单一的规范 YAML 模型(
servers.yaml)。 - 针对每个工具原生格式的模板。
- chezmoi 负责渲染、符号链接以及机器特定的覆盖(私有/加密)。
结果:在 Codex、Claude、Cursor 和 Copilot 之间实现一致、无漂移的 MCP 配置,而不会被锁定到任何单一供应商的模式。