Module f0_defender_mcp.server · 7 tools (5 read + 2 gated write) · server README
🔒 Gated write tools require the platform write flag and a per-action human confirmation — see the security model.
Get the Microsoft Secure Score — Microsoft 365 / Defender config-hardening posture (%).
Microsoft tenant configuration only — not the LimaCharlie endpoint deployment (use get_org_overview) or the ProjectAchilles validation fleet (use get_fleet_health).
No parameters.
Used by skills: roll-up-ciso-risk, defender-posture-summary, review-data-risk
List unresolved Defender XDR incidents (correlated alert groups), newest first.
severity_min: one of info|low|medium|high|critical. limit: max incidents. Defaults to state="open" — excludes resolved incidents and ones redirected into another incident, which Defender retains indefinitely and which are already handled. Use state="all" for incident history.
| Parameter | Type | Default |
|---|---|---|
severity_min |
"info" | "low" | "medium" | "high" | "critical" |
"medium" |
limit |
integer |
25 |
state |
"open" | "all" |
"open" |
Used by skills: triage-incident-cross-platform, defender-posture-summary, triage-defender-incident, intune-device-triage
List unresolved Defender XDR alerts (alerts_v2), newest first.
severity_min: one of info|low|medium|high|critical. limit: max alerts. Defaults to state="open" — excludes resolved alerts, which are already handled and which dominate a mature tenant. Use state="all" for alert history.
| Parameter | Type | Default |
|---|---|---|
severity_min |
"info" | "low" | "medium" | "high" | "critical" |
"high" |
limit |
integer |
25 |
state |
"open" | "all" |
"open" |
Used by skills: triage-incident-cross-platform, triage-defender-incident, intune-device-triage
Run a Microsoft Defender advanced hunting query (KQL) over M365 / Entra / devices (30d).
For LimaCharlie endpoint (EDR sensor) telemetry, use query_telemetry instead —
this tool is Microsoft/Defender + KQL only. Construct a kql query string.
For common hunts prefer the hunt tool (it builds the KQL for you); use this
only for a CUSTOM KQL query you provide. Key tables & fields: DeviceNetworkEvents
(Timestamp, RemoteUrl, RemoteIP, RemotePort), DeviceProcessEvents (Timestamp,
DeviceName, FileName, ProcessCommandLine, AccountName), DeviceLogonEvents
(Timestamp, ActionType, AccountName, DeviceName), EmailEvents (Timestamp,
SenderFromAddress, Subject, ThreatTypes). Always bound results with | take 50.
| Parameter | Type | Default |
|---|---|---|
kql |
string |
(required) |
Used by skills: defender-threat-hunt
Guided Microsoft Defender hunt — the server builds correct KQL, so you don't have to.
category: network | process | logon | email. indicator: what to look for — a domain/IP (network), a process name or command-line fragment (process); optional for logon/email. Prefer this over run_hunting_query unless the user gives you custom KQL.
| Parameter | Type | Default |
|---|---|---|
category |
"network" | "process" | "logon" | "email" |
(required) |
indicator |
string |
"" |
time_window_hours |
integer |
24 |
Used by skills: defender-threat-hunt, investigate-lc-endpoint, limacharlie-threat-hunt
Isolate a device from the network (GATED WRITE).
Call WITHOUT confirmation_token first: returns the intended action only. An
operator then approves it in confirm_action.py --watch and you call again
with the SAME arguments — or supplies a token from confirm_action.py as
confirmation_token. Requires DEFENDER_ALLOW_WRITE=true.
| Parameter | Type | Default |
|---|---|---|
device_id |
string |
(required) |
comment |
string |
(required) |
confirmation_token |
string |
"" |
Used by skills: triage-incident-cross-platform
Release a device from isolation (GATED WRITE).
Same two-step flow as isolate_host: call without confirmation_token to
preview, then either an operator approves it in confirm_action.py --watch
and you call again with the SAME arguments, or supply a token from
confirm_action.py as confirmation_token.
| Parameter | Type | Default |
|---|---|---|
device_id |
string |
(required) |
comment |
string |
(required) |
confirmation_token |
string |
"" |