Project releases

rultra puts its sensor box behind an MCP server

rultra is a Raspberry Pi 5 sensor box in Rust that refuses to call a device working until someone has actually observed it working. A September 13 commit adds an MCP server exposing ruv:// resources and an end-to-end suite, so an agent can read the box's honest self-assessment.

GitHub activity: · Published:

What rultra is

rultra runs on a Raspberry Pi 5 on an Elecrow CrowPi learning board. It puts every sensor and actuator behind one Rust trait with one telemetry stream, and it keeps an unusually honest record of how well each device actually works.

Verification is a type in the code, not a comment. A device is Working only when someone observed correct output; otherwise it is Unvalidated, AcksButSilent or Untested. The probe never upgrades a device's level, and tests enforce that a Working claim carries real evidence. The README says outright that it advertises fewer working devices than the board has, on purpose.

What changed

Commit c580e26 on September 13 adds an MCP server exposing ruv:// resources, together with an end-to-end suite. The same burst brings a richer console with live diagrams, and on September 14 commits d1ac3807 and c360ba14 add managed tokens, control badges and a three.js sensor field to the console.

The point of the MCP surface is that the box's verification levels become readable by an agent. A caller gets the same cautious answer the CLI gives, instead of a boolean that hides how much is actually known.

Get started

Rust 1.74 or newer. Tests use a mock backend by default, so no hardware is needed to try it:

git clone https://github.com/ruvnet/rultra && cd rultra
cargo test
./scripts/build-pi.sh

Expected result: the test suite passes on an ordinary development machine with no Pi attached. If a test ever needs real hardware to pass, the README treats that as a leak in the abstraction.

On the Pi itself, the documented commands read the board:

sudo rultra-sense probe
sudo rultra-sense stream 1000

The README at this ref documents the build, probe and stream commands and the console, but it does not document an invocation for the new MCP server. Treat the server as landed in commit c580e26 and read that commit for how it is started, rather than guessing a command.

Use it today

Practical case: bringing up unfamiliar hardware without lying to yourself about it. Input is the board. Workflow is run probe, read the verification level for each device, and only claim a device works once you have observed its output. Output is a JSON-Lines record you can keep.

Acceptance test: run probe against a device you have never visually confirmed. It should report responding true with a verification level below Working. If it reports Working, the honesty rule has been broken and that is a bug.

Push it further

Experimental commentary. The governed loop is the ambitious part: the box measures itself, proposes a configuration change and promotes it only through a fitness gate with canary and verified rollback, recording each step. The README shows a real case where the die hit 83.6 °C, a backoff was proposed, the gate refused it and the change was rolled back.

Limitation: this is one board, one enclosure and one thermal environment, so a gate tuned here is not a general result. Falsifiable test: propose a change that a gate should refuse, and confirm the witness chain records both the refusal and the rollback rather than just the proposal.

Read the original on GitHub commit

Commit c580e26 — MCP server with ruv:// resources, and an end-to-end suite

rultra repository

Back to the newsroom