Skip to main content
Glama
ZeroSOC

defender-xdr

by ZeroSOC

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
defender_get_capabilitiesA

What this tenant exposes, as a ZeroSOC capability binding. Call it once before investigating. It checks which hunting tables hold data, which are exposed but empty and which the licence does not expose at all, which APIs answer, and which application permissions are granted, so an empty query result is read correctly: a visibility gap, a missing licence or a missing permission. Returns capabilities (capability class to tool), data_sources (each playbook data source, available or not, with the reason in data_source_notes) and probe (every check, the granted roles, the classes left unbound and the checks that stay manual). The probe only reads; the result is kept until refresh.

defender_decode_commandA

Decode a PowerShell -EncodedCommand payload (base64 of UTF-16LE) exactly. Accepts the full command line, any spelling of the flag (-e, -enc, -ec, ...), or the bare base64. Use it instead of decoding by hand. A decoding that is itself an encoded command is decoded again, up to five rounds: rounds is how many layers were removed and capped says the command was still encoded when they ran out. The evidence inventory already carries decoded_command, decode_rounds and decode_capped on process rows.

defender_to_utcA

Convert a timestamp to UTC exactly. The APIs return UTC; the Defender portal shows the viewer's local time. Convert every time quoted from the portal or by a person before it goes into a timeline, so all entries share one reference.

defender_get_exposure_scoreA

Get the organization's exposure score: lower is better.

defender_get_secure_scoreA

Get the Microsoft Secure Score for Devices: higher is better.

defender_get_machine_group_exposure_scoreB

Get the exposure score of each device group.

defender_get_device_healthA

List the antivirus health of devices: mode, engine, platform and signature versions and their freshness, last quick and full scan. A device whose antivirus is passive, disabled or out of date explains a missing detection.

defender_export_antivirus_healthA

Get the short-lived download links of the full antivirus health report of every device. For a bounded look at it use defender_get_device_health.

defender_get_vulnerabilitiesB

List the vulnerabilities that affect the organization, e.g. filter "severity eq 'Critical'" or "publicExploit eq true".

defender_get_vulnerability_by_idA

Get one vulnerability by CVE ID: severity, CVSS, exploit availability, exposed devices.

defender_get_machine_vulnerabilitiesA

List the vulnerabilities that affect one device.

defender_get_machines_by_vulnerabilityB

List the devices exposed to a vulnerability.

defender_get_softwareB

List the software inventory of the organization with weaknesses and exposed devices.

defender_get_software_by_idB

Get one software entry: vendor, weaknesses, exploit availability, exposed devices.

defender_get_software_vulnerabilitiesB

List the vulnerabilities of one software entry.

defender_get_machines_by_softwareB

List the devices that have a software installed.

defender_get_software_version_distributionA

Get the distribution of installed versions of a software.

defender_get_recommendationsA

List security recommendations, e.g. filter "remediationType eq 'ConfigurationChange'".

defender_get_recommendation_by_idC

Get one security recommendation.

defender_get_recommendation_machinesB

List the devices a security recommendation applies to.

defender_get_recommendation_vulnerabilitiesA

List the vulnerabilities a security recommendation addresses.

defender_get_remediation_activitiesB

List remediation activities with their status and due date.

defender_get_remediation_activity_by_idC

Get one remediation activity.

defender_get_remediation_exposed_devicesA

List the devices still exposed under a remediation activity.

defender_export_assessmentA

Read a per-device assessment: one row per device and software, vulnerability, configuration or browser extension. The full export is large; this returns one bounded page and the next link.

defender_get_machine_actionsA

List response actions taken on devices (isolation, release, scans, quarantine, packages, live response) with their status, requestor, comment and times, e.g. filter "machineId eq ''" or "type eq 'Isolate'". It lists actions taken by anyone, people included, so it is how to check whether a containment still stands.

defender_get_machine_action_by_idA

Get one machine action: type, status (Pending, InProgress, Succeeded, Failed, TimeOut, Cancelled), requestor, comment and times. Poll it after a response action.

defender_get_package_sas_uriA

Get the short-lived download link of a collected investigation package. The link grants access to forensic data: hand it to a person, do not store it in a note.

defender_get_live_response_resultA

Get the short-lived download link of the output of one live response command.

defender_get_investigationsA

List automated investigations with their state and the alert that triggered each.

defender_get_investigation_by_idA

Get one automated investigation: state, status details, device and triggering alert.

defender_list_library_filesA

List the scripts in the live response library.

