Insight Tools

An insight is a structured finding — severity, category, affected resources, evidence, and remediation steps — saved during an assessment. The six insight tools cover the full lifecycle: save, get, list, aggregate, update status, and delete.

Insight Lifecycle

Every insight starts in open and progresses through one of two terminal states:

Use dismissed for findings that are wrong, duplicates, or no longer relevant — dismissed preserves the audit trail. Avoid insight_delete for the same reason; deletion erases history.

insight_save

Saves a new finding or overwrites an existing one. Insights are upserted by the composite key (agent_id, playbook, category, key) — a second call with the same composite key replaces the prior record. Replacement is full-record overwrite, not merge: include evidence and remediation_steps on every call if you want them retained.

When session_id is provided, the insight is linked to that session and agent_id is derived from it. For agentless mscloud_* assessments where there is no session, omit session_id (and optionally agent_id).

New insights default to severity: info and status: open. Always set severity explicitly for security findings — info is almost never the right level.

ParameterTypeRequiredDescription
playbookstringThe playbook that produced this insight.
categorystringOne of security, identity, networking, compliance, performance, configuration, availability, licensing.
keystringA short stable key, e.g. smb_signing_disabled.
valuestringHuman-readable summary of the finding.
session_idstringLink to the session that discovered it. Derives agent_id.
agent_idstringRequired only for agent-scoped findings without a session.
severitystringcritical, high, medium, low, or info (default).
evidencestringRaw command output or proof.
affected_resourcesarrayE.g. ["dc01.contoso.com", "SYSVOL share"].
remediation_stepsarrayOrdered remediation steps.
estimated_effortstringlow, medium, or high.

Example prompt.

"Save a high-severity finding for SMB signing disabled on this host, with the relevant policy reference as remediation."

insight_get

Returns a single insight by insight_id, with all structured fields — including remediation_steps, evidence, and affected_resources.

Example prompt.

"Show me the full details of insight ins_a1b2c3."

insight_list

Lists insights, most recently updated first. Structured filters use the explicit parameters; the search parameter is a free-text substring match across value, key, and evidence — not Lucene or OData syntax.

ParameterTypeRequiredDescription
severitystringcritical, high, medium, low, or info.
statusstringopen, acknowledged, in_progress, resolved, or dismissed.
categorystringOne of the eight categories.
playbookstringFilter by playbook.
agent_idstringFilter by agent.
hostnamestringFilter by hostname.
searchstringFree-text substring across value, key, evidence.
limitnumberDefault 50.
offsetnumberPagination.

Use cases. Pull every open critical or high finding for a remediation plan. Find every insight on a host. Search insights for a specific term across the whole tenant.

Example prompt.

"List all open high or critical security insights, most recent first."

insight_aggregate

Returns aggregated statistics — counts by severity, category, and status, plus trends over time and top affected hosts. Use this to reason about overall posture rather than individual findings.

ParameterTypeRequiredDescription
agent_idstringFilter by agent.
playbookstringFilter by playbook.
categorystringFilter by category.
severitystringFilter by severity.
statusstringFilter by status.

Example prompt.

"Give me the security posture summary across all agents — counts by severity and the top affected hosts."

Sample response.

json
{
  "by_severity": { "critical": 3, "high": 14, "medium": 38, "low": 71, "info": 12 },
  "by_status": { "open": 102, "acknowledged": 18, "in_progress": 7, "resolved": 9, "dismissed": 2 },
  "top_affected_hosts": [
    { "hostname": "AHW-ITD-10", "open_count": 11 }
  ]
}

insight_update_status

Updates an insight's lifecycle status, optionally reassigning it to an Entra user or group. Use whenever the user says "mark as dismissed", "acknowledged", "resolved", "close", or "reassign to someone".

The tool takes a single insight_id per call. When the user names several insights, dispatch once per insight.

ParameterTypeRequiredDescription
insight_idstringThe insight ID to update.
statusstringopen, acknowledged, in_progress, resolved, or dismissed.
assigned_tostringEntra object ID of a user or group to assign.

Example prompt.

"Mark insight ins_a1b2c3 as in progress and assign it to me."

insight_delete

Permanently removes an insight. Destructive — the audit trail is lost. Prefer insight_update_status with status: dismissed whenever the insight is wrong, duplicate, or no longer relevant.

You can delete by insight_id (preferred) or by composite key (agent_id + playbook + category + key).

ParameterTypeRequiredDescription
insight_idstringThe insight ID (preferred).
agent_idstringFor composite key delete.
playbookstringFor composite key delete.
categorystringFor composite key delete.
keystringFor composite key delete.

DANGER

insight_delete cannot be undone. The audit trail of who reported the finding, when, and why is lost. Reach for insight_update_status with dismissed instead in nearly every scenario.

See Also

For the conceptual model behind insights, see Key Concepts and Insights. For the sessions that produce insights, see Sessions.