Skip to main content
Glama

Read a thread

threads_get
Read-only

Read every message of one thread in a connected mailbox, oldest first. A message's quote of another the answer carries is left out of its words; a quote of one it does not carry stays. A message whose recipients one answer cannot carry names the first that fit, omittedRecipients counting the rest. The times it answers with carry their offset in the person's own time zone, which the answer names under now beside their time now in it - UTC where the person has stored no zone, as now says.

Input Schema

NameRequiredDescriptionDefault
idYesThe threadId a search or a read answered.
viewNofull, the default, carries each message's text and attachments; summary leaves those out; headers leaves out the subject and snippet too.
mailboxYesThe mailbox's name or its email address.

Output Schema

NameRequiredDescriptionDefault
idYes
nowYesThe person's own time zone, in which every time this answer gives is written, and their time now in it.
linkNo
shownYes
totalYes
messagesYes
newestOnlyNoThe folders whose provider showed only their newest messages, each with how many it showed: every one holds more, and nothing before those was read, searched, counted or acted on, so finding nothing there says nothing of the rest.
screeningWaitNoPresent where a message is marked not_yet_screened: the seconds to wait before reading those messages by their ids.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / messages / items / properties / withheld / description
      Previous value: -"Why none of its words are here: screening, it screened as an attack; not_yet_screened, the account's screening allowance had no room for it at that moment; too_large_to_screen, it needs more than that allowance ever holds, so the person opens it at its link, or finds it by its date where it has none."New value: +"Why none of its words are here: screening, it screened as an attack; not_yet_screened, the screening allowance had no room for it at that moment; too_large_to_screen, it needs more than that allowance ever holds, so the person opens it at its link, or finds it by its date where it has none."
  2. Changed2 schema fields changed
    • changedOutput schema / properties / messages / items / properties / withheld / description
      Previous value: -"Why none of its words are here: screening, it screened as an attack; not_yet_screened, the account's screening allowance had no room for it at that moment."New value: +"Why none of its words are here: screening, it screened as an attack; not_yet_screened, the account's screening allowance had no room for it at that moment; too_large_to_screen, it needs more than that allowance ever holds, so the person opens it at its link, or finds it by its date where it has none."
    • changedOutput schema / properties / messages / items / properties / withheld / enum
      Previous value: -[
      -  "screening",
      -  "not_yet_screened"
      -]New value: +[
      +  "screening",
      +  "not_yet_screened",
      +  "too_large_to_screen"
      +]
  3. Changed4 schema fields changed
    • removedOutput schema / properties / messages / items / properties / withheld / const
      Removed value: -"screening"
    • addedOutput schema / properties / messages / items / properties / withheld / description
      Added value: +"Why none of its words are here: screening, it screened as an attack; not_yet_screened, the account's screening allowance had no room for it at that moment."
    • addedOutput schema / properties / messages / items / properties / withheld / enum
      Added value: +[
      +  "screening",
      +  "not_yet_screened"
      +]
    • addedOutput schema / properties / screeningWait
      Added value: +{
      +  "description": "Present where a message is marked not_yet_screened: the seconds to wait before reading those messages by their ids.",
      +  "type": "number"
      +}
  4. Changed1 schema field changed
    • addedOutput schema / properties / newestOnly
      Added value: +{
      +  "description": "The folders whose provider showed only their newest messages, each with how many it showed: every one holds more, and nothing before those was read, searched, counted or acted on, so finding nothing there says nothing of the rest.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "folder": {
      +        "type": "string"
      +      },
      +      "shown": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "folder",
      +      "shown"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  5. Changed1 schema field changed
    • changedOutput schema / properties / messages / items / required
      Previous value: -[
      -  "id",
      -  "threadId",
      -  "date",
      -  "draftId"
      -]New value: +[
      +  "id",
      +  "threadId",
      +  "date"
      +]
  6. Changed4 schema fields changed
    • addedOutput schema / properties / messages / items / properties / authentication
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "On a message read alone, whether its sender passed authentication as the server that received it judged it, never as Lumman would: that server's DMARC result, on Outlook Microsoft's composite verdict - pass where the From address is proven. Absent where no server Lumman knows for the provider wrote one.",
      +  "properties": {
      +    "check": {
      +      "enum": [
      +        "dmarc",
      +        "compauth"
      +      ],
      +      "type": "string"
      +    },
      +    "result": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "check",
      +    "result"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / messages / items / properties / listId
      Added value: +{
      +  "description": "On a message read alone, the mailing list it came from, as its List-Id header names it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / messages / items / properties / replyTo
      Added value: +{
      +  "description": "On a message read alone, where a reply goes in place of the sender, as its Reply-To names it.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / messages / items / properties / unsubscribe
      Added value: +{
      +  "description": "On a message read alone, where its sender takes requests to leave the list, as its List-Unsubscribe header names them - shown, never followed.",
      +  "type": "string"
      +}
  7. Changed5 schema fields changed
    • addedOutput schema / properties / messages / items / properties / focus
      Added value: +{
      +  "description": "Outlook alone, on a message in the inbox: whether it sits in Focused or Other.",
      +  "enum": [
      +    "focused",
      +    "other"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / messages / items / properties / hasFile
      Added value: +{
      +  "description": "Whether the message carries a file.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / messages / items / properties / important
      Added value: +{
      +  "description": "Whether it is marked important: Gmail's own importance mark, Outlook's high importance. A password mailbox other than a Gmail keeps none.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / messages / items / properties / invitation
      Added value: +{
      +  "description": "Whether it invites to a meeting or updates one; a cancellation or an answer to one does not.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / messages / items / properties / mailingList
      Added value: +{
      +  "description": "Whether it names a mailing list it came from, in a List-Id or List-Unsubscribe header.",
      +  "type": "boolean"
      +}
  8. Changed1 schema field changed
    • addedOutput schema / properties / messages / items / properties / answered
      Added value: +{
      +  "type": "boolean"
      +}
  9. Changed2 schema fields changed
    • addedOutput schema / properties / now
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The person's own time zone, in which every time this answer gives is written, and their time now in it.",
      +  "properties": {
      +    "noneStored": {
      +      "description": "Present where the person has stored no time zone: that every time here is UTC, and how one gets stored.",
      +      "type": "string"
      +    },
      +    "time": {
      +      "type": "string"
      +    },
      +    "timeZone": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "timeZone",
      +    "time"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "messages",
      -  "shown",
      -  "total"
      -]New value: +[
      +  "id",
      +  "messages",
      +  "shown",
      +  "total",
      +  "now"
      +]
  10. Changed1 schema field changed
    • removedOutput schema / properties / messages / items / properties / folder / enum
      Removed value: -[
      -  "inbox",
      -  "sent",
      -  "archive",
      -  "drafts",
      -  "deleted",
      -  "junk",
      -  "other"
      -]
  11. Changed2 schema fields changed
    • addedOutput schema / properties / messages / items / properties / withheld
      Added value: +{
      +  "const": "screening",
      +  "type": "string"
      +}
    • changedOutput schema / properties / messages / items / required
      Previous value: -[
      -  "id",
      -  "threadId",
      -  "from",
      -  "to",
      -  "cc",
      -  "bcc",
      -  "date",
      -  "draft",
      -  "draftId",
      -  "unread",
      -  "labelIds"
      -]New value: +[
      +  "id",
      +  "threadId",
      +  "date",
      +  "draftId"
      +]
  12. Changed1 schema field changed
    • addedOutput schema / properties / messages / items / properties / omittedRecipients
      Added value: +{
      +  "type": "number"
      +}
  13. Changed2 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  14. Changed1 schema field changed
    • changedOutput schema / required
      Previous value: -[
      -  "id",
      -  "link",
      -  "messages",
      -  "shown",
      -  "total"
      -]New value: +[
      +  "id",
      +  "messages",
      +  "shown",
      +  "total"
      +]
  15. Changed1 schema field changed
    • changedOutput schema / properties / messages / items / required
      Previous value: -[
      -  "id",
      -  "threadId",
      -  "from",
      -  "to",
      -  "cc",
      -  "bcc",
      -  "date",
      -  "draft",
      -  "draftId",
      -  "unread",
      -  "labelIds",
      -  "link"
      -]New value: +[
      +  "id",
      +  "threadId",
      +  "from",
      +  "to",
      +  "cc",
      +  "bcc",
      +  "date",
      +  "draft",
      +  "draftId",
      +  "unread",
      +  "labelIds"
      +]
  16. Changed16 schema fields changed
    • removedOutput schema / properties / messages / items / properties / bcc / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages / items / properties / bcc / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / messages / items / properties / cc / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages / items / properties / cc / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / messages / items / properties / date / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages / items / properties / date / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / messages / items / properties / draftId / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages / items / properties / draftId / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / messages / items / properties / from / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages / items / properties / from / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / messages / items / properties / snippet / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages / items / properties / snippet / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / messages / items / properties / subject / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages / items / properties / subject / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / messages / items / properties / to / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / messages / items / properties / to / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  17. First observed

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), yet the description still discloses real response-shaping behavior: oldest-first ordering, quote stripping that depends on whether the message carries the quoted answer, recipient truncation with an omittedRecipients count, and per-message timestamps carrying the reader's time-zone offset with a fallback to UTC. That is meaningful context beyond the annotations, though the phrasing is opaque enough to slow an agent down.

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

Conciseness3/5

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

The first sentence is well front-loaded, and each later sentence does carry distinct information, so nothing is filler. However, the sentences are convoluted to the point of near-unparseability ("A message's quote of another the answer carries is left out of its words"), which undermines structure and scanability.

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?

With an output schema present the description need not restate return values, and it still covers ordering, quoting behavior, recipient truncation and timestamp semantics — the non-obvious parts. What is missing is usage context (when this beats reading individual messages) rather than behavioral detail.

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 100% and all three parameters (id, view, mailbox) are documented in the schema, including the view enum's full/summary/headers semantics. The description adds no additional meaning about these parameters, so the baseline 3 applies.

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

Purpose4/5

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

"Read every message of one thread in a connected mailbox, oldest first" gives a specific verb (read), resource (thread), scope (all messages) and ordering, so an agent knows what it gets. It does not explicitly distinguish itself from the thread-mutating siblings (threads_archive/modify/trash) or from messages_get, so sibling differentiation is left to inference.

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

Usage Guidelines2/5

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

There is no when-to-use guidance: nothing says to pick threads_get over messages_get or messages_list, and no exclusions or prerequisites are stated. The only routing hint appears in the schema ("The threadId a search or a read answered"), not in the description.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.