MCP-Scan

Scanner de sécurité d'Invariant Labs pour les serveurs Model Context Protocol et les descriptions d'outils d'agents : détecte l'empoisonnement d'outils, l'injection de prompt, le shadowing d'outils et les risques cross-origin. Invariant Labs' security scanner for Model Context Protocol servers and agent tool descriptions — detects tool poisoning, prompt injection, tool shadowing, and cross-origin risks.

↗ https://github.com/invariantlabs-ai/mcp-scan

Overview

MCP-Scan audits the Model Context Protocol (MCP) integrations wired into AI clients like Claude Desktop, Cursor, and Windsurf. It reads the client’s MCP config, connects to each configured server, and inspects the tool/resource descriptions those servers advertise — the same descriptions an agent reads verbatim as part of its context. Because a malicious or compromised MCP server can hide instructions inside a tool’s description (“tool poisoning”), silently swap a tool’s behavior after approval (“rug pull”), or shadow a trusted tool name, this class of risk is invisible to a human just glancing at a UI. MCP-Scan is the standard first check before trusting a newly-added MCP server.

Installation & Usage

Run directly with uvx, no persistent install needed

uvx mcp-scan@latest

Scan a specific client config instead of auto-discovering

uvx mcp-scan@latest scan --config ~/.config/Claude/claude_desktop_config.json

Scan all MCP configs found on the system

uvx mcp-scan@latest scan

Continuous “proxy” mode — inspects tool calls live as the agent runs

uvx mcp-scan@latest proxy

Reading Results

JSON output for CI pipelines / diffing against a known-good baseline

uvx mcp-scan@latest scan --json > scan-results.json

Whitelist a specific server/tool after manual review

uvx mcp-scan@latest whitelist "filesystem-server" "read_file"

Tips

  • Run MCP-Scan again after any MCP server update — a “rug pull” attack relies on a tool description changing after you’ve already approved it, so a diff against a prior scan matters more than a single point-in-time check.
  • Cross-origin (“toxic flow”) findings flag when one server’s tool output could feed into another server’s tool input in a way that lets untrusted data cross a trust boundary — take these seriously even if each server individually looks clean.
  • Pair with proxy mode during an actual agent session to catch injection attempts in live tool responses, not just static tool descriptions.
Help / Man page
usage: mcp-scan [COMMAND] [OPTIONS]

commands:
  scan          scan configured MCP servers for known clients
  proxy         run as a live proxy, inspecting tool calls/results in transit
  whitelist     mark a server or tool as reviewed/trusted
  inspect       dump raw tool/resource descriptions without risk analysis

scan options:
  --config PATH       path to a specific MCP client config file
  --server NAME        limit scan to a single named server
  --json               machine-readable output
  --checks LIST        limit checks (prompt_injection,tool_poisoning,
                        shadowing,cross_origin,rug_pull)
  --storage-file PATH  baseline file for detecting changes between scans

global options:
  -v, --verbose        verbose logging
  --version             show version

Vue d’ensemble

MCP-Scan audite les intégrations Model Context Protocol (MCP) connectées à des clients IA comme Claude Desktop, Cursor ou Windsurf. Il lit la configuration MCP du client, se connecte à chaque serveur configuré, et inspecte les descriptions d’outils/ressources que ces serveurs annoncent, les mêmes descriptions qu’un agent lit telles quelles dans son contexte. Comme un serveur MCP malveillant ou compromis peut dissimuler des instructions dans la description d’un outil (« empoisonnement d’outil »), changer discrètement le comportement d’un outil après approbation (« rug pull »), ou usurper le nom d’un outil de confiance (shadowing), ce type de risque est invisible pour un humain qui se contente de survoler l’interface. MCP-Scan est le premier contrôle standard avant de faire confiance à un nouveau serveur MCP.

Installation et utilisation

# Lancer directement avec uvx, sans installation persistante
uvx mcp-scan@latest

# Scanner la configuration d'un client spécifique plutôt que la découverte automatique
uvx mcp-scan@latest scan --config ~/.config/Claude/claude_desktop_config.json

# Scanner toutes les configurations MCP trouvées sur le système
uvx mcp-scan@latest scan

# Mode "proxy" continu : inspecte les appels d'outils en direct pendant que l'agent tourne
uvx mcp-scan@latest proxy

Lecture des résultats

# Sortie JSON pour les pipelines CI / comparaison avec une baseline saine connue
uvx mcp-scan@latest scan --json > scan-results.json

# Mettre un serveur/outil en liste blanche après revue manuelle
uvx mcp-scan@latest whitelist "filesystem-server" "read_file"

Conseils

  • Relancer MCP-Scan après chaque mise à jour de serveur MCP : une attaque « rug pull » repose sur le changement de la description d’un outil après qu’elle a déjà été approuvée, donc une comparaison avec un scan précédent compte plus qu’un contrôle ponctuel.
  • Les résultats cross-origin (« toxic flow ») signalent le cas où la sortie d’outil d’un serveur pourrait alimenter l’entrée d’outil d’un autre serveur d’une manière qui fait franchir une frontière de confiance à des données non fiables. À prendre au sérieux même si chaque serveur pris isolément semble sain.
  • Combiner avec le mode proxy pendant une session d’agent réelle pour repérer les tentatives d’injection dans les réponses d’outils en direct, pas seulement dans les descriptions d’outils statiques.
Aide / Page de manuel
usage: mcp-scan [COMMAND] [OPTIONS]

commands:
  scan          scan configured MCP servers for known clients
  proxy         run as a live proxy, inspecting tool calls/results in transit
  whitelist     mark a server or tool as reviewed/trusted
  inspect       dump raw tool/resource descriptions without risk analysis

scan options:
  --config PATH       path to a specific MCP client config file
  --server NAME        limit scan to a single named server
  --json               machine-readable output
  --checks LIST        limit checks (prompt_injection,tool_poisoning,
                        shadowing,cross_origin,rug_pull)
  --storage-file PATH  baseline file for detecting changes between scans

global options:
  -v, --verbose        verbose logging
  --version             show version