defender_get_indicatorsA

List the custom indicators (allow, audit, warn, block) of the tenant, with OData filtering, e.g. "indicatorValue eq '203.0.113.7'", "action eq 'Block'".

defender_get_file_infoA

Get what Defender knows about a file by hash: global prevalence and first seen, size, type, signer and issuer, determination. Only the hash leaves the environment.

defender_get_file_statisticsA

Get the prevalence of a file in this organization and worldwide, with first and last seen. A file seen on one device and nowhere else is worth a closer look.

defender_get_file_alertsA

List the Defender for Endpoint alerts that involve a file.

defender_get_file_machinesA

List the devices a file was seen on: the lateral scope of a hash.

defender_get_domain_alertsB

List the Defender for Endpoint alerts that involve a domain.

defender_get_domain_machinesB

List the devices that communicated with a domain: the lateral scope of a domain.

defender_get_domain_statisticsA

Get the prevalence of a domain in this organization, with first and last seen.

defender_get_ip_alertsA

List the Defender for Endpoint alerts that involve an IP address.

defender_get_ip_statisticsA

Get the prevalence of an IP address in this organization, with first and last seen.

defender_get_user_alertsB

List the Defender for Endpoint alerts that involve a user.

defender_get_user_machinesA

List the devices a user logged on to: logon relationships, not role or privilege.

defender_get_machinesA

List devices onboarded to Defender for Endpoint, with OData filtering, e.g. "healthStatus eq 'Active'", "riskScore eq 'High'", "startswith(computerDnsName,'ws')".

defender_get_machine_by_idA

Get one device: DNS name, OS, health, risk and exposure level, tags, device value, IPs, first and last seen. Accepts the machine ID (the mdeDeviceId of alert evidence).

defender_find_machines_by_ipA

Find the devices that had an IP address around a given time.

defender_find_machines_by_tagB

Find the devices that carry a tag.

defender_get_machine_logon_usersA

List the users that logged on to a device.

defender_get_machine_alertsA

List the Defender for Endpoint alerts of one device.

defender_update_machineB

Update a device's tags or device value (a metadata write).

defender_add_remove_machine_tagA

Add a tag to a device or remove one (a metadata write).

entra_list_sign_insA

List interactive sign-ins from the Entra ID sign-in log: user, application, client and IP address, location, device, conditional access result, MFA detail, risk and error code. Always filter, e.g. "userPrincipalName eq 'alice@contoso.com' and createdDateTime ge 2026-01-01T00:00:00Z", "ipAddress eq '203.0.113.7'", "status/errorCode ne 0". Timestamps are UTC. Requires an Entra ID P1 or P2 licence in the tenant; retention is 30 days.

entra_list_directory_auditsA

List Entra ID directory audit events: changes to users, groups, roles, applications, service principals, credentials and policies, with who made them. Always filter, e.g. "activityDisplayName eq 'Add member to role'", "initiatedBy/user/userPrincipalName eq 'alice@contoso.com'", "activityDateTime ge 2026-01-01T00:00:00Z", "targetResources/any(t: t/id eq '')". Timestamps are UTC.

defender_run_hunting_queryA

Run an advanced hunting query (KQL) across Defender XDR data: endpoint, identity, email and cloud apps in one query. Tables include AlertInfo, AlertEvidence, DeviceProcessEvents, DeviceNetworkEvents, DeviceFileEvents, DeviceRegistryEvents, DeviceLogonEvents, DeviceEvents, IdentityLogonEvents, IdentityDirectoryEvents, EmailEvents, EmailUrlInfo, UrlClickEvents and CloudAppEvents. Which tables hold data depends on the tenant's licences: an empty result from a table that defender_get_capabilities reports as empty or not exposed is a visibility gap, not a finding and not a permissions problem. The sensor records no creation event for some processes (services started before it, some short-lived instances): a process absent from DeviceProcessEvents may still be there as the InitiatingProcessId and InitiatingProcessCreationTime of other events, so look there before concluding it did not run. Match a process by PID together with its creation time, never by PID alone. Timestamps are UTC. Data is limited to the last 30 days. Example: "DeviceProcessEvents | where Timestamp > ago(1d) | where FileName =~ 'powershell.exe' | project Timestamp, DeviceName, ProcessCommandLine | limit 50".

defender_list_alertsA

