Skip to content

RFC: MCP exec-runner β€” the sandbox as an A3 runner target (#592)#595

Draft
ryaneggz wants to merge 1 commit into
developmentfrom
feat/mcp-exec-runner-rfc
Draft

RFC: MCP exec-runner β€” the sandbox as an A3 runner target (#592)#595
ryaneggz wants to merge 1 commit into
developmentfrom
feat/mcp-exec-runner-rfc

Conversation

@ryaneggz

@ryaneggz ryaneggz commented Jul 4, 2026

Copy link
Copy Markdown
Collaborator

Summary

Companion RFC to #592 (Runtime support) proposing the openharness sandbox as a remotely-drivable MCP runner: vendor only the exec-server proxy from mifunedev/sandboxes/ubuntu β€” a ~100-line Node MCP server exposing a single exec_command tool over Streamable HTTP on :3005.

This is a decision artifact, not an implementation: no proxy is wired, no image or compose is touched.

Where it fits #592

The mechanism is unambiguously axis A3 (fan-out) β€” a runner endpoint that lets an external control plane drive N sandboxes over one uniform protocol (MCP). It makes concrete the "the harness becomes a runner target" option that rfc-runtime-support.md Β§6 raises and defers, adding provider: mcp-http beside the Crabbox be/embed/integrate choice.

It is the inverse of the existing DebugMCP wiring: there the sandbox is an MCP client dialing out to :3001; here it hosts an MCP endpoint an outside orchestrator drives.

Security floor (gates any future build)

exec_command is arbitrary RCE, and the sandbox bind-mounts /var/run/docker.sock β†’ reach extends to the host. Non-negotiable posture, drawn from the third-party-MCP governance checklist:

  • Off by default β€” opt-in single toggle (install.mcp_exec_runner); default installs ship nothing new (.oh/templates/full/ + init.test.ts stay green).
  • Loopback-bound by default β€” external reach only via a deliberate cloudflared tunnel or explicit forwardPorts; never 0.0.0.0.
  • API_KEY required when enabled (fail-closed) β€” do not inherit the upstream keyless default.
  • Vendored + pinned @modelcontextprotocol/sdk; minimal reviewed config; no auto-granted permissions.
  • Open fork: run as a low-priv executor user (recommended) vs. the sudo + docker-group sandbox user.

Contents

  • .oh/docs/rfcs/rfc-mcp-exec-runner.md β€” the companion RFC (this PR).

Held out of this PR (available on request):

  • A wiki entry (.oh/skills/wiki/corpus/mcp-exec-runner.md + raw snapshot) β€” kept as local scratch, since the wiki corpus is gitignored-by-default.
  • A proposed additive merge into the in-flight rfc-runtime-support.md (a Β§4 fit-matrix row + a Β§6 provider: mcp-http option) β€” left for the RFC: Runtime support β€” A1/A2/A3 axes & the "supported runtime" contractΒ #592 author to apply rather than editing their WIP draft in place.

Notes

Refs #592, #591.

πŸ€– Generated with Claude Code

…didate for #592

Companion RFC proposing the openharness sandbox as a remotely-drivable MCP
runner by vendoring only the exec-server proxy from mifunedev/sandboxes/ubuntu
(one exec_command tool over Streamable HTTP). Maps to axis A3 (fan-out) of the
runtime-support RFC (#592) and makes concrete its Β§6 deferred "harness becomes a
runner target" option. Decision artifact only β€” no proxy wired, no image/compose
change; the security floor (opt-in, loopback, required API_KEY, pinned SDK,
low-priv run-as) gates any future build.

Refs #592, #591.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant