PocMap
AI-agent-optimized CVE / PoC / exploit discovery toolkit — CLI, Python API, and MCP server.
Docs: https://zebbern.github.io/pocmap/
Features
- Multi-source PoCs — GitHub, Exploit-DB, Metasploit, Nuclei, labs, bug bounty write-ups; curated indexes first, then GitHub Search fallback for index-lag CVEs
- MCP server — 22 tools for Claude Desktop, Cursor, and other MCP clients
- CLI + CI — table/json/csv/md/sarif output, exit-code contract,
bulk --fail-onSARIF gate - Cache & offline — persistent TTL'd HTTP cache and first-class
--offlinemode - Bug bounty toolkit — Python API checklists, workflows, templates, scope (CLI
bugbountysearches write-ups only)
Install
pip install pocmap
pip install "pocmap[server]" # MCP SDK / pocmap-mcp
pip install -e ".[server,dev]" # from a clone
Python 3.10+. Optional: GITHUB_API_TOKEN, NVD_API_KEY for higher rate limits.
More: Getting started · Configuration
Quick start
pocmap lookup CVE-2021-44228
pocmap bulk cves.txt --format sarif --fail-on kev
pocmap latest --since 7d --severity critical --only-with-poc
pocmap discover "Log4j" --version 2.x
pocmap package PyPI django --version 3.2.0
pocmap doctor
pocmap lookup CVE-2021-44228 --format json
pocmap --offline lookup CVE-2021-44228
pocmap --help lists all commands. Guides: CLI reference.
MCP Server Setup
Recommended: uv on PATH, no local clone required.
--from pocmap[server] pulls the package with the MCP SDK and runs the pocmap-mcp
console script over STDIO.
{
"mcpServers": {
"pocmap": {
"command": "uvx",
"args": ["--from", "pocmap[server]", "pocmap-mcp"],
"env": {
"GITHUB_API_TOKEN": "ghp_xxxxxxxxxxxx",
"NVD_API_KEY": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
}
}
}
Pin a release by changing the package arg to pocmap[server]==X.Y.Z; keep
pocmap-mcp as the last arg. Optional env vars raise GitHub / NVD rate limits.
Running the MCP Server
Requires the [server] extra (MCP SDK). Protocol revisions up to 2026-07-28 are
supported; STDIO clients typically negotiate 2025-11-25 at initialize.
pip install "pocmap[server]"
# or from a clone: pip install -e ".[server]"
# STDIO (default — what Claude Desktop / Cursor / most MCP clients expect)
pocmap-mcp
python -m pocmap.mcp_server
# Other transports / flags
pocmap-mcp --transport sse
pocmap-mcp --transport http --host 127.0.0.1 --port 9000
# Non-loopback HTTP/SSE requires a bearer token
POCMAP_MCP_AUTH_TOKEN='replace-with-a-long-random-token' \
pocmap-mcp --transport http --host 0.0.0.0 --port 9000
pocmap-mcp --debug
STDIO does not use MCP HTTP authentication. Network transports allow an
unauthenticated loopback bind (127.0.0.1, localhost, or ::1). Any other
bind address requires POCMAP_MCP_AUTH_TOKEN; when set, every HTTP and SSE
request must send Authorization: Bearer <token>. The server does not log the
token. Network requests are rate-limited per authenticated principal by default
to 60 requests per 60 seconds. Set POCMAP_MCP_RATE_LIMIT and
POCMAP_MCP_RATE_WINDOW_SECONDS to change those limits. Bearer tokens are
credentials: use HTTPS or a trusted TLS-terminating ingress before exposing a
non-loopback bind. The built-in listener does not provide TLS.
The configured token is the single operator principal authorized to call all
MCP tools; invalid credentials are rate-limited separately by client address.
MCP Tools (22 Total)
| Tool | Category | Description |
|---|---|---|
lookup_cve |
CVE Intel | Full CVE details from NVD, CVE.org, CISA KEV, EPSS |
get_epss_score |
CVE Intel | EPSS exploitation probability score (0.0-1.0) with risk level |
check_kev_status |
CVE Intel | Check CISA Known Exploited Vulnerabilities catalog status |
get_attack_techniques |
CVE Intel | MITRE ATT&CK techniques a CVE maps to — how it's exploited and what follows |
find_github_pocs |
Exploits | GitHub PoC repos with stars, language, and forks |
verify_github_pocs |
Exploits | Reads PoC source to score whether a repo really exploits the CVE (opt-in) |
find_metasploit_module |
Exploits | Metasploit module availability and msfconsole command |
find_exploitdb_entry |
Exploits | ExploitDB entry with searchsploit command |
find_nuclei_template |
Exploits | Nuclei scanner template for detection/verification |
find_bug_bounty_reports |
Research | Bug bounty write-ups from HackerOne, PentesterLand |
find_practice_labs |
Labs | CTF labs on Vulhub and HackTheBox |
find_vulhub_docker |
Labs | Vulhub Docker Compose environment with setup steps |
find_recent_exploits |
Discovery | Recently published CVEs with PoC/KEV/severity filters |
discover_product_cves |
Discovery | Find CVEs by product name with version constraints |
discover_package_cves |
Discovery | Dependency vulnerabilities + the releases that fix them (OSV, no API key) |
cve_to_cpe |
Conversion | Convert CVE to affected CPE identifiers |
cpe_to_cve |
Conversion | Find all CVEs affecting a given product (CPE) |
generate_json_report |
Reports | One-shot CVE assessment — details + all exploits + labs + bug bounty reports for one or many CVEs in a single call |
generate_html_report |
Reports | Self-contained HTML report with styled cards |
get_cve_assessment_playbook |
Playbooks | Full CVE assessment workflow playbook |
get_rapid_response_playbook |
Playbooks | Emergency response playbook for critical CVEs |
get_bug_bounty_playbook |
Playbooks | Bug bounty submission workflow playbook |
MCP Resources
| Resource | URI Pattern | Content |
|---|---|---|
| CVE Info | cve://{cve_id} |
Full CVE details as human-readable text |
| Exploits | exploits://{cve_id} |
All available exploits and PoCs |
| Report | report://{cve_id} |
Generated vulnerability report (JSON) |
Example Agent Workflow
User: "Should I prioritize CVE-2021-44228, CVE-2023-38408, or CVE-2024-21413?"
Agent:
1. generate_json_report("CVE-2021-44228,CVE-2023-38408,CVE-2024-21413")
2. Read each entry's triage.priority / reasons (KEV, EPSS, exploit counts)
3. Prefer Log4j when triage shows KEV + highest EPSS + most PoCs
PoC-only ask → find_github_pocs (check labels / trust_score / sources).
Dependency ask → discover_package_cves (use canonical_cve + aliases, not product discovery).
Claude Desktop / Cursor JSON configs and transports:
Getting started → MCP.
Tool inventory: MCP tools.
Agent contract: .claude/skills/pocmap-agent/references/mcp_tools.md.
Python API
from pocmap.services.cve_service import CVEService
with CVEService() as svc:
info = svc.get_cve_info("CVE-2021-44228")
print(info.cvss.base_score, info.kev_status, info.epss)
Full service examples: Python API.
Docs
| Topic | Link |
|---|---|
| Getting started / MCP clients | getting-started |
CLI (latest, discover, package, formats, cache, CI) |
cli |
| Python API | python-api |
| Configuration | configuration |
| Bug bounty toolkit | bug-bounty |
| Verifying PoCs (opt-in) | verifying-pocs |
| Architecture | architecture |
| Contributing / plugins | contributing |
| Schemas | schemas |
License
MIT — see LICENSE.
PocMap is a research and defensive tool. Always operate within applicable law and program scope.
Metadata
Release files for pocmap 2.9.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pocmap-2.9.1.tar.gz | 514.1 kB | With provenance | Details for pocmap-2.9.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| pocmap-2.9.1-py3-none-any.whl | Python 3 | none | any | Details for pocmap-2.9.1-py3-none-any.whl |
Total release size: 888.6 kB
Release files / pocmap-2.9.1.tar.gz
| Download URL | pocmap-2.9.1.tar.gz |
|---|---|
| Size | 514.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b523f73257757a9f882cf469ceb9661a8b0c2d057e53e6d409debfdf882f7849
|
|
BLAKE2b-256 checksum How to use checksums |
176ef099a2a558c44c76a2c061b8beb4c0314362de41782c09be9ce95fdaba2d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 24, 2026.
Transparency logRelease files / pocmap-2.9.1-py3-none-any.whl
| Download URL | pocmap-2.9.1-py3-none-any.whl |
|---|---|
| Size | 374.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c37b29ec5c9d7e79f395199ee7464a06ed92ac8097f750a14c705d6125938d68
|
|
BLAKE2b-256 checksum How to use checksums |
0104a0ef5831c9be5136790ad0bc16a81552002aeba3728ee9c9d61bb6385590
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 24, 2026.
Transparency logSecurity for pocmap 2.9.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for pocmap-2.9.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 24, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.