Bridge family · mcp-proxy

OpenMHS family: mcp-proxy

MCP servers through McpClientDriver (finite controlled tool contract)

Recipe published91 packageshardware
On this page 9 sections
  1. Launch
  2. Registry coverage
  3. Applicability
  4. Capability mapping
  5. Safety
  6. Fidelity
  7. Pitfalls
  8. First task cards
  9. Sources

MCP servers through McpClientDriver (finite controlled tool contract)

Generated by MHS/registry/build_registry.py on 2026-10-20T00:00:00Z from 91 registry records and their task cards. A plan, not a conformance claim.

  • bridge_status: available
  • helper: McpClientDriver
  • exemplar: MHS/drivers/labs/mattjax16__rigol-dho-mcp

Launch

Every driver package starts the same way; per-repo configuration (environment id, model path, port, baud rate, VISA resource) lives in the package's driver.py, never in launch flags:

text
mhs serve <driver-dir>

A package is done when python3 -m mhs.driver check <driver-dir> --backend fake exits 0 (evidence contract_checked; a fake never yields an MHS-Device level).

Registry coverage

  • Repos: 91
  • Decisions: bridge-runtime 1, family-config 1, reference 72, skip 17
  • Waves: 2: 1, 9: 90
  • Dispatchable now: 0
  • Modes: hardware 2

Applicability

Repositories whose device interface is an MCP server: triage rule 9, family:mcp-client. The implemented McpClientDriver is a configuration-only, finite tool contract over an injected controlled peer. It does not talk to a live MCP server: every non-fake backend refuses before any import, process start or connection, so a package passes on its fake (contract_checked) and states its native gaps in RESULT.json notes. Exemplar: gh.mattjax16/rigol-dho-mcp (thirteen tools of a Rigol oscilloscope server as sixteen bindings).

Configuration surface. mcp_config["source"] names one file, its SHA-256, the pinned commit and the decorator receiver. mcp_config["tools"] has one entry per selected tool: input (closed object schema; every array has maxItems, every free string maxLength), output (kind json with schema, text, or png, each with max_bytes), effectful, source_ref, defaults, and optionally error_prefixes, result_matches and prerequisite. Optional safety declares the protective transaction; request_timeout_ms, stop_timeout_ms, max_message_bytes and owned_transport bound the client. On the class: commands (every tool needs exactly one primary command; arguments and select add projections), an explicit Action per command whose inline output schema equals the tool's, reads with parameters, mode = "hardware", and backends = {"fake": ".fake:connect", "hardware": ".native:connect"}. The fake returns a peer with exchange(message, *, timeout_ms, lane) that answers tools/list and tools/call; native.py refuses. No writes, safety_bindings, safe_state=True action, estop_physical_ref or method overrides; numeric inputs need a sourced or operator-required Limit. See the MCP client guide.

What it cannot express today: a hardware device at R2 or R3 (SAFE-045 wants a physical-stop reference or a safe-state action, and McpClientDriver allows neither), tools registered with add_tool(...) or through a low-level Server tool table (G7 proves literal decorators only), list or mixed content results (a JPEG preview beside metadata), tools that run caller-supplied code, and primary data the server itself drops before returning. Stop with blocked HELPER_MISSING or NEEDS_ARTIFACTS and name the source lines, or record a source-verified DEVIATION FROM THE CARD to another helper that matches the device's real interface.

Capability mapping

