Codex, Claude, Cursor, 및 Copilot을 위한 하나의 MCP 구성 (chezmoi와 함께)
Source: Dev.to
여러 대의 머신에서 여러 코딩 에이전트를 사용할 때, MCP 구성 드리프트는 불가피합니다—하나의 파일을 진실의 원천으로 만들지 않는 한 말이죠.
다음 가이드는 실용적이고 재현 가능한 설정을 보여줍니다:
- Codex
- Claude Code
- Cursor
- GitHub Copilot (VS Code 및 Copilot‑coding‑agent 시나리오 포함)
Core Idea
- 하나의 정규 MCP 매니페스트를
chezmoi소스 상태에 유지합니다. - 그 매니페스트에서 각 도구의 고유 설정 형식을 생성합니다.
chezmoi가 심볼릭 링크 / 템플릿 및 머신‑별 값을 관리하도록 합니다.
네 개의 도구 모두 MCP 서버를 동일한 개념적 필드로 모델링합니다:
| Field | Meaning |
|---|---|
| Server name | 도구에서 사용하는 식별자 |
| Transport type | stdio(로컬) vs. 원격 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"
Tip: 비밀(
${GITHUB_TOKEN})은 암호화된/비공개 파일에 저장하세요 (Security 아래 참고).
디렉터리 레이아웃 (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 속성 (chezmoi)
| Prefix | Purpose |
|---|---|
symlink_ | 심볼릭 링크 대상 생성 |
private_ | 파일을 비공개로 표시 (권한 제한) |
encrypted_ | age/gpg 로 암호화 (토큰, 헤더에 이상적) |
추천 분할
- Committed –
servers.yaml(토폴로지, 비밀이 아닌 데이터) - Encrypted / private – 머신별 비밀 (토큰, 비밀번호)
최종 도구 구성에 환경 변수 참조 (${GITHUB_TOKEN}) 를 렌더링합니다.
Source: …
변환 규칙 (한 번, 템플릿에서)
| 표준 필드 | Codex (TOML) | Claude / Cursor / VS Code / Copilot (JSON) |
|---|---|---|
transport: stdio | command, args, env 아래 [mcp_servers.] | command, args, env, type: "stdio" |
transport: http (or sse) | url, headers 아래 [mcp_servers.] | url, headers, type: "http" (or "sse") |
| 툴별 선택적 키 | 피하십시오 unless absolutely required | 필요에 따라 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를 다시 실행하세요.
보안 및 재현성
- 엄격한 재현성 – 템플릿에서 모든 구성 파일을 생성하고, 소스‑전용 편집만 수행합니다.
- 비밀 관리 – 토큰을
encrypted_파일이나 외부 비밀 관리자를 통해 보관하고, 템플릿에서는 환경 변수로 참조합니다. - 버전 관리 – 정식 모델(
servers.yaml)과 템플릿 파일만 커밋합니다.
Quick Reference Links
- chezmoi – templating guide, machine facts, source‑state attributes
- OpenAI Codex MCP – 고급 설정 문서
- Anthropic Claude Code MCP – 설정 개요
- Cursor MCP – 1급 MCP 지원을 확인하는 공식 문서 페이지
- VS Code MCP – 워크스페이스(
.vscode/mcp.json) 및 사용자 설정 - GitHub Copilot MCP – 코딩‑에이전트 구성
TL;DR
- 하나의 정규 YAML 모델 (
servers.yaml). - 각 도구의 고유 형식에 대한 템플릿.
- chezmoi가 렌더링, 심볼릭 링크, 그리고 머신별 오버라이드(비공개/암호화)를 관리합니다.
결과: Codex, Claude, Cursor, 그리고 Copilot 전반에 걸쳐 일관되고 드리프트가 없는 MCP 구성을 제공하며, 특정 벤더 스키마에 얽매이지 않습니다.