MCP Security Signals

Every signal below comes from actually scanning the published source of each Model Context Protocol server with one deterministic engine57,243 findings across 19,190 flagged packages, each with a rule id, a severity and a confidence, each linking to its evidence on the server’s page. This is the triage view: review signals, not verdicts. Nothing here is an LLM’s guess — the same input produces the same finding again.

Findings by severity

Counts are individual findings, so one package can appear under several. The engine graded critical at exactly zero across the whole catalog — a measured result, not a gap in coverage — while the long tail is low-severity supply-chain hygiene. The rows above are the shape of the work; the feed further down is the work itself.

critical
0
no findings
unrecoverable compromise — a measured zero across the catalog today, stated plainly rather than left blank
high
28,189
across 9,463 servers
exploitable behaviour in the shipped code or how it is installed
medium
12,842
across 5,607 servers
risky patterns worth a human read before you trust the server
low
11,293
across 11,293 servers
hygiene and supply-chain gaps — mostly missing repositories and licenses
info
4,919
across 4,909 servers
advisory notes the engine records but never scores

Rule families

Every rule id belongs to one of three families. Bars count the servers each family flagged; the number beside each is raw findings, because one family can fire many times inside one package.

Rule families by servers affectedSource code: 10,735 (35,880 findings)Source code35,880 findings10,735Supply chain: 13,817 (21,301 findings)Supply chain21,301 findings13,817Rug-pull drift: 62 (62 findings)Rug-pull drift62 findings62

Bar length is servers affected; the note is raw findings.

  • Source code MTC-SRC — What the shipped code does — shell and command execution, dynamic code evaluation, and network sinks read straight out of the published source.
  • Supply chain MTC-SUP — How a package is shipped, before a line of it runs — missing source repository, no license, install-time scripts and names that combosquat a popular one.
  • Rug-pull drift MTC-TOFU — Trust-on-first-use: the package’s bytes moved under a version you already trusted. Rare by design, and the signal worth watching.

Most-affected servers

The worst-graded, most-flagged packages in the catalog — where triage starts. Each links to its full scan, where every finding carries its evidence, location and confidence. A grade describes the exact version that was scanned, never the project in general.

ServerGradeFindingsHigh
Judges F 66 37
Security F 53 36
Vmlx F 35 33
Brave Real Browser F 43 32
Angr Api F 34 32
Codemore F 37 30
Kbot F 52 28
Pytest F 35 28
Imas Codex F 33 28
Yt Dlp F 30 28
Guardianshield F 39 27
Diffgate Review F 36 27

Triage feed

The most recently scanned high and critical findings, limited to confirmed and strong confidence — the rows worth reading first. Each is one finding on one server; follow the name for the evidence behind it.

high Mindsdb A MTC-SRC-001 Dynamic code execution in server code (mindsdb/api/executor/utilities/mysql_to_duckdb_functions.py)
high Mindsdb A MTC-SRC-001 Dynamic code execution in server code (mindsdb/integrations/handlers/duckdb_faiss_handler/duckdb_faiss_table.py)
high Mindsdb A MTC-SRC-001 Dynamic code execution in server code (mindsdb/integrations/handlers/pgvector_handler/pgvector_handler.py)
high Mindsdb A MTC-SRC-002 Shell/command execution in server code (mindsdb/integrations/handlers/openai_handler/openai_handler.py)
high Mindsdb A MTC-SRC-002 Shell/command execution in server code (mindsdb/integrations/utilities/install.py)
high Browser Use A MTC-SRC-002 Shell/command execution in server code (server/server.py)
high Awslabs.aws Api A MTC-SRC-006 Reads a sensitive credential path or dumps the environment (awslabs/aws_api_mcp_server/core/common/errors.py)
high Swarmclaw B MTC-SRC-002 Shell/command execution in server code (bin/daemon-cmd.js)
high Swarmclaw B MTC-SRC-002 Shell/command execution in server code (bin/install-root.js)
high Swarmclaw B MTC-SRC-002 Shell/command execution in server code (bin/server-cmd.js)
high Swarmclaw B MTC-SRC-002 Shell/command execution in server code (bin/swarmclaw.js)
high Swarmclaw B MTC-SRC-002 Shell/command execution in server code (bin/update-cmd.js)
high Swarmclaw B MTC-SRC-002 Shell/command execution in server code (bin/worker-cmd.js)
high Swarmclaw B MTC-SRC-002 Shell/command execution in server code (scripts/easy-setup.mjs)
high Swarmclaw B MTC-SRC-002 Shell/command execution in server code (scripts/easy-update.mjs)
high Swarmclaw B MTC-SRC-002 Shell/command execution in server code (scripts/ensure-sandbox-browser-image.mjs)
high Swarmclaw B MTC-SRC-002 Shell/command execution in server code (scripts/postinstall.mjs)
high Artsleuth A MTC-SRC-001 Dynamic code execution in server code (artsleuth/benchmarks/wikiart.py)
high Artsleuth A MTC-SRC-001 Dynamic code execution in server code (artsleuth/models/backbones.py)
high Artsleuth A MTC-SRC-001 Dynamic code execution in server code (artsleuth/models/heads.py)

