Skip to main content
Glama

triage_digest

Read-only

Summarize inbox state by sender, label, age, unread and attachment counts, and header signals to guide bulk archive, snooze, or label decisions instead of listing raw threads.

Instructions

Structured overview of a mailbox slice for triage DECISIONS — sender / label / age buckets, unread and attachment counts, and header-derived signals (newsletter / automated / calendar / replyToMismatch / displayNameSpoof / lookalikeDomain — thread counts overall, and per sender the set of signals its threads carry), instead of a raw thread list. USE WHEN: deciding what to bulk-archive/snooze/label, or summarizing inbox state ('what's in my inbox?'). DO NOT USE: to read a specific thread (use search/get_thread). Samples up to max most-recent matches; hasMore flags that more matched than were sampled. byAge buckets by each thread's FIRST message date (thread age, not last activity). SIDE EFFECTS: none.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "triage_digest"
  }
}

Input Schema

NameRequiredDescriptionDefault
maxNo
topNNo
queryNoin:inbox

Output Schema

NameRequiredDescriptionDefault
byAgeYes
queryYes
unreadYes
hasMoreYes
sampledYes
signalsYes
topLabelsYes
topSendersYes
withAttachmentsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.25.0
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedOutput schema / properties / signals / properties / displayNameSpoof
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / signals / properties / lookalikeDomain
      Added value: +{
      +  "type": "number"
      +}
    • changedOutput schema / properties / signals / required
      Previous value: -[
      -  "newsletter",
      -  "automated",
      -  "calendar",
      -  "replyToMismatch"
      -]New value: +[
      +  "newsletter",
      +  "automated",
      +  "calendar",
      +  "replyToMismatch",
      +  "displayNameSpoof",
      +  "lookalikeDomain"
      +]
    • changedOutput schema / properties / topSenders / items / properties / signals / items / enum
      Previous value: -[
      -  "newsletter",
      -  "automated",
      -  "calendar",
      -  "replyToMismatch"
      -]New value: +[
      +  "newsletter",
      +  "automated",
      +  "calendar",
      +  "replyToMismatch",
      +  "displayNameSpoof",
      +  "lookalikeDomain"
      +]
  2. Changed4 schema fields changedv0.11.0
    • addedOutput schema / properties / signals
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "automated": {
      +      "type": "number"
      +    },
      +    "calendar": {
      +      "type": "number"
      +    },
      +    "newsletter": {
      +      "type": "number"
      +    },
      +    "replyToMismatch": {
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "newsletter",
      +    "automated",
      +    "calendar",
      +    "replyToMismatch"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / topSenders / items / properties / signals
      Added value: +{
      +  "items": {
      +    "enum": [
      +      "newsletter",
      +      "automated",
      +      "calendar",
      +      "replyToMismatch"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / topSenders / items / required
      Previous value: -[
      -  "sender",
      -  "name",
      -  "count",
      -  "unread"
      -]New value: +[
      +  "sender",
      +  "name",
      +  "count",
      +  "unread",
      +  "signals"
      +]
    • changedOutput schema / required
      Previous value: -[
      -  "query",
      -  "sampled",
      -  "hasMore",
      -  "unread",
      -  "withAttachments",
      -  "byAge",
      -  "topSenders",
      -  "topLabels"
      -]New value: +[
      +  "query",
      +  "sampled",
      +  "hasMore",
      +  "unread",
      +  "withAttachments",
      +  "byAge",
      +  "signals",
      +  "topSenders",
      +  "topLabels"
      +]
  3. Addedv0.6.0

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint and openWorldHint; the description adds materially more — that results are a sample of the `max` most-recent matches, that hasMore signals truncation, that byAge buckets by FIRST message date rather than last activity, and it confirms 'SIDE EFFECTS: none' consistent with readOnlyHint=true. The threading semantics of per-sender signals (thread counts overall vs. per-sender sets) are also disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and the use/don't-use routing, with side effects and sampling caveats trailing. The long parenthetical signal list is dense but each item is load-bearing; the only real cost is that it interrupts the sentence flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter aggregation tool with an output schema, the description covers return semantics, sampling limits, edge behavior (hasMore), and bucketing logic. The single remaining hole an agent would care about is what `topN` ranks, which is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry all parameter meaning; it explains `max` (samples up to max most-recent matches) and byAge bucketing, but `topN` is never mentioned and `query` syntax (beyond the implicit in:inbox default) is not explained. Partial compensation for a total schema gap puts this at a minimum-viable 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource (structured overview of a mailbox slice) and enumerates exactly what the digest contains — sender/label/age buckets, unread and attachment counts, header-derived signals — explicitly contrasting it with 'a raw thread list'. That contrast alone lets an agent separate it from search and get_thread without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'USE WHEN: deciding what to bulk-archive/snooze/label, or summarizing inbox state' gives positive triggers, and 'DO NOT USE: to read a specific thread (use search/get_thread)' names the exact alternatives and the condition that selects them. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.