hwcontract
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HWCONTRACT_ROOT | No | Absolute path to the contracts folder. Relative contract paths resolve against it. Defaults to the process's working directory. | |
| HWCONTRACT_SAFE | No | Set to '1' to instantly disable hardware-touching tools (captures) while leaving pure judge tools working. | |
| HWCONTRACT_TOKEN | No | Bearer token required when the server is exposed over HTTP (e.g., via --http). |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_contractsA | List bundled contract templates, names, kinds, installed paths, and capture adapter requirements. No hardware. |
| judge_contractB | Judge observations against a timing contract -> PASS/MARGINAL/FAIL/MISSING. No hardware; use for replay or when an adapter already captured. |
| capture_ws2812A | Capture the WS2812 data line via sigrok and return measured pulse-width observations (T0H/T1H/...). |
| check_ws2812A | Capture a live WS2812 signal AND judge it against a contract in one call. The one-shot an agent reaches for. |
| check_dshotB | Capture a live DShot600 ESC signal AND judge it against a contract in one call. |
| judge_serialA | Judge a captured serial log against expect/forbid patterns. No hardware; use for replay or logs another tool already captured. |
| judge_eventsB | Judge decoded hardware events against an events contract's temporal assertions (when/require/within, forbid/while/before). Events: [{source, type, start_ns, end_ns, fields}]. |
| check_serialB | Read a serial port for N seconds AND judge its log against a contract's expect/forbid patterns. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
The set splits cleanly into judge_* (no-hardware judging of already-captured data), check_* (capture + judge in one call), and capture_ws2812 (capture only), and descriptions explicitly guide selection (e.g. check_ws2812 is 'the one-shot an agent reaches for'). Minor overlap remains between judge_contract (timing contract) and judge_events (events contract) and judge_serial, but each is scoped to a distinct contract kind or data source so boundaries are mostly clear.
All names use a consistent snake_case verb_noun pattern (list_, judge_, capture_, check_). The only wrinkle is semantic: capture_ws2812 and check_ws2812 both 'capture' the WS2812 line but use different verbs, and there is no capture_dshot/capture_serial to mirror capture_ws2812, creating mild asymmetry despite uniform formatting.
Eight tools is well within the ideal 3-15 range and each family (list, judge, capture, check) covers a genuine need. Slight redundancy exists since capture_ws2812 is partially subsumed by check_ws2812, but the raw-observation use case justifies keeping both.
Coverage spans listing, capturing, and judging for timing/events/serial/WS2812/DShot, but the contract lifecycle is thin: list_contracts exists with no create/update/delete or contract-authoring operation, and raw-only capture exists for WS2812 but not for DShot or serial. These are workable but notable gaps for a contract-driven validation toolset.