feat(robot-mcp): add robot inspection MCP server and CouchDB asset profiles#370
Open
AnandMayank wants to merge 1 commit into
Open
feat(robot-mcp): add robot inspection MCP server and CouchDB asset profiles#370AnandMayank wants to merge 1 commit into
AnandMayank wants to merge 1 commit into
Conversation
…ofiles
CouchDB profile layer (src/couchdb/):
- New profile:{asset_id} documents in the iot DB for 4 assets
(Chiller 6, Metro Pump 1, Hydraulic Pump 1, Motor 01)
- 9 robot-specific fields per profile; docs omit asset_id so existing
IoT Mango queries are completely unaffected
- seed_robot_profiles.py with --dry-run / --verify flags
- schema_robot_fields.json field reference and gauge_value constraint doc
Robot MCP server (src/servers/robot/):
- 8 tools: navigate_to, safety_gate_check, open_panel, read_gauge,
check_human_presence, commit_reading, check_wo_similarity, detect_anomaly
- PhysicalStateSimulator: seeded (seed=42), deterministic, state in memory
- MultiReadingVerifier: score = 0.35*C + 0.35*A + 0.30*H, N>=3 hard gate,
sensor-freeze gate, sensor-physical and historical outlier annotations
- historical_outlier uses 3-level severity spectrum (60% mild / 25% medium /
15% severe) with gap-based formulas guaranteeing H range by construction
- gauge_value never returned to agent; enforced by double-guard confirmed
by test_gauge_value_protection.py (10 checks)
- robot-mcp-server entry point added to pyproject.toml
- "robot" key added to DEFAULT_SERVER_PATHS in src/agent/runner.py
Tests: 66 robot tests pass; pre-existing IoT tests unaffected.
Signed-off-by: AnandMayank <anandmayank698@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds a robot inspection extension to AssetOpsBench, enabling agents to
physically verify industrial assets before committing maintenance decisions.
CouchDB — profile layer (
src/couchdb/):profile:{asset_id}documents in theiotDB — one per asset(Chiller 6, Metro Pump 1, Hydraulic Pump 1, Motor 01)
physical_location,gauge_value,gauge_range,panel_stuck_prob,human_present,never_read,real_gauge_images,reading_consistency,sensor_physical_gapasset_idfield so existing IoT Mango queries arecompletely unaffected
seed_robot_profiles.py— idempotent seeding with--dry-run/--verifyschema_robot_fields.json— field reference andgauge_valueconstraint docRobot MCP server (
src/servers/robot/):navigate_to,safety_gate_check,open_panel,read_gauge,check_human_presence,commit_reading,check_wo_similarity,detect_anomalyPhysicalStateSimulator: seeded (seed=42), deterministic, state in memory(not CouchDB) — prevents parallel test runs from corrupting each other
MultiReadingVerifier:score = 0.35·C + 0.35·A + 0.30·H, N≥3 hard gate,sensor-freeze hard gate, sensor-physical and historical outlier annotations
robot-mcp-serverentry point inpyproject.toml;"robot"key inDEFAULT_SERVER_PATHSCritical invariant —
gauge_valueprotection:gauge_valueis the hidden ground truth used internally byread_gauge().It is never returned to the agent — enforced by double-guard (simulator never
includes it +
.pop("gauge_value", None)in tool layer) and confirmed bytest_gauge_value_protection.py(10 checks).Scenario generation:
normal,contradiction,spill,never_read,historical_outlierhistorical_outlieruses a 3-level severity spectrum (60% mild / 25% medium /15% severe) with gap-based formulas that guarantee the historical signal range
by construction
Tests: 66 total robot tests pass; 29 pre-existing IoT tests unaffected.