Most of us have MCP servers spread across three or four clients, each added by copy-pasting JSON from a README. I wanted one command that reads all of them at once, so mcp-guard v0.9 adds scan:
uvx mcp-guard-audit scan
It finds the config files of Claude Desktop, Claude Code (including per-project servers in ~/.claude.json), Cursor, VS Code, Windsurf (now Devin Desktop), Zed, Continue and Cline/Roo, runs the same checks as inspect on each one, and groups the results by client, then by server. A server configured in two clients is reported once. Here is the output on a demo machine (fake configs, fake token):
```
Claude Desktop
~\AppData\Roaming\Claude\claude_desktop_config.json
shell
CRITICAL command-execution: shell
filesystem
HIGH broad-filesystem-scope: C:\
memory no finding
Cursor
~\.cursor\mcp.json
github
HIGH hardcoded-secret: env GITHUB_PERSONAL_ACCESS_TOKEN=<redacted, 40 chars>
shell same server as Claude Desktop > shell (~\AppData\Roaming\Claude\claude_desktop_config.json), findings shown there
Windsurf
~\AppData\Roaming\devin\mcp_config.json
remote-notes
MEDIUM insecure-transport: http://notes.example.com\[…\]
3 config files, 6 server entries, 5 distinct servers, 4 findings, highest risk CRITICAL. Static check of the configs only: no server was started.
```
What it does not do: it starts nothing and makes no network call. It reads the config files and nothing else, so it says what the configs declare, not what the processes can actually reach (that's a sandbox's job). A config with no finding means nothing alarming in the config, not a confined server.
Two things came with it. Secrets never show up in the output: tokens are reported by length, and URLs in findings now keep only the scheme and host, because people put tokens in URL paths and query strings. And --json and --sarif (SARIF 2.1.0, validated against the OASIS schema) let you drop the scan into CI or GitHub code scanning. It exits 0 by default; add --fail-on high to make it fail.
I checked every config path against each client's current docs. A few I couldn't confirm (Claude Desktop on Linux, ~/.claude.json on Windows, VS Code profile mcp.json, the old Windsurf and Cline locations). If your client keeps its config somewhere scan doesn't look, tell me where and I'll add it.
Repo (MIT): https://github.com/ianewsfr-a11y/mcp-guard
Release notes: https://github.com/ianewsfr-a11y/mcp-guard/releases/tag/v0.9.1
Question for you: how many MCP clients do you actually have configured, and did you know what was in each of them?