Skip to main content
Glama
narcisbodea

SMSTunnel

Check a text's status

get_message_status
Read-onlyIdempotent

Check the delivery status of an SMS by its messageId, returning pending, sent, delivered, failed, or unconfirmed states with timestamps and any error.

Instructions

Look up where a text sent with send_sms or send_sign_in_code is now, by its messageId: pending (waiting for the phone), sent, delivered, failed, or unconfirmed (handed to the SIM, but the phone got no confirmation, so it may have gone out). Returns the status with its times and any error. Read-only. Never resend a failed or unconfirmed text on your own: ask the user.

Input Schema

NameRequiredDescriptionDefault
messageIdYesThe messageId that send_sms or send_sign_in_code returned.

Output Schema

NameRequiredDescriptionDefault
toYes
errorNo
sentAtNo
statusYespending, sent, delivered, failed or unconfirmed.
messageIdYes
deliveredAtNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/idempotentHint/non-destructive, yet the description goes further by defining what each status means — notably that "unconfirmed" means handed to the SIM without phone confirmation and may have gone out, which is a real ambiguity an agent must handle. It also states that times and error details come back, and adds a safety rule against unilateral resends.

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?

Front-loaded with the action and lookup key, then the status vocabulary, then the safety caveat — no filler sentences. The parenthetical explaining "unconfirmed" is long but earns its place because that status is the one most likely to be misread.

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?

For a one-parameter read tool with an output schema and full annotations, nothing an agent needs is missing: what to pass, what comes back in outline, what the values mean, and what not to do next. Return-shape detail is correctly delegated to the output schema.

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?

There is a single parameter with 100% schema description coverage, so the schema already explains messageId and its origin. The description restates the same idea ("by its messageId") without adding format, lookup-failure, or retention-window details, so the baseline 3 applies.

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?

Specific verb + resource: "Look up where a text ... is now, by its messageId," and it explicitly ties the input to the sibling tools that produced it (send_sms / send_sign_in_code). It even enumerates the possible status values, so an agent knows exactly what kind of answer to expect, distinguishing it from the sibling senders and from list_* tools.

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?

The description makes the calling context clear (after a send_sms or send_sign_in_code produced a messageId) and adds an explicit prohibition against resending failed/unconfirmed texts without asking the user. There is no true alternative tool to disambiguate against, so the missing piece is minor, but exclusions are framed as post-call behavior rather than as when-not-to-use-this-tool.

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