Skip to main content
Glama

Skysay

Send an AI agent's SMS template

send_agent_template_message
Destructive

Send one of an AI agent's published SMS templates, filled with the variables and slots you give, from a number in the agent's own project, with no call behind it. The same send, policy and charge as POST /v1/agents/{agent_id}/messages; a template, agent or project it cannot find is one not-found. Returned body, metadata, error and idempotency_key require sms:read, including on replays.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
toNoThe recipient, E.164. to_phone_number is accepted as its alias.
bulkNo
slotsNoValues for the template's model slots, each within its max_length.
countryNo
purposeNoThe message's purpose, authorized as on POST /v1/messages.
agent_idYes
languageNoThe language to send in. Text is chosen from the call or request language, then its base language (et-EE -> et), then the agent's primary language, then, as a last resort, the template's texts in language-code order.
metadataNo
number_idNo
variablesNoValues for the agent's declared variables the template references. A referenced required variable must be present; protected variables are refused (there is no confirmation to lean on).
categoriesNo
project_idNoOptional. The agent's own project; any other answers 404 exactly as a foreign agent does.
template_idYes
relationshipNo
message_classNo
from_number_idNo
recipient_typeNo
user_requestedNo
idempotency_keyNo
organization_idNoOptional. Defaults to the authenticated workspace; when supplied it must be that workspace's id.
to_phone_numberNo
user_authorizationNo
from_phone_number_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already carry destructiveHint=true, idempotentHint=false and openWorldHint=true, yet the description still adds real context beyond them: no call is created behind the send, the charge/policy parity with the messages endpoint, not-found semantics for missing template/agent/project, and that body/metadata/error/idempotency_key require sms:read even on replays. It does not cover rate limits or the destructive consequences in detail, so it stops short of a 5.

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?

Three dense, front-loaded sentences that lead with purpose and pack auth, charge and error semantics without filler. The phrasing around not-found ('a template, agent or project it cannot find is one not-found') is slightly convoluted but earns its place.

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?

For a 23-parameter mutation with no output schema, the description supplies auth scope, error semantics, charge parity and fill behavior, which is substantial. The gap is parameter-level guidance for the long tail of undocumented fields and any return-shape framing, so it is not fully complete.

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?

With 23 parameters at only 30% schema coverage, the description must carry weight. It adds meaning for the fill inputs ('variables and slots you give') and constrains the sending number to the agent's own project, but the many undocumented params (bulk, country, categories, relationship, message_class, recipient_type, user_requested, user_authorization, etc.) get no explanation. It partially compensates rather than fully.

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?

The description states a specific verb (send), a specific resource (one of an AI agent's published SMS templates) and its scope (filled with the variables and slots you give, from a number in the agent's own project, with no call behind it). The template-driven, agent-scoped, call-less nature distinguishes it sharply from the generic send_sms sibling, even without naming it.

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?

Usage is implied well – 'with no call behind it' and 'from a number in the agent's own project' tell you the context – and it points to POST /v1/agents/{agent_id}/messages as the equivalent operation. However it never names the obvious alternative (send_sms) or states when to prefer this templated path over it, so the when-not guidance is absent.

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.