
Serveur proxy qui encapsule les serveurs MCP avec profilage comportemental, analyse de sécurité, filtrage des risques et exécution sécurisée. Détecte l'injection de prompt, les métadonnées d'outils malveillantes, l'injection d'arguments, les risques de code source et l'exposition d'identifiants.
MCP safety warden est un serveur proxy qui encapsule n'importe quel serveur MCP et ajoute à ses outils du profilage comportemental, de l'analyse de sécurité, du filtrage de risque et une exécution sécurisée.
[!IMPORTANT] La sécurité de MCP est un domaine de recherche actif. Des études récentes cataloguent de nombreuses catégories de menaces spécifiques au protocole, incluant l'empoisonnement d'outils, l'injection de prompt, les attaques de type rug-pull, les compromissions de chaîne d'approvisionnement, l'exfiltration d'identifiants et les attaques par composition tout au long du cycle de vie du serveur. Voir Securing the MCP (OpenReview), Landscape & Threats (arXiv), When MCP Servers Attack (arXiv) et MCP-38 Taxonomy (arXiv).
Utilisez-le comme proxy pour ajouter un filtrage de sécurité à n'importe quel serveur MCP, ou pointez-le vers un serveur dont vous n'êtes pas propriétaire et effectuez un audit de sécurité complet sans faire un seul appel d'outil.
Fig 1. Deux modes de fonctionnement : proxy et audit
Profilage comportemental : Classe d'effet, sécurité de reprise, destructivité. Assisté par LLM (Anthropic, OpenAI, Gemini, Ollama) avec repli basé sur des règles. Statistiques observées (latence p50/p95, taux d'échec, taille de sortie) mises à jour après chaque appel proxy.
Analyse de sécurité : Pipeline mcpsafety+ en cinq étapes (Recon, Planner, Hacker, Auditor, Supervisor). Cisco AI Defense (AST/YARA). Snyk (analyse de métadonnées). Les intégrations Kali et Burp Suite enrichissent le pipeline avec des données réseau réelles et des sondes au niveau HTTP. Analyse du code source depuis GitHub avec détection d'entropie, AST, flux de taint et détection de rug-pull.
Fig 2. Pipeline mcpsafety+ en cinq étapes, déclenché lorsque vous exécutez un audit de sécurité complet sur un serveur MCP
Exécution sécurisée : Analyse des arguments (20+ catégories d'attaques, deuxième passe LLM). Analyse d'injection de sortie à deux couches. Filtrage de risque avec alternatives et politiques par outil. Détection de dérive sur chaque appel et vérification autonome.
Fig 3. Pipeline d'exécution sécurisée : les cinq vérifications que chaque appel d'outil proxy traverse
CLI : 24 sous-commandes, menu de risque interactif, option --json sur chaque commande, --yes pour l'IC.
Ce qu'il détecte
Sans clé, le wrapper fonctionne uniquement en mode basé sur des règles : classification d'outils moins fiable, analyse d'injection par expressions régulières uniquement, pas d'alternatives dans le filtrage de risque, pas de pipeline mcpsafety+. Pour une configuration entièrement locale, exécutez Ollama, définissez OLLAMA_MODEL et passez --provider ollama explicitement (Ollama n'est pas détecté automatiquement).
[!NOTE] Serveurs stdio nécessitant une configuration locale (serveurs
stdionécessitant une configuration locale avant de démarrer – fichiers de configuration manquants, identifiants, répertoires de données ou dépendances spécifiques au système d'exploitation) ne peuvent pas être inspectés par le wrapper – la découverte d'outils échouera et 0 outil sera stocké. Vous pouvez toujours exécuter une analyse de sécurité complète du code source sans lancer le serveur en passant--github-urlàscan/onboard, ou le paramètregithub_urlàsecurity_scan_server. Le pipeline mcpsafety+ récupérera et analysera le code source directement depuis GitHub. Les serveurssseetstreamable_httpne sont pas affectés.
pip install mcpsafetywarden
Avec tous les extras optionnels :
pip install "mcpsafetywarden[all]"
Ou des extras spécifiques :
pip install "mcpsafetywarden[anthropic,snyk]"
Depuis les sources :
git clone https://github.com/gautamvarmadatla/mcpsafetywarden
cd mcpsafetywarden
pip install .
La base de données SQLite est créée automatiquement lors du premier lancement dans le répertoire de données utilisateur de la plateforme (~/.local/share/mcpsafetywarden/ sur Linux, ~/Library/Application Support/mcpsafetywarden/ sur macOS, %APPDATA%\mcpsafetywarden\ sur Windows). Surchargez avec MCP_DB_PATH.
Protection des identifiants (automatique, aucune action requise)
Les valeurs secrètes passées à register_server ou onboard_server (jetons Bearer, clés API dans headers ou env) sont automatiquement détectées et remplacées par des identifiants opaques cref_ avant que quoi que ce soit n'atteigne le contexte du modèle. Le véritable identifiant est stocké chiffré dans la base de données et résolu silencieusement au moment de la connexion. Le modèle, l'historique de conversation et les journaux ne voient jamais que cref_<id>.
Optionnel : chiffrement au repos des identifiants stockés
pip install cryptography
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
Définissez la clé imprimée comme MCP_DB_ENCRYPTION_KEY avant de démarrer le serveur. Cela chiffre à la fois les identifiants du serveur et les valeurs cref_ au repos.
Toute la configuration se fait via des variables d'environnement.
Note de sécurité : Ne jamais commiter les clés API ou la clé de chiffrement. Le wrapper supprime ses propres secrets des environnements des processus enfants avant de lancer les serveurs stdio.
Ajoutez le wrapper à claude_desktop_config.json :
{
"mcpServers": {
"mcpsafetywarden": {
"command": "mcpsafetywarden-server",
"args": [],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-...",
"MCP_DB_ENCRYPTION_KEY": "<generated_fernet_key>"
}
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/Documents"]
}
}
}
Enregistrez chaque serveur auprès du wrapper avant utilisation :
mcpsafetywarden register filesystem --transport stdio \
--command npx \
--args '["-y", "@modelcontextprotocol/server-filesystem", "/Users/yourname/Documents"]'
Pour une configuration de passerelle obligatoire où tous les appels d'outils doivent passer par le wrapper, voir docs/DEPLOYMENT.md.
Voir docs/TOOLS.md pour la référence complète des outils.
24 sous-commandes couvrant les 25 outils MCP. Chaque commande prend en charge --json pour une sortie lisible par machine et --yes / -y pour ignorer les invites de confirmation.
Voir docs/CLI.md pour la référence complète avec les drapeaux et exemples.
Kali Linux MCP, Burp Suite MCP et Snyk s'intègrent automatiquement une fois enregistrés. Kali enrichit l'étape Recon et ping_server avec des données nmap/traceroute réelles. Burp ajoute des sondes HTTP brutes, des rappels hors bande et des preuves de proxy. Snyk analyse les métadonnées des outils pour détecter les chaînes d'injection, l'usurpation d'outil, les secrets codés en dur et 16 autres vérifications.
Voir docs/INTEGRATIONS.md pour les instructions de configuration.
Installez en mode éditable :
pip install -e ".[all]"
Lancez le serveur et observez les journaux :
mcpsafetywarden-server 2>server.log
Chaque module utilise logging.getLogger(__name__). Le serveur n'appelle pas logging.basicConfig lui-même – configurez la journalisation dans votre point d'entrée avant d'importer.
pytest tests/ -v
Définissez une clé API LLM pour inclure les tests assistés par LLM ; sans elle, ils sont automatiquement ignorés. Voir docs/TESTING.md pour une vérification étape par étape de la classification, de l'analyse d'injection, du filtrage de risque et de l'application des politiques.
Voir CONTRIBUTING.md pour les normes de code et les directives pour les demandes de tirage.
Licence Apache 2.0. Voir LICENSE pour plus de détails.
| Variable | Default | Objectif |
|---|
MCP_TRANSPORT | stdio | Mode de transport : stdio, sse ou streamable_http |
MCP_HOST | 127.0.0.1 | Adresse de liaison pour les transports HTTP |
MCP_PORT | 8000 | Port de liaison pour les transports HTTP |
MCP_AUTH_TOKEN | (non défini) | Jeton Bearer pour l'authentification du transport HTTP |
MCP_DB_ENCRYPTION_KEY | (non défini) | Clé Fernet pour chiffrer les identifiants stockés au repos |
ANTHROPIC_API_KEY | (non défini) | Active Anthropic comme fournisseur LLM |
OPENAI_API_KEY | (non défini) | Active OpenAI comme fournisseur LLM |
GEMINI_API_KEY ou GOOGLE_API_KEY | (non défini) | Active Gemini comme fournisseur LLM (GEMINI_API_KEY préféré) |
OLLAMA_MODEL | (non défini) | Nom du modèle pour Ollama (ex. llama3.1) |
OLLAMA_BASE_URL | http://localhost:11434/v1 | URL de base de l'API Ollama |
SNYK_TOKEN | (non défini) | Active la détection d'injection de prompt Snyk E001 |
MCP_SCANNER_API_KEY | (non défini) | Clé du moteur ML cloud Cisco AI Defense |
MCP_SCANNER_LLM_API_KEY | (non défini) | Clé LLM pour l'analyse AST interne de Cisco |
MCP_DB_PATH | (non défini) | Surcharger le chemin du fichier de base de données SQLite |
MCP_GRAPH_POLICY | warn | Application du graphe dans safe_tool_call : off (désactivé), warn (attacher un contexte de risque à la réponse), block (bloquer en dur les outils à rayon d'explosion critique/élevé sauf si approved=True) |
GITHUB_TOKEN | (non défini) | Jeton d'accès personnel GitHub pour l'analyse du code source (augmente la limite de débit de 60 à 5 000 requêtes/heure) |
| Outil | Description |
|---|
onboard_server | Enregistrement + inspection + analyse de sécurité en un seul appel |
register_server | Enregistrer un serveur ; inspection automatique optionnelle |
inspect_server | Actualiser la liste des outils et les profils |
check_server_drift | Détecter les dérives de schéma et de liste d'outils par rapport à la référence stockée |
list_servers | Lister tous les serveurs enregistrés |
list_server_tools | Lister les outils d'un serveur avec des profils résumés |
preflight_tool_call | Évaluation des risques sans exécution |
safe_tool_call | Exécuter avec filtrage de risque et alternatives |
get_tool_profile | Profil comportemental complet avec statistiques observées |
get_retry_policy | Recommandations de reprise et de délai d'attente |
suggest_safer_alternative | Substituts plus sûrs classés par LLM |
run_replay_test | Test d'idempotence (appelle l'outil deux fois) |
security_scan_server | Audit de sécurité en direct (mcpsafety+, Cisco, Snyk) |
scan_all_servers | Pipeline mcpsafety+ sur tous les serveurs enregistrés |
get_security_scan | Dernier rapport d'analyse stocké |
set_tool_policy | Politique d'autorisation/blocage permanente pour un outil |
get_run_history | Historique d'exécution récent pour un outil |
ping_server | Vérification d'accessibilité avec latence |
discover_servers | Analyser le système de fichiers pour les configurations client MCP et extraire les entrées serveur |
onboard_discovered_servers | Enregistrer en masse les serveurs découverts |
get_risk_graph | Construire ou interroger le graphe de risque d'inventaire (serveurs, outils, résultats, clients agents) |
explain_tool_risk | Parcourir les chemins de risque pour un outil : rayon d'explosion, risques de composition, balises MITRE, action recommandée |
explain_client_risk | Analyser les risques inter-serveurs pour tous les serveurs sous un même client agent |
analyze_cve_blast_radius | Signaler les CVE affectant plusieurs serveurs sous le même client |
export_graph | Exporter le graphe de risque au format JSON ou diagramme Mermaid |
| Doc | Contenu |
|---|
| docs/TOOLS.md | Référence complète des 25 outils MCP |
| docs/CLI.md | Sous-commandes CLI, drapeaux et exemples |
| docs/INTEGRATIONS.md | Configuration de Kali, Burp Suite et Snyk |
| docs/DEPLOYMENT.md | Déploiement stdio, HTTP, conteneur et passerelle |
| docs/TROUBLESHOOTING.md | Erreurs courantes et correctifs |
| docs/SECURITY.md | Secrets, authentification, isolation et détails d'analyse |
| docs/TESTING.md | Étapes de vérification pour chaque fonctionnalité |
| docs/COMPARISON.md | Comparaison avec les outils connexes |
| docs/ROADMAP.md | Fonctionnalités prévues |