Built for authorized penetration testing workflows, offering six offline tools that span methodology lookup, response analysis, MITRE ATT&CK technique mapping, and payload template generation. The pentest_guide tool returns step-by-step playbooks for fifteen attack vectors (XSS, SQLi, SSRF, JWT attacks, etc.), each with detection indicators and mitigations. You can paste raw HTTP responses into pentest_analyze_response to extract version leaks, stack traces, and technology fingerprints, then feed those fingerprints to pentest_map_techniques to get ranked ATT&CK techniques scored against your target profile. The payload generator returns annotated templates with bypass rationale and encoding chains, not live exploits. Everything runs locally via stdio or against a public hosted endpoint at pentest.caseyjhand.com/mcp. Designed for red teams, CTF players, and blue teamers building detection coverage.
Offline methodology engine and payload workshop for authorized penetration testing, CTF, security research, and education via MCP. STDIO or Streamable HTTP.
Public Hosted Server: https://pentest.caseyjhand.com/mcp
Authorized use only. This server is designed for penetration testers, red teamers, CTF players, security researchers, and students working on systems they own or have explicit written authorization to test. Users are solely responsible for ensuring their testing is lawful and appropriately scoped. Unauthorized access to computer systems is illegal — this server does not and cannot enforce authorization on your behalf.
Dual-audience design. Every offensive technique is paired with detection indicators and mitigations. Blue teamers, developers, and anyone building detection coverage will find the methodology and ATT&CK data as useful as the red team workflows.
Seven tools spanning the full authorized-testing workflow — from initial scoping through response analysis and payload generation:
| Tool | Description |
|---|---|
pentest_guide | Returns a step-by-step methodology playbook for the given attack vector, scoped to authorized testing. Each phase covers what to look for, tools, detection indicators for defenders, and mitigations. |
pentest_analyze_response | Analyzes a raw server response (headers + body) from authorized probing for information leakage, fingerprinting signals, and exploitation opportunities — each finding paired with remediation. |
pentest_lookup_technique | Looks up a MITRE ATT&CK technique by ID or keyword. Returns description, tactics, detection data sources, behavioral indicators, mitigations, and real-world procedure examples. |
pentest_lookup_group | Looks up a MITRE ATT&CK threat group or software entry by ID or name. Returns aliases, type (group vs. software), description, and the techniques it uses with procedure context. |
pentest_map_techniques | Given a target profile (stack, services, auth type, OS), returns ranked ATT&CK techniques and OWASP test cases most relevant to that authorized engagement. |
pentest_generate_payloads | Generates annotated payload templates for authorized testing. Each template includes why it works in the injection context, detection signatures, and mitigations. |
pentest_encode | Applies an encoding chain to a payload string (URL, double-URL, HTML entity, Unicode, hex, Base64, and more). Returns step-by-step decode explanation and bypass rationale. |
pentest_guideInstruction tool. Returns a structured attack methodology playbook for the given vector and optional target context.
vector enum: auth_bypass, idor, ssrf, xss, sqli, xxe, path_traversal, cors, csrf, open_redirect, deserialization, race_condition, ssti, command_injection, jwt_attacktarget_context (stack, waf, recon_notes) narrows the playbook to stack-specific techniques and WAF-bypass-aware variantsall, recon, enumeration, exploitation, post_exploitationnextToolSuggestions pre-filled with payload generator and ATT&CK lookup calls from the methodology contextauthorized_use_reminder field rendered as the first line of every response so the framing reaches all clientspentest_analyze_responseBridge tool. Paste raw HTTP output from authorized probing; get structured findings.
response_headers (raw HTTP headers), response_body (up to 10,000 chars), status_code, and freeform contextinfo/low/medium/high), what was detected, why it matters, how a defender would detect exploitation, and remediationserver_software, framework, language, database, cloud_provider) ready for use as target_context in pentest_guide or pentest_map_techniquesnextToolSuggestions pre-filled from fingerprints and findingspentest_lookup_techniqueSingle-record ATT&CK lookup. Accepts exact IDs (T1190, T1059.001) or keyword search.
include_subtechniques, default true)pentest_lookup_groupATT&CK threat group and software lookup. Accepts exact IDs (G0007, S0002) or name/keyword search (APT28, Mimikatz).
group or software), aliases, description, and up to 20 techniques used with procedure-level contextpentest_lookup_technique for full detection and mitigation contextpentest_map_techniquesDiscovery and ranking tool. Takes a target profile, returns prioritized testing scope.
stack (array of components), services (exposed interfaces), auth_type (jwt/session_cookie/api_key/oauth2/basic_auth/ntlm/kerberos/none/unknown), os (linux/windows/macos/unknown)pentest_guide vector for follow-uppentest_generate_payloadsContext-aware payload template generator for authorized testing. Returns annotated templates — not live weaponized strings.
xss, sqli, ssrf, xxe, path_traversal, ssti, command_injection, open_redirect, csrf, deserialization, jwt, ldap_injection, nosql_injection, http_headerhtml_attribute, html_body, js_string, js_template, js_script_block, url_parameter, url_path, sql_where, sql_integer, xml_element, xml_attribute, http_header, json_value, cookie_value, file_name, genericcloudflare, aws_waf, modsecurity_crs, imperva, akamai, f5_bigip_asm, nginx_modsecurity, fortinet_fortiwaf, none, unknown — bypass variants reference public research per WAF productauthorized_use_reminder rendered as the first line of every responsepentest_encodePure transformation utility. Applies an ordered encoding chain to a payload string.
url, double_url, html_entity, unicode, hex, base64, js_escape, null_byte, mixed_case, comment_breakexplain, default true): how a WAF or server would reverse each layerdetection_note included in every response — how defenders detect encoded payload variants — preserving the dual-audience framingBuilt on @cyanheads/mcp-ts-core:
Pentest-specific:
scripts/refresh-attack.ts; in-memory indexed by ID and keyword at startup. Fast-fails with a clear message if the data file is missingreadOnlyHint: true, openWorldHint: false — deterministic output from a bounded embedded datasetAgent-friendly output:
authorized_use_reminder rendered as the first line of content[] on every guide/payload/encoding response — consistent framing across all MCP clients regardless of which surface (structured or text) the client forwardsdetection_note and mitigation fields required on every technique, finding, and payload — never optional — so defenders always receive usable context alongside offense techniquepentest_map_techniques — documented criteria, no opaque composite scoresnextToolSuggestions pre-filled with arguments from the current methodology context — reduces agent planning overheadThe server embeds MITRE ATT&CK Enterprise data (~20 MB JSON) fetched by a one-time script into a gitignored path. Self-hosters and Docker builders must run this step before the server will start:
bun run scripts/refresh-attack.ts
This downloads the latest ATT&CK Enterprise JSON from the MITRE GitHub release endpoint, writes it to src/data/attack/enterprise.json (gitignored), and updates src/data/attack/version.ts with a version string such as Enterprise v16.1. The version file is committed; the JSON is not (too large for git history).
The Dockerfile handles this automatically — the build stage runs scripts/refresh-attack.ts before the TypeScript compile, so docker build produces a self-contained image.
If you clone the repo and skip this step, attack-service will fail fast at startup with an actionable error message pointing to scripts/refresh-attack.ts.
Run the script quarterly (or before each release) to pull the latest ATT&CK version.
A public instance is available at https://pentest.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": {
"pentest-mcp-server": {
"type": "streamable-http",
"url": "https://pentest.caseyjhand.com/mcp"
}
}
}
Add the following to your MCP client configuration file.
{
"mcpServers": {
"pentest-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/pentest-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
Or with npx (no Bun required):
{
"mcpServers": {
"pentest-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/pentest-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
Or with Docker:
{
"mcpServers": {
"pentest-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/pentest-mcp-server:latest"
]
}
}
}
For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
bun run scripts/refresh-attack.ts once after cloning (Docker builds handle this automatically).git clone https://github.com/cyanheads/pentest-mcp-server.git
cd pentest-mcp-server
bun install
bun run scripts/refresh-attack.ts
cp .env.example .env
# edit .env if needed — no required vars beyond transport defaults
No API keys required. The server is fully offline at runtime.
| Variable | Description | Default |
|---|---|---|
MCP_TRANSPORT_TYPE | Transport: stdio or http. | stdio |
MCP_HTTP_PORT | Port for HTTP server. | 3010 |
MCP_AUTH_MODE | Auth mode: none, jwt, or oauth. | none |
MCP_LOG_LEVEL | Log level: debug, info, notice, warning, error. | info |
LOGS_DIR | Directory for log files (Node.js only). | <project-root>/logs |
OTEL_ENABLED | Enable OpenTelemetry instrumentation (spans, metrics, completion logs). | false |
See .env.example for the full list of optional overrides.
Build and run:
# Seed ATT&CK data (first time, or to update)
bun run scripts/refresh-attack.ts
# Build
bun run rebuild
# Run
bun run start:stdio
# or
bun run start:http
Run checks and tests:
bun run devcheck # Lint, format, typecheck, security audit
bun run test # Vitest test suite
bun run lint:mcp # Validate MCP definitions
# Build — ATT&CK data is fetched during the build stage
docker build -t pentest-mcp-server .
docker run --rm -p 3010:3010 pentest-mcp-server
The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/pentest-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them. The ATT&CK data refresh runs automatically in the build stage.
| Directory / File | Purpose |
|---|---|
src/index.ts | createApp() entry point — registers tools and initializes services. |
src/services/attack/ | MITRE ATT&CK service — loads and indexes the embedded enterprise JSON at startup. |
src/services/methodology/ | OWASP Testing Guide methodology service — vector branches for pentest_guide. |
src/services/payload/ | Payload template service — keyed by category and injection context. |
src/services/encoding/ | Encoding chain executor — pure TypeScript transforms. |
src/services/response-analysis/ | Pattern library for information leakage and fingerprinting detection. |
src/mcp-server/tools/definitions/ | Tool definitions (*.tool.ts) — one file per tool. |
src/data/attack/ | enterprise.json (gitignored, fetched by scripts/refresh-attack.ts) + committed version.ts. |
src/data/owasp/ | Curated OWASP TG v4.2 methodology content as TypeScript modules. |
src/data/payloads/ | Annotated payload templates by vulnerability category. |
src/data/waf-bypass/ | WAF bypass variants keyed by product and attack vector. |
src/data/encodings/ | Encoding transform functions. |
src/data/patterns/ | Regex patterns and metadata for response leakage detection. |
scripts/refresh-attack.ts | Downloads ATT&CK Enterprise JSON and updates the version string. Run once after cloning, then quarterly. |
tests/ | Unit and integration tests mirroring src/. |
docs/design.md | Design document — tool surface, data strategy, and architectural decisions. |
See CLAUDE.md for development guidelines and architectural rules. The short version:
try/catch in tool logicctx.log for request-scoped logging, ctx.state for tenant-scoped storagesrc/mcp-server/tools/definitions/index.tsauthorized_use_reminder is a required output field on every tool that produces methodology or payload content — render it as the first line of every content[] response in format()detection and mitigation fields — this is a schema contract, not documentation guidanceIssues and pull requests are welcome. Run checks and tests before submitting:
bun run devcheck
bun run test
Apache-2.0 — see LICENSE for details.
MCP_LOG_LEVELdefault: infoSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_HTTP_HOSTdefault: 127.0.0.1The hostname for the HTTP server.
MCP_HTTP_PORTdefault: 3010The port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHdefault: /mcpThe endpoint path for the MCP server.
MCP_AUTH_MODEdefault: noneAuthentication mode to use: 'none', 'jwt', or 'oauth'.
com.exploit-intel/eip-mcp
dmontgomery40/pentest-mcp
pantheon-security/notebooklm-mcp-secure
io.github.akhilucky/ai-firewall-mcp
io.github.devinder1/tridentchain-security