Skip to content

How to search for exploits

Exploits are ordinary Vulners documents in the exploit bulletin family, so you search for them with search.query and a family filter.

Find exploits for a CVE

from vulners import Vulners

with Vulners() as v:
    page = v.search.query("bulletinFamily:exploit AND CVE-2023-20198", limit=10)
    for exploit in page.data:
        print(exploit.id, exploit.href)
from vulners import AsyncVulners

async with AsyncVulners() as v:
    page = await v.search.query("bulletinFamily:exploit AND CVE-2023-20198", limit=10)
    for exploit in page.data:
        print(exploit.id, exploit.href)

Every exploit is an ExploitBulletin (or a per-collection subclass). On top of the common bulletin fields, individual exploit collections add their own — e.g. exploitdb exposes exploit_type and verified, seebug exposes has_poc — and any field the SDK has not modelled stays reachable via extra="allow".

Find exploits for a product

with Vulners() as v:
    page = v.search.query("bulletinFamily:exploit AND wordpress order:published", limit=20)
    for exploit in page.data:
        print(exploit.published, exploit.title)
async with AsyncVulners() as v:
    page = await v.search.query("bulletinFamily:exploit AND wordpress order:published",
                                limit=20)
    for exploit in page.data:
        print(exploit.published, exploit.title)

Iterate every match lazily

iter_query (async: aiter_query) yields rows one at a time, fetching pages of page_size behind the scenes and stopping at the 10,000-document window:

with Vulners() as v:
    for exploit in v.search.iter_query("bulletinFamily:exploit AND joomla", page_size=100):
        print(exploit.id)
async with AsyncVulners() as v:
    async for exploit in v.search.aiter_query("bulletinFamily:exploit AND joomla",
                                              page_size=100):
        print(exploit.id)

Expose exploit search to an AI agent (MCP)

The SDK ships a Model Context Protocol server so an LLM agent can search exploits (and CVEs, advisories, audits) with live data. Install the extra and run it:

pip install "vulners[mcp]"
export VULNERS_API_KEY=...
vulners-mcp        # serves over stdio

The server exposes tools including search_exploits, search_bulletins, get_bulletin, cve_lookup, audit_software, audit_linux and smart_audit, each returning compact JSON. See AGENTS.md for the full agent-facing guide.

Hosted vs. bundled

vulners-mcp here is a minimal, self-hosted server (the core tools above). For a fully managed, always-on endpoint, use the official hosted server at mcp.vulners.com — no install required.