native callOpenMHS targetnotes
a tool registered by a literal @<receiver>.tool() on a top-level function of the pinned source fileone mcp_config["tools"] entry, one primary commands[cap] = {"tool": name} and an explicit Actionclosed input schema from the signature, the literal default of every optional argument, source_ref inside the function; G7 proves name, arguments, defaults, file bytes and pin
a tool body that writes to the device, including select-then-query measurementseffectful: true; an x-cap.<owner>.<tool>.v1 action unless a catalogue class has the same outputeffects come from the body, never from the tool name, description or annotations
an argument-free read-only tool that returns a JSON objectreads[field] = {"tool": ..., "path": ...} beside its commanda read never replaces the tool's command
a numeric argumentLimit(..., source="upstream_code", ref=...) when the signature enforces it (Field(ge=1, le=4)), else Limit.operator_requireda docstring range or a description is not an enforced bound
a large JSON result or an MCP imageoutput.artifact: true (artifact_ref, media_type) or kind: png (image_ref, width, height, media_type)the complete returned result; array_counts and arrays_if check array lengths
a documented precondition ("the scope must be stopped")prerequisite: a fresh read-only observation with path and equals, cited inside the toolrefuses with PRECONDITION_UNMET; never performs the precondition itself
one argument whose unit depends on anotherextra commands with arguments (input/const) or a cited select over one read-only observationeach binding declares its unit; the wire schema stays the source's
a stop tool plus a status readbackmcp_config["safety"]: command, arguments, observe, path, equalsthe e-stop sends the command on the protective lane and needs a fresh matching observation after older requests retired
raw command, code execution, file path or URL toolsnot exposedno caller-supplied code, SCPI program, endpoint, credential or path
server start, transport, tools/listlifecycle outside the packagediscovery is a compatibility check, never authority; every non-fake backend refuses

Class ids come from python3 -m mhs.driver catalog search <words>. The deprecated classes cap.device.describe.v1, cap.world.state.v1, cap.world.snapshot.v1 and cap.world.restore.v1 are replaced by the protocol methods mhs.devices.get, mhs.resource.read, mhs.snapshot and mhs.restore.

Safety

The risk floor of a device is the highest catalogue risk_class of its classes (CAP-017); a driver may declare a higher risk, never a lower one. Hardware at R1 or above needs the mcp_config["safety"] protective transaction (it is the e-stop; @estop methods are not allowed) and a non-empty safe state; R2 and R3 cannot pass SAFE-045 with this helper today. Risk follows the device behind the server (MHS/spec/04-safety.md hazard table), never the tool names. Remote descriptions, titles and annotations are untrusted text and grant no authority. A successful-looking reply, MCP cancellation, a closed pipe or a process exit is not a device stop: the safe state is only the declared protective command plus a fresh matching observation, and an unconfirmed effect blocks new effects until an e-stop and reset settle it.

Fidelity

A controlled peer yields contract_checked evidence only. The SDK's controlled profile is not FastMCP's native wire: FastMCP lists pydantic-generated schemas and can add structuredContent beside string results, which the bridge refuses; numbers in the fake are placeholders.

Pitfalls

Tools named get_* can write (select, then query). One tool issues several device calls, so timeouts do not retire it. Error text often comes back as normal content (error_prefixes). Summaries can replace the primary array. Optional raw-command tools stay unexposed.

First task cards

  • gh.mattjax16/rigol-dho-mcp: family-config, wave 2, rank 64, MHS/registry/tasks/labs/mattjax16__rigol-dho-mcp.json
  • gh.tarrysingh/artificial-intelligence-deep-learning-machine-learning-tutorials: skip, wave 9, rank 129, MHS/registry/tasks/labs/tarrysingh__artificial-intelligence-deep-learning-machine-learning-tutorials.json
  • gh.robotmcp/ros-mcp-server: reference, wave 9, rank 165, MHS/registry/tasks/robots/robotmcp__ros-mcp-server.json
  • gh.pku-yuangroup/openai4s: reference, wave 9, rank 213, MHS/registry/tasks/labs/pku-yuangroup__openai4s.json
  • gh.extelligence-ai/bagel: reference, wave 9, rank 246, MHS/registry/tasks/robots/extelligence-ai__bagel.json

Sources

  • Task cards: MHS/registry/tasks/<track>/<owner>__<repo>.json (schema/taskcard.schema.json).
  • Triage rules and the helper table: MHS/registry/triage.py; curated decisions: MHS/registry/overrides/.
  • Driver API and gate: MHS/sdk/docs/driver-authoring.md; exemplars: MHS/drivers/.
  • MCP client guide and driver authoring.
  • Rigol exemplar driver, fake, tests, facts and result notes.

Packages

Top 24 of 91 by stars. Filter the full list.

