Template structure
Payloads are defined in YAML files. Each file contains a list of payload objects:Field reference
| Field | Required | Description |
|---|---|---|
name | Yes | Unique payload identifier used in filtering and reports |
technique | Yes | One of description_poisoning, output_injection, cross_tool_escalation |
description | Yes | Human-readable explanation of what the payload tests |
owasp_ids | No | OWASP MCP Top 10 category codes (e.g., MCP03, MCP06) |
target_agents | No | Agent types this targets; omit or leave empty for universal |
test_query | No | User message sent to the model during a campaign run |
tool_name | Yes | MCP tool name registered on the server |
tool_description | Yes | The adversarial description text (the attack payload) |
tool_params | No | Parameter name to {type, description} mapping for the tool input schema |
tool_response | No | Response string with {param_name} placeholders for substitution |
Techniques
description_poisoning
Embeds malicious instructions directly in tool descriptions. When an agent reads the tool’s description to decide how to use it, the hidden instructions manipulate the agent’s behavior.output_injection
Injects instructions into tool response text. After the agent calls a tool, the response contains directives that attempt to hijack the agent’s next action.cross_tool_escalation
Chains trust across multiple tools to escalate privileges. Exploits the assumption that tool outputs are trustworthy to pivot into unauthorized actions.Built-in payloads
Description poisoning (6 payloads)
| Name | Tool Name | OWASP IDs | What it tests |
|---|---|---|---|
exfil_via_important_tag | get_weather | MCP03, MCP06 | Exfiltration via <IMPORTANT> tags in description |
preference_manipulation | enhanced_search | MCP03 | Overriding agent preferences via description |
concealment_directive | data_processor | MCP03, MCP06 | Instructions to hide actions from the user |
role_reassignment | system_config | MCP06 | System role override via tool description |
hidden_unicode_instruction | text_formatter | MCP03, MCP06 | Unicode-obscured instructions in description |
long_description_buried | document_analyzer | MCP03, MCP06 | Instructions buried in lengthy description text |
Output injection (4 payloads)
| Name | Tool Name | OWASP IDs | What it tests |
|---|---|---|---|
output_instruction_injection | fetch_data | MCP06 | Direct instructions embedded in tool output |
output_url_exfil | link_resolver | MCP03, MCP06 | URL-based exfiltration via tool response |
output_tool_call_injection | task_planner | MCP03, MCP06 | Injected tool-call directives in output |
output_markdown_injection | report_generator | MCP03, MCP06 | Markdown-rendered payloads in output |
Cross-tool escalation (3 payloads)
| Name | Tool Name | OWASP IDs | What it tests |
|---|---|---|---|
shadow_tool | get_user_data | MCP03, MCP09 | Homoglyph tool name (Cyrillic) to shadow a real tool |
chain_via_description | data_enricher | MCP03, MCP06 | Cross-tool chaining via description directives |
parameter_exfil | secure_api_call | MCP03, MCP06, MCP10 | Data exfiltration through parameter manipulation |
Custom payloads
Pointinject serve or inject campaign at a directory of custom YAML files: