Skip to main content
Glama

Read my messages

event_inbox
Read-onlyIdempotent

Reads the person's own conversations with people they connected with at an event. Needs a personal connector token. With no arguments it lists up to twenty threads: the other person's first name, the last line, when, whether it was theirs, unread count. With firstName or chatId it returns that conversation's last lines. No row carries a phone number, email address, surname, account id or photo. Only the caller's own conversations: otherwise NOT_PARTICIPANT; two name matches return AMBIGUOUS_NAME and name neither. It only reads and marks nothing read.

Input Schema

NameRequiredDescriptionDefault
limitNoOptional lines of one conversation, at most 50 (default 30).
chatIdNoOptional conversation id from a thread row.
firstNameNoOptional first name from a thread row.

Output Schema

NameRequiredDescriptionDefault
okNo
errorNo
chatIdNo
unreadNo
messageNo
threadsNo
messagesNo
returnedNo
servedByNo
candidatesNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / chatId / description
      Previous value: -"Optional. The id of one conversation, as a thread row from this tool gave it. When both this and firstName are sent, this one is used."New value: +"Optional conversation id from a thread row."
    • changedInput schema / properties / firstName / description
      Previous value: -"Optional. The first name of the person whose conversation to read, as a thread row spelled it, matched against the caller's own conversations only. Two matches return AMBIGUOUS_NAME and nothing is read."New value: +"Optional first name from a thread row."
    • changedInput schema / properties / limit / description
      Previous value: -"Optional. How many lines of one conversation to return, at most 50; 30 when absent. Not used when listing threads, which returns at most 20."New value: +"Optional lines of one conversation, at most 50 (default 30)."
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "anyOf": [
      +    {
      +      "required": [
      +        "ok",
      +        "returned"
      +      ]
      +    },
      +    {
      +      "properties": {
      +        "ok": {
      +          "const": false
      +        }
      +      },
      +      "required": [
      +        "ok"
      +      ]
      +    },
      +    {
      +      "properties": {
      +        "found": {
      +          "const": false
      +        }
      +      },
      +      "required": [
      +        "found"
      +      ]
      +    },
      +    {
      +      "required": [
      +        "error"
      +      ]
      +    }
      +  ],
      +  "properties": {
      +    "candidates": {
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "chatId": {
      +      "type": "string"
      +    },
      +    "error": {
      +      "type": "string"
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "messages": {
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "ok": {
      +      "type": "boolean"
      +    },
      +    "returned": {
      +      "type": "integer"
      +    },
      +    "servedBy": {
      +      "type": "string"
      +    },
      +    "threads": {
      +      "items": {
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "unread": {
      +      "type": "integer"
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed3 schema fields changed
    • changedInput schema / properties / chatId / description
      Previous value: -"OPTIONAL. The id of one conversation, exactly as a thread row from this same tool gave it. Never construct one. Pass this OR firstName, not both; passing both uses this one."New value: +"Optional. The id of one conversation, as a thread row from this tool gave it. When both this and firstName are sent, this one is used."
    • changedInput schema / properties / firstName / description
      Previous value: -"OPTIONAL. The FIRST NAME of the person whose conversation to read, exactly as a thread row spelled it. Matched against the caller's OWN conversations only. If two of them answer to it the reply is AMBIGUOUS_NAME and nothing is read, and you ask which one they mean rather than choosing."New value: +"Optional. The first name of the person whose conversation to read, as a thread row spelled it, matched against the caller's own conversations only. Two matches return AMBIGUOUS_NAME and nothing is read."
    • changedInput schema / properties / limit / description
      Previous value: -"OPTIONAL. How many lines of one conversation to return, at most 50. Omit for the last 30. Ignored when listing threads, which is always at most 20."New value: +"Optional. How many lines of one conversation to return, at most 50; 30 when absent. Not used when listing threads, which returns at most 20."
  4. Added

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial behavioral context beyond the annotations: it requires a personal connector token, returns no phone/email/surname/account/photo fields, and specifies NOT_PARTICIPANT and AMBIGUOUS_NAME failure cases. It also clarifies that the tool only reads and marks nothing read, reinforcing the readOnly annotation without contradicting it.

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?

The description is front-loaded with the core purpose and then layers invocation modes, privacy limits, and errors efficiently. It is dense and somewhat packed into one long sentence, but every clause carries useful information.

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

Completeness5/5

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

Given the read-only annotations and an existing output schema, the description is complete enough for correct invocation: it covers auth, scope, return shape at a high level, privacy limits, and error behavior. No major agent-facing gap remains.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3. The description adds useful semantics for no-argument listing versus firstName/chatId lookup, including ambiguity handling, though it does not discuss the limit parameter beyond what the schema already says.

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?

States a specific verb and resource: reads the caller's own event conversations with connected people. It also distinguishes the read-only inbox behavior from reply-style siblings by saying it only reads and marks nothing read.

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

Usage Guidelines4/5

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

Explains the two main invocation modes: no arguments lists threads, while firstName or chatId returns one conversation's last lines. It adds prerequisites and participant/ambiguity errors, but does not explicitly name when to choose a sibling such as event_reply instead.

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.

Resources