appliances_exploited_by_actor
Which of your edge appliances (firewalls/VPNs/gateways) are tied to CVEs being actively exploited in the wild in the last N days, optionally attributed to a named actor (e.g. "Qilin"). Edge appliances are identified by a curated vendor allowlist, overridable via "vendors". Costs 1 credit.
tools/callCost: 1 credit per successful call · Scope: mcp:org · Response shape: jsonb
Returns data scoped to your own organisation only — the organisation is resolved from your API key and injected server-side, never read from the request.
Parameters
actorstringoptionalOptional threat actor / group name or alias to attribute exploitation to,
e.g. Qilin. Maximum 120 characters.
daysintegeroptionaldefault: 7Shadowserver exploitation window, in days. Accepted range: 1–90.
vendorsarrayoptionalOptional override of the curated edge-appliance vendor allowlist. Provide lowercase CPE vendor slugs. Maximum 40 items.
Example invocation
Ask your agent:
Which of my edge appliances are being exploited by Qilin this week?
Raw JSON-RPC:
curl -s https://api.precursorintelligence.com/functions/v1/mcp \
-H "Authorization: Bearer $PRECURSOR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "appliances_exploited_by_actor",
"arguments": { "actor": "Qilin", "days": 7 }
}
}'Response
{
"actor": "Qilin",
"actor_slug": "qilin",
"actor_aliases": ["Agenda", "Water Galura"],
"window_days": 7,
"my_appliances": [
{
"vendor": "f5",
"product": "big-ip",
"version": "17.1.0",
"cpe": "cpe:2.3:a:f5:big-ip:17.1.0:*:*:*:*:*:*:*"
},
{
"vendor": "sonicwall",
"product": "sonicos",
"version": "7.0.1",
"cpe": "cpe:2.3:o:sonicwall:sonicos:7.0.1:*:*:*:*:*:*:*"
}
],
"recently_exploited_for_my_appliances": [
{
"cve_id": "CVE-2023-46805",
"vendor": "f5",
"product": "big-ip",
"connections": 967,
"last_observed": "2026-06-17",
"severity": "CRITICAL",
"cisa_kev": true
}
],
"attributed_to_actor": ["CVE-2023-46805"],
"note": null,
"generated_at": "2026-06-18T09:30:00.000Z"
}The full MCP envelope wrapping this payload is documented in Response Format.
Response fields
actorstring | nulloptionalThe resolved canonical actor name — from MITRE ATT&CK if it matched
there, otherwise from the in-house dataset. null when no actor argument
was supplied, or when the name resolved against neither dataset. A
non-null value is your confirmation that the name was understood.
actor_slugstring | nulloptionalThe actor's slug when it exists in the in-house dataset. Pass it to
get_threat_actor for the full dossier.
actor_aliasesarrayoptionalKnown aliases for the resolved actor. Empty when no actor was supplied or the actor could not be resolved.
window_daysintegeroptionalThe Shadowserver exploitation window used for this request, in days.
my_appliancesarrayoptionalYour discovered edge appliances matched against the (curated or overridden)
vendor allowlist. Each entry has vendor, product, version, and cpe.
recently_exploited_for_my_appliancesarrayoptionalCVEs tied to your appliances that show recent in-the-wild exploitation. Each
entry has cve_id, vendor, product, connections (count over the
window), last_observed (date), severity, and cisa_kev (boolean).
attributed_to_actorarrayoptionalCVE identifiers from recently_exploited_for_my_appliances that are
attributed to the named actor. Attribution is the union of the legacy
CVE-attribution set and the in-house cited actor_cve claims. Empty when no
actor was supplied, when the name did not resolve, or when none of your
recently-exploited appliance CVEs are attributed to that actor.
notestring | nulloptionalSet when no edge appliance in your attack surface matched the vendor
allowlist — i.e. the whole result is empty because nothing was in scope,
not because nothing was found. Otherwise null.
generated_atstringoptionalISO 8601 timestamp indicating when this response was generated.
Errors
| Code | Message | When |
|---|---|---|
-32602 | invalid_params: days: min:1 | days is less than 1. |
-32602 | invalid_params: days: max:90 | days exceeds 90. |
-32001 | unauthorized | The API key is invalid/revoked, the IP is not allowed, or the key lacks the mcp:org scope. |
-32002 | insufficient_credits | The organisation's credit balance is below 1. |
For a complete reference of JSON-RPC error codes, see Errors.