OpenBaud
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| resources | {
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_portsA | List serial ports (USB metadata included) plus the always-available mock:echo loopback. |
| openA | Open a serial port session. If |
| closeB | Close a session and release the port. |
| readA | Cursor-based framed read: returns frames received since your previous read (waits up to timeout_ms for the first frame). Reports dropped_bytes if the buffer overflowed. |
| sendB | Write raw bytes (audited). Provide exactly one of hex ('01 A0 FF') or text (control chars as-is, e.g. "AT\r\n"). |
| requestB | Send bytes and await the response (audited). |
| run_commandA | Execute a named command from devices//commands/ with typed params: builds the frame, awaits the response and classifies the outcome (normal | exception | silence | timeout | checksum_error | malformed) against the command's declared |
| run_workflowA | Execute a workflow from devices//workflows/: its steps run in order on one session (step params override command defaults); the first failing step skips the rest, then every |
| schemaA | The authoritative JSON Schema (or, with example=true, an annotated YAML example) of the openbaud knowledge formats — profile, command, workflow. Call this before writing or modifying any YAML under devices/: it is generated from the exact types that parse those files and includes the semantic rules the schema grammar cannot express. |
| capture_startA | Start lossless timestamped capture of all rx/tx on a session into captures/*.obcap (JSONL). Returns the workspace-relative path (captures/ — pass it verbatim to capture_frames, session_timeline, or replay:) plus abs_path. |
| capture_stopA | Stop the active capture on a session; returns stats plus the workspace-relative path (captures/ — directly usable with capture_frames, session_timeline, and replay:) and abs_path. |
| session_timelineA | Lay a recorded capture out as a session timeline: rx/tx byte density folded into buckets, plus the capture session's audited operations (commands, raw writes, workflow steps, denials) as events. Reads captures/.obcap and .openbaud/audit.jsonl — no hardware. The result declares view:{kind:"timeline"}, so its full_result path (or the result itself) renders via show_result. |
| capture_framesA | Re-frame a recorded capture's byte stream: tx and rx each run through a deframer and come back as timestamped frames, paginated by cursor/max_frames. Framing comes from the explicit |
| diagnose_frameA | Diagnose one raw frame, pure computation — no hardware, no audit entry. Every checksum algorithm x value encoding is verified at the default tail position (checksum_matrix); each row's |
| session_statsA | Live counters for open sessions: port, framing, opened_ms, buffered/dropped bytes, chunks seen, rx/tx byte totals, last_rx_ms, the transport settings the port was opened with, the active capture (path and live counters), and the session error when the port died. Pass session_id for one session; default is all. |
| stream_pollA | Per-consumer incremental frame poll on an open session — a private cursor with its own deframer, fully independent of |
| ask_portA | Ask the user which serial port to use, on hosts that can render it (elsewhere the candidate list comes back as text for you to relay). Use it when several ports could plausibly be the device and the choice is the user's to make — not for your own discovery, which is what list_ports is for. This does not touch hardware: the user's choice arrives in your context, and you then call |
| show_resultA | Show a saved tool result to the user, rendered (a polar plot for angular scans, a field table otherwise) on hosts that support it. Pass |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Port picker | Candidate serial ports with one-click open (binds to list_ports). |
| Result viewer | Schema-dispatching result viewer: polar radar plot for angular scans, key/value card for everything else (binds to run_command/request/read). |
TDQS
Scored across 18 tools
Descriptions go out of their way to delineate boundaries (send=raw fire-and-forget, request=send+await, run_command=named typed command; read=cursor read, stream_poll=independent per-consumer subscription; ask_port 'not for discovery, that's list_ports'). This is unusually explicit, though three byte-sending tools and two frame-reading tools still require careful reading to pick correctly.
Most names are a clean verb_noun or noun_noun pattern (list_ports, run_command, run_workflow, capture_start, session_timeline, diagnose_frame, show_result, stream_poll), and the capture_*/session_* prefixes group cleanly. A handful of bare verbs (open, close, read, send, request) deviate slightly, but the overall scheme stays predictable.
18 tools is slightly heavy but justified by the breadth of a serial-toolkit domain: discovery, session lifecycle, three send modes, capture, re-framing, diagnostics, stats, streaming, plus schema and viewer helpers. Each tool maps to a distinct capability rather than being redundant.
The surface covers the full lifecycle: discovery (list_ports), open/close, multiple send/execute modes (send, request, run_command, run_workflow), lossless capture (capture_start/stop) with offline analysis (capture_frames, session_timeline, diagnose_frame), live stats and streaming, plus schema and result rendering. No obvious dead ends for the stated purpose.