The full tool inventory exposed by APTWatcher to the LLM, grouped by tier. Every tool declares its inputs, outputs, and spoliation risk. Tier 0 is always visible; other tiers are visible only when enabled in config.
This page is authoritative for what the agent can call. If a tool is not here, the agent cannot use it — and if it is here but the current tier config has the tier disabled, the agent cannot see it either.
All tools are described in the form:
tool_name(arg1: type, arg2: type = default) -> ReturnType
Inputs and outputs are JSON. Field names are snake_case. null is a
legitimate value — the adapter never guesses to fill in a missing field.
Every tool also declares:
tier— 0, 1, 2, 3, or 4spoliation_risk—read_only|state_changing_operational|state_changing_externalgated_by— list of flags / conditions required for the tool to be advertised to the LLM
Always visible. Zero external dependencies.
Probes the SIFT tool inventory against a declared use case profile. Records tool versions to the audit log. Aborts the run if a required tool is missing.
spoliation_risk:read_onlygated_by: none
Return: PreflightReport with tool → version map, profile match status,
staleness flags.
Consent-gated refresh of SIFT packages, YARA rules, or Volatility symbol tables. Never runs mid-incident without explicit operator approval.
spoliation_risk:state_changing_operationalgated_by: non-emptyconsent_tokenrequest field. The wrapper (core.sift.update.run_sift_update) raisesSiftUpdateConsentErrorwhen the token is empty or whitespace, and emits asift_update_consentaudit event before anyapt-getinvocation. Seemcp-tool-schemas.mdsection 3.13 for the full schema.
Retrieval over knowledge/. Returns entries with full front-matter
including source_type for attribution.
spoliation_risk:read_onlygated_by: none
Defang + regex extraction. Ports the pattern from APT Watch's
rss_monitor.py. Handles IPv4, IPv6, domains, URLs, file hashes, email
addresses.
spoliation_risk:read_onlygated_by: none
Wrapped volatility3 invocation. Common plugins: windows.pslist,
windows.malfind, windows.netscan, linux.pslist, linux.bash.
spoliation_risk:read_only(memory image is mounted read-only)gated_by: profile must declarememory_imageas an artifact category
Wrapped log2timeline.py. Produces a .plaso database plus a JSONL
export. The agent reads the JSONL.
spoliation_risk:read_onlygated_by: profile must declare a timeline-capable artifact category
Wrapped bulk_extractor. Useful for carving IoCs and files out of PCAPs,
memory images, and disk images.
spoliation_risk:read_onlygated_by: none
YARA over a file, directory, or memory image. Default ruleset is the
SIFT-provided baseline; custom rulesets may be loaded from
knowledge/yara/.
spoliation_risk:read_onlygated_by: none
Wrapped RegRipper. Plugin names match RegRipper's — schedtasks,
runkeys, userassist, usbstor, and so on.
spoliation_risk:read_onlygated_by: profile must declareregistryas an artifact category
Appends a structured event to the audit log. Not called by the LLM directly; invoked by every other tool to record their own execution.
spoliation_risk:read_only(writes only to the audit log, which is append-only and outside the evidence path)gated_by: none
See audit logging for the format.
Visible only when intel.*.enabled: true for at least one provider, and only
when Tier 1 is enabled (tiers.tier_1: true). All Tier 1 tools are
read_only and gated on at least one enabled provider.
Verdicts are produced by an aggregator that fans out to every configured
provider and folds the answers into one IOCVerdict (malicious > suspicious >
benign > unknown). Providers register only when enabled — keyed providers
additionally require their API-key env var to be set.
| Provider | Key | IOC types | Signal |
|---|---|---|---|
apt_watch |
none | ip/domain/url/hash/email | curated actor attribution |
dshield |
none | ip | SANS ISC reputation / threat feeds |
shodan_internetdb |
none | ip | exposure (ports, CVEs, tags) |
firehol |
none | ip | blocklist membership (incl. CIDR) |
ipsum |
none | ip | blocklist membership |
stevenblack |
none | domain | hosts blocklist membership |
virustotal |
VIRUSTOTAL_API_KEY |
ip/domain/hash | multi-engine detections |
abuseipdb |
ABUSEIPDB_API_KEY |
ip | abuse confidence score |
otx |
OTX_API_KEY |
ip/domain/hash | AlienVault pulse count |
censys |
CENSYS_API_TOKEN |
ip | host exposure / labels |
Keys are supplied via the env var named in intel.<provider>.api_key_env
(defaults shown above). Keys never live in config files or the audit log.
Fan-out lookup across every enabled provider that supports the IOC type;
returns one aggregated IOCVerdict with each provider answer preserved in
sources.
spoliation_risk:read_onlygated_by: Tier 1 enabled and at least one provider enabledioc_typevalues:ipv4,ipv6,domain,url,sha256,sha1,md5,email
Convenience wrappers over intel_lookup that infer the IOC type
(enrich_ip picks v4/v6; enrich_hash infers md5/sha1/sha256 from length).
spoliation_risk:read_onlygated_by: same asintel_lookup
Search abuse.ch ThreatFox for an indicator (IP/domain/URL/hash). Returns the
match list; this is a search verb, not a per-IOC verdict. Honors an optional
ABUSECH_API_KEY to raise rate limits.
spoliation_risk:read_onlygated_by: Tier 1 enabled
Fetch today's TweetFeed indicators, optionally filtered by exact value or tag.
spoliation_risk:read_onlygated_by: Tier 1 enabled
MCP-side observability: version + provider roster, readiness (Tier 1 flag and
count of active providers), and per-provider enabled/keyed/key-present status.
admin_providers_status never returns key values, only whether a key is set.
spoliation_risk:read_onlygated_by: Tier 1 enabled
correlate_host_against_intel(host_evidence) -> list[IOCVerdict]— batch every IOC in host evidence throughintel_lookup.threat_report_lookup(technique_id)/incident_lookup(host)— backed by the MS Threat Analytics provider (scaffolded, not wired).submit_ioc(...)— feedback loop to APT Watch.
Visible only when workflow.glpi.enabled: true.
Files a ticket. Content must be HTML (see GLPI integration for the content rule).
spoliation_risk:state_changing_external(writes to GLPI)gated_by: GLPI provider enabled; idempotency on(scenario_id, host)
Adds a follow-up to an existing ticket.
spoliation_risk:state_changing_externalgated_by: GLPI provider enabled
Searches the GLPI knowledge base for prior similar incidents.
spoliation_risk:read_onlygated_by: GLPI provider enabled
Creates a follow-up task on a ticket. Used for items that need human analyst action.
spoliation_risk:state_changing_externalgated_by: GLPI provider enabled
Visible only with --enable-containment at startup and
containment.cnc_disruptor.enabled: true in config.
Terminates a named-pipe C2 channel on the compromised host.
spoliation_risk:state_changing_operationalgated_by:--enable-containmentflag + runtime confirmation + pre/post hash capture
Sends TCP RST for an established outbound session from the given PID.
spoliation_risk:state_changing_operationalgated_by: same askill_c2_pipe
Suspends or kills a suspicious process. method is suspend or kill.
spoliation_risk:state_changing_operationalgated_by: same askill_c2_pipe
Visible only with --enable-offensive at startup (which also requires
--enable-containment) and offensive.enabled: true in config.
Disrupts an adversary C2 team server at a declared address.
spoliation_risk:state_changing_externalgated_by:--enable-offensive+ legal-ack phrase + per-action confirm
Where feasible, invalidates credential material the attacker has staged for use.
spoliation_risk:state_changing_externalgated_by: same asdisrupt_team_server
In Mode B and Mode C, tier gating is architectural: disabled-tier tools are not advertised to the LLM. The LLM literally cannot see them in the tool list. In Mode A, disabled-tier CLI commands refuse to run. See tier model — how tiers are enforced.
- Tier model
- SIFT tools reference
- Shared brain for
IOCVerdict,HostEvidence, etc.