yeswehack-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@yeswehack-mcp List my private programs on YesWeHack."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
yeswehack-mcp
A Model Context Protocol (MCP) server for the YesWeHack bug bounty platform. Lets Claude query your private and public programs, reports, and the hacktivity feed directly from a conversation.
Features
Flexible authentication — browser login, email/password API login, copied bearer tokens, and official Personal Access Tokens.
Private programs — returns invite-only programs you have been accepted into, not just public ones.
Full program details — scope, reward ranges, status.
Report access — list and read reports with severity, CVSS, description, and bounty.
Report comments — list report discussion/messages when your account has access.
Email aliases — list your YesWeHack email aliases.
Program credentials — list credential pools/assigned credentials and request credentials for programs that expose pools.
Hacktivity feed — browse publicly disclosed reports.
Token caching — the JWT is stored locally and reused until it expires.
Related MCP server: MCP Hacker News
Requirements
Python 3.10+
uv (installed automatically by the setup script if missing)
A YesWeHack account
WSL2 users: WSLg must be enabled so Chromium can open a window (
echo $DISPLAYshould return a value)
Installation
git clone https://github.com/youruser/yeswehack-mcp
cd yeswehack-mcp
# Install uv if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install dependencies
uv sync
# Download the Chromium browser used for login
uv run playwright install chromiumRegistering with Claude Code
claude mcp add yeswehack -- uv --directory /path/to/yeswehack-mcp run server.pyReplace /path/to/yeswehack-mcp with the actual path where you cloned the repo.
Verify it connected:
claude mcp list
# yeswehack: ... ✓ ConnectedRegistering with Claude Desktop
Add the following to your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"yeswehack": {
"command": "uv",
"args": [
"--directory",
"/path/to/yeswehack-mcp",
"run",
"server.py"
]
}
}
}If uv is not on PATH when Claude Desktop launches, use the absolute path (e.g. /home/youruser/.local/bin/uv).
Usage
Once registered, start every session by authenticating:
You: Call the authenticate tool
With no arguments, a Chromium window opens. Log in to YesWeHack as normal (email + password + 2FA if enabled). The window closes automatically once your session is detected. The token is saved to ~/.config/yeswehack-mcp/token.json and reused for all subsequent calls until it expires.
You can also authenticate without a browser:
authenticate(email="you@example.com", password="...", totp="123456")
authenticate(access_token="eyJ...") # browser/API bearer token
authenticate(access_token="ywh_pat_...") # Personal Access TokenEnvironment variables are supported too:
export YWH_TOKEN="eyJ..." # browser/API bearer token
export YWH_PAT="ywh_pat_..." # Personal Access TokenAvailable tools
Tool | Description |
| Browser login, API login, or store a copied bearer token/PAT |
| Show your YesWeHack profile (username, rank, reputation) |
| List all programs you have access to, including private invite-only ones |
| Full details for a program: scope, reward ranges, status |
| List reports for a program, with optional status filter |
| Full details of a specific report (title, severity, CVSS, description, bounty) |
| List comments/messages for a report when your token has access |
| List your YesWeHack email aliases |
| List credential pools and assigned credentials for a program |
| Request credentials from a program credential pool |
| Read-only escape hatch for authenticated API endpoints not wrapped yet |
| Browse the public hacktivity (disclosed reports) feed |
Example prompts
List all my private programs on YesWeHack.
Show me the scope for the program with slug "acme-corp".
List my YesWeHack email aliases.
Get credentials for program "acme-corp".
List all accepted reports for program "acme-corp".
Get the full details of report 12345.
Show me the latest hacktivity, page 2.Token storage
The token is saved to ~/.config/yeswehack-mcp/token.json. It contains only the token and its expiry timestamp — no account password is ever stored. Browser/API session JWTs use their embedded expiry. Opaque Personal Access Tokens are cached locally until the YesWeHack API rejects them. The browser profile (cookies, localStorage) is kept at ~/.config/yeswehack-mcp/browser-profile so you do not have to fill in your email every time you re-authenticate.
To log out, delete the token file:
rm ~/.config/yeswehack-mcp/token.jsonProject structure
yeswehack-mcp/
├── server.py # FastMCP entry point — all tool definitions
├── auth.py # Playwright browser login + token storage
├── client.py # httpx async API wrapper with pagination
└── pyproject.toml # Dependencies and build configWSL2 display setup
Playwright needs a display to open the browser window. On WSL2 with WSLg this works out of the box. If you see an error about DISPLAY not being set:
# Check if WSLg is running
echo $DISPLAY # should print something like :0
ls /mnt/wslg # should exist
# If not, ensure you are on a recent WSL2 version with WSLg support
wsl --update # run from Windows PowerShellLicense
MIT
Available Tools
12 toolsauthenticateA
Authenticate with YesWeHack and store the session token locally. Call this first before using any other tool, or when a tool reports that authentication is required.
Option 1 — Direct token: provide access_token to skip credential login entirely. Option 2 — API login: provide email + password for a fast, browser-free login. If your account has 2FA enabled, the first call will ask for a TOTP code; call again with the same email/password and add the totp argument. Option 3 — Browser: call with no arguments to open a browser window instead.
You can also set the YWH_TOKEN environment variable to avoid calling this tool at all; it takes precedence over stored credentials.
Args: access_token: A pre-obtained YesWeHack JWT/bearer token (highest priority). email: Your YesWeHack account email. password: Your YesWeHack account password. totp: 6-digit TOTP code (only needed when 2FA is enabled).
Inputs: totp, email, password, access_token. Returns: result
get_current_userA
Return the profile of the currently authenticated YesWeHack user.
Inputs: no named parameters. Returns: result
get_hacktivityA
Get the public YesWeHack hacktivity feed (publicly disclosed reports). No authentication required.
Args: page: Page number (default 1).
Inputs: page. Returns: result
get_programA
Get full details for a specific program, including scope, reward ranges, guidelines, requirements, out-of-scope rules, and disabled vulnerability types.
Args: slug: The program slug/identifier (e.g. 'acme-corp'). Use list_programs to find slugs.
Inputs: slug (required). Returns: result
get_program_credentialsA
Get credential pools and any assigned credentials for a specific program.
Some programs expose credential pools only after you are invited/accepted and KYC-verified. If credentials require a request first, use request_program_credentials with the pool id shown by this tool.
Args: program_slug: Program slug/identifier. include_secrets: Include passwords/secrets when the API returns them. raw: Return raw JSON instead of a readable summary.
Inputs: program_slug (required), raw, include_secrets. Returns: result
get_reportB
Get full details of a specific vulnerability report.
Args: report_id: The numeric report ID (from list_reports output).
Inputs: report_id (required). Returns: result
list_email_aliasesA
List your YesWeHack email aliases.
YesWeHack requires KYC verification for alias usage. The exact UI endpoint is not publicly documented, so this tool tries the known API shapes and reports the attempted endpoints if none work.
Args: raw: Return raw JSON instead of a readable summary.
Inputs: raw. Returns: result
list_programsA
List bug bounty programs you have access to, including private invite-only programs.
Args: all_pages: If True (default), fetch all pages and return the complete list. page: Specific page to fetch when all_pages is False. private_only: If True, return only private (invite-only) programs.
Inputs: page, all_pages, private_only. Returns: result
list_report_commentsA
List comments/messages for a vulnerability report when your token has access.
Args: report_id: The numeric report ID. raw: Return raw JSON instead of a readable summary.
Inputs: report_id (required), raw. Returns: result
list_reportsB
List vulnerability reports submitted to a program.
Args: program_slug: The program slug identifier. status: Optional status filter (e.g. 'accepted', 'informative', 'duplicate', 'wont_fix', 'new', 'triaged', 'not_applicable').
Inputs: program_slug (required), status. Returns: result
request_program_credentialsA
Request credentials from a program credential pool.
This performs a state-changing YesWeHack action. Use get_program_credentials first to find an available pool id. Some email-credential pools require an email address; pass either a YesWeHack alias or another allowed address.
Args: program_slug: Program slug/identifier. pool_id: Optional credential pool id. If omitted, the generic program credential request endpoint is attempted. email: Optional email address for email-based credential pools. raw: Return raw JSON instead of a readable summary.
Inputs: program_slug (required), raw, email, pool_id. Returns: result
yeswehack_api_getA
Read an authenticated YesWeHack API endpoint that is not wrapped yet.
This is a read-only escape hatch for API coverage gaps. Path must be a relative API path such as /programs/example or /reports/123.
Args: path: Relative API path beginning with /. params_json: Optional JSON object of query parameters.
Inputs: path (required), params_json. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Most tools pair a distinct resource with a clear verb (list_programs vs get_program, list_reports vs get_report, get_program_credentials vs request_program_credentials). The main ambiguity is yeswehack_api_get, a generic read-only escape hatch that conceptually overlaps with all dedicated getters, though its 'unwrapped endpoints only' framing reduces confusion.
The dominant verb_noun pattern is consistent (list_programs, get_report, request_program_credentials), but yeswehack_api_get reverses the order with a service prefix, and authenticate is a lone verb without a noun. These deviations are noticeable but not chaotic.
12 tools is well-scoped for a bug bounty platform client: authentication, programs, reports, comments, credentials, user profile, hacktivity, and one escape hatch. Each tool earns its place and the count is neither bloated nor thin.
The read surface is solid (programs, reports, comments, credentials, hacktivity), but state-changing operations central to the bug bounty workflow are missing: there is no way to submit a vulnerability report or post a comment on a report. The read-only escape hatch cannot fill these gaps, so researchers cannot complete a full workflow.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides intelligent hashcat integration for Claude Desktop, allowing users to crack hashes, analyze passwords, and perform security assessments directly from Claude conversations.27-
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI tools like Claude and Cursor to fetch and interact with live Hacker News data (posts, comments, users) via standardized MCP endpoints.11227 npm35MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server for interacting with the Intigriti bug bounty platform's Researcher API. It enables AI assistants to manage bug bounty programs, submissions, and research workflow.84MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server that connects Claude AI directly to the GitHub API, enabling natural language queries for live repository data, issues, PRs, and contributions.1-