sovereign-mcp-audit
Find out what your MCP servers will accept.
You have connected some MCP servers to an agent that holds your credentials. Can you say, right now, which tools it can call, which of them change state, and what those tools will accept as input?
This answers that in about a minute, against servers you already run.
pip install sovereign-mcp-audit
sovereign-mcp-audit -- mcp-server-sqlite --db-path ./app.db
Apache 2.0. No configuration, no account, nothing to sign up for.
What it does
It connects to your server as an ordinary MCP client, reads the tool list, works out which tools change state, and then sends every field the sort of input a careless or hostile caller sends. Then it reports what came back accepted.
TOOL INVENTORY (5 tools)
tool risk parameters
read_query READ query
write_query WRITE query
list_tables READ (none)
describe_table READ table_name
append_insight WRITE insight
FINDINGS (35 probes sent, 7 with an observable effect)
HIGH (5)
describe_table.table_name <- sql_metacharacters
SQL metacharacters accepted - check whether this field is
interpolated into a query
State-changing tools are skipped unless you ask for them with --include-writes. Nothing it sends asks a tool to destroy anything.
What it looks for
| class | CWE |
|---|---|
| SQL metacharacters, shell metacharacters, path traversal, NUL bytes | CWE-89, CWE-78, CWE-22 |
| Server-side request forgery against cloud metadata, loopback and private ranges | CWE-918 |
| State handles accepted without an ownership check | CWE-639 |
| Errors that disclose queries, stack traces, paths or credentials | CWE-209 |
| Prompt injection accepted verbatim into text a model will read | |
| Missing length and range limits, undeclared parameters, type confusion |
SSRF and state-handle probes are only sent to fields that look like they take a URL or a handle. Firing a cloud-metadata address at every string field would produce noise, not findings.
What it does not do
This is a black-box prober. It does not read a line of your server's source, so it cannot see the defect class that matters most: a security check that is present, is called, and silently does nothing. Finding those means reading each implementation and proving every control can actually fail.
It also cannot see anything in the authorization layer — token audience validation, confused-deputy problems in OAuth proxies, mix-up attacks. Those happen before a tool call exists.
A clean run here is the beginning of an audit, not the end of one.
Accepted is not vulnerable
A field that legitimately takes free text accepting free text is its contract, not a defect. Every probe is compared against a benign baseline, and counts only if the response actually differs or the payload comes back out. Probes that were accepted but changed nothing are counted separately, under accepted but with no observable effect, so the number stays honest in both directions.
This matters more than it sounds. An earlier version of this tool reported five HIGH findings against a published server whose every response was {"entities": [], "relations": []} — a search that found nothing and said so. Reporting that as a vulnerability is how a security tool gets uninstalled.
Refusals written into the response body are recognised too. [DENIED], Invalid library ID format, No matches found are servers doing their job. Unless the refusal leaks while refusing: Invalid lookup. Query was: SELECT ... declines the request and hands over the SQL in the same breath, and that is still a finding.
Usage
sovereign-mcp-audit [options] -- <command to launch the server>
--include-writes Also probe state-changing tools. Off by default,
because a permissive server will perform the operation.
--dry-run Inventory and classify the tools; send no probes.
--json PATH Write the full report as JSON.
--timeout SECONDS Per-call timeout (default 20).
--quiet Suppress progress output.
Exit code is 0 when nothing was found, 1 when something was, so it fits in CI.
Examples:
# a server from PyPI
sovereign-mcp-audit -- python -m mcp_server_git --repository /tmp/scratch
# one from npm
sovereign-mcp-audit -- npx -y @modelcontextprotocol/server-filesystem /tmp/sandbox
# see the tool inventory without sending anything
sovereign-mcp-audit --dry-run -- npx -y @your/server
Auditing servers you do not control
Probing a hosted service you do not own may be unlawful where you are, and it is not what this is for. Point it at servers you run: the ones in your own Claude Desktop, Cursor or VS Code configuration, and the packages you have installed locally.
If you find something real in someone else's package, tell the maintainer before you tell anyone else.
Licence
Apache 2.0. It contains none of the patented technology in the SovereignShield libraries, and its job is to tell you what your agents can reach, which is worth more unrestricted than licensed.
The rest of the family — sovereign-shield, intentshield, logicshield, sovereign-mcp and sovereign-mcp-gateway — is source-available under the Business Source License 1.1. This one is not.
If the answer is "quite a lot"
If the inventory surprises you, or the findings do, the gateway is the thing that puts a check in front of those calls rather than telling you about them afterwards:
pip install "sovereign-mcp-gateway[all]"
sovereign-mcp-gateway --init
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sovereign_mcp_audit-1.0.0.tar.gz.
File metadata
- Download URL: sovereign_mcp_audit-1.0.0.tar.gz
- Upload date:
- Size: 33.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cda7fd6ea4ad76d86130d941f1536ca564e1bfbf2aa281e09918b581feb1dce
|
|
| MD5 |
ce97618dc8401d62770e064935d423e3
|
|
| BLAKE2b-256 |
9fee0cdbe26a90df3e34428b3310993c60458296dde02354ae2dca6698c724ff
|
File details
Details for the file sovereign_mcp_audit-1.0.0-py3-none-any.whl.
File metadata
- Download URL: sovereign_mcp_audit-1.0.0-py3-none-any.whl
- Upload date:
- Size: 25.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ab2c979a948304b610151c8461ca07c1c0cfa4a887f2d515f0f0f30f1a58712a
|
|
| MD5 |
8478e950c431b02a580e118a6539b007
|
|
| BLAKE2b-256 |
e5f153441a16f7bc5eed68cba46df5225d7fbedcd9d4c26474167abc59006f3f
|