MCP server that connects AI assistants to HackerOne for bug bounty hunting
# Add to your Claude Code skills
git clone https://github.com/PatrikFehrenbach/h1-brainAn MCP server that connects your AI assistant to HackerOne. It pulls your bug bounty history, program scopes, and report details into a local SQLite database, then exposes tools that let any MCP-compatible client (Claude Desktop, Claude Code, etc.) search, analyze, and build on your past work.
It also ships with a pre-built database of 3,600+ publicly disclosed bounty-awarded reports from the HackerOne community — full vulnerability write-ups, weakness types, and bounty amounts. The AI uses both your personal data and public knowledge to generate attack briefings.
The primary tool, hack(handle), generates a full hacking session briefing in a single call: fresh scope from the API, your past findings, public disclosures for that program, weakness patterns, untouched assets, and suggested attack vectors — all formatted as actionable instructions that put the AI in offensive mode.

For a full walkthrough, check out the three-part Bug Bounty Goldfish series:
hack() briefinggraph LR
A["Claude Desktop / Code"] -->|MCP Protocol| B["h1-brain server"]
B -->|API calls| C["HackerOne API"]
B -->|reads / writes| D["Your Reports DB"]
B -->|reads| E["Public Reports DB"]
C -->|reports, programs, scopes| B
D -->|your history + analysis| A
E -->|community knowledge| A
style A fill:#ff5c5c,stroke:#ff5c5c,color:#fff
style B fill:#1a1d27,stroke:#ff5c5c,color:#fff
style C fill:#1a1d27,stroke:#555,color:#fff
style D fill:#1a1d27,stroke:#555,color:#fff
style E fill:#1a1d27,stroke:#555,color:#fff
No comments yet. Be the first to share your thoughts!
flowchart TD
A["hack(handle)"] --> B["Fetch fresh scope from HackerOne API"]
B --> C["Pull your reports on this program from SQLite"]
C --> D["Analyze weakness patterns across ALL programs"]
D --> E["Identify untouched bounty-eligible assets"]
E --> F["Cross-reference public disclosed reports for this program"]
F --> G["Generate attack briefing with agent instructions"]
style A fill:#ff5c5c,stroke:#ff5c5c,color:#fff
style G fill:#ff5c5c,stroke:#ff5c5c,color:#fff
style B fill:#1a1d27,stroke:#555,color:#fff
style C fill:#1a1d27,stroke:#555,color:#fff
style D fill:#1a1d27,stroke:#555,color:#fff
style E fill:#1a1d27,stroke:#555,color:#fff
style F fill:#1a1d27,stroke:#555,color:#fff
git clone https://github.com/PatrikFehrenbach/h1-brain.git
cd h1-brain
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
The public disclosed reports database (disclosed_reports.db) is included in the repo — no extra setup needed.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"h1-brain": {
"command": "/path/to/h1-brain/venv/bin/python",
"args": ["/path/to/h1-brain/server.py"],
"env": {
"H1_USERNAME": "your_hackerone_username",
"H1_API_TOKEN": "your_api_token"
}
}
}
}
Restart Claude Desktop after saving.
claude mcp add h1-brain \
-e H1_USERNAME=your_hackerone_username \
-e H1_API_TOKEN=your_api_token \
-- /path/to/h1-brain/venv/bin/python /path/to/h1-brain/server.py
After connecting, populate your personal database:
fetch_rewarded_reports — Pulls all your bounty-awarded reports with full vulnerability write-ups. This is the most important step.fetch_programs — Pulls all programs you have access to.These only need to be run once. Re-run periodically to sync new reports.
The public disclosed reports are ready to query immediately — no setup needed.
hack(handle)The primary entry point. One call does everything:
Briefing structure:
These query your personal data (h1_data.db). No API calls, instant results.
| Tool | Description |
|------|-------------|
| search_reports(query, program, weakness, severity, limit) | Search your rewarded reports by title, program, weakness type, or severity |
| get_report(report_id) | Full report details with vulnerability write-up and attachments |
| get_report_summary() | Reports grouped by program with totals |
| search_programs(query, bounty_only, limit) | Search your stored programs |
| search_scopes(program, asset, bounty_only, limit) | Search in-scope assets across programs |
| fetch_attachment(report_id, attachment_id?) | Fresh download URLs for report attachments (expire in ~1 hour) |
These query the pre-built database of 3,600+ bounty-awarded public disclosures (disclosed_reports.db).
| Tool | Description |
|------|-------------|
| search_disclosed_reports(query, program, weakness, limit) | Full-text search across public reports — titles and vulnerability write-ups |
| get_disclosed_report(report_id) | Full details of a public disclosed report |
| Tool | Description |
|------|-------------|
| fetch_rewarded_reports | Sync your bounty-awarded reports from the API |
| fetch_programs | Sync your accessible programs |
| fetch_program_scopes(handle) | Sync scopes for a program (called automatically by hack()) |
server.py MCP server
hack_instructions.md Attack briefing instructions (loaded by hack())
h1_data.db Your personal reports, programs, scopes (auto-created, gitignored)
disclosed_reports.db 3,600+ public disclosed bounty reports (ships with repo)
requirements.txt Python dependencies (mcp, httpx)
| Database | Contains | Source |
|----------|----------|--------|
| h1_data.db | Your personal reports, programs, scopes, attachments | HackerOne API (your account) |
| disclosed_reports.db | Public disclosed reports that paid a bounty | Pre-built, ships with repo |
The AI knows the difference. Your personal tools (search_reports, get_report) query your data. Public tools (search_disclosed_reports, get_disclosed_report) query community data. hack() uses both.
The disclosed_reports.db contains publicly disclosed HackerOne reports that:
Each report includes: title, vulnerability details, weakness type, program, asset, CVEs, and bounty amount (when available).
MIT