[FEATURE] Support MCP server configuration in ~/.claude/settings.json (user-managed file)
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
User-scoped MCP servers are stored in ~/.claude.json, a runtime state file also holding session caches, OAuth tokens, and 40+ machine-managed keys. This makes MCP configuration:
- Invisible to dotfiles/config managers — the file cannot be safely symlinked or version-controlled
- Silently lost on Claude Code updates, reinstalls, or state resets
There is no stable, user-editable path for persistent user-scoped MCP configuration.
Proposed Solution
Support mcpServers in ~/.claude/settings.json, the existing user-managed config file. Same schema as .mcp.json, with env var interpolation already supported:
{
"mcpServers": {
"context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "${CONTEXT7_API_KEY}"
}
},
"brave_search": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@brave/brave-search-mcp-server", "--transport", "stdio"],
"env": {
"BRAVE_API_KEY": "${BRAVE_API_KEY}"
}
}
}
}
~/.claude.json could retain backwards compatibility; settings.json takes precedence or merges.
Alternative Solutions
Current workaround: a shell wrapper that re-injects MCP config from a separate file into ~/.claude.json before every invocation — requires jq, breaks on schema changes.
Priority
High - Significant impact on productivity
Feature Category
MCP server integration
Use Case Example
- Engineer manages their environment via a dotfiles repo (symlinks, version control)
- They symlink
~/.claude/settings.jsonfrom the repo - MCP servers defined there are immediately available across all machines and reinstalls
- No shell wrappers, no
jqmerging, no silent config loss
Additional Context
~/.claude/settings.jsonalready supports env var interpolation — the infrastructure is in place- Comparable tools use dedicated, stable config files: Goose (
~/.config/goose/), Kiro (~/.kiro/agents/) - Related: #5024 (
~/.claude.jsonbloat), #11085 (persistent MCP enable/disable)
This issue has 8 comments on GitHub. Read the full discussion on GitHub ↗