loading…
Search for a command to run...
loading…
A scoped Nuclei MCP server that only scans targets from HackerOne scope snapshots, enforcing exact, wildcard, and fuzzy matches before running scans.
A scoped Nuclei MCP server that only scans targets from HackerOne scope snapshots, enforcing exact, wildcard, and fuzzy matches before running scans.
A scoped Nuclei MCP server that refuses to scan anything not found in your
HackerOne scope snapshots. Works as a companion to h1-scope-watcher.
Copilot/Claude (AI agent)
│
│ MCP (stdio)
▼
nuclei-mcp container
│ reads scope
├──────────────────► /data/snapshots/*.json ◄─── h1-scope-watcher writes here
│ runs scan
└──────────────────► nuclei binary (built-in)
The two containers share the same host directory mounted as a volume.
h1-scope-watcher keeps the JSON files up to date; nuclei-mcp only reads them.
Every call to nuclei_scan or check_scope runs this logic before touching the network:
*.json files from /data/snapshotsapi.life360.com → matches api.life360.com)sub.tile.com → matches *.tile.com)life360 → finds api.life360.com, api-cloudfront.life360.com)eligible_for_bounty == true AND eligible_for_submission == truecd nuclei-mcp
docker build -t nuclei-mcp .
Open claude_desktop_config.json (or equivalent) mcp-config.json (copilot) and add:
{
"mcpServers": {
"h1-scope-watcher": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "D:/projects/H1-Scope-Watcher/snapshots:/data/snapshots",
"-e", "SNAPSHOTS_DIR=/data/snapshots",
"mcp/h1-scope"
]
},
"nuclei-mcp": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "D:/projects/H1-Scope-Watcher/snapshots:/data/snapshots",
"-e", "SNAPSHOTS_DIR=/data/snapshots",
"nuclei-mcp"
]
}
}
}
Key point: Both containers mount the exact same host path (
D:/projects/H1-Scope-Watcher/snapshots) so they share the scope data without any extra networking or IPC.
nuclei_scanRun a Nuclei scan — scope-gated.
| Parameter | Type | Default | Description |
|---|---|---|---|
target |
string | — | Domain, URL, or fuzzy name (e.g. "life360") |
templates |
string | "" |
Comma-separated template paths / tags |
severity |
string | "" |
"critical,high" etc. (empty = all) |
rate_limit |
int | 150 |
Requests per second |
extra_flags |
string | "" |
Any extra raw nuclei flags |
Example prompts:
check_scopePreview the scope gate result without scanning.
| Parameter | Type | Description |
|---|---|---|
target |
string | Domain, URL, or fuzzy name |
Example prompts:
list_programsShow all assets from all snapshot files, grouped by eligibility.
| Variable | Default | Description |
|---|---|---|
SNAPSHOTS_DIR |
/data/snapshots |
Path to H1 scope JSON files |
NUCLEI_BIN |
nuclei |
Nuclei binary path |
SCAN_TIMEOUT_SECONDS |
300 |
Per-scan timeout |
From tile.com program example:
| Asset | Type | Bounty | Allowed to scan? |
|---|---|---|---|
tile.com |
URL | ✅ | ✅ Yes |
thetileapp.com |
URL | ✅ | ✅ Yes |
production.tile-api.com |
URL | ✅ | ✅ Yes |
*.tile.com |
WILDCARD | ❌ | ⛔ Blocked |
snipeit.corp.tile.com |
URL | ❌ | ⛔ Blocked |
ci-android.tile.com |
URL | ❌ | ⛔ Blocked |
Only scan targets you own or have explicit written permission to test. This tool does not grant any authorisation — your HackerOne programme agreement is the authorisation document.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"nuclei-mcp": {
"command": "npx",
"args": []
}
}
}