
Model Context Protocol server for autonomous vulnerability discovery
Model Context Protocol server for security research automation
Compatible with:
MCPwner is a Model Context Protocol (MCP) server that integrates security testing tools into LLM-driven workflows. It provides a unified interface for secret scanning, static analysis (SAST), software composition analysis (SCA), infrastructure-as-code (IaC) security, source fuzzing, reconnaissance, dynamic application security testing (DAST), and vulnerability research including 0-day discovery.
Instead of manually chaining tools and pasting outputs into your LLM, MCPwner standardizes and streams results directly into the model's working context. This enables continuous reasoning, correlation, and attack path discovery across the security research lifecycle - from mapping attack surfaces and identifying known vulnerabilities to uncovering novel attack vectors.
Note: This project is under active development. Learn more about MCPs here.
The following tools are planned for future releases.
Gadget-chain and payload generators for weaponizing deserialization sinks identified during SAST. Mature gadget-chain ecosystems exist for Java, .NET, and PHP; Python is covered via malicious-pickle generation (Ruby/Node deserialization is payload-based and lives in the Payloads corpus below):
Curated payload and wordlist corpora to back the tools above:
"Enumerate and scan example.com"
→ MCPwner chains: Subfinder + Amass → Masscan + Nmap → httpx → Katana + gau → ffuf + Arjun
"Scan https://github.com/example/repo for secrets"
→ MCPwner runs Gitleaks, TruffleHog, detect-secrets and correlates findings
"Run a security audit on my Python project"
→ MCPwner runs Bandit (SAST), OSV-Scanner (SCA), and secrets scanning
"Find vulnerabilities in the authentication module"
→ MCPwner runs CodeQL queries, cross-references with secrets and SCA results
"Test for SQLi and XSS on http://localhost:8080"
→ MCPwner chains: sqlmap + Dalfox and verifies findings
System Requirements:
MCP Client:
Clone the repository:
git clone https://github.com/nedlir/mcpwner.git
cd mcpwner
Configure the server:
cp config/config.yaml.example config/config.yaml
# Edit config/config.yaml as needed
Start the services:
docker-compose up -d --build
Verify services are running:
docker-compose ps
Once Docker containers are running, add MCPwner to your MCP client:
Important: Dynamic Tool Registration
MCPwner uses a modular, opt-in architecture. Security tools are governed by Docker Compose profiles.
.env file (COMPOSE_PROFILES=sast,secrets,reconnaissance,dast,etc) dictates which containers are brought online. Alternatively, you can override this and launch specific profiles via the CLI: docker compose --profile sast --profile dast up -d.semgrep), omit its category (sast) from .env and manually list the other tools you want (bandit,gosec,codeql).utilities category (e.g., Linguist, WireMock, Chromium) are treated as permanent core dependencies. They run unconditionally on docker compose up -d to ensure critical cross-tool dependencies (like language detection) always function.Configuration File Locations:
~/Library/Application Support/Claude/claude_desktop_config.json (macOS)mcp.json in your project or settings directoryOne-Click Install (requires Docker running):
Manual Configuration:
Add the following to your MCP configuration file:
{
"mcpServers": {
"mcpwner": {
"command": "docker",
"args": ["exec", "-i", "mcpwner-server", "python", "src/server.py"],
"env": {}
}
}
}
Restart your MCP client to load the new server configuration.
To scan projects from your host machine, mount them into the container by adding a volume in docker-compose.yaml:
services:
mcpwner:
volumes:
- /path/to/your/projects:/mnt/projects:ro
Then use the create_workspace tool with:
source_type="local"source="/mnt/projects/my-project"MCPwner automatically persists workspace and CodeQL database metadata across container restarts using file-based storage in the shared Docker volume (/workspaces/.metadata/). No configuration required - the system loads existing data on startup and saves after every operation using atomic writes to prevent corruption.
Workspace Cleanup Control:
The cleanup_workspace tool provides granular control:
delete_files=True, delete_metadata=False - Free disk space but preserve workspace history (recommended)delete_files=True, delete_metadata=True - Complete removal of workspace and metadatadelete_files=False, delete_metadata=True - Remove from list but keep files on diskBackup:
# Backup entire workspaces volume
docker run --rm -v mcpwner_workspaces:/data -v $(pwd):/backup \
alpine tar czf /backup/workspaces-backup.tar.gz /data
# Restore volume
docker run --rm -v mcpwner_workspaces:/data -v $(pwd):/backup \
alpine tar xzf /backup/workspaces-backup.tar.gz -C /
MCPwner uses HTTP-based communication between containers to support future remote deployments. While currently optimized for local usage, the architecture can be adapted for remote server deployments with minimal modifications.
Design Principles:
Architecture Overview:
graph LR
subgraph IDE[" "]
LLM[🤖<br/>LLM]
Client[MCP Client]
LLM -.-> Client
end
Server[MCPwner Server]
SAST[SAST Tools]
Secrets[Secrets Scanning]
SCA[SCA Tools]
Recon[Reconnaissance]
CodeQL[CodeQL Service]
Linguist[Language Detection]
Utilities[Utilities]
IaC[IaC Security]
Fuzzing[Source Fuzzing]
DAST[DAST Tools]
Client -->|JSON-RPC 2.0| Server
Server -->|HTTP| SAST
Server -->|HTTP| Secrets
Server -->|HTTP| SCA
Server -->|HTTP| Recon
Server -->|HTTP| CodeQL
Server -->|HTTP| Linguist
Server -->|HTTP| Utilities
Server -->|HTTP| IaC
Server -->|HTTP| Fuzzing
Server -->|HTTP| DAST
style LLM fill:#7C3AED,stroke:#5B21B6,stroke-width:3px,color:#fff
style Client fill:#4A90E2,stroke:#2E5C8A,stroke-width:3px,color:#fff
style Server fill:#F5A623,stroke:#C17D11,stroke-width:3px,color:#fff
style SAST fill:#E74C3C,stroke:#C0392B,stroke-width:2px,color:#fff
style Secrets fill:#9B59B6,stroke:#7D3C98,stroke-width:2px,color:#fff
style SCA fill:#1ABC9C,stroke:#16A085,stroke-width:2px,color:#fff
style Recon fill:#00BCD4,stroke:#0097A7,stroke-width:2px,color:#fff
style CodeQL fill:#E67E22,stroke:#CA6F1E,stroke-width:2px,color:#fff
style Linguist fill:#3498DB,stroke:#2874A6,stroke-width:2px,color:#fff
style Utilities fill:#6D28D9,stroke:#4C1D95,stroke-width:2px,color:#fff
style IaC fill:#059669,stroke:#047857,stroke-width:2px,color:#fff
style Fuzzing fill:#B91C1C,stroke:#7F1D1D,stroke-width:2px,color:#fff
style DAST fill:#D35400,stroke:#A04000,stroke-width:2px,color:#fff
style IDE fill:none,stroke:#ddd,stroke-width:2px,stroke-dasharray: 5 5
MCPwner exposes the following tools through the MCP interface:
Workspace Management:
create_workspace - Initialize scanning workspace from local path, Git URL, or GitHub repolist_workspaces - List all available workspacescleanup_workspace - Remove workspace and associated dataFindings Ledger:
Workspace-scoped, persisted to disk (<workspace>/findings/<id>.json), and always available — no container or health gate required. This is the source of truth for the multi-agent deep-research pipeline: every hypothesis, PoC result, and review verdict is a finding entry rather than prose.
upsert_finding - Create or update a finding. Deep-merges into an existing entry by default, so one agent can write its own sub-object (e.g. poc) without clobbering another agent's fields (e.g. review)list_findings - List all findings in a workspace, optionally filtered by status (e.g. poc-confirmed, review-approved)get_finding - Retrieve a single finding by idSAST (Static Analysis):
run_sast_scan - Run static analysis tools (Semgrep, Bandit, Gosec, Brakeman, PMD, Psalm, NodeJsScan, Joern, YASA)get_sast_report - Retrieve SAST scan resultssast_list_tools - List available SAST toolsSecrets Detection:
run_secrets_scan - Run secrets scanning tools (Gitleaks, TruffleHog, Whispers, detect-secrets, Hawk-Eye)get_secrets_report - Retrieve secrets scan resultssecrets_list_tools - List available secrets scanning toolsSCA (Software Composition Analysis):
run_sca_scan - Analyze dependencies for vulnerabilities (Grype, Syft, OSV-Scanner, Retire.js)get_sca_report - Retrieve SCA scan resultssca_list_tools - List available SCA toolsReconnaissance:
run_reconnaissance_scan - Run a single reconnaissance tool (Subfinder, Amass, Nmap, Masscan, httpx, Katana, ffuf, bbot, gau, Arjun, wafw00f, Kiterunner)run_reconnaissance_chain - Chain multiple reconnaissance tools sequentiallyget_reconnaissance_report - Retrieve reconnaissance scan resultsreconnaissance_list_tools - List available reconnaissance toolsCodeQL:
detect_languages - Detect languages in codebase via Linguistcreate_codeql_database - Create CodeQL database for analysislist_databases - List available CodeQL databaseslist_query_packs - List available query packsexecute_query - Run specific CodeQL queriesInfrastructure & IaC Security:
run_iac_scan - Scan infrastructure-as-code for misconfigurations (Checkov, KICS, Terrascan, TFSec, Hadolint)get_iac_report - Retrieve IaC scan resultsiac_list_tools - List available IaC scanning toolsSource Fuzzing:
run_fuzzing_scan - Run a white-box, coverage-guided fuzzing campaign against a per-target harness (Atheris, Jazzer, Jazzer.js, PHP-Fuzzer)get_fuzzing_report - Retrieve fuzzing crash results (crashing input + stack trace)fuzzing_list_tools - List available fuzzing engines, filtered by detected languageDAST (Dynamic Application Security Testing):
run_dast_scan - Run dynamic application security testing tools (sqlmap, NoSQLMap, Commix, Dalfox, SSTImap, SSRFmap, jwt_tool, interactsh)get_dast_report - Retrieve DAST scan resultsdast_list_tools - List available DAST toolsUtilities:
run_utilities_scan - Run a utility tool against a live target (Linguist, WireMock, Mitmproxy, aiohttp, Headless Chromium)get_utilities_report - Retrieve utility scan resultsutilities_list_tools - List available utility tools and their config optionsHealth & Monitoring:
health_check - Check server and tool availabilitylist_tools - List all available tools and their statusMCPwner executes security tools that may perform intrusive operations. Only use on systems and codebases you own or have explicit permission to test - unauthorized access is illegal. Restrict MCP server access to authorized users and consider network isolation for production deployments. Review tool configurations before running scans as some tools can generate significant network traffic or system load. Log tool execution and results, keeping in mind that security scans can trigger alerts in monitoring systems. Follow responsible disclosure practices when reporting vulnerabilities discovered using MCPwner. Keep Docker images updated and scan containers for vulnerabilities regularly. Never commit API keys, tokens, or credentials to configuration files - use environment variables or secret management systems instead.
Also, you should be responsible for your own security when running these tools and accessing 3rd party libraries, it's suggested to run everything sandboxed and with no special auth (minimized and hardened where feasible)
![]() | ![]() | ![]() | ![]() | ![]() |
|---|
| Subfinder | Amass | Nmap | Masscan | ffuf |