Rig management
list_rigs
List all registered rigs with connection status.
Parameters: None
Returns:
get_rig_config
Get connectivity status and hardware summary for one rig.
Parameters:
string
required
Exact name of the rig as registered in the control plane.
register_rig
Register a new rig and return its API key.
Parameters:
string
required
Unique name for the rig. Letters, numbers, hyphens (e.g.
orin-bench-01).Test runs
list_runs
List recent test runs, optionally filtered by rig.
Parameters:
string
Filter to runs from this rig. Pass
null for all rigs.integer
default:"20"
Maximum number of runs to return. Max 500.
get_run_summary
Get a full summary of one run including pass rate and duration.
Parameters:
string
required
UUID of the run.
run_test_suite
Create a queued run and push it to the connected agent.
Parameters:
string
required
Name of the rig to run tests on.
string
required
Path to the YAML suite manifest as known to the agent (e.g.
tests/suites/engine_validation.yaml).list[string]
Optional tag filter — only tests matching at least one tag are run.
string
Optional suite type filter (e.g.
smoke, regression).run_id for polling.
cancel_run
Cancel a running test suite.
Parameters:
string
required
UUID of the run to cancel. Only
running runs can be cancelled.Result inspection
get_results
List test results for a run.
Parameters:
string
required
UUID of the run.
string
Filter by status:
pass, fail, blocked, error, or skip.get_signal_trace
Extract signal samples for a specific signal across the most recent tests in a run.
Searches up to 5 test results. Returns up to 100 samples per test.
Parameters:
string
required
UUID of the run.
string
required
Signal name as stored in test results (e.g.
EngineData.RPM).describe_failure
Get complete failure context for one test in one run. This is the primary tool for AI failure analysis — it returns everything needed for root-cause analysis in a single call.
Combines: run metadata, error messages, log lines, signal traces (up to 5 signals, 100 samples each).
Parameters:
string
required
UUID of the run.
string
required
Test ID as declared in the YAML manifest.
Signal and suite introspection
list_signals
Parse a DBC file and return metadata for every signal.
Parameters:
string
required
Path to the
.dbc file, relative to the working directory when the MCP server was started.list_tests
Parse a YAML suite manifest and return metadata for every test.
Parameters:
string
required
Path to the YAML manifest (e.g.
tests/suites/engine_validation.yaml).AI-assisted tools
generate_test_suite
Scaffold a YAML manifest and Python stubs, optionally with AI-generated assertions.
Parameters:
string
required
Snake-case suite name (e.g.
brake_validation).string
required
One-sentence description of what the suite validates.
string
default:"\"Virtual_Sim\""
Hardware variant to target.
string
default:"\"tests/suites\""
Directory to write both files.
list[string]
Manual context: signal names, fault scenarios, integration flows, sensor feeds.
string
Rig TOML — auto-extracts ECU names, power rails, GPIO presence.
string
DBC file — auto-extracts all
MessageName.SignalName pairs.string
Provider override:
anthropic, openai, gemini.analyze_component
Extract the signal interface contract of a C/C++ software component.
Requires pip install 'crucihil[analyze]'.
Parameters:
string
required
Path to a
.c/.cpp/.h file or a directory of source files.string
required
Label for this component in the output (e.g.
BrakeController).list[string]
One or more DBC file paths. Merged with TOML-discovered DBCs.
string
Rig TOML — auto-discovers DBCs from
[rig.definitions], infers interface type from key name.list[string]
Shim header directories or SWC paths to parse alongside the primary source.
string
Provider override:
anthropic, openai, gemini.Authoring and verification
author_component
Author a self-verified test suite from component source code. Chains: analyze (signal contract with evidence chains) → generate → baseline gate (must run green on the rig, with AI repair rounds) → write. Broken AI output never reaches disk — a deterministic static generator is the guaranteed fallback.
Runs entirely on the machine hosting the MCP server (source code and rig TOML are local paths). Writes the suite files into output_dir.
Parameters:
string
required
Component source file or directory (local path).
string
required
Component label (e.g.
BrakeController).string
default:"\"rigs/virtual.toml\""
Rig the baseline gate runs against (virtual by default).
list[string]
DBC file paths for the signal corpus.
string
Firmware repo root — enables cross-component port-graph resolution (shared-memory indirection).
string
default:"\"tests/suites\""
Where the promoted suite is written.
string
Suite name (default:
<component>_contract).string
default:"\"crucihil\""
Output format:
crucihil (native YAML+Python), pytest, or robot.string
Provider override:
anthropic, openai, gemini (auto-detected from env vars if omitted).integer
default:"2"
AI repair rounds before the static fallback.
{"error": "...", "stage": "analyze" | "generate" | "baseline" | "write"}.
verify_suite
Mutation-verify a test suite and return its strength report. Runs the suite once as a baseline, then once per mutation. Outcome per test: caught (test failed — good), missed (test stayed green while the behavior was broken — vacuous), wrong_reason (test went blocked/error instead of failing). A suite score of 1.0 means every planned mutation was caught.
Works on native CruciHiL suites and on existing pytest / Robot Framework suites with zero rewrites.
Parameters:
string
required
Native YAML manifest, or a pytest/Robot test tree when
framework is given. A YAML manifest with a framework: field routes automatically.string
default:"\"rigs/virtual.toml\""
Rig the verification runs against.
string
pytest | robot to verify a foreign suite unchanged; omit for native (or manifest-declared).string
Contract artifact (
contracts/<component>.json) — sharpens the mutation plan with the component’s real outputs.integer
default:"20"
Cap on mutation runs (priority-ordered).
string
Also save the full report JSON here (readable later via
get_strength_report).report_path appears only when it was requested. On failure, returns {"error": "..."}.
get_strength_report
Read a previously saved mutation strength report JSON.
Parameters:
string
required
Path passed to
verify_suite’s report_path (or crucihil verify --report).verify_suite), or {"error": "..."} if the file is missing or not valid JSON.
detect_coverage_gaps
Find what a component’s tests never exercised (coverage gaps). Compares the component contract (which signals the component touches) against the signal traces recorded by a run’s tests. Reports signals never tested at all and value regions never reached (“never tested BrakePressure > 80% of range”), each with a proposed gap test whose description can be passed straight to generate_test_suite.
Parameters:
string
required
The run whose recorded traces to analyze.
string
required
Contract artifact (
contracts/<component>.json).list[string]
DBCs for signal ranges (defaults to the DBCs the contract entries reference).
kind is one of untested, upper_range, lower_range. On failure, returns {"error": "..."}.