A suite of MCP servers for hardware-in-the-loop testing: serial communication, JTAG debugging, power profiling, firmware building/flashing, audio analysis, and computer vision
29 tools with basic naming and descriptions, but significant gaps in schema completeness and parameter documentation. Tool names follow verb_noun convention (capture_audio, detect_frequency, etc.), which is good. However, most parameter descriptions are minimal (10-30 chars), and input schemas lack type constraints, enums, and validation guidance. No output schemas documented. Error handling is absent, tools return raw errors without recovery guidance. Descriptions average ~80 chars, below the 194-char baseline for A+ tools. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications in metadata.
Build firmware using CMake, ESP-IDF, or other configured build tools
Capture audio from a microphone and analyze it for tone detection, frequency content, and acoustic levels
Capture an image from a camera device
Clear a hardware breakpoint
Clear the serial port buffer
Clear a hardware watchpoint
Detect the presence and frequency of a tone in captured audio
Detect objects in an image using computer vision
No input schema type constraints or enums. Parameters like 'mode' (source_meter|ampere_meter), 'kind' (read|write|read_write), and 'preset' (Debug|Release) accept free-form strings with no enum validation. LLMs will hallucinate invalid values.
No output schemas documented. Tools return results but LLMs cannot plan downstream calls or extract required fields (e.g., does list_probes return probe_id, probe_name, or both?). Breaks tool chaining.
Parameter descriptions are too brief (10-30 chars). 'Audio device name or alias from devices.toml' is good, but 'Board alias from devices.toml' appears 15+ times with no context on what happens if the alias is invalid. Descriptions should explain format, constraints, and error recovery.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Program firmware to a device using OpenOCD, esptool, or other configured flash tools
Halt the target CPU
Hold PPK2 power supply active for sustained measurements
List available firmware artifacts for a project
List all connected debug probes (ST-Link, J-Link, ESP JTAG)
Measure current consumption using Nordic PPK2 in source-meter or ampere-meter mode
Read and decode CPU fault registers (Cortex-M CFSR, HFSR, BFAR, MMFAR)
Read memory from the target CPU
Read CPU registers
Read buffered RTT output
Read the last N lines from a serial port buffer
Release PPK2 power hold and power down the DUT
Resume execution of the target CPU
Set a hardware breakpoint at an address
Set a hardware watchpoint on a memory address
Start RTT (Real Time Transfer) background collector for live log streaming
Stop the RTT background collector
Block until a pattern appears on any serial port
Write data to target CPU memory
Write data to a serial port
Capture audio and save it to a WAV file
No error handling guidance. Tools like write_memory, flash_firmware, and write_serial are destructive but provide no recovery hints. If a write fails, the LLM has no guidance on retry strategy, rollback, or next steps.
Tool annotations missing. Metadata declares risk classifications (READ_ONLY, WRITE) but tools lack readOnlyHint/destructiveHint/idempotentHint annotations in schema. LLMs cannot infer safety properties from names alone.