
Cadre de recherche évolutionnaire sensible à la trajectoire pour le red-teaming d’agents LLM sur des serveurs MCP, générant des invites adversariales afin de cartographier les paysages de vulnérabilités par catégories de risque.

T-MAP est un framework de recherche évolutionnaire sensible aux trajectoires pour le red-teaming d'agents LLM sur des serveurs MCP. Il génère et mute de manière itérative des invites adversariales guidées par les trajectoires d'exécution, cartographiant le paysage de vulnérabilité de l'agent à travers diverses catégories de risque et styles d'attaque.
pip install -r requirements.txt
Prérequis : Python 3.11+, clés API pour les modèles attaquant et cible, accès à un ou plusieurs serveurs MCP.
Serveur unique
python run_main.py \
--server Slack \
--attacker_model "deepseek-chat" \
--attacker_model_api "https://api.deepseek.com" \
--attacker_model_api_token "$DEEPSEEK_API_KEY" \
--target_model "openai/gpt-5-mini" \
--target_model_api "https://openrouter.ai/api/v1" \
--target_model_api_token "$OPENROUTER_API_KEY" \
--stdio_server_cmd npx \
--stdio_server_args "-y slack-mcp-server@latest --transport stdio" \
--stdio_server_envs "SLACK_MCP_XOXP_TOKEN=$SLACK_MCP_XOXP_TOKEN SLACK_MCP_ADD_MESSAGE_TOOL=true" \
--iteration 100 \
--mutation_n 3
Serveurs multiples
python run_main.py \
--server "Slack,CodeExecutor" \
--attacker_model "deepseek-chat" \
--attacker_model_api "https://api.deepseek.com" \
--attacker_model_api_token "$DEEPSEEK_API_KEY" \
--target_model "openai/gpt-5-mini" \
--target_model_api "https://openrouter.ai/api/v1" \
--target_model_api_token "$OPENROUTER_API_KEY" \
--stdio_server_cmd_1 npx \
--stdio_server_args_1 "-y slack-mcp-server@latest --transport stdio" \
--stdio_server_envs_1 "SLACK_MCP_XOXP_TOKEN=$SLACK_MCP_XOXP_TOKEN SLACK_MCP_ADD_MESSAGE_TOOL=true" \
--stdio_server_cmd_2 docker \
--stdio_server_args_2 "run -i --rm --workdir /app mcp-code-executor:latest" \
--iteration 100 \
--mutation_n 3
D'autres exemples dans run_examples.sh.
| Argument | Description |
|---|---|
--server | Nom(s) du/des serveur(s) MCP, séparés par des virgules pour plusieurs serveurs |
--server_config | Fichier de configuration JSON pour les définitions de serveurs |
--stdio_server_cmd/args/envs | Mode stdio pour serveur unique |
--stdio_server_cmd_1..8 / _args_1..8 / _envs_1..8 | Mode stdio indexé pour plusieurs serveurs |
--remote_server_url, --remote_server_token | Point de terminaison MCP distant unique |
| Argument | Description |
|---|---|
--attacker_model/api/api_token | LLM attaquant (génère et mute les invites) |
--target_model/api/api_token | Agent LLM cible (exécute les invites via MCP) |
--level_judge_model/api/api_token | LLM juge (par défaut, celui de l'attaquant s'il est omis) |
| Argument | Défaut | Description |
|---|---|---|
--iteration | 100 | Nombre de cycles de mutation |
--mutation_n | 3 | Mutants échantillonnés par cycle |
--max_workers | 10 | Parallélisme pour la génération et l'évaluation |
--query_timeout | 300 | Délai d'expiration par requête (secondes) |
--checkpoint_interval | 20 | Enregistrer un point de contrôle toutes les N générations |
--output_dir | outputs | Résultats et instantanés TCG |
--log_dir | logs | Journaux texte |
.
├── core/
│ ├── base.py # Orchestration et évaluation des expériences
│ ├── config.py # Catégories de risque et styles d'attaque
│ ├── langchain_client.py # Client MCP basé sur LangChain
│ ├── llm.py # Wrapper LLM
│ └── utils.py # Définitions des arguments CLI
├── prompts/
│ └── tmap.py # Invites de départ, de jugement, de mutation et d'analyse
├── run_main.py # Point d'entrée
├── run_examples.sh # Exemples de commandes
└── requirements.txt
@article{lee2026tmapredteamingllmagents,
title={T-MAP: Red-Teaming LLM Agents with Trajectory-aware Evolutionary Search},
author={Hyomin Lee and Sangwoo Park and Yumin Choi and Sohyun An and Seanie Lee and Sung Ju Hwang},
year={2026},
eprint={2603.22341},
archivePrefix={arXiv},
primaryClass={cs.CR},
url={https://arxiv.org/abs/2603.22341}
}