Skip to main content

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

sovereign-shield.net

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sovereign_mcp_audit-1.0.0.tar.gz (33.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sovereign_mcp_audit-1.0.0-py3-none-any.whl (25.6 kB view details)

Uploaded Python 3

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

Hashes for sovereign_mcp_audit-1.0.0.tar.gz
Algorithm Hash digest
SHA256 4cda7fd6ea4ad76d86130d941f1536ca564e1bfbf2aa281e09918b581feb1dce
MD5 ce97618dc8401d62770e064935d423e3
BLAKE2b-256 9fee0cdbe26a90df3e34428b3310993c60458296dde02354ae2dca6698c724ff

See more details on using hashes here.

File details

Details for the file sovereign_mcp_audit-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sovereign_mcp_audit-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ab2c979a948304b610151c8461ca07c1c0cfa4a887f2d515f0f0f30f1a58712a
MD5 8478e950c431b02a580e118a6539b007
BLAKE2b-256 e5f153441a16f7bc5eed68cba46df5225d7fbedcd9d4c26474167abc59006f3f

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page