cyanheads/pentest-mcp-server
GitHub: cyanheads/pentest-mcp-server
Stars: 1 | Forks: 0
@cyanheads/pentest-mcp-server
Offline methodology engine and payload workshop for authorized penetration testing, CTF, security research, and education via MCP. STDIO or Streamable HTTP.
7 Tools
**Public Hosted Server:** [https://pentest.caseyjhand.com/mcp](https://pentest.caseyjhand.com/mcp)
## Tools
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_guide`
Instruction tool. Returns a structured attack methodology playbook for the given vector and optional target context.
- Fifteen attack vectors via a single `vector` enum: `auth_bypass`, `idor`, `ssrf`, `xss`, `sqli`, `xxe`, `path_traversal`, `cors`, `csrf`, `open_redirect`, `deserialization`, `race_condition`, `ssti`, `command_injection`, `jwt_attack`
- Optional `target_context` (`stack`, `waf`, `recon_notes`) narrows the playbook to stack-specific techniques and WAF-bypass-aware variants
- Phase filtering: `all`, `recon`, `enumeration`, `exploitation`, `post_exploitation`
- Every technique entry includes detection indicators and recommended mitigations — usable as a blue team planning aid
- `nextToolSuggestions` pre-filled with payload generator and ATT&CK lookup calls from the methodology context
- `authorized_use_reminder` field rendered as the first line of every response so the framing reaches all clients
- OWASP Testing Guide test case IDs and ATT&CK technique IDs included for cross-referencing
### `pentest_analyze_response`
Bridge tool. Paste raw HTTP output from authorized probing; get structured findings.
- Accepts `response_headers` (raw HTTP headers), `response_body` (up to 10,000 chars), `status_code`, and freeform `context`
- Detects: version disclosure, stack traces, internal paths, debug headers, technology fingerprints, auth patterns, CORS misconfigurations, missing security headers, interesting fields, error messages
- Each finding carries: category, severity (`info`/`low`/`medium`/`high`), what was detected, why it matters, how a defender would detect exploitation, and remediation
- Technology fingerprinting summary (`server_software`, `framework`, `language`, `database`, `cloud_provider`) ready for use as `target_context` in `pentest_guide` or `pentest_map_techniques`
- `nextToolSuggestions` pre-filled from fingerprints and findings
### `pentest_lookup_technique`
Single-record ATT&CK lookup. Accepts exact IDs (`T1190`, `T1059.001`) or keyword search.
- Full technique record: name, tactics, description, target platforms
- Detection context: summary, ATT&CK data sources (log sources, sensors), concrete behavioral indicators
- Mitigations: ATT&CK mitigation IDs, names, and descriptions
- Real-world procedure examples from public threat intelligence reporting
- Sub-technique inclusion toggle (`include_subtechniques`, default `true`)
- ATT&CK dataset version string in every response so callers know the data vintage
### `pentest_lookup_group`
ATT&CK threat group and software lookup. Accepts exact IDs (`G0007`, `S0002`) or name/keyword search (`APT28`, `Mimikatz`).
- Covers both intrusion sets (threat groups, G-prefix) and software entries (malware and tools, S-prefix)
- Returns: name, type (`group` or `software`), aliases, description, and up to 20 techniques used with procedure-level context
- Technique entries link directly to `pentest_lookup_technique` for full detection and mitigation context
- Equally useful for defenders building detection coverage around specific adversary tradecraft
### `pentest_map_techniques`
Discovery and ranking tool. Takes a target profile, returns prioritized testing scope.
- Profile inputs: `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)
- Transparent relevance scoring: 1 point per matching platform, 2 per matching service, 2 for auth type match — criteria documented in each result row so rankings are verifiable
- Each ranked technique includes: relevance rationale, detection opportunity, mitigation summary, and the `pentest_guide` vector for follow-up
- OWASP test cases mapped to the profile alongside ATT&CK techniques
- Configurable result count (1–50, default 15)
### `pentest_encode`
Pure transformation utility. Applies an ordered encoding chain to a payload string.
- Ten encoding types: `url`, `double_url`, `html_entity`, `unicode`, `hex`, `base64`, `js_escape`, `null_byte`, `mixed_case`, `comment_break`
- Chains up to 6 steps applied left-to-right; intermediate values returned for tracing
- Optional step-by-step decode explanation (`explain`, default `true`): how a WAF or server would reverse each layer
- Bypass rationale: why the encoding combination might evade common filter patterns
- `detection_note` included in every response — how defenders detect encoded payload variants — preserving the dual-audience framing
- No live probing — mathematically deterministic transforms only
## Features
- Declarative tool definitions — one file per tool, framework handles registration and validation
- Unified error handling — handlers throw, framework catches, classifies, and formats
- Structured logging with optional OpenTelemetry tracing
- STDIO and Streamable HTTP transports
Pentest-specific:
- **Fully offline at runtime** — no external API calls, no credentials required. All data loaded at startup from embedded modules; zero I/O during request handling
- **MITRE ATT&CK Enterprise** embedded at build time via `scripts/refresh-attack.ts`; in-memory indexed by ID and keyword at startup. Fast-fails with a clear message if the data file is missing
- **OWASP Testing Guide methodology** curated as structured TypeScript modules covering reconnaissance through post-exploitation phases
- **Payload template library** curated and annotated TypeScript modules, one file per vulnerability category, adapted to injection context
- **WAF bypass knowledge** keyed by WAF product and attack vector, referencing public research
- **Encoding chain engine** — pure TypeScript transforms with full decode-path tracing
- All tools annotated `readOnlyHint: true`, `openWorldHint: false` — deterministic output from a bounded embedded dataset
Agent-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 forwards
- `detection_note` and `mitigation` fields required on every technique, finding, and payload — never optional — so defenders always receive usable context alongside offense technique
- Transparent relevance scoring in `pentest_map_techniques` — documented criteria, no opaque composite scores
- `nextToolSuggestions` pre-filled with arguments from the current methodology context — reduces agent planning overhead
- ATT&CK dataset version string on every technique result — callers can reason about data vintage
## Build-time data step
The 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
**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.
## Getting started
### Public Hosted Instance
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"
}
}
}
### Self-Hosted / Local
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
### Prerequisites
- [Bun v1.3.0](https://bun.sh/) or higher (or Node.js v24+).
- ATT&CK data seeded — run `bun run scripts/refresh-attack.ts` once after cloning (Docker builds handle this automatically).
### Installation
1. **Clone the repository:**
2. **Navigate into the directory:**
cd pentest-mcp-server
3. **Install dependencies:**
bun install
4. **Seed the ATT&CK data:**
bun run scripts/refresh-attack.ts
5. **Configure environment:**
cp .env.example .env
# edit .env if needed — no required vars beyond transport defaults
## Configuration
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). | `标签:自动化攻击