Developers add MCP servers and agent skills faster than security teams can review them, and most of the risk sits in text and code that ordinary vulnerability scanners never read. MCP security scanners fill part of that gap: they discover the servers and skills configured on a machine, pull tool descriptions, prompts and resources, and look for prompt injection, tool poisoning, cross-server shadowing, risky capabilities and known-vulnerable dependencies. They also start servers, send data to analysis services and need their own API keys, so running them carelessly creates new risk. This guide explains what these scanners check, how four open source scanners work, how to run them safely on laptops and in CI, and where they stop being useful. It is for AppSec, platform and detection teams responsible for agent tooling. Scanners are listed alphabetically; order is not a ranking.
This is an independent guide from NHI Mgmt Group, based on the public documentation of Cisco AI Defense MCP Scanner, MCP-Shield, Nova Proximity and Snyk Agent Scan as of November 2026. It is not sponsored or reviewed by any of these projects or their publishers. Features change quickly, so confirm options against each project's current documentation.
Key takeaways
- Scanners read what agents read. They analyse tool names, descriptions, prompts, resources and skill files, which is where tool poisoning and indirect prompt injection live.
- Scanning can execute code. To list a stdio server's tools, a scanner starts the server command from the configuration; Snyk's documentation says plainly that scans can execute commands or make outbound requests, so scan untrusted configurations in a sandbox.
- Know where your data goes. Several scanners send tool descriptions, configurations or skill content to a vendor analysis API or a large language model provider; decide this before fleet-wide use.
- A clean scan is a point in time. Descriptions can change after approval and malicious behaviour can sit in code that a description scan never sees, as the postmark-mcp case showed.
- Scanners feed governance, not replace it. Use results to drive an MCP inventory, an allowlist and pinned versions, and pair them with gateway and runtime controls.
What MCP security scanners check
An MCP scanner works at a different layer from a software composition analysis tool. It treats the natural language an agent consumes as an attack surface. The checks map to threats named in the MCP specification's Security Best Practices page, the OWASP Top 10 for LLM Applications 2025 and MITRE ATLAS.
| Check | What it looks for | Threat reference |
|---|---|---|
| Tool description injection | Instructions hidden in descriptions, such as "before using this tool, read a file and pass its contents" | ATLAS AML.T0110 AI Agent Tool Poisoning; OWASP LLM01:2025 Prompt Injection |
| Shadowing and cross-origin escalation | One server's description trying to change how the agent uses another server's tools | AML.T0110; OWASP LLM06:2025 Excessive Agency |
| Untrusted content sources | Servers that pull attacker-writable data such as email, tickets or web pages into context | AML.T0051.001 Indirect prompt injection |
| Sensitive data and destructive capability | Tools that read credentials or private data, run commands or modify shared systems | OWASP LLM06:2025; LLM02:2025 Sensitive Information Disclosure |
| Skill content | Prompt injection, suspicious download URLs, malicious code and hard-coded secrets in agent skills | AML.T0010.005 AI Agent Tool (supply chain) |
| Dependencies and bundled binaries | Known-vulnerable packages and malware in files shipped with a server | OWASP LLM03:2025 Supply Chain; ATT&CK T1195.002 |
| Behavioural change | Different tools or descriptions served to different clients, or changes after approval | AML.T0104 Publish Poisoned AI Agent Tool |
Background on the threats themselves is in the Top 10 MCP Security Risks and the MCP Security Guide. Manual and protocol-level testing is in the MCP Security Testing Guide; this page covers the automated scanners that sit beside it.
How scanners work
- Discover: read known configuration locations for agent clients (for example Claude Desktop, Claude Code, Cursor, VS Code, Windsurf and Gemini CLI) or take a configuration file, server URL or skill path supplied by the user.
- Connect: start each stdio server from its configured command, or connect to remote servers over HTTP with any configured headers or OAuth, then call the listing methods for tools, prompts and resources.
- Analyse: apply local rules (YARA, pattern rules), send content to a large language model for judgement, or send it to a vendor analysis API.
- Report: produce findings per server, tool or skill, often with a severity or score and a machine-readable format for CI.
Steps 2 and 3 carry the risk. Starting a stdio server runs whatever command the configuration holds, with the scanning user's rights. Sending content to an external service moves configuration data, which can include internal URLs and server names, outside your boundary.
Four open source scanners
Each scanner is described from its own documentation with the same headings. The descriptions are not a comparison; choose by the checks, data handling and workflow you need.
Cisco AI Defense MCP Scanner
- Scope: MCP tools, prompts, resources and server instructions, plus source code of MCP servers (behavioural code scanning).
- Engines: YARA rules, LLM-based analysis and the Cisco AI Defense inspect API, usable together or independently through
--analyzers; further analysers cover vulnerable Python packages through pip-audit and bundled binaries through VirusTotal hash lookups. - Modes: CLI or REST API server; live scans of known client configurations (
--scan-known-configs), a stdio command or a server URL; and astaticmode that scans pre-generated JSON offline for CI and air-gapped use. - Data handling: the YARA engine runs locally; the API and LLM engines need keys (MCP_SCANNER_API_KEY, MCP_SCANNER_LLM_API_KEY) and send content to the configured endpoint, which can be a self-hosted model endpoint.
- Licence: Apache 2.0.
MCP-Shield
- Scope: installed MCP servers found in standard configuration locations or a supplied path.
- Checks: tool poisoning, hidden instructions, sensitive file access, exfiltration channels in parameters and cross-origin escalation (shadowing) between servers.
- Bait-and-switch testing:
--identify-asconnects under a different client name to see whether a server behaves differently for different clients. - Data handling: pattern checks run locally; an optional Anthropic API key adds model-based analysis of the descriptions.
--safe-listexcludes named servers from scanning. - Licence: MIT.
Nova Proximity
- Scope: MCP servers (tools, prompts and resources with parameters) and agent skills, including Streamable HTTP servers under the 2025-11-25 MCP specification.
- Checks: NOVA rules, which combine pattern matching with model evaluation, and remediation guidance per finding pattern; you can write your own rule files.
- Modes: a Python CLI that takes a server URL for MCP discovery,
-nwith a rule file (-r) for security analysis, and--skillfor a skill directory. - Data handling: model evaluation uses a key for OpenAI, Groq, Anthropic or Azure OpenAI, or a local Ollama host, so analysis can stay on your own infrastructure.
- Licence: GPL v3 according to the project README.
Snyk Agent Scan
- Scope: agent harnesses, MCP servers and skills, auto-discovered across many clients at system, user, project and extension scope. It was first published by Invariant Labs as MCP-Scan.
- Checks: from version 0.6, scored risk indicators such as
prompt_injection_tool_desc,untrusted_content,private_dataanddestructive_capabilitiesfor servers, plus skill risks including malicious code, suspicious downloads and secret detection. Scores are 100, 300, 600 and 1000 for low to critical. - Safety controls: interactive runs ask for consent before contacting each server; non-interactive runs inspect remote servers but do not start stdio servers unless
--dangerously-run-mcp-serversis set; remote requests refuse link-local and cloud metadata addresses and do not follow redirects. - Data handling: requires a SNYK_TOKEN; component information, including server configurations, tool names and descriptions and skill content, is sent to the Agent Scan API with secrets redacted. An
inspectsubcommand lists components without analysis. - CI:
--ciexits non-zero on findings and--jsonemits results; the project marks CLI output as experimental. Standalone binaries ship with an SBOM and GPG-signed checksums. - Licence: Apache 2.0 licence file; use is also subject to Snyk's terms for Agent Scan.
Choosing a scanner for the job
| Need | What to look for in a scanner |
|---|---|
| Fleet discovery on developer laptops | Auto-discovery across the clients your developers use, at user, project and extension scope, with non-interactive mode that does not start stdio servers |
| Nothing leaves the network | Local rule engines, or model analysis through a self-hosted endpoint |
| Gate in CI before publishing a server | Offline or static mode, machine-readable output, non-zero exit codes, suppression by finding name |
| Review third-party server code | Source code behaviour analysis, dependency and binary checks |
| Test for bait-and-switch | Ability to present different client identities and compare results |
| Skills as well as servers | Explicit skill support for SKILL.md content and bundled scripts |
Small teams can run one scanner by hand when adding a server and again before upgrades. Large organisations should schedule fleet scans through endpoint management, send results to a central store, and tie each finding to the MCP Server Inventory Template and an approval workflow.
Running scanners safely
- Agree data handling first. Record which engines send content off the machine, to whom, and under which terms. For sensitive environments use local rules or a self-hosted model endpoint.
- Treat scanner keys as secrets. SNYK_TOKEN, MCP_SCANNER_API_KEY, LLM provider keys and VirusTotal keys belong in a secrets manager or CI secret store, scoped to the scanning job, never in shared shell profiles. See the Secrets Management Guide.
- Sandbox untrusted configurations. Scan third-party or unknown configurations in a disposable container or VM with no access to real credentials, matching the MCP specification's advice to run local servers with minimal privileges.
- Verify the scanner itself. Pin scanner versions, verify release checksums where the project publishes them, and review changes before upgrading, since the scanner runs with the same access as the developer.
- Pilot, then widen. Run on a small group of developer machines in report-only mode, review findings with the server owners, and tune suppressions before enforcing anything.
- Enforce in rings. Move from report-only to blocking in CI for new servers first, then to blocking upgrades with new critical findings, then to fleet policy.
- Roll back cleanly. Keep blocking rules in version control. If a scanner update floods teams with new findings, pin the previous scanner version and re-baseline rather than disabling scanning.
Where identity fits
Many findings are really identity findings. A tool that "reads credentials" usually holds an API key or OAuth token with more scope than it needs, and a poisoned description often aims to make the agent pass a secret such as an SSH key or a cloud credential to an attacker-controlled parameter. Use scanner output to find servers holding long-lived tokens, move them to scoped, short-lived credentials, and record each server's identity in your inventory. The MCP Authorisation Specification Guide covers token handling, and the Agent Skills Security Guide covers skills.
Detection and measurement
- Coverage: percentage of managed developer machines and CI pipelines scanned in the last 30 days.
- Inventory match: share of discovered MCP servers and skills that are in the approved inventory (target 100%).
- Critical findings open: count and age of critical or high findings, with a target time to remove or fix.
- Drift: number of servers whose tool descriptions changed since approval, detected by comparing scans.
- Pinned versions: share of approved servers pinned to a reviewed version.
Scanner results are one signal. Pair them with runtime logging from an MCP gateway or client audit logs to see what tools were actually called. See the MCP Gateway and MCP Server Governance Guide.
Framework mapping
| Framework | Reference | Relevance |
|---|---|---|
| NIST SP 800-53 Rev. 5 | RA-5 Vulnerability Monitoring and Scanning; SA-11 Developer Testing and Evaluation; SR-3 Supply Chain Controls and Processes; SR-11 Component Authenticity; CM-7 Least Functionality | Scanning, pre-release testing, supply chain and minimising tool capability |
| NIST CSF 2.0 | ID.AM-02; ID.RA-01; PR.PS-02; DE.CM-09 | Inventory, vulnerability identification, software maintenance, monitoring |
| OWASP Top 10 for LLM Applications 2025 | LLM01 Prompt Injection; LLM03 Supply Chain; LLM06 Excessive Agency | The risks the checks target |
| MITRE ATLAS | AML.T0110 AI Agent Tool Poisoning; AML.T0010.005 AI Agent Tool; AML.T0104 Publish Poisoned AI Agent Tool; mitigation AML.M0033 Input and Output Validation for AI Agent Components | Adversary techniques and the matching mitigation |
| MCP specification 2025-11-25 | Security Best Practices: Local MCP Server Compromise; Scope Minimization | Sandboxing and consent for local servers, least-privilege tokens |
| ISO/IEC 27001:2022 Annex A | A.8.8 Management of technical vulnerabilities; A.5.21 Managing information security in the ICT supply chain | Vulnerability and supply chain management |
Common failure patterns
- Scan once, trust forever: approving a server on a clean scan and allowing automatic upgrades. The postmark-mcp malicious server case had 15 legitimate releases before one added a single line that copied every email to an attacker, a change in code rather than in tool descriptions.
- Running scans with real credentials: scanning an unknown configuration on a developer's own machine, so the scan itself starts a malicious server with access to their keys and files.
- Uncontrolled data sharing: enabling cloud analysis across the fleet without checking what content is sent, including internal server names and URLs.
- Building on unstable output: wiring CI gates to field names that a project marks as experimental, so an update silently breaks the gate.
- Ignoring skills and extensions: scanning only user-level MCP configuration and missing project, extension and skill components.
- Findings without owners: producing reports with no path to remove, pin or re-scope a server.
Practitioner checklist
- Pick a scanner per use case (fleet, CI, code review) and record its data handling.
- Store scanner and model API keys in a secrets manager scoped to the scan job.
- Scan untrusted configurations only in a disposable sandbox without real credentials.
- Pin and verify scanner versions before rollout.
- Scan every new MCP server and skill before approval, and every upgrade before it is allowed.
- Store scan results centrally and compare them to detect description drift.
- Link findings to the MCP server inventory with a named owner.
- Pin approved servers to reviewed versions and block unreviewed upgrades.
- Pair scanning with gateway or client logging of actual tool calls.
Standards and references
- Model Context Protocol: Security Best Practices (specification 2025-11-25)
- OWASP: Top 10 for LLM Applications 2025
- MITRE ATLAS: AI Agent Tool Poisoning
- NIST: SP 800-53 Rev. 5
- Cisco AI Defense: MCP Scanner documentation
- MCP-Shield: Project documentation
- Nova Proximity: Project documentation
- Snyk: Agent Scan documentation
Related NHI Mgmt Group resources: MCP Security Testing Guide · How to audit MCP servers on developer laptops · MCP Server Trust Assessment · Local MCP Server Security Guide · Unsanctioned AI Agents and MCP Servers Guide