MCP server management for Claude Desktop. Profile-aware - reads MCP server inventory from profile.mcp.servers{} and config path from profile.paths.claudeConfig. Use when: installing MCP servers, configuring Claude Desktop, troubleshooting MCP issues.
This skill inherits all available tools. When active, it can use any tool Claude has access to.
README.mdreferences/CLI_TOOLS.mdreferences/CONFIGURATION.mdreferences/INSTALLATION.mdreferences/REGISTRY.mdreferences/TROUBLESHOOTING.mdscripts/add-mcp-server.ps1scripts/backup-config.ps1scripts/diagnose-mcp.ps1templates/claude-desktop-config.jsontemplates/mcp-registry.jsontemplates/win-cli-config.jsonRequires: Node.js 18+, Claude Desktop
MCP config and servers tracked in profile:
# Config file location
$AdminProfile.mcp.configFile
# "C:/Users/Owner/AppData/Roaming/Claude/claude_desktop_config.json"
# Installed servers
$AdminProfile.mcp.servers | Format-Table
jq '.mcp' "$ADMIN_PROFILE_PATH"
$AdminProfile.mcp.servers.PSObject.Properties | ForEach-Object {
[PSCustomObject]@{
Name = $_.Name
Package = $_.Value.package
Status = $_.Value.status
Tools = $_.Value.toolCount
}
}
Example output:
Name Package Status Tools
---- ------- ------ -----
win-cli D:/mcp/win-cli-mcp-server working 12
coolify @pashvc/mcp-server-coolify working 50
From profile:
$configPath = $AdminProfile.mcp.configFile
# Or
$configPath = $AdminProfile.paths.claudeConfig
# Read current config
$config = Get-Content $configPath | ConvertFrom-Json
$config.mcpServers
$configPath = $AdminProfile.mcp.configFile
$backup = "$configPath.backup.$(Get-Date -Format 'yyyyMMdd-HHmmss')"
Copy-Item $configPath $backup
$config = Get-Content $configPath | ConvertFrom-Json
# NPX pattern (most common)
$config.mcpServers | Add-Member -NotePropertyName "new-server" -NotePropertyValue @{
command = "npx"
args = @("-y", "@some/mcp-server")
}
# Save
$config | ConvertTo-Json -Depth 10 | Set-Content $configPath
$AdminProfile.mcp.servers["new-server"] = @{
name = "new-server"
package = "@some/mcp-server"
version = "1.0.0"
command = "npx -y @some/mcp-server"
configFile = $null
environment = @{}
status = "pending"
toolCount = 0
notes = "Just installed"
}
$AdminProfile | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.deviceProfile
Close and reopen Claude Desktop, then verify tools appear.
$AdminProfile.mcp.servers["new-server"].status = "working"
$AdminProfile.mcp.servers["new-server"].toolCount = 15 # Count from Claude
$AdminProfile | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.deviceProfile
{
"command": "npx",
"args": ["-y", "@package/mcp-server"]
}
{
"command": "mcp-server-name"
}
Requires: npm install -g @package/mcp-server
{
"command": "node",
"args": ["D:/mcp/server-name/dist/index.js"]
}
{
"command": "npx",
"args": ["-y", "@package/mcp-server"],
"env": {
"API_KEY": "your-key",
"BASE_URL": "https://api.example.com"
}
}
# Known MCP issues
$AdminProfile.issues.current | Where-Object { $_.tool -like "*mcp*" }
| Error | Cause | Fix |
|---|---|---|
spawn ENOENT | Command not found | Check path, install globally |
Server not starting | Config syntax | Validate JSON |
Tools not appearing | Didn't restart | Close/reopen Claude |
Permission denied | Path issue | Use absolute Windows paths |
# Check Node
node --version
# Check npm global
npm list -g --depth=0
# Validate config JSON
$configPath = $AdminProfile.mcp.configFile
try {
Get-Content $configPath | ConvertFrom-Json | Out-Null
Write-Host "Config JSON valid"
} catch {
Write-Host "Config JSON invalid: $_"
}
$AdminProfile.issues.current += @{
id = "mcp-$(Get-Date -Format 'yyyyMMdd-HHmmss')"
tool = "mcp-server-name"
issue = "Server fails to start - spawn ENOENT"
priority = "high"
status = "pending"
created = (Get-Date).ToString("o")
}
$AdminProfile | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.deviceProfile
$config = Get-Content $AdminProfile.mcp.configFile | ConvertFrom-Json
$config.mcpServers.PSObject.Properties.Remove("server-to-remove")
$config | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.mcp.configFile
$AdminProfile.mcp.servers.PSObject.Properties.Remove("server-to-remove")
$AdminProfile | ConvertTo-Json -Depth 10 | Set-Content $AdminProfile.paths.deviceProfile
references/INSTALLATION.md - Detailed install patternsreferences/CONFIGURATION.md - Config file structurereferences/TROUBLESHOOTING.md - Common fixes