List alerts from all Defender XDR workloads: Endpoint, Office 365 email, Identity, Cloud Apps and Entra ID Protection. Supports OData filtering with Graph camelCase values, e.g. "severity eq 'high'", "status eq 'new'", "serviceSource eq 'microsoftDefenderForEndpoint'", "createdDateTime gt 2026-01-01T00:00:00Z". Each alert carries its evidence inline. For the alerts of one incident use defender_get_incident_alerts.

defender_get_alertA

Get one alert with its full evidence (files, processes, registry keys, IPs, URLs, users, mailboxes, devices), MITRE techniques, detection source, detector ID and comment thread.

defender_update_alertA

Update an alert (a triage write): status, assignee, classification and determination.

defender_add_alert_commentA

Append a comment to an alert's comment thread (a triage write), visible to analysts in the Defender portal. Notes about the whole case belong on the incident instead.

defender_list_incidentsA

List incidents from Microsoft Defender XDR. Incidents group related alerts from all Defender workloads (endpoint, identity, email, cloud apps) into one attack story. Supports OData filtering with Graph camelCase values, e.g. "status eq 'active'", "severity eq 'high'", "lastUpdateDateTime gt 2026-01-01T00:00:00Z", "assignedTo eq 'analyst@contoso.com'". Use it to find incidents before drilling into one. A merged incident has status 'redirected' and names its master in redirectIncidentId.

defender_get_incidentA

Get one incident as it is stored: severity, status, classification, determination, owner, custom tags, comment thread, timestamps, and redirectIncidentId when it was merged into another. The starting point of incident analysis; it does not follow merges (use defender_resolve_incident for that).

defender_resolve_incidentA

Follow the merge history of an incident to its master. Returns the master incident with incidentId (the master's ID) and redirectedFrom (the merged IDs walked, in order; empty when the incident is live). Writes made by this server already do this; call it to learn where an incident went.

defender_get_incident_alertsA

Get the alerts of an incident, paged (skip/top), with their details: title, severity, category, MITRE techniques, detection source, timestamps and nested evidence. For the entities themselves prefer defender_get_incident_evidence, which flattens and de-duplicates the evidence of every alert in one call.

defender_get_incident_evidenceA

The full evidence inventory of an incident: the portal's evidence view as one table. Pages through every alert and flattens the evidence into one row per evidence item, each joined to its device (by device ID, else through the alert) and listing the alerts that cite it. A row is the source's own unit: entityCount equals the portal's count of evidence items and is the number to reconcile; rowCount is the number of per-alert evidence rows. The source lists one process more than once when alerts describe it differently (no image file, another path, a different verdict): those rows share instance (device, PID, creation time), sameProcess groups them with their verdicts, and processInstanceCount is the number of real processes. Rows carry type, name, PID and parent PID, full command line and its decoded -EncodedCommand payload, creation times in UTC, SHA1/SHA256, path, user SID and UPN, device ID, IP, registry key and value, detailed roles, verdict and remediation status. Follows a merged incident to its master. These are the entities the alerts cite, not raw telemetry: processes the detection did not flag are not here.

defender_update_incidentA

Update an incident (a triage write): status, assignee, classification, determination and custom tags. If the incident was merged into another, the update is applied to the master incident and redirectedFrom says so.

defender_add_incident_commentA

Append a comment to an incident's comment thread (a triage write), visible to analysts in the Defender portal. If the incident was merged into another, the comment is written on the master incident, where analysts will read it, and redirectedFrom says so.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

B3.2/5.0

Scored across 66 tools

Disambiguation4/5

Most tools use a clear resource-plus-attribute pattern (get_machine_*, get_file_*, get_recommendation_*), so their purposes are largely distinct. A few inverse/overlapping pairs—machine_vulnerabilities vs machines_by_vulnerability, file_info vs file_statistics, incident_alerts vs incident_evidence—require careful reading and could cause misselection.

Naming Consistency4/5

The dominant defender_get_<resource> and defender_update_<resource> conventions are consistent and readable. Deviations are minor but visible: mixed get_/list_ for collections, find_machines_by_* instead of get_*, the combined add_remove verb, and an entra_ prefix inside a defender_ server.

Tool Count1/5

66 tools is far beyond the typical well-scoped MCP surface and exceeds the 50+ extreme-mismatch boundary. Even though the tools are grouped by domain, this scale creates significant selection and maintenance overhead and would be better split into focused servers.

Completeness2/5

Investigation, hunting, alert/incident triage, and vulnerability views are well covered. However, the response half of XDR is missing: there are no tools to isolate/release machines, run live response, create/delete indicators, or mutate remediation activities, leaving obvious dead ends after detection.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive