A modern, AI-friendly CVE PoC discovery tool with structured data models
Project description
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 with pocmap-mcp@X.Y.Z as the last arg (that PyPI version must include the
pocmap-mcp entry point). 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 0.0.0.0 --port 9000
pocmap-mcp --debug
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. lookup_cve("CVE-2021-44228") -> CVSS 10.0 CRITICAL, EPSS 0.9753, KEV=true
2. lookup_cve("CVE-2023-38408") -> CVSS 9.8 CRITICAL, EPSS 0.3124, KEV=true
3. lookup_cve("CVE-2024-21413") -> CVSS 8.8 HIGH, EPSS 0.8912, KEV=true
4. get_epss_score for each -> Confirm exploitation probabilities
5. find_github_pocs for each -> Count available exploits
6. check_kev_status for each -> Confirm KEV status
7. Prioritize: Log4j (highest EPSS + most exploits) > CVE-2024-21413 > CVE-2023-38408
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pocmap-2.7.1.tar.gz.
File metadata
- Download URL: pocmap-2.7.1.tar.gz
- Upload date:
- Size: 439.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1d697bb4e4f45cff88e4b08283024670947629138c90dc4fe7bdcf77d528a50
|
|
| MD5 |
d097a97381832541e2d0ccaf1dcda07a
|
|
| BLAKE2b-256 |
72c5a2920b8507735f5cef9a5830c7b20d937d3ee50598c45d89c39ad2bb4fcd
|
Provenance
The following attestation bundles were made for pocmap-2.7.1.tar.gz:
Publisher:
release.yml on zebbern/pocmap
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pocmap-2.7.1.tar.gz -
Subject digest:
b1d697bb4e4f45cff88e4b08283024670947629138c90dc4fe7bdcf77d528a50 - Sigstore transparency entry: 2330743466
- Sigstore integration time:
-
Permalink:
zebbern/pocmap@cc88b177740dcf3311ee1827804b081d870d77e7 -
Branch / Tag:
refs/tags/v2.7.1 - Owner: https://github.com/zebbern
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cc88b177740dcf3311ee1827804b081d870d77e7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pocmap-2.7.1-py3-none-any.whl.
File metadata
- Download URL: pocmap-2.7.1-py3-none-any.whl
- Upload date:
- Size: 333.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0fd69a7b15b6a573604e28950da3a604b030247df7cbdb1fd42b30ee860abf26
|
|
| MD5 |
f2b3ce27b003bb0a7aa1905e4bb6f8ff
|
|
| BLAKE2b-256 |
b4b87e8eb3619f7c40a8401a43ebcb87327b4e64cfbc9654abe60791672160db
|
Provenance
The following attestation bundles were made for pocmap-2.7.1-py3-none-any.whl:
Publisher:
release.yml on zebbern/pocmap
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pocmap-2.7.1-py3-none-any.whl -
Subject digest:
0fd69a7b15b6a573604e28950da3a604b030247df7cbdb1fd42b30ee860abf26 - Sigstore transparency entry: 2330743665
- Sigstore integration time:
-
Permalink:
zebbern/pocmap@cc88b177740dcf3311ee1827804b081d870d77e7 -
Branch / Tag:
refs/tags/v2.7.1 - Owner: https://github.com/zebbern
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cc88b177740dcf3311ee1827804b081d870d77e7 -
Trigger Event:
push
-
Statement type: