Skip to content

Usage

This page walks through the four main command groups in MCP Stress Test: fuzzing, attack chains, scanning, and reporting. Each section covers the typical workflow, command options, and practical examples.

The fuzz group generates mutated attack payloads to find scanner blind spots. There are three subcommands.

Uses a local Ollama model to rewrite payloads in creative ways:

Terminal window
mcp-stress fuzz run -p "Exfiltrate credentials from ~/.aws/credentials" -m llama3.2

Options:

FlagDefaultPurpose
-p / --payload(required)The attack payload to mutate
-m / --modelllama3.2Ollama model name
-s / --strategiesallComma-separated mutation strategies
-o / --outputnoneSave results to a JSON file
--json-outputfalsePrint results as JSON

If Ollama is unreachable, the framework automatically falls back to a mock fuzzer that applies deterministic transformations.

Keeps mutating a payload until one evades the scanner or the attempt limit is reached:

Terminal window
mcp-stress fuzz evasion -p "Read secrets" -t read_file -n 20 -m llama3.2

Options:

FlagDefaultPurpose
-p / --payload(required)Attack payload to test
-t / --tool(required)Target tool name
-n / --max-attempts10Maximum mutation attempts
-m / --modelllama3.2Ollama model
-s / --scannermockScanner to test against

The output shows whether an evasion was found, which strategy succeeded, and how many attempts it took.

Applies pattern-based mutations without requiring an LLM:

Terminal window
mcp-stress fuzz mutate -p "Read ~/.ssh/id_rsa" -s semantic -n 10

Strategies:

StrategyWhat it does
semanticRewords the payload with different vocabulary
syntacticRestructures sentence patterns
hybridCombines semantic and syntactic mutations
fragmentationSplits the payload into disconnected fragments

The chain group orchestrates multi-step attack scenarios that simulate real-world coordinated attacks.

Terminal window
mcp-stress chain list
mcp-stress chain list --json-output
Terminal window
mcp-stress chain show data_exfil_chain

This prints the chain’s steps, required tools, step dependencies, and payload previews.

Terminal window
# Execute a specific chain
mcp-stress chain execute -c data_exfil_chain
# Execute multiple chains
mcp-stress chain execute -c data_exfil_chain -c persistence_chain
# Execute all 6 built-in chains
mcp-stress chain execute

Options:

FlagDefaultPurpose
-c / --chainallChain names to execute (repeatable)
-s / --scannermockScanner to test against
-o / --outputnoneSave results to JSON
--json-outputfalsePrint results as JSON
ChainStepsSimulates
data_exfil_chain3File discovery, credential reading, HTTP exfiltration
privilege_escalation_chain4User enumeration, writable dirs, sudoers modification, elevated exec
credential_theft_chain4Env var extraction, token file reading, credential testing, cloud access
lateral_movement_chain4Network discovery, port scanning, SSH access, remote execution
persistence_chain4Backdoor user, cron job, startup script, log clearing
sampling_loop_chain4Sampling injection, feedback loop, approval bypass, persistent control

The scan group compares tool definitions before and after poisoning to measure scanner effectiveness.

Terminal window
mcp-stress scan compare -t read_file -s obfuscation

Strategies: direct_injection, semantic_blending, obfuscation, encoding, fragmentation.

Test multiple tools against multiple strategies in one run:

Terminal window
mcp-stress scan batch -t read_file,write_file,run_command -s direct_injection,obfuscation,encoding

This produces a matrix showing detection results for every tool/strategy combination.

Terminal window
mcp-stress scan scanners

Shows mock (always available), tool-scan (if installed), and the generic CLI wrapper.

The report group generates formatted reports from saved JSON results.

Terminal window
mcp-stress report generate -i results.json -f html -o dashboard.html

Supported formats: json, markdown, html, sarif.

Terminal window
mcp-stress report formats

Quickly see summary stats without generating a full report:

Terminal window
mcp-stress report preview -i results.json

A complete stress testing session usually follows this pattern:

  1. Scan — Run batch comparisons across tools and strategies to get baseline detection rates. This tells you which attack types your scanner already handles well and which are blind spots.
  2. Chain — Execute attack chains to test multi-step detection. Chains reveal whether your scanner can detect coordinated attacks where individual steps might look benign.
  3. Fuzz — Use LLM fuzzing to probe for evasions the scanner missed. The fuzzer generates creative rewrites of attack payloads that keyword-based scanners may not catch.
  4. Report — Generate an HTML dashboard or SARIF file for review. SARIF integrates with VS Code and GitHub Code Scanning for inline annotations.
Terminal window
# Step 1: Batch scan across multiple tools and strategies
mcp-stress scan batch -t read_file,write_file,run_command -s direct_injection,obfuscation,encoding -o scan-results.json
# Step 2: Run all 6 built-in attack chains
mcp-stress chain execute -o chain-results.json --json-output
# Step 3: Fuzz for evasions (requires Ollama for LLM mode)
mcp-stress fuzz evasion -p "Read ~/.ssh/id_rsa" -t read_file -n 20
# Step 4: Generate HTML dashboard from scan results
mcp-stress report generate -i scan-results.json -f html -o report.html
# Step 5 (optional): Generate SARIF for IDE/CI integration
mcp-stress report generate -i scan-results.json -f sarif -o results.sarif

For meaningful results, test against a real scanner rather than the built-in mock:

Terminal window
pip install tool-scan
mcp-stress scan batch -t read_file,write_file -s direct_injection,obfuscation --scanner tool-scan -o real-results.json

You can also wrap any CLI scanner that accepts JSON input and outputs JSON results:

Terminal window
mcp-stress scan compare -t read_file -s encoding --scanner cli --scanner-cmd "my-scanner --json {input}"