Audit MCP server configurations for quality, compliance, and security.
Audits MCP server configurations for quality, compliance, and security issues.
/plugin marketplace add melodic-software/claude-code-plugins/plugin install claude-code-observability@melodic-softwareAudit MCP server configurations for quality, compliance, and security.
Get the current UTC date, capture the project root path, ensure the temp directory exists, and clean up any stale audit files if the user confirms. Invoke the mcp-integration skill to load authoritative MCP configuration guidance.
This command audits MCP server configurations from multiple sources:
.mcp.json in project root (version-controlled, team-shared)~/.claude.json with root-level mcpServers key.claude/settings.local.json with mcpServers key if present.mcp.json files within plugin directoriesmanaged-mcp.json in system directoriesFor each configuration, validate JSON structure, server fields, transport types, authentication, environment variable usage, and security (no exposed credentials).
.mcp.json in project root~/.claude.json)ALWAYS start by running claude mcp list to get the authoritative list of configured MCP servers. This provides ground truth from the running system and prevents missing configurations stored in unexpected locations.
# Get authoritative list with scope information
claude mcp list
# Get details on specific server if needed
claude mcp get <server-name>
Why CLI First:
~/.claude.json (NOT ~/.claude/.mcp.json - this path does not exist)mcpServers key may be deep in the file (line 200+) and easy to miss with partial readsAfter CLI discovery, verify the configuration files exist and can be read. For large files like ~/.claude.json, use grep to find the mcpServers key position before reading.
Configuration locations (per official docs):
| Scope | Location |
|---|---|
| Project | .mcp.json (project root) |
| User (Global) | ~/.claude.json (root-level mcpServers key) |
| Local | .claude/settings.local.json (mcpServers key) |
| Plugin | plugins/*/.mcp.json |
| Enterprise | managed-mcp.json (system paths) |
Build a list of discovered configurations with scope, path, and server count.
Parse the scope selector and --force flag. Filter discovered configurations to match the requested scope.
Display audit mode (SMART or FORCE), configurations discovered, and list each file with scope and server count.
For each configuration, invoke the mcp-auditor subagent with scope, path, config type, and last audit date. Run audits in parallel when multiple configurations exist.
Report total configurations audited, server count, results by scope, and a details table. List security alerts and configuration issues with remediation steps.
MCP configurations must NEVER contain hardcoded API keys, tokens, or passwords in version-controlled files. Use environment variable expansion (${API_KEY}) for sensitive values.
Credential severity by location:
| Location | Hardcoded Credentials | Severity |
|---|---|---|
.mcp.json (project, version-controlled) | CRITICAL FAILURE | Keys exposed in git |
~/.claude.json (user, NOT version-controlled) | WARNING | Acceptable for personal use |
Valid types: stdio (local processes), http (recommended for remote), sse (deprecated).
| Platform | User Config Location |
|---|---|
| Unix | ~/.claude.json |
| Windows | %USERPROFILE%\.claude.json |
All audit results are written to .claude/audit/mcp.md.
Use /audit-log mcp to view current audit status.
User: /audit-mcp
Claude: Running CLI discovery first...
$ claude mcp list
perplexity: cmd /c npx -y perplexity-mcp - Connected (User scope)
firecrawl: cmd /c npx -y firecrawl-mcp - Connected (User scope)
...
## Audit Plan
**Mode**: SMART
**MCP servers discovered via CLI**: 5
**Configuration file**: ~/.claude.json
### Servers to Audit:
1. [user] perplexity - stdio
2. [user] firecrawl - stdio
3. [user] context7 - stdio
4. [user] microsoft-learn - http
5. [user] ref - http
[Spawns mcp-auditor subagent]
## MCP Audit Complete
**Total servers**: 5
**Scope**: User (Global)
| Server | Transport | Security | Result |
| --- | --- | --- | --- |
| perplexity | stdio | WARNING: Hardcoded API key | 85/100 |
| firecrawl | stdio | WARNING: Hardcoded API key | 85/100 |
| context7 | stdio | PASS | 95/100 |
| microsoft-learn | http | PASS | 95/100 |
| ref | http | WARNING: API key in URL | 85/100 |
User: /audit-mcp project
Claude: Checking for project .mcp.json...
[Audits .mcp.json in project root if exists]
User: /audit-mcp --force
Claude: Running full MCP audit (force mode)...
[Audits all configs regardless of modification status]