Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
FLASHGATE_BOARDYesPath to the board YAML profile, equivalent to the --board CLI argument for the MCP server.

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
board_infoA

Discover what hardware you are working with: the active board profile.

Call this FIRST in any session — it tells you the board identity
(name, MCU), where the firmware builds (firmware_dir, artifact), how
it flashes (flash connection), and — most importantly — which
functional probes exist (the "probes" list holds the names the probe
tool accepts). Read-only; touches neither host nor board.

Result: data carries the full profile; warnings flag an unloadable
probes section (fix the board YAML before relying on probes).
doctorA

Diagnose the bench: is the ST-Link probe visible, is the console serial port resolvable, is the cross toolchain installed?

Run this before anything else when a board operation fails — and
ALWAYS when a tool returns status "incomplete" or code
CAPABILITY_UNAVAILABLE; the report names the exact missing link.
Read-only. Findings are listed in data.log under "issues:"; an empty
problems list with exit_code 0 means every prerequisite is healthy.
buildA

Compile the board's firmware (incremental — recompiles only what changed). No hardware is touched.

Mostly useful on its own for a fast failure loop; verify runs the
same build internally, so you don't need this before verify. Result:
succeeded + exit_code 0 = clean build; failed + BUILD_FAILED = the
compiler output in data.log names the offending file and line. The
binary lands at the profile's artifact path, ready for flash.
flashA

Write the built firmware to the board's flash over ST-Link, verify the write, then start the application. DESTRUCTIVE: whatever runs on the MCU is replaced.

Flashes the artifact from the last build — call build first if
sources changed since. Tries up to 3 times on transient probe
errors. Any failure — including a missing ST-Link or CubeProgrammer —
surfaces as failed + FLASH_FAILED, exit_code 2; data.log carries the
programmer output. Run doctor to tell an environment problem (no
probe / no tools) apart from a write failure.
verifyA

The hardware gate — the authoritative answer to "does this firmware actually work on the board?".

status=succeeded means the BOARD ITSELF booted the exact tree you are
on (its reported git sha matches the working tree) and every
functional probe passed. Trust no other signal; a clean build is not
a pass.

What it does: rebuild the tree, flash over ST-Link, start the app,
then require boot evidence proving WHICH build is running (UART
banner; or, without a serial cable, an SWD RAM signature — a stale
signature is wiped and read-back verified before start; a wipe that
fails, or whose readback answers wrong or cannot run at all, fails
closed), then run every defined probe, asserting on the board's
answers, including live register readbacks. DESTRUCTIVE: rewrites the
board's flash.

The failure code names the broken stage: BUILD_FAILED, FLASH_FAILED,
BOOT_EVIDENCE_TIMEOUT, BOOT_ERROR, IDENTITY_MISMATCH (the board runs
a different tree, or the signature wipe failed or its readback
answered wrongly — check the debug probe, not the build),
CAPABILITY_UNAVAILABLE (a required check could not run — most often
the console UART, or a readback that cannot run at all: environment
failure, check named, start withheld), PROBE_FAILED. Full transcript
in data.log; data.record is this run's persisted evidence record,
data.record_dir where the audit trail accumulates.

Report the status and code verbatim; never claim success from the
build step alone.
probeA

Exercise the firmware ALREADY RUNNING on the board with its defined probes: each probe sends console commands and asserts on the board's answers — including live register readbacks (e.g. the timer value actually driving an LED). No rebuild, no reflash.

names picks specific probes (valid names are in board_info's
"probes" list); omit it or pass [] to run all. Probes need the
console UART: without it the result is incomplete +
CAPABILITY_UNAVAILABLE — never a pass. failed + PROBE_FAILED means an
assertion did not hold; data.log shows the exact step, the board's
last response, and which value was off.
console_sendA

Talk to the firmware directly: send ONE command line on the console UART and collect its answer.

Example: line "led0?" — the firmware replies with its LED state and
the live PWM register value (a hardware readback, not a cached
variable). The command set is board-specific — board_info and the
board's probe definitions show the known commands; unknown commands
typically answer "ERR unknown-cmd". The reply lands in
data.response within wait_s seconds; silence is reported as
"(no response)" in the summary + a warning — check wiring before
concluding the firmware is dead.
console_readA

Listen passively: capture everything the firmware prints on the console for the given number of seconds, sending nothing.

Use it to watch boot banners, self-test prints, or fault dumps
(HardFault traces appear here). Output lands in data.text; a fully
silent window is reported as "(console silent)" in the summary —
which for a just-reset board usually means wiring or baud-rate
trouble rather than a healthy quiet firmware. Read-only.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.3/5.0

Scored across 8 tools

Disambiguation4/5

board_info, doctor, build, and flash each target a distinct stage of the embedded workflow, and the console tools split cleanly into active (console_send) vs passive (console_read). The one area of potential confusion is verify vs. build/flash/probe, since verify internally does all three, but the descriptions explicitly clarify the relationship and when to use each.

Naming Consistency4/5

build, flash, verify, probe, and doctor form a coherent set of single-word action verbs, and the console_ prefix groups the two UART tools. board_info and doctor are the mild deviations (noun/noun-ish vs. pure verb), but the convention is largely readable and predictable.

Tool Count5/5

Eight tools is well-scoped for an embedded build/flash/test server, with each tool earning its place across the discover-diagnose-build-flash-verify-probe lifecycle. Nothing is redundant or trivial.

Completeness4/5

The surface covers the full firmware lifecycle: discovery, environment diagnostics, build, flash, hardware verification, probe execution, and direct console interaction. A minor gap is the lack of an explicit reset/erase tool, though verify and console_read implicitly handle reset-adjacent scenarios.

Maintenance

ActivityActive
ResponsivenessNo issues