Skip to main content
Glama
alexstockman1

autoMessage MCP Server

get_draft_status

Read-only

Reads a single draft's delivery status after sending an iMessage, letting you confirm queued, held, blocked, sent, cancelled, or failed delivery and inspect hold or error details.

Instructions

Read a single draft. Use this after send_imessage to confirm the message was delivered. The response includes status — queued (waiting for the Mac), sending, held (parked by the new-outreach limit — rolling 24h window; resumes automatically as earlier sends age out or when the user raises the limit — NOT a failure), blocked (hold.reason: subscription_required or recipient_opted_out; never auto-retried), sent, cancelled, failed — plus hold (reason/since/message), sent, sendError (failed/cancelled only), and sentMessage (Firestore doc path of the dispatched message).

Input Schema

NameRequiredDescriptionDefault
draft_idYesDraft id returned from send_imessage.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.2.2

TDQS

A4.4/5.0
Behavior5/5

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

Annotations cover the safety profile (read-only, non-destructive), and the description goes well beyond them: it explains that `held` is a rolling-24h park that resumes automatically, that `blocked` is never auto-retried, and that `sendError` only appears on failed/cancelled. That lifecycle detail materially changes how an agent reacts to each status.

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?

Purpose and the send_imessage sequencing are front-loaded, and every sentence carries information. The status enumeration is dense and parenthetical-heavy, which is efficient but costs some scannability.

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?

With no output schema, the description carries the full return-value burden and does so by naming every field (`status`, `hold`, `sent`, `sendError`, `sentMessage`) and its conditions. Nothing needed to interpret a response is missing.

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 at 100% schema coverage, with the schema already stating it is the draft id returned from send_imessage. The description adds no format, prefix, or sourcing detail beyond the schema, so 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?

"Read a single draft" is a precise verb+resource, and the description immediately scopes it against the write path by naming send_imessage and its post-send use. An agent can distinguish this from list_drafts or cancel_pending_draft without opening the schema.

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 an explicit trigger ("Use this after send_imessage to confirm the message was delivered") and clarifies that a `held` status is not a failure, which prevents a wrong follow-up action. It stops short of naming alternatives such as list_drafts for bulk polling, so no explicit when-not routing.

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