Top firing rules

Ranked by how many servers each rule flagged, not by how alarming it sounds. Titles are the engine’s own — a combosquat rule names the package it shadows, so a title can be specific to one server.

Most frequently firing rulesMTC-SUP-011: 11,293 (low)MTC-SUP-011low11,293MTC-SRC-002: 8,662 (high)MTC-SRC-002high8,662MTC-SUP-012: 4,857 (info)MTC-SUP-012info4,857MTC-SRC-003: 1,726 (medium)MTC-SRC-003medium1,726MTC-SRC-001: 1,363 (high)MTC-SRC-001high1,363MTC-SRC-009: 1,250 (medium)MTC-SRC-009medium1,250MTC-SRC-005: 1,204 (medium)MTC-SRC-005medium1,204MTC-SUP-010: 1,135 (medium)MTC-SUP-010medium1,135MTC-SUP-006: 976 (medium)MTC-SUP-006medium976MTC-SRC-006: 772 (high)MTC-SRC-006high772

Bar length is servers affected; colour is the rule’s severity.

RuleWhat it catchesServers
MTC-SUP-011 low Package has no source repository 11,293
MTC-SRC-002 high Shell/command execution in server code (__tests__/tool-integration.test.ts) 8,662
MTC-SUP-012 info Package has no license 4,857
MTC-SRC-003 medium Hardcoded egress to an external endpoint (youtube_transcript_api/_errors.py) 1,726
MTC-SRC-001 high Dynamic code execution in server code (__main__.py) 1,363
MTC-SRC-009 medium Untrusted input concatenated into a command sink (webasyst-mcp.js) 1,250
MTC-SRC-005 medium Dynamic module load from a non-literal (__init__.py) 1,204
MTC-SUP-010 medium Package runs install-time scripts (preinstall, postinstall) 1,135
MTC-SUP-006 medium Possible combosquat of mcp 976
MTC-SRC-006 high Reads a sensitive credential path or dumps the environment (__main__.py) 772

Confidence

This is the honest part. Every finding is deterministic and evidence-backed — never an LLM’s opinion — but not every one is equally certain. 449 findings are confirmed: the engine reproduced the behaviour rather than matching a pattern near it. That is the difference between this and a heuristic code-analysis score.

Findings by confidenceconfirmed: 449 (0.8%)confirmed0.8%449strong: 50,833 (88.8%)strong88.8%50,833heuristic: 5,961 (10.4%)heuristic10.4%5,961

Counts are individual findings; the note is each level’s share.

  • confirmed — the engine reproduced the behaviour end-to-end, not merely matched a pattern
  • strong — a deterministic rule matched with solid, evidence-backed grounds
  • heuristic — a lower-certainty pattern match, flagged for a human to confirm

Scanning runs on a queue, not on page load. These figures are recomputed at most once a minute from the stored scans, and this snapshot was built 2026-07-23 09:27 UTC. Re-check any package yourself with the free API or the CLI — same input, same finding, no account needed.