git clone https://github.com/ComeOnOliver/skillshub
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/libukai/awesome-agent-skills/mcp-config" ~/.claude/skills/comeonoliver-skillshub-mcp-config && rm -rf "$T"
skills/libukai/awesome-agent-skills/mcp-config/SKILL.mdMCP Configuration Management
Overview
This skill helps you properly configure MCP servers in Claude Code. It ensures MCP servers are configured in the right location and scope to avoid unnecessary context pollution across all sessions.
Critical Concepts
Two Valid Configuration Locations
ONLY these two locations are valid for MCP configuration:
-
User/Local scope:
~/.claude.json- In the
field (global for all projects)mcpServers - Or under specific project paths (project-specific in user config)
- In the
-
Project scope:
in your project root.mcp.json- Checked into source control
- Only affects the current project
⚠️ Important Rules
- DO NOT configure MCPs in
global~/.claude.json
- This loads MCPs in ALL sessions and wastes context spacemcpServers - DO configure MCPs in project-level
- This only loads MCPs when working in that specific project.mcp.json - Avoid
for MCP control - Thesettings.json
field can override disabled settings and cause confusionpermissions.allow
When to Use This Skill
Invoke this skill when:
- Adding a new MCP server to a project
- Removing/disabling an MCP server
- MCP servers are loading when they shouldn't be
- Need to clean up MCP configuration
- Want to understand why an MCP is or isn't loading
Quick Start
| Task | Example |
|---|---|
| Add MCP to current project | "添加 pencil MCP 到当前项目" |
| Remove MCP from all projects | "从所有项目中移除 shadcn-studio-mcp" |
| Check MCP configuration | "检查当前的 MCP 配置" |
| Clean up global MCPs | "清理全局 MCP 配置" |
Configuration Workflow
1. Check Current MCP Status
First, understand what MCPs are currently loaded:
# Check user-level configuration cat ~/.claude.json | grep -A 20 '"mcpServers"' | head -25 # Check project-level configuration cat .mcp.json 2>/dev/null || echo "No project .mcp.json found" # Check settings.json (should NOT have MCP config) cat ~/.claude/settings.json | grep -A 5 '"permissions"'
2. Add MCP to Current Project
Best Practice: Always add MCPs at project level
Create or edit
.mcp.json in your project root:
{ "mcpServers": { "server-name": { "type": "stdio", "command": "npx", "args": ["-y", "package-name"], "env": { "API_KEY": "your-key-here" } } } }
3. Remove MCP Configuration
From global config (
~/.claude.json):
import json with open('/Users/likai/.claude.json', 'r') as f: data = json.load(f) # Remove from global mcpServers if 'mcpServers' in data and 'server-name' in data['mcpServers']: del data['mcpServers']['server-name'] print(f"Removed server-name from global config") with open('/Users/likai/.claude.json', 'w') as f: json.dump(data, f, indent=2)
From project config (
.mcp.json):
import json try: with open('.mcp.json', 'r') as f: data = json.load(f) if 'mcpServers' in data and 'server-name' in data['mcpServers']: del data['mcpServers']['server-name'] with open('.mcp.json', 'w') as f: json.dump(data, f, indent=2) print("Removed server-name from project config") except FileNotFoundError: print("No .mcp.json found in project")
4. Clean Up settings.json
Remove any MCP-related permissions that might override configuration:
import json with open('/Users/likai/.claude/settings.json', 'r') as f: data = json.load(f) # Remove permissions block if it contains MCP references if 'permissions' in data: if 'allow' in data['permissions']: data['permissions']['allow'] = [ item for item in data['permissions']['allow'] if not item.startswith('mcp__') ] if not data['permissions']['allow']: del data['permissions'] with open('/Users/likai/.claude/settings.json', 'w') as f: json.dump(data, f, indent=2)
Common MCP Servers
Pencil (Design Tool)
{ "mcpServers": { "pencil": { "command": "/Users/likai/.vscode/extensions/highagency.pencildev-0.6.29/out/mcp-server-darwin-arm64", "args": ["--app", "visual_studio_code"], "env": {}, "type": "stdio" } } }
Shadcn Studio
{ "mcpServers": { "shadcn-studio-mcp": { "type": "stdio", "command": "npx", "args": [ "-y", "shadcn-studio-mcp", "API_KEY=your-api-key", "EMAIL=your-email" ], "env": {} } } }
Unsplash
{ "mcpServers": { "unsplash": { "type": "stdio", "command": "npx", "args": ["-y", "@microlee666/unsplash-mcp-server"], "env": { "UNSPLASH_ACCESS_KEY": "your-access-key" } } } }
Troubleshooting
Problem: MCP loads in all sessions
Cause: MCP is configured in
~/.claude.json global mcpServers
Solution:
- Remove from
global config~/.claude.json - Add to project-level
instead.mcp.json - Restart Claude Code session
Problem: MCP won't disable despite "disabled": true
"disabled": trueCause:
permissions.allow in settings.json overrides disabled setting
Solution:
- Remove MCP from
permissionssettings.json - Remove the entire
block if emptypermissions - Restart Claude Code session
Problem: MCP configuration conflicts
Cause: MCP configured in multiple locations with different settings
Solution:
- Check all three locations:
,~/.claude.json
,.mcp.jsonsettings.json - Keep configuration in ONE place only (prefer
).mcp.json - Remove from other locations
Problem: Can't find where MCP is configured
Diagnostic commands:
# Search all possible locations echo "=== Global Config ===" grep -A 10 '"mcpServers"' ~/.claude.json | head -15 echo "=== Project Config ===" cat .mcp.json 2>/dev/null || echo "No .mcp.json" echo "=== Settings ===" grep -A 5 '"permissions"' ~/.claude/settings.json 2>/dev/null || echo "No permissions" echo "=== Project Settings ===" grep -A 5 '"permissions"' .claude/settings.json 2>/dev/null || echo "No project settings"
Best Practices
- ✅ Always use project-level
for project-specific MCPs.mcp.json - ✅ Keep
global~/.claude.json
empty to avoid context pollutionmcpServers - ✅ Avoid MCP configuration in
- use it only for permissions if neededsettings.json - ✅ Restart Claude Code after configuration changes to ensure they take effect
- ✅ Check into source control - Commit
so team members get the same MCPs.mcp.json - ❌ Never use
- Just remove the MCP configuration entirelydisabled: true - ❌ Don't mix configuration locations - Pick one place and stick to it
Configuration Priority
When Claude Code loads MCPs, it follows this priority:
- Project-level
(highest priority).mcp.json - User-level
project-specific config~/.claude.json - User-level
global~/.claude.jsonmcpServers
permissions can override all of the abovesettings.json
Recommendation: Use only project-level
.mcp.json to avoid confusion.
Example: Complete Cleanup and Reconfiguration
# 1. Clean up global config python3 << 'EOF' import json with open('/Users/likai/.claude.json', 'r') as f: data = json.load(f) data['mcpServers'] = {} with open('/Users/likai/.claude.json', 'w') as f: json.dump(data, f, indent=2) print("✓ Cleaned global mcpServers") EOF # 2. Clean up settings.json python3 << 'EOF' import json with open('/Users/likai/.claude/settings.json', 'r') as f: data = json.load(f) if 'permissions' in data: del data['permissions'] with open('/Users/likai/.claude/settings.json', 'w') as f: json.dump(data, f, indent=2) print("✓ Cleaned settings.json permissions") EOF # 3. Create project-level config cat > .mcp.json << 'EOF' { "mcpServers": { "your-mcp-name": { "type": "stdio", "command": "your-command", "args": [], "env": {} } } } EOF echo "✓ Created project .mcp.json" # 4. Restart Claude Code echo "⚠️ Please restart Claude Code for changes to take effect"
Summary
- Two valid locations:
and~/.claude.json.mcp.json - Best practice: Use project-level
only.mcp.json - Avoid: Global
inmcpServers
(wastes context)~/.claude.json - Avoid: MCP config in
(causes conflicts)settings.json - Always restart Claude Code after configuration changes