bloodhound
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bloodhoundFind Kerberoastable accounts and their paths to Domain Admins"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Agent BloodHound
Un assistant Claude qui répond en langage naturel (FR/EN) à tes questions sur un audit Active Directory. Tu demandes « quels comptes sont Kerberoastables ? » ou « un chemin de sansa.stark vers les Domain Admins ? », il interroge le graphe et répond avec des tableaux clairs et les chemins d'attaque.
Nouveau sur le sujet ? BloodHound cartographie un Active Directory en graphe (utilisateurs, groupes, machines, droits) pour révéler les chemins qu'un attaquant emprunterait. SharpHound collecte les données (un
.zipde JSON). Cet agent lit ce graphe et l'explique. Usage : test d'intrusion autorisé ou labo.
Capacités
L'agent choisit lui-même l'outil adapté — tu poses juste la question :
Credentials — Kerberoastables, AS-REP roastables, lecteurs LAPS / gMSA.
Chemins d'attaque — vers Domain Admins / tier-0 (
paths_to_tier0), entre deux objets, portée (blast_radius). Ne traverse que les edges abusables (les edges structurelsContains/GPLinksont exclus → pas de faux chemins).Privilèges — DCSync, délégations (non contrainte, contrainte, RBCD), abus d'ACL.
Triage — profil de sécurité d'un objet (attributs vérifiés, qui le contrôle, distance au tier-0), détails, recherche.
Domaine / forêt — Domain Admins (imbriqués), Domain Controllers, relations de confiance, objets tier-0.
Owned — marque des comptes compromis, puis « chemins depuis owned ».
Toutes les requêtes sont en lecture seule et auditées (runs/audit.log).
Related MCP server: BloodHound MCP
Prérequis
Outil | Pourquoi | Vérifier / installer |
Docker (ou OrbStack) | Bases de BloodHound |
|
Python 3.10+ | Faire tourner l'agent |
|
Claude Code (CLI | L'agent utilise Claude | Connexion au 1er lancement — pas de |
Installation
Trois voies. Toutes ont besoin d'un BloodHound CE avec des données : l'option B
(setup.sh) met tout en place pour toi (et peut charger un jeu de démo) ; les options
A et C supposent que la base tourne déjà (voir Charger des données).
Option A — Plugin Claude Code (marketplace)
À privilégier si tu utilises déjà Claude Code et as un BloodHound CE qui tourne. Le
dépôt est un plugin distribuable : serveur MCP bloodhound (23 outils lecture
seule, qui crée son propre venv au 1er lancement) + une compétence analyste (SKILL.md).
Dans Claude Code :
/plugin marketplace add The-bub/Agent-BloodHound # depuis GitHub
/plugin install bloodhound@agent-bloodhound(Ou depuis un clone local : /plugin marketplace add /chemin/vers/Agent-BloodHound.)
marketplace addenregistre le catalogue ;installcopie le plugin et propose un scope (projet / utilisateur) — confirme-le.Si Claude affiche « Run /reload-plugins to activate », lance
/reload-plugins.À la 1re requête, approuve le serveur MCP « bloodhound ». Ce premier appel prend ~10 s (création du venv du plugin).
Gérer : /plugin (activer / désactiver), /plugin marketplace update (nouvelle
version). Neo4j non standard ? Définis NEO4J_URI / NEO4J_USER / NEO4J_PASSWORD
dans l'environnement où tu lances claude.
Option B — En local avec setup.sh (turnkey)
À privilégier si tu pars de zéro : monte les bases, l'environnement Python et (optionnel) les données de démo, puis ouvre Claude Code.
cd /Users/eliotbedel/Claude/Agent-BloodHound
./setup.sh # bases + venv + (option) données de démo GOAD
./bloodhound # démarre tout et ouvre Claude Code (connexion au 1er lancement)./bloodhound relance les bases si besoin et ouvre Claude Code dans le dossier (via
.mcp.json + CLAUDE.md). Discute normalement : Claude appelle les outils et garde
le contexte.
Option C — Python (avancé / scripting)
Pour interroger sans Claude Code (REPL ou one-shot scriptable).
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt # ou: pip install -e . → la commande `bh-agent`
python -m agent.main # REPL (garde le contexte)
python -m agent.main -q "Qui peut faire un DCSync ?" # one-shot
python -m agent.main -q "Détaille le 1er compte" -c # continue le one-shot
python -m agent.main -q "..." --export # + rapport dans runs/Après pip install -e ., bh-agent remplace python -m agent.main. Commandes du
REPL : help, export (rapport runs/), exit.
Charger des données
Nécessaire pour les options A et C (l'option B setup.sh peut charger la démo à ta
place). Trois méthodes.
Démo GOAD (recommandé pour débuter)
Vrai jeu d'exemple (labo GOAD, 3 domaines) :
mkdir -p demo && cd demo
base="https://github.com/m4lwhere/Bloodhound-CE-Sample-Data/raw/main"
curl -fsSLO "$base/ce_branch_bloodhoundpy_essos_20240411011238_bloodhound.zip"
curl -fsSLO "$base/ce_branch_bloodhoundpy_north_20240411011008_bloodhound.zip"
curl -fsSLO "$base/ce_branch_bloodhoundpy_sevenkingdoms_20240411011059_bloodhound.zip"
cd ..
docker compose logs bloodhound | grep "Initial Password" # mot de passe admin
export BH_ADMIN_PW='COLLE_LE_MOT_DE_PASSE'
python scripts/ce_ingest.py --json-dir demo # dézippe tout seulRésultat : ~333 objets / ~3300 relations.
Ton extract, via l'interface web
Le plus visuel, sans ligne de commande.
Collecte — lance SharpHound (Windows) ou
bloodhound.py/ AzureHound ; tu obtiens un.zip(parfois plusieurs).Connexion — ouvre http://localhost:8080, identifie-toi avec
admin+ le mot de passe des logs (docker compose logs bloodhound | grep "Initial Password"). BloodHound impose un nouveau mot de passe au premier login.Import — menu Administration → File Ingest, glisse ton (tes)
.zip.Attente — BloodHound parse puis post-traite (calcul des edges) ; les compteurs montent, le graphe est prêt quand ils se stabilisent.
Tes fichiers locaux, en ligne de commande
Le plus rapide quand les fichiers sont déjà sur disque. Le script les pousse via l'API
CE : il dézippe les .zip tout seul et accepte un dossier mêlant .zip et .json.
docker compose logs bloodhound | grep "Initial Password" # mot de passe admin
export BH_ADMIN_PW='COLLE_LE_MOT_DE_PASSE'
python scripts/ce_ingest.py --json-dir /chemin/vers/mes-extraits # --no-wait pour ne pas attendreUtiliser l'agent
Une fois installé (n'importe quelle option), pose tes questions en langage naturel. L'agent ne fait pas qu'énumérer : il explique les vulnérabilités et donne les commandes d'exploitation (contexte de test autorisé). Les noms ci-dessous viennent du jeu de démo GOAD.
Exemples de questions
Énumération / cartographie
Liste les comptes Kerberoastables activés (avec leurs SPN).
Quels ordinateurs ont une délégation non contrainte ?
Qui peut faire un DCSync sur chaque domaine ?
Quels sont les objets tier-0 de la forêt ? Et les Domain Controllers ?
Chemins d'attaque
Chemin le plus court de jon.snow vers les Domain Admins.
Depuis sansa.stark, quels sont les chemins vers le tier-0 ?
Existe-t-il un chemin cross-domain de NORTH vers ESSOS ?
Si je compromets sql_svc@essos.local, qu'est-ce que j'atteins en 2 sauts ?
Comprendre une vulnérabilité
Explique le Kerberoasting et pourquoi ces comptes sont exposés.
C'est quoi l'unconstrained delegation, et pourquoi WINTERFELL est critique ?
Quelle différence entre DCSync, Golden Ticket et Silver Ticket ?
Demander les commandes d'exploitation
Donne-moi les commandes pour Kerberoaster jon.snow (Rubeus et impacket).
Étapes + outils pour abuser l'unconstrained delegation de WINTERFELL.
Comment cracker le hash récupéré (hashcat) ?
Triage / priorisation
Fais le profil de sécurité de sansa.stark.
Qui contrôle l'administrateur du domaine (ACL entrantes dangereuses) ?
Quels sont les 5 comptes les plus intéressants à compromettre en premier, et pourquoi ?
Owned / post-compromission
Marque sql_svc comme owned, puis montre les chemins vers le tier-0.
Depuis mes comptes owned, quel est le chemin le plus court vers les Domain Admins ?
Remédiation (blue team)
Comment corriger le Kerberoasting sur ces comptes ?
Quelles priorités de durcissement pour couper les chemins vers les Domain Admins ?
Rendu
Les actions défilent en grisé, puis la réponse dans un panneau : résumé en gras, listes en tableaux, objets critiques (Domain Admins / tier-0) marqués 🔴.
you › Profil de sécurité de sansa.stark, puis ses chemins vers le tier-0 ?
⚙ profil sansa.stark
↳ profil SANSA.STARK@NORTH.SEVENKINGDOMS.LOCAL · tier-0 à 1 saut
⚙ chemins tier-0 depuis sansa.stark
↳ 3 chemins
╭─ réponse ─────────────────────────────────────────────────╮
│ 🔴 sansa.stark : kerberoastable + unconstrained deleg, │
│ 1 saut du tier-0 (domaine NORTH via CoerceToTGT). │
│ … (tableau des attributs + chemins) … │
╰────────────────────────────────────────────────────────────╯
⟳ 4 tours · 14s · $0.12Contexte & langue
Contexte : le REPL et Claude Code gardent le fil d'une question à l'autre. Chaque
-q(Python) est en revanche un processus indépendant ; pour enchaîner des-q, ajoute-c(continue la session),--newpour repartir de zéro.Langue : par défaut, réponse dans la langue de la question. Forcer avec
--lang fr(Python) ouBH_LANG=fr(voir Configuration).
Configuration
Variables d'environnement (ou fichier .env — voir .env.example) :
Variable | Rôle | Défaut |
| Connexion Neo4j |
|
| Modèle Claude |
|
| Langue des réponses ( |
|
| Cap lignes · timeout requête (s) |
|
| Afficher les lignes brutes en table |
|
| Journal |
|
Sécurité
Lecture seule : un validateur (
agent/guardrails.py) rejette toute requête d'écriture ; l'agent n'a pas accès au shell ni aux fichiers de la machine.Audit : chaque Cypher exécuté est tracé dans
runs/audit.log(BH_AUDIT=0pour désactiver).« owned » est stocké côté application (
runs/owned.json), jamais écrit en base.Garantie stricte (optionnelle) — Neo4j Community n'a pas de vrai compte read-only. Après ingestion, verrouille la base :
docker compose -f docker-compose.yml -f docker-compose.readonly.yml up -d graph-db(à ne PAS activer pendant l'ingestion ; reviens avec
docker compose up -d graph-db).Ports Docker bindés sur
127.0.0.1uniquement. Données d'un test autorisé / labo.
Dépannage
Symptôme | Solution |
| Docker pas lancé. Ouvre Docker Desktop / OrbStack. |
| Bases éteintes : |
L'agent dit 0 node / vide | Données pas (encore) chargées — attends ~30 s après l'import. |
| Un service occupe le port. Arrête-le ou change le port dans |
| Relance |
| Python 3.14 + Neo4j trop récent — déjà épinglé dans |
|
|
Mot de passe admin oublié |
|
Comment ça marche
extract JSON SharpHound (.zip)
│ (import via BloodHound CE)
BloodHound CE ──▶ Neo4j (graphe, bolt :7687)
▲
│ Cypher lecture seule (audité)
┌────────────────┴─────────────────┐
serveur MCP « bloodhound » agent Python (Claude Agent SDK)
(Claude Code / Desktop / plugin) (REPL + one-shot)
└──── mêmes outils : profils, chemins edge-filtrés,
catalogue de requêtes vérifiées, owned… ────┘BloodHound CE calcule tous les liens à l'import ; l'agent interroge le graphe. Claude choisit lui-même les outils, itère et rédige — un vrai agent tool-use. Deux frontaux partagent les mêmes outils : le serveur MCP (Claude Code / Desktop / plugin) et l'agent Python (REPL / scripting).
Arrêter / nettoyer
docker compose down # arrête (garde les données)
docker compose down -v # arrête ET efface les donnéesDéveloppement
pip install -r requirements-dev.txt # ou: pip install -e ".[dev]"
pytest -q # unitaires (intégration auto-skippée)
BH_TEST_NEO4J=1 pytest -q # + intégration (Neo4j chargé requis)
claude plugin validate . --strict # valide le plugin / marketplaceStructure du projet
bloodhound lanceur : démarre tout + ouvre Claude Code
setup.sh bootstrap 1re fois (installe + option données démo)
docker-compose.yml bases BloodHound CE (Neo4j + PostgreSQL + appli)
docker-compose.readonly.yml overlay lecture seule stricte (optionnel)
scripts/ce_ingest.py import headless (.json et/ou .zip) via l'API CE
.mcp.json · CLAUDE.md Claude Code en local (serveur MCP + instructions)
.claude-plugin/ · SKILL.md plugin marketplace (manifestes + compétence)
bin/mcp-server.sh lanceur MCP du plugin (bootstrap venv, sortie stderr)
agent/
main.py agent Python : REPL + one-shot (-q, -c, --export, --lang)
mcp_server.py serveur MCP standalone (Claude Code / Desktop / plugin)
tools.py outils exposés à Claude (profils, chemins, catalogue, owned…)
queries.py edges d'attaque + catalogue de requêtes vérifiées
neo4j_client.py accès Neo4j lecture seule (+ audit)
guardrails.py blocage des requêtes d'écriture
render.py affichage type chat (tableaux, couleurs, 🔴)
report.py export d'un rapport markdown
audit.py journal des requêtes · owned.py ensemble « owned »
knowledge/ schéma BloodHound + recettes Cypher + Azure (contexte de l'agent)
tests/ tests unitaires + intégrationMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseCqualityDmaintenanceAn extension that allows Large Language Models to interact with and analyze Active Directory environments through natural language queries instead of manual Cypher queries.100160
- Flicense-qualityDmaintenanceBloodHound-MCP-AI is integration that connects BloodHound with AI through Model Context Protocol, allowing security professionals to analyze Active Directory attack paths using natural language instead of complex Cypher queries.372
- AlicenseBqualityBmaintenanceEnables security professionals to query and analyze Active Directory attack paths from BloodHound Community Edition data using natural language through Claude Desktop's Model Context Protocol interface.79121GPL 3.0
- AlicenseAqualityDmaintenanceConnects LLMs to BloodHound Enterprise for natural language attack path analysis, Cypher queries, and exploration of Active Directory, Azure/Entra ID, and OpenGraph environments.20GPL 3.0
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
IaC attack-path auditor: finds internet-to-crown-jewel chains in Terraform/CFN/K8s.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/The-bub/Agent-BloodHound'
If you have feedback or need assistance with the MCP directory API, please join our Discord server