poc_scout
Click on "Install 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., "@poc_scoutWhat CVEs affect D-Link DIR-850L? Download PoCs if available."
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.
poc_scout
IoT firmware vulnerability intelligence, exposed as an MCP server for AI agents. 物联网固件漏洞情报工具,以 MCP server 形式供 AI agent 使用。
Input a firmware model (optionally with components) → get related CVEs ranked by exploit risk, with PoCs auto-downloaded to local disk. Pure APIs and rules — no LLM in the core.
Features
Firmware + component → CVEs: cve.org primary, NVD fallback, OSV component vulns
Version-aware refinement: when a component includes a version (e.g.
"openssl 1.0.1f"), results are narrowed to the affected rangePoC auto-download: GitHub, exploit-db, community supplement, dead-link detection
EPSS exploit-probability scoring: high-risk CVEs rank first
CVSS severity per CVE (NVD → cve.org → OSV authority order, NVD backfill when cve.org lacks metrics)
Concurrent downloads + rate-limit precheck
Result cache + download timestamps
Structured per-firmware output:
main.json(per-CVE info rows) +<CVE-ID>.json(full PoCs with base64 content) + flattened PoC filesRobustness tested (Hypothesis fuzz + integration tests, CI on every push)
Related MCP server: VulnMCP
Data sources
Source | Role |
cve.org (restapiv1) | primary search |
NVD API | fallback |
OSV (osv.dev) | component vulnerabilities, precise version ranges |
FIRST.org EPSS | exploit-probability scoring |
GitHub / Exploit-DB | PoC download |
Install
pip install -r requirements.txtUsage as an MCP server
Run the stdio MCP server:
python server.pyRegister it with your MCP client. For example, with Claude Code:
claude mcp add poc_scout -- python server.pyAny MCP client that supports stdio servers can connect to it.
MCP tool
search_cve_by_firmware(firmware_name, top_n=0, download_poc=False, community_poc=False, force_refresh=False, component=None)
Param | Description |
| firmware model, e.g. |
| component names (str or list, e.g. |
| download PoCs to |
| also search GitHub community PoCs |
| max results, |
| bypass result cache |
Example output
{
"firmware": "D-Link DIR-850L",
"components": ["busybox 1.19.4"],
"found": true,
"result_count": 40,
"results": [
{
"cve_id": "CVE-2026-38752",
"from": "component:busybox",
"version_match": true,
"severity": "HIGH",
"severity_score": 8.8,
"score": 0.746,
"epss": 0.64,
"description": "A use-after-free in the awk_sub() function..."
}
]
}Output structure
Results are written under output/<firmware>/ (one folder per firmware; a CVE-ID query uses output/<CVE-ID>/). The result cache lives in cache/result_<hash>.json — keyed by query hash, not in the output folder:
output/<firmware>/
├── main.json # per-CVE info rows (all CVEs, not truncated to top_n)
├── <CVE-ID>.json # one per CVE with PoC references: full PoC info
└── CVE-<id>_poc_<n>_<name>.<ext> # flattened PoC files, prefixed with CVE IDmain.json — one row per CVE:
Field | Meaning |
| CVE identity |
| CVSS, authority order NVD → cve.org → OSV (NVD backfilled when cve.org lacks metrics) |
| site-specific fields (e.g. |
| source ( |
| ranking info |
| PoC count; file names ( |
| summary of every PoC reference (URL, source, local file, download status) |
<CVE-ID>.json — full PoCs for that CVE: each entry has URL / source / local file / download timestamp / base64 content. Link-only entries have content: null; community PoCs embed content only when verified (see Security) — otherwise metadata + verification reason.
CLI
python cve_search.py "D-Link DIR-850L" # search only
python cve_search.py "D-Link DIR-850L" --download # with PoC downloadRate limits: Unauthenticated GitHub API is limited to 60 req/h. For bulk PoC downloads, set
GITHUB_TOKEN(5000/h) or enable rotating IPs (below).
Proxies
GitHub API is rate-limited (60/h unauthenticated, 5000/h with GITHUB_TOKEN); on 403/429/502 rotate_ip() switches the egress IP automatically. All configuration is via env vars:
Variable | Default | Meaning |
|
|
|
|
| FlClash mixed port; accepts |
|
| FlClash controller (node rotation) |
| (empty) | GitHub token — 5000/h quota |
| (empty) | Kuaidaili order ID (extraction API) |
| (empty) | Kuaidaili signature secret (IP-whitelist orders can skip) |
|
| Kuaidaili extraction API |
|
| IPs per extraction |
|
| pool auto-refill threshold |
| (empty) | HMAC key for cache tamper detection |
| (empty) |
|
Modes: direct (no proxy) · fixed (default — FlClash; switches node on rate limit) · kuaidaili (IP pool from extraction API; no order ID → degrades to direct). Kuaidaili tunnel-style products use fixed with PROXY_URL=http://user:pass@host:port. Run probe_kuaidaili() to self-check an order before trusting it.
Security
Downloaded PoCs are code — treat them as untrusted.
GitHub downloads are pinned to the default-branch commit SHA (
commit_sha/commit_pinned), so later repo changes don't silently swap what you saved.Community PoCs are opt-in (
community_poc=True) and unverified (found by keyword + stars). Content is embedded into<CVE-ID>.jsononly when it passes a static risk scan (curl|sh,powershell -enc,certutil, remote-fetch-then-eval…) or the repo is inVERIFIED_POC_REPOS; otherwise just metadata + averificationreason. Files are always saved to disk either way.Local caches are tagged
_src: poc_scout; setCACHE_MAC_KEYto HMAC-sign them so tampered cache files are rejected.Requires
mcp>=2.0(uses the 2.xMCPServerAPI).
Testing
python -m pytest # all tests: fuzz + integration + download + cache + units
python -m pytest --cov # with coverage79 tests, CI runs on every push (badge above).
License
Project layout
server.py # MCP server entry
cve_search.py # search: providers, matching, scoring, EPSS, cache
poc_downloader.py # PoC download: GitHub / exploit-db / community
proxy.py # proxy strategy + IP rotation
config.py # configuration
cache.py # local hash cache
test_*.py # test suiteThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Real-time CVE, exploit, and vulnerability intelligence for AI assistants (350K+ CVEs, 115K+ PoCs)
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
ZEN SecDB MCP server for CVE intelligence, CVSS/EPSS scoring, advisories, SSVC, and package audits.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server for EMBA firmware analysis that exposes structured security findings and tools to LLMs. It enables users to programmatically query, reason over, and correlate firmware analysis results such as kernel details, SBOMs, and attack paths.6
- AlicenseAqualityBmaintenanceAn MCP server for vulnerability management that provides tools for automated severity and CWE classification using NLP models. It enables AI agents to query the Vulnerability Lookup API for detailed CVE information and search for security vulnerabilities across various sources.1634AGPL 3.0
- AlicenseAqualityCmaintenanceMCP server for the NIST National Vulnerability Database — lets AI assistants search CVEs by keyword, severity, CPE, CWE, KEV status, and date range via natural language.2GPL 3.0
- AlicenseAqualityAmaintenanceUnifies NVD, EPSS, CISA KEV, GitHub Advisory, and OSV into a single MCP server, enabling AI agents to query vulnerability intelligence conversationally with 23 tools for incident response, prioritization, dependency audits, and threat monitoring.4158220MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kaf6rim/poc_scout'
If you have feedback or need assistance with the MCP directory API, please join our Discord server