meta.why_this_notification

Live

Return substrate-grounded provenance for a notification.

CategoryMeta
JSON-RPCtools/call
EndpointPOST /mcp
Sourcepackages/mcp-tools/src/tools/meta-why-this-notification.ts

Description

Returns the triage class (interrupt_now / surface_at_transition / daily_digest / handle_silently), contributing signals, and rule_summary for any notification Cortex surfaced. Per ADR-0021 §read-API Family A.

Input schema

FieldTypeRequiredDescription
notification_idstringyesThe notification id.

Output shape

typescript
{
  notification_id: string;
  triage_class: 'interrupt_now' | 'surface_at_transition' | 'daily_digest' | 'handle_silently';
  rule_summary: string;
  confidence: 'strong_pattern' | 'pretty_sure' | 'just_guessing';
  contributing_signals: Array<{ kind: string; summary: string }>;
  agent_version: string;
  world_version: string;
}

Example call

JSON-RPC tools/call request body (omit the JSON-RPC envelope when using an SDK; the SDK adds it for you):

jsontools/call params
{ "name": "meta.why_this_notification", "arguments": { "notification_id": "ntf_01HX..." } }

Example response

Tool results are always wrapped as content[0].text with a stringified JSON body. The shape below is what you get back from JSON.parse(result.content[0].text):

jsonparsed result body
{
  "notification_id": "ntf_01HX...",
  "triage_class": "surface_at_transition",
  "rule_summary": "Surface emails from VIP counterparties at the next focus-block break.",
  "confidence": "pretty_sure",
  "contributing_signals": [
    { "kind": "vip_counterparty", "summary": "Sender is in VIP watchlist." },
    { "kind": "active_focus_block", "summary": "Calendar block 'deep work' active until 11:00." }
  ],
  "agent_version": "av_01HXP9AGENT",
  "world_version": "wv_01HXR4WORLD"
}

Errors this tool can return

CodeMeaning
invalid_argumentsTool input failed Zod validation.
unauthorizedMissing or invalid bearer token.
quota_exceededPer-minute, daily call, or daily inference budget exceeded.
not_foundThe requested resource (action_id, decision_id, counterparty_id, etc.) was not found.

See the full error catalog for resolution steps on each code, plus the standard transport-layer responses (401, 429).