REFERENCE

v6.11.0

Attack Detection

Watch the fleet's logs for brute force, credential spraying, a login that SUCCEEDED after failures, port scans and unexplained config changes; correlate them into incidents with evidence, and block the source with a timed, reversible, rate-limited entry when asked.

Tools

scan_for_attacks

Scan for Attacks Now · Risk: read

Reads recent logs from every configured device, runs the attack detectors, and correlates what they find into incidents — brute force, credential spraying, a login that SUCCEEDED after failures, port scans, management ports answering the internet, and unexplained changes to security-relevant configuration. Read-only: it changes nothing on any device. One source hitting several routers is reported as ONE incident, which is the pattern no single router can see. Detectors whose input is missing say so and name the fix, rather than reporting a quiet network. Pass devices for one router, or online_only to skip the ones currently unreachable — any device left out is named in the result.

ParameterRequiredDefinition
devicesNoLimit to these devices (default: all). {"type":"array","items":{"type":"string"}}
online_onlyYesSkip devices the health probe currently reports as unreachable. A device not yet probed is still scanned — never probed is not the same as known-offline. {"default":false,"type":"boolean"}
window_minutesNoHow far back to read. Default from config (10). {"type":"integer","exclusiveMinimum":0,"maximum":1440}

list_attack_incidents

List Attack Incidents · Risk: read

Lists recorded attack incidents newest-first: attacker address, how far they got (recon → attempt → breach → persistence), how much the evidence justifies believing it, which devices they touched, and when. Use get_attack_incident for the evidence behind one. Reads stored history — it does not contact any device.

ParameterRequiredDefinition
hoursYesHow far back. {"default":24,"type":"integer","exclusiveMinimum":0,"maximum":8760}
min_confidenceNoOnly incidents at or above this confidence. {"type":"string","enum":["low","medium","high","confirmed"]}
limitYes{"default":50,"type":"integer","exclusiveMinimum":0,"maximum":500}

get_attack_incident

Attack Incident Detail · Risk: read

One incident in full: the story, every piece of evidence with its raw log line and timestamp, which detectors fired, the devices affected, and the existing tools that address it. Use this before deciding whether to block someone — an incident that cannot show its work should not be acted on.

ParameterRequiredDefinition
idYesIncident id from list_attack_incidents. {"type":"string"}

block_attacker

Block an Attacker · Risk: write

Blocks an attacker by adding their address to the mcp-attack-block address list on every affected device, behind a single raw-chain drop rule created once per device. DRY RUN unless confirm=true. Timed by default so a wrong block expires on its own; a permanent block needs an explicit timeout of ''. REFUSED, whatever you pass, when: the evidence is only spoofable (a forged flood would let the attacker choose the victim), the address is this server's own management path or a device or its gateway/resolver, or the per-hour response cap has been reached. A confirmed breach escalates instead — blocking the source does not undo someone already being in.

ParameterRequiredDefinition
incident_idYesIncident to act on, from list_attack_incidents. {"type":"string"}
timeoutNoHow long, e.g. '1h', '1d00:00:00'. Empty string means permanent (needs confirm). {"type":"string"}
confirmYesActually apply it. Default false = dry run. {"default":false,"type":"boolean"}

unblock_attacker

Unblock an Address · Risk: destructive

Removes an address from the attack block list on every device it was applied to, and marks the response as revoked so the history still explains what happened and why it was undone. Use when a block turns out to have caught something legitimate.

ParameterRequiredDefinition
addressYesThe blocked address. {"type":"string"}
devicesNoDevices to clear (default: the ones the block was applied to). {"type":"array","items":{"type":"string"}}

list_attack_responses

List Attack Responses · Risk: read

Every block this server has applied: what, why, from which incident, on which devices, and when it expires. An entry in a device's address list that nobody can explain is worse than no entry at all, so this is the record that makes automatic blocking reversible.

ParameterRequiredDefinition
active_onlyYesOnly blocks still in force. {"default":true,"type":"boolean"}
limitYes{"default":50,"type":"integer","exclusiveMinimum":0,"maximum":500}

configure_attack_response

Show Attack Response Policy · Risk: read

Shows the current detection and response policy: the mode, thresholds, which detectors may respond automatically, the per-hour cap, and the never-block list including the entries derived from your own deployment. Also checks a specific address against the never-block rules, which is the fastest way to answer 'why did it refuse to block that?'. The policy itself lives in the attacks config block — edit it there or in the dashboard, so a change survives a restart.

ParameterRequiredDefinition
check_addressNoAsk whether this address would be refused, and why. {"type":"string"}

On this page