Configuration & Environment
Dependencies declared in `requirements.txt` or `package.json` that are either left unpinned (`>=` or no version) or pinned to a version with a known CVE — so the MCP server inherits someone else's vulnerability.
Every MCP server is also a dependency graph. An unpinned dependency (`requests>=2`) means the resolved version depends on when and where the package is installed — your audit of one install does not generalise to the next. A pinned but vulnerable version (say, `requests==2.19.1` with its known redirect flaw) means every install ships the vulnerability on purpose. Both patterns turn a server author's local environment into a liability for every downstream agent.
MCP packages are installed by end-user agents on short notice and rarely audited after install. Unlike a web backend with a quarterly dependency review, an MCP server installed today is likely to be invoked on production data tomorrow. A vulnerable transitive dependency (pickle-based config loader, XML parser with XXE) is reachable from any tool call that touches untrusted input.
# requirements.txt |
requests # unpinned — resolves differently on every install |
pyyaml>=3.0 # range allows the unsafe 3.13 era |
flask==0.12.2 # pinned, but known RCE chain (CVE-2018-1000656 adjacent) |
jinja2 # transitive; unpinned |
# requirements.txt |
requests==2.32.3 # latest stable, no open CVEs |
pyyaml==6.0.2 # post yaml.load() hardening |
flask==3.0.3 |
jinja2==3.1.4 |
# Regenerate via `pip-compile --upgrade` on a cadence. |
# In CI, run `pip-audit` and fail on HIGH or CRITICAL findings. |
We parse `requirements.txt`, `pyproject.toml`, and `package.json`, flag any declaration without an exact-version pin (`==x.y.z` for Python, non-caret non-range for npm), and cross-check pinned versions against our mirror of GitHub Advisory Database / PyPI safety DB — any match emits a finding annotated with the CVE.
See the full threat catalog for every documented detection.
CVEs of the same CWE class. Not MCP-specific, but exemplify the failure mode MCPSafe detects.
MCPSafe runs this check — and every other rule in the catalog — on any MCP server you paste in.
Scan now