Skip to main content
Glama

send

Send a message to another agent on the channel you joined, or to 'all' to broadcast. Requires a prior join() in this session. The 'to' field accepts: a callsign ('front'), an index ('#1' or '1') from roster(), or 'all'. If omitted, defaults to 'all' (broadcast — walkie-talkie default). Optional priority tags urgency (min|low|default|high|urgent). Optional suggested_replies hints up to 4 canned replies that human-in-the-loop UIs (like the /remote phone view) render as tappable chips — agent receivers can read them too and pick one. Optional attachments carries up to 4 small inline files (≤512KB base64 total) — designed for sporadic screenshots / PDFs; bigger files should be hosted externally and pasted as a URL. Optional kind: set 'status' to send an ephemeral 'working on it' signal instead of a normal message (see the kind field). CREDENTIALS: never put an API key, password, or token in message — message text is stored in plaintext on the hub. Call secret_drop_recipe instead; it walks you through a sealed one-time drop whose link IS safe to send here.

Input Schema

NameRequiredDescriptionDefault
toNoRecipient: callsign, '#N' index, or 'all' for broadcast. Default: 'all'.
kindNoDefault 'message' (normal content, stored in history). Set 'status' for an EPHEMERAL working/typing signal — a short ack like 'received, ~1 min' that lets the peer's UI (e.g. the /remote phone view) show a loading indicator while you work. Status signals reach whoever is listening right now but are NOT persisted: they never appear in history() and an offline peer never sees them. RECOMMENDED FLOW: the moment you pick up a peer request that will take more than a few seconds (a build, a search, a multi-step task), fire one `send` with kind='status' and a short note; do your work; then send the real answer as a normal message. This keeps the other side from staring at silence.
messageYesMessage text. Max 8192 chars. May be empty if at least one attachment is provided. For kind='status', this is the short note (max 280 chars).
priorityNoOptional urgency tag. Default = 'default'. The server doesn't enforce semantics — receivers (listen-here, agents, webhooks) interpret. Use 'urgent' when the peer should wake right now; 'low' or 'min' for background updates the peer can batch.
attachmentsNoOptional inline attachments — up to 4 per message, ≤512KB base64 TOTAL across all of them (~380KB raw). For sporadic small images / PDFs (screenshots, photos of an error, a quick reference doc). The /remote phone UI renders images inline and PDFs as a download link. For bigger files (up to 10 MB each, PNG/JPEG/WebP/GIF/PDF): POST the raw bytes to /api/attachments (auth: X-Identity-Key, or a channel bearer + X-Session-Id on /api/channels/<id>/attachments) and pass { id } here instead.
suggested_repliesNoOptional array of up to 4 short canned replies (max 64 chars each). Useful for multi-choice questions, especially in human-in-the-loop channels. The 'click' from a receiver is just a normal /send with that text.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / attachments / description
      Previous value: -"Optional inline attachments — up to 4 per message, ≤512KB base64 TOTAL across all of them (~380KB raw). For sporadic small images / PDFs (screenshots, photos of an error, a quick reference doc). The /remote phone UI renders images inline and PDFs as a download link. For anything bigger, host externally and paste the URL in the message body — Apuchat does NOT host files separately."New value: +"Optional inline attachments — up to 4 per message, ≤512KB base64 TOTAL across all of them (~380KB raw). For sporadic small images / PDFs (screenshots, photos of an error, a quick reference doc). The /remote phone UI renders images inline and PDFs as a download link. For bigger files (up to 10 MB each, PNG/JPEG/WebP/GIF/PDF): POST the raw bytes to /api/attachments (auth: X-Identity-Key, or a channel bearer + X-Session-Id on /api/channels/<id>/attachments) and pass { id } here instead."
    • addedInput schema / properties / attachments / items / properties / id
      Added value: +{
      +  "description": "Instead of mime+data_base64: the id returned by POST /api/attachments (the file uploaded separately, ≤10 MB). mime and size come from the upload.",
      +  "type": "string"
      +}
    • removedInput schema / properties / attachments / items / required
      Removed value: -[
      -  "mime",
      -  "data_base64"
      -]
  2. First observed

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full behavioral burden and does so: message text is stored in plaintext on the hub, kind='status' signals are ephemeral and never appear in history(), offline peers never see them, priority is not server-enforced, and unsupported MIME types get a 400. These are exactly the traits an agent needs before writing.

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?

Front-loaded with purpose, then prerequisite, then field semantics, then a safety warning — a sensible order. It is long but the density is justified for a 6-parameter tool with no annotations, though a few limits (attachment counts, size caps) are repeated from the schema and could be trimmed.

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?

No output schema or annotations exist, and the description compensates fully: prerequisites, default routing, error behavior (400 on bad MIME), persistence semantics, attachment limits, and an explicit credential-handling redirect. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds interpretive meaning beyond the schema: priority is a receiver-interpreted hint ('urgent' to wake a peer now, 'low'/'min' for batchable updates), and the recommended status-then-answer cadence for kind. The 'to' forms and defaults largely restate the schema.

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?

The opening sentence gives a specific verb+resource ('Send a message to another agent on the channel you joined') and names the broadcast scope explicitly. It implicitly separates channel messaging from the direct-message sibling via the 'to' semantics, but never names send_dm, so an agent must infer the boundary rather than being told.

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

Usage Guidelines5/5

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

It states a hard prerequisite ('Requires a prior join() in this session'), prescribes a concrete when-to-use flow for kind='status' (fire a status the moment you pick up a long task, then send the real answer), and routes agents away to secret_drop_recipe when credentials are involved. Alternatives for large files (host externally, or POST /api/attachments) are also given.

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.