From 36ee61f8110c66b264892bdc630b1db48c4284f5 Mon Sep 17 00:00:00 2001 From: Michael Dieringer <65093775+MichaelDieringer@users.noreply.github.com> Date: Wed, 1 Jul 2026 09:36:12 +0200 Subject: [PATCH] Foreslaa regel: Shared MCP configuration must not hardcode developer-specific paths --- ...onfig-must-not-hardcode-developer-paths.md | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 custom/knowledge/mcp/mcp-config-must-not-hardcode-developer-paths.md diff --git a/custom/knowledge/mcp/mcp-config-must-not-hardcode-developer-paths.md b/custom/knowledge/mcp/mcp-config-must-not-hardcode-developer-paths.md new file mode 100644 index 0000000..e18af76 --- /dev/null +++ b/custom/knowledge/mcp/mcp-config-must-not-hardcode-developer-paths.md @@ -0,0 +1,67 @@ +--- +rule: mcp-config-must-not-hardcode-developer-paths +title: Shared MCP configuration must not hardcode developer-specific paths +category: mcp +severity: error +version: 1 +--- + +# Shared MCP configuration must not hardcode developer-specific paths + +## Rule + +A git-committed `.mcp.json` must not hardcode an absolute path that is specific to +one developer's machine — a repository clone location on a particular drive or +folder, or a home-directory path containing a specific username. Any such path +must be resolved via Claude Code's built-in environment-variable expansion instead. + +## Why + +`.mcp.json` is shared and committed — every developer who clones the repository +inherits the exact same file. A path baked in for the machine of whoever wrote the +file (e.g. `C:\Curabis\ProjectX\...` or `C:\Users\\.claude\bridge.js`) +works only for that one person. Every other developer's MCP servers silently fail +to start, and the failure looks like a runtime problem rather than a configuration +one — wasting time in the wrong place (see `mcp-server-must-be-verified-at-session-start.md`, +which detects the symptom but not this root cause). + +## How to fix + +Claude Code expands two forms of variable inside `.mcp.json`'s `command`, `args`, +`env`, `url`, and `headers` fields: + +- `${VAR}` — any OS environment variable, e.g. `${USERPROFILE}` on Windows resolves + to the current user's home directory. +- `${CLAUDE_PROJECT_DIR:-default}` — the project root directory that Claude Code + itself sets when it spawns a stdio MCP server. The `:-default` fallback is + required because the variable is only available in the spawned process's + environment, not at config-parse time. + +Example: + +```json +{ + "mcpServers": { + "example": { + "command": "powershell", + "args": ["-File", "${CLAUDE_PROJECT_DIR:-.}\\.vscode\\launch-server.ps1"] + }, + "bridge": { + "command": "node", + "args": ["${USERPROFILE}\\.claude\\bridge.js"] + } + } +} +``` + +## What NOT to do + +- Do not hardcode a drive letter + folder path that reflects one developer's clone + location. +- Do not hardcode `C:\Users\\...` — every developer has a different username. +- Do not "fix it locally" by editing the committed file to match your own machine — + that only moves the breakage to the next developer who pulls. + +## Applies to + +All CURABIS projects that configure MCP servers in `.mcp.json`.