Skip to main content
Glama

Proxy Mail QA

Count the emails that arrived

count_emails

Counts the emails that reached the address, for checks such as "exactly one verification email". Doesn't wait: call it after the wait for the first email has returned, so a duplicate has had time to arrive. Each email is summarised by when it came, its sender and the kind of its code or link, never its content.

Input Schema

NameRequiredDescriptionDefault
testNoWith run_id: the test or step this call belongs to, shown beside what it saw in the report.
typeNoOnly emails with a code, or with a link.
sinceNoOnly email received at or after this time, such as when the test submitted the form.
run_idNoA run from start_run: what this call sees is added to its report.
addressYesA test address in this project. A variant works too (capitals, or a +tag such as name+o'brien@…): it acts on the plain address, and a wait on a +tag variant only finds mail sent to it.
serviceNoOnly email from this sender, by service name or domain.
subtypeNoWith type, comma-separated: otp or coupon for codes; verify, magic_signin, invite, reset, other, unsubscribe or list_unsubscribe for links; or any (for links, the sign-in kinds and other).
categoryNoOnly sign-in emails (auth), receipts and notices (transactional), or offers and newsletters (marketing). For "an unsubscribed user gets no marketing", use marketing: receipts should still arrive.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / category
      Added value: +{
      +  "description": "Only sign-in emails (auth), receipts and notices (transactional), or offers and newsletters (marketing). For \"an unsubscribed user gets no marketing\", use marketing: receipts should still arrive.",
      +  "enum": [
      +    "auth",
      +    "transactional",
      +    "marketing"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / subtype / description
      Previous value: -"With type, comma-separated: otp or coupon for codes; verify, magic_signin, invite, reset or other for links; or any."New value: +"With type, comma-separated: otp or coupon for codes; verify, magic_signin, invite, reset, other, unsubscribe or list_unsubscribe for links; or any (for links, the sign-in kinds and other)."
  2. First observed

TDQS

A3.8/5.0
Behavior3/5

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

Adds value beyond the annotations by disclosing the non-waiting behavior and the return shape ("summarised by when it came, its sender and the kind of its code or link, never its content"). However, annotations declare readOnlyHint=false on what reads as a pure count; the description never explains the write side effect (that results are added to the run report, only hinted at in the run_id parameter). That gap keeps it at 3.

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

Conciseness5/5

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

Three sentences, front-loaded with the verb and resource, then the sequencing rule, then the return summary. Nothing is redundant with the title or restates the schema.

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 8 parameters and no output schema, the description usefully covers what comes back (time, sender, kind of code/link, not content) and when to call it. It does not mention result limits, ordering, or how the count relates to run-report output, which are minor given full schema coverage.

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 coverage is 100%, so every parameter including the enum values and subtype list is already documented in structured data. The description only gestures at filters via "when it came, its sender and the kind of its code or link", adding little beyond the schema. 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?

States a specific verb and resource ("Counts the emails that reached the address") plus a concrete use case ("exactly one verification email"). The line "Doesn't wait" implicitly contrasts it with the wait_for_code/wait_for_link siblings, but the closest read sibling, check_email, is never named, so the agent must infer the split.

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?

Gives explicit sequencing guidance: "call it after the wait for the first email has returned, so a duplicate has had time to arrive." That is a real when-to-use rule an agent could otherwise get wrong. It stops short of naming alternatives such as check_email or expect_no_email, so there are no explicit exclusions.

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.

Directories

Listed in ChatGPT · Proxy Mail QA

Last observed

Resources