https://github.com/uunw/h1mcp
HackerOne MCP server in Rust — full HackerOne API coverage (reports, programs, scope, payouts, hacktivity) + local draft management, exposed as Model Context Protocol tools for Claude Desktop, Claude Code, and any MCP client.
https://github.com/uunw/h1mcp
ai-tools anthropic bug-bounty bugbounty claude claude-code claude-desktop hackerone hackerone-api mcp mcp-server model-context-protocol pentesting rust security
Last synced: 18 days ago
JSON representation
HackerOne MCP server in Rust — full HackerOne API coverage (reports, programs, scope, payouts, hacktivity) + local draft management, exposed as Model Context Protocol tools for Claude Desktop, Claude Code, and any MCP client.
- Host: GitHub
- URL: https://github.com/uunw/h1mcp
- Owner: uunw
- License: mit
- Created: 2026-05-25T08:48:44.000Z (2 months ago)
- Default Branch: main
- Last Pushed: 2026-06-23T10:13:08.000Z (about 1 month ago)
- Last Synced: 2026-06-23T10:27:02.769Z (about 1 month ago)
- Topics: ai-tools, anthropic, bug-bounty, bugbounty, claude, claude-code, claude-desktop, hackerone, hackerone-api, mcp, mcp-server, model-context-protocol, pentesting, rust, security
- Language: Rust
- Homepage: https://github.com/uunw/h1mcp/pkgs/container/h1mcp
- Size: 85 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# h1mcp — HackerOne MCP Server
[](https://github.com/uunw/h1mcp/releases)
[](https://github.com/uunw/h1mcp/actions/workflows/docker.yml)
[](https://github.com/uunw/h1mcp/pkgs/container/h1mcp)
[](https://www.rust-lang.org/)
[](./LICENSE)
**h1mcp** is a [HackerOne](https://hackerone.com) [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server written in Rust. It exposes the full HackerOne API — reports, programs, scope, weaknesses, payouts, and hacktivity — plus local draft management as MCP tools you can drive from **Claude Desktop**, **Claude Code**, or any MCP-compatible client.
Use it to run your bug bounty workflow with an AI assistant: search and triage your reports, look up program scope before testing, draft submissions locally, and analyze patterns across your findings — all over the [HackerOne API](https://api.hackerone.com/).
## Features
- **Full report lifecycle** — search, read, submit, comment, close, update severity, request disclosure
- **Program discovery** — list programs, get scope (in-scope assets), get accepted weakness types
- **Hacker stats** — profile (signal, reputation, impact), balance, earnings, hacktivity search
- **Pattern analysis** — aggregate stats across your submitted reports
- **Local draft management** — save, review, edit, and submit drafts without immediately hitting the API
- **Single static binary / tiny Docker image** — built in Rust, no runtime dependencies
## Tools
| Tool | Description |
|---|---|
| `search_reports` | Search your submitted reports by keyword, program, severity, state |
| `get_report` | Get full report details by ID |
| `get_report_with_conversation` | Report + full activity timeline bundled |
| `get_report_activities` | Activity timeline for a report |
| `submit_report` | Submit directly (prefer draft flow) |
| `add_comment` | Comment on a report (supports internal flag) |
| `close_report` | Close/withdraw a report |
| `update_report_severity` | Update severity rating |
| `request_disclosure` | Request public disclosure |
| `create_report_intent` | Send a free-text vuln description for HackerOne's assistant to pre-validate before a full report |
| `list_report_intents` | List your report intents and their assistant status |
| `get_report_intent` | Get one report intent (assistant response + job status) |
| `list_programs` | List programs you have access to |
| `get_program_details` | Full program details |
| `get_program_scope` | In-scope assets |
| `get_program_weaknesses` | Accepted CWE types |
| `get_submission_options` | Submittable scope IDs + weakness IDs for a program, in one call |
| `get_hacker_profile` | Your identity (username/name/bio) derived from your reports |
| `get_balance` | Current payout balance |
| `get_earnings` | Earnings history |
| `search_disclosed_reports` | Search hacktivity (public disclosed reports) |
| `analyze_report_patterns` | Aggregate stats across your recent reports |
| `draft_report` | Save a report draft locally |
| `list_drafts` | List saved drafts |
| `get_draft` | Read a draft |
| `update_draft` | Update draft fields |
| `delete_draft` | Delete a draft |
| `submit_draft` | Submit a draft to H1 (deletes draft on success) |
## Setup
### Credentials
Create a HackerOne API token at . The
**API username** shown on that page is used for HTTP Basic auth (`username:token`).
```
H1_USERNAME=your_hackerone_username
H1_API_KEY=your_api_key
```
### Docker (recommended)
Pull and run directly from GitHub Container Registry:
```sh
docker pull ghcr.io/uunw/h1mcp
docker run --rm -i -e H1_USERNAME=... -e H1_API_KEY=... ghcr.io/uunw/h1mcp
```
Or build locally:
```sh
docker build -t h1mcp .
```
> [!IMPORTANT]
> When configuring via an MCP client `env` block, you **must** still pass `-e H1_USERNAME -e H1_API_KEY` in the docker args. `docker run` does not automatically forward the parent process environment into the container — without these flags the server starts with no credentials and every request returns `401 Unauthorized`.
### Manual build
```sh
cargo build --release
./target/release/h1mcp
```
### Claude Desktop config
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
**Docker (recommended):**
```json
{
"mcpServers": {
"hackerone": {
"command": "docker",
"args": ["run", "--rm", "-i", "-e", "H1_USERNAME", "-e", "H1_API_KEY", "ghcr.io/uunw/h1mcp"],
"env": {
"H1_USERNAME": "your_username",
"H1_API_KEY": "your_api_key"
}
}
}
}
```
**Binary:**
```json
{
"mcpServers": {
"hackerone": {
"command": "/path/to/h1mcp",
"env": {
"H1_USERNAME": "your_username",
"H1_API_KEY": "your_api_key"
}
}
}
}
```
### Claude Code (CLI)
```sh
# user scope (available in all projects)
claude mcp add --scope user \
--env H1_USERNAME=your_username \
--env H1_API_KEY=your_api_key \
h1mcp -- docker run --rm -i -e H1_USERNAME -e H1_API_KEY ghcr.io/uunw/h1mcp
# project scope (committed to .mcp.json, shared with team)
claude mcp add --scope project \
--env H1_USERNAME=your_username \
--env H1_API_KEY=your_api_key \
h1mcp -- docker run --rm -i -e H1_USERNAME -e H1_API_KEY ghcr.io/uunw/h1mcp
```
Verify: `claude mcp list`
## Draft workflow
```
draft_report → get_draft → update_draft → submit_draft
```
Drafts are stored in `~/.config/h1mcp/drafts/` as JSON files.
## How it works
h1mcp talks to the HackerOne **hacker API** under `https://api.hackerone.com/v1/hackers/`,
authenticating with HTTP Basic auth (`H1_USERNAME:H1_API_KEY`). Responses are cached
briefly in-process, and rate-limit (`429`) and server errors are retried with backoff.
Tool output is optimized for LLM token cost: results are pruned of null fields,
empty containers, and avatar URLs, then serialized as compact (non-pretty) JSON.
## License
[MIT](./LICENSE)