Skip to main content
Glama

Send batch

send_batch
Destructive

Send one message to many people (a broadcast or campaign): pick recipients by segment_id, tags, contact_ids, or an explicit recipients list. Opted-out numbers, numbers without marketing consent, and people unsubscribed from topic_id are removed before sending. dry_run: true sends nothing and returns the count, cost, rejected rows and consent.no_opt_in (recipients the send will skip for having no opt-in). scheduled_at sends later (up to 30 days). With a live key it texts real people.

Input Schema

NameRequiredDescriptionDefault
bodyYes
fromNoOne of your numbers. Optional while the key's mode has one number.
nameNo
tagsNoSend to contacts carrying any of these tags (instead of recipients).
dry_runNoValidate only: returns a BatchValidation and sends nothing.
list_idNoSend to the contacts in this list, as it is when the batch is created (instead of recipients).
categoryNoOptional. It can make the batch stricter (`marketing`), never looser: the sending number's registration and the wording decide ([which messages are marketing](/docs/compliance-checks#which-messages-are-marketing)). From a number with no registration, a batch is marketing.
topic_idNoSubscription topic. Recipients unsubscribed from it are removed at validation (`topic_unsubscribed`) and skipped at send time, like opt-outs. Omit to apply opt-outs only.
recipientsNo
segment_idNoSend to the contacts in this saved segment, evaluated when the batch is created (instead of recipients).
contact_idsNo
quiet_hoursNoOptional. What to do with a message in the recipient's quiet hours: `block` refuses it (403 quiet_hours), `defer` holds it until their next 8:00am. Omitted: each recipient in quiet hours is held until their 8:00am.
scheduled_atNoFuture ISO timestamp or epoch ms, up to 30 days out.
check_line_typesNoReject landlines (first 500 unique numbers are checked).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already flag destructive/openWorld/no-idempotency, and the description adds genuinely new behavioral facts: opt-outs, missing marketing consent and topic unsubscribes are stripped before sending; dry_run returns count, cost, rejected rows and consent.no_opt_in; scheduled_at is capped at 30 days; quiet hours can block or defer; and a live key sends real messages.

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?

Four dense sentences that lead with what the tool does, then filtering, then dry-run, then scheduling, ending on the live-key warning — good front-loading. Some clauses duplicate schema text (quiet_hours, scheduled_at) rather than adding new 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?

For a 14-parameter destructive send with no output schema, the description covers the things an agent must know before calling: who gets filtered out, how to validate safely, and the real-world consequence of a live key. The main residual gap (which recipient selector wins, and what a real send returns) is minor relative to what is disclosed.

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 71%, so the schema already documents most parameters (including from, tags, dry_run, list_id, topic_id, quiet_hours, check_line_types). The description restates and slightly enriches those (what dry_run returns, the 30-day cap, opt-out removal) but adds nothing for undocumented fields such as name, category enum consequences, or recipients.variables — and it omits list_id from its own recipient enumeration.

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 ("Send one message to many people (a broadcast or campaign)") and immediately scopes it against sibling send_message by emphasizing many-recipient broadcast semantics. The enumerated recipient-selection fields make the operation concrete.

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

Usage Guidelines3/5

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

Rich operational context is present (dry_run for validation, scheduled_at window, consent filtering, live-key warning), but the description never explicitly routes the agent between this and send_message / send_verification, nor states mutual exclusivity between segment_id, tags, list_id, contact_ids and recipients. Usage is implied rather than prescribed.

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