The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Runner MCP listing page.
Let an AI run tests and controlled staging operations on your own server without giving it a general-purpose remote shell.
Runner MCP is a security-first, self-hosted Model Context Protocol service. You configure the projects and operations that exist; the AI selects from those bounded capabilities instead of supplying arbitrary shell commands, executables, filesystem paths or service names.
An AIfordable project — secure software. Built with AI. Fairly priced.
Runner MCP is currently alpha. The canonical public distribution is available on PyPI, the official MCP Registry and GitHub Releases. The first fully aligned cross-registry release is v0.1.2.
Start here: 5-minute demo · Quickstart · Security model · Threat model
| Approach | AI can inspect/run configured work | Arbitrary shell is the normal interface | Explicit audit/safety boundary |
|---|---|---|---|
| SSH / broad remote-control tool | Yes | Yes | Depends on the surrounding setup |
| Runner MCP | Yes | No | Yes — allow-lists, bounded output, emergency stop and approval gates |
Runner MCP is intentionally not a sandbox for untrusted code and does not claim to replace every operator maintenance tool. Its goal is narrower: routine AI-assisted development and staging operations should not require handing the AI an unrestricted shell.
AI-assisted development becomes much more useful when the assistant can verify changes against real projects. But routine tasks such as reading a safe file, running a known test suite or checking a staging service do not require the authority of a general-purpose remote shell.
Runner MCP turns those routine operations into explicit capabilities. The operator configures projects and named actions locally; the AI client selects from those capabilities instead of supplying arbitrary commands, executable paths or private infrastructure values.
The original motivation was practical: reduce the day-to-day dependency on broad remote-control tooling while keeping useful development and staging automation.
Runner MCP is the local safety boundary. GitHub can be used for source collaboration and, optionally, as a bounded mailbox transport; it is not turned into a mechanism for sending arbitrary shell commands.
The normal authority model is deliberately asymmetric: read-only inspection is easier, mutating staging actions are narrower, higher-risk actions require short-lived local approval, and production mutations remain disabled.
Runner Fabric remains a separate product and orchestration/control-plane owner. When both products run on the same host, Runner MCP can optionally expose a loopback-only transport bridge with three coarse tools — run, inspect and cancel a bounded Fabric work-unit. This lets an AI hand off a whole repository-change workflow without receiving generic GitHub/Git/shell primitives.
The bridge is disabled by default and does not change Runner MCP's authority model. See Optional Runner Fabric bridge.
You do not need to understand the Python source code for the basic workflow.
Starting with v0.1.1, the shortest persistent install is:
uvx aifordable-runner-mcp ... is also suitable for package discovery and short-lived evaluation, but a persistent tool install is the clearer choice for a self-hosted service with private configuration and autostart.
To install directly from source instead:
Start with QUICKSTART.md for the guided installation.
Connectivity remains loopback-first. runner-mcp setup in public mode records an external HTTPS resource/auth identity only; it does not expose a bind address, install TLS, edit DNS/firewalls, configure a reverse proxy or create a tunnel. runner-mcp guide reports only a generic connectivity category without printing the configured hostname or private URL. For supported OpenAI products, private access can use Secure MCP Tunnel; an external HTTPS reverse proxy remains an operator-managed alternative.
If Runner MCP runs under a dedicated service account while you log in with a separate operator account, install a local operator wrapper. Skip this step when Runner MCP runs under the same account you use interactively:
The wrapper keeps the private configuration with the service account and delegates through sudo; it does not copy credentials into the operator account.
For a user-to-developer path, see docs/USING_AND_EXTENDING.md. Contributors can start with CONTRIBUTING.md.
For the zero-additional-service-cost GitHub mailbox pattern, see docs/GITHUB_MAILBOX_BRIDGE.md. The public package now includes both a transport-neutral processor and a fixed-host GitHub transport; completion feedback and watcher resilience are documented in docs/COMPLETION_FEEDBACK.md and docs/WATCHER_RESILIENCE.md. Bounded multi-project scheduling and capacity controls are documented in docs/CONCURRENCY.md.
Dependency/build/interpreter contract changes are deliberately refused by self-update and require a local bootstrap/manual upgrade; see self-update compatibility.
Runner MCP is developed as an AIfordable project. Public launch readiness is tracked in docs/LAUNCH_READINESS.md. See also the changelog, release checklist and prepared launch copy.
Useful commands:
The emergency stop is intentionally easy to activate and harder to clear.
Current implemented foundations include:
Runner MCP is not intended to provide:
Production actions remain out of scope until stronger approval and isolation controls are implemented.
Runner MCP is built around:
See:
This repository must never contain real infrastructure details.
Do not commit:
Public examples use placeholders only. Real values belong in private local configuration or an appropriate secret store.
An MCP client may choose only a configured project and named test profile.
A test profile defines the exact executable, exact argument array, project-relative working directory, timeout, log limit and explicitly allowed environment variables.
Commands are launched with shell=False.
Running a test still executes project code. Until stronger sandboxing exists, only trusted repository revisions should be tested.
Code rollback and database recovery are separate operations.
Code releases are retained using both:
A release is eligible for cleanup only when both conditions permit it.
A single approved rollback action may move back exactly one code release. Runner MCP must stop, health-check and reassess before another rollback.
Database restore is never an automatic side effect of code rollback and always requires explicit human approval.
Target runtime: Python 3.12+.
Core technologies:
The implementation uses Streamable HTTP for MCP.
Do not connect a privileged persistent self-hosted runner to untrusted public pull-request code.
The current implementation state is tracked in:
Runner MCP v0.1.0 is the first public alpha release. The project remains under active development. The public GitHub mailbox stack now includes protocol-v1 validation, replay lifecycle, fixed-host transport, an incremental restart-safe watcher, a loopback-only MCP executor, bounded concurrent request handling, fail-closed missing-result recovery and a private-config runtime/CLI. Shared-watcher migration, exactly-once completion feedback, clean-Linux demo validation, non-root autostart packaging and privacy-safe connectivity guidance are complete. Ongoing alpha hardening and post-release work are tracked in the roadmap and release checklist.