PackageTierRingEvidenceStars
tarrysingh/artificial-intelligence-deep-learning-machine-learning-tutorials
tarrysingh/artificial-intelligence-deep-learning-machine-learning-tutorials: catalog/discovery tooling (lab instrumentat
Tier D3static scan4,011
robotmcp/ros-mcp-server
robotmcp/ros-mcp-server: MCP→ROS bridge for shared access and protocol infrastructure (robotics track). OpenMHS plan: re
Tier D3agent read1,492
pku-yuangroup/openai4s
pku-yuangroup/openai4s: repository for AI4S (lab instrumentation track). OpenMHS plan: reference only (host). Declared b
Tier D3static scan620
extelligence-ai/bagel
extelligence-ai/bagel: agent framework for general (robotics track). OpenMHS plan: reference only (host). Declared backe
Tier D3static scan397
rokbenko/quackd
rokbenko/quackd: catalog/discovery tooling (robotics track). OpenMHS plan: reference only (host). Language: Python. Cata
Tier D3static scan255
omni-mcp/isaac-sim-mcp
omni-mcp/isaac-sim-mcp: protocol implementation/bridge for robot arm manipulation (robotics track). OpenMHS plan: refere
Tier D3agent read194
roboclaw-robotics/roboclaw
roboclaw-robotics/roboclaw: agent framework for robot arm manipulation (robotics track). OpenMHS plan: reference only (h
Tier D3static scan167
kisaragi-mochi/stackchan-mcp
kisaragi-mochi/stackchan-mcp: protocol implementation/bridge for humanoid robots (robotics track). OpenMHS plan: referen
Tier D3static scan156
wise-vision/ros2_mcp
wise-vision/ros2_mcp: repository for shared access and protocol infrastructure (robotics track). OpenMHS plan: reference
Tier D3static scan89
lpigeon/unitree-go2-mcp-server
lpigeon/unitree-go2-mcp-server: protocol implementation/bridge for legged robots (robotics track). OpenMHS plan: referen
Tier D3static scan87
ajtudela/nav2_mcp_server
ajtudela/nav2_mcp_server: protocol implementation/bridge for mobile robots (robotics track). OpenMHS plan: reference onl
Tier D3static scan86
ilialarchenko/robot_mcp
ilialarchenko/robot_mcp: protocol implementation/bridge for robot arm manipulation (robotics track). OpenMHS plan: refer
Tier D3static scan85
kakimochi/ros2-mcp-server
kakimochi/ros2-mcp-server: protocol implementation/bridge for mobile robots (robotics track). OpenMHS plan: reference on
Tier D3agent read83
osu-nlp-group/chemmcp
osu-nlp-group/chemmcp: agent framework for chemistry (lab instrumentation track). OpenMHS plan: reference only (host). D
Tier D3static scan74
liulab-bioelectronics-harvard/stagent
liulab-bioelectronics-harvard/stagent: agent framework for biology (lab instrumentation track). OpenMHS plan: reference
Tier D3static scan63
jataware/open-coscientist
jataware/open-coscientist: agent framework for general (lab instrumentation track). OpenMHS plan: reference only (host).
Tier D3static scan60
laoxue888/llmcontrolsarm
laoxue888/llmcontrolsarm: agent framework for robot arm manipulation (robotics track). OpenMHS plan: reference only (hos
Tier D3static scan52
ai-fange/robotarm-mcp-p340
ai-fange/robotarm-mcp-p340: protocol implementation/bridge for robot arm manipulation (robotics track). OpenMHS plan: re
Tier D3static scan37
yutarop/ros-mcp
yutarop/ros-mcp: protocol implementation/bridge for mobile robots (robotics track). OpenMHS plan: reference only (host).
Tier D3static scan36
binabik-ai/mcp-rosbags
binabik-ai/mcp-rosbags: auxiliary tooling for general (robotics track). OpenMHS plan: not integrated (skip:tooling). Dec
Tier D3static scan29
jackccrawford/reachy-mini-mcp
jackccrawford/reachy-mini-mcp: protocol implementation/bridge for humanoid robots (robotics track). OpenMHS plan: refere
Tier D3static scan29
kornia/bubbaloop
kornia/bubbaloop: agent framework for general (robotics track). OpenMHS plan: reference only (host). Declared backend: M
Tier D3static scan28
rolenet/mcpagentrobot
rolenet/mcpagentrobot: agent framework for general (robotics track). OpenMHS plan: reference only (host). Declared backe
Tier D3static scan22
k-dense-ai/lab-instrument-mcps
k-dense-ai/lab-instrument-mcps: repository for wet-lab automation and chemistry (lab instrumentation track). OpenMHS pla
Tier D3static scan17