Skip to main content
Glama

classic_send

Send ordered hex messages to a classic Bluetooth device's RFCOMM service or channel and collect replies; a human must arm the device first.

Instructions

send hex messages to a classic device's rfcomm channel and collect its answers.

refused unless the human armed this device by running harald arm <address> in their own terminal. each message spends one armed write, a query included, because classic has no read. all messages go over one connection, in order, with listen seconds (at most 30) of listening after each, so handshakes and acks can be sent as messages. service is an rfcomm service uuid or channel number from classic_services; standard profiles and channels missing from classic_services are refused, and firmware-update channels stay blocked. received holds each chunk with the message number it followed (0 = before the first), seconds since the channel opened and the value as hex. stopped explains a budget that ran out partway, or a link that failed after the first message; it is empty when every message was sent.

Input Schema

NameRequiredDescriptionDefault
listenNo
addressYes
serviceYes
messages_hexYes

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.7/5.0
Behavior5/5

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

No annotations exist, and the description carries the full burden well: it discloses the arming prerequisite and its human-in-the-loop nature, that every message (including a query) consumes one armed write because classic has no read, that all messages share one ordered connection with `listen` seconds (max 30) after each, and what `received` and `stopped` mean.

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?

The purpose is front-loaded in sentence one and no sentence is filler; constraints, budget semantics, and return shape follow in logical order. The hard-wrapped, run-on sentence construction (e.g. the single sentence covering connection ordering plus listen window plus use of handshakes) makes it denser to parse than necessary.

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?

An output schema exists, so return values did not need explaining, yet the description still clarifies `received` chunk fields and when `stopped` is populated. Combined with the budget, ordering, and service-allowlist rules, nothing an agent needs to invoke this correctly is missing.

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

Parameters5/5

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

Schema coverage is 0%, yet every parameter gains meaning: `service` is constrained to rfcomm UUIDs or channels from classic_services with firmware-update channels refused, `listen` is bounded at 30 seconds, `messages_hex` are hex messages sent in order on one connection, and `address` is tied to the armed device. This fully compensates for the undocumented schema.

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 hex messages to a classic device's rfcomm channel and collect its answers'), which separates it from classic_listen (listen-only) and classic_services (enumeration) without needing their schemas. The final clause about collecting answers makes the request/response nature explicit.

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 concrete gating conditions: the device must be armed by the human via `harald arm <address>` in their terminal, and the service must be an rfcomm UUID/channel drawn from classic_services, with firmware-update channels permanently blocked. It does not explicitly name when to prefer classic_listen instead, so alternative routing is implied rather than stated.

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