
Runner MCP
io.github.Blacksp1d3r由 GitHub 帳號 Blacksp1d3r 發布v0.1.3更新於 Oct 24, 2026
Self-hosted MCP for controlled AI development and staging without a general-purpose remote shell.
概覽
自架式 MCP 伺服器,讓 AI 在自己的伺服器上執行白名單內的測試與受控預備環境操作,而不必取得通用遠端 shell。
- 可以做什麼
- 檢視白名單專案:列出檔案、讀取中繼資料與分頁檔案內容,並具備路徑穿越與機密檔案防護
- 以非同步工作執行預先定義的測試設定,支援逾時、取消與日誌清理
- 檢視並控制白名單內的 systemd 使用者層級預備環境服務,包含健康檢查
- 規劃並部署預備環境版本、查看發佈紀錄,並一次回滾一個版本
- 處理 PostgreSQL 備份、唯讀還原預檢,以及需強制遷移前備份的遷移狀態查詢與執行
- 回報執行狀態與診斷資訊,並觸發固定提交的自我更新
- 適用情境
- 當你希望助理針對真實專案驗證變更、執行已知測試套件或進行日常預備環境操作,但不想給它不受限制的遠端 shell 時適用。適合接受預設拒絕與白名單模式的自架預備環境維運人員。
- 執行需求
- 以 Python 3.12+ 本機程序執行,可用 uv tool install 或 uvx 安裝 aifordable-runner-mcp 套件,也可從原始碼安裝。需以 runner-mcp setup 在本機設定專案、測試設定、服務與部署設定。MCP 傳輸需要私有設定產生的 Authorization bearer 權杖,並存放於用戶端機密儲存區。連線以回送位址優先,遠端存取需自行管理 HTTPS 反向代理或通道。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Runner MCP,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
Runner MCP
Confirmed cross-product role (2026-10-20): Runner-MCP is the bounded authenticated execution and MCP access boundary, not the company cockpit or a second technical orchestrator. AIfordable owns the company-wide business cockpit and customer/product/registration/desired-state data; Runner-Fabric owns the technical F10/F17 Cockpit and is the sole technical coordinator. Existing Agent Bus relay code is retained as a transport, not a duplicate scheduler. Runner-MCP's optional Fabric bridge remains narrow, with no automatic expansion of authority. Cross-product role contract.
[Runner MCP validation] [GitHub release] [PyPI] [License: MIT] [Python 3.12+] [AllMCPs Verified]
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 and in maintenance mode. The canonical public release is v0.1.3, available on PyPI, the official MCP Registry and GitHub Releases. The core alpha scope is complete; new work is limited to security fixes, bugs, compatibility, and concrete operational needs rather than speculative feature growth.
Start here: 5-minute demo · Quickstart · Security model · Threat model
One-time new-host staging (local operator only): Source-pinned host bootstrap. This does not activate a service or confer remote authority.
The difference in one table
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.
Why Runner MCP exists
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.
How it works
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.
Optional Runner Fabric work-unit bridge
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.
For ChatGPT/Codex clients, Runner MCP can also render a private first-party plugin package that reuses this existing MCP boundary without embedding bearer-token values or adding another control plane. See First-party ChatGPT/Codex control path.
I just want to use it
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.
What works today
Current implemented foundations include:
- authenticated MCP over Streamable HTTP;
- project allow-listing;
- safe project file listing, metadata and paged reads;
- path traversal, symlink and secret-file protection;
- request IDs, rate limiting and audit logging;
- DNS-rebinding protection;
- external operator emergency stop;
- rollback-retention policy using both minimum count and minimum age;
- local read-only retention preview with strict release/backup validation and no deletion authority;
- explicit separation between code rollback and database restore;
- controlled asynchronous test jobs;
- commit-pinned self-update for the canonical Runner MCP project, gated by an unchanged Python/build/dependency compatibility contract, fixed lint/unit validation and internal self-reexec;
- bounded fair multi-project test scheduling with per-project opt-in parallelism;
- safe queue, worker and job observability without infrastructure disclosure;
- allow-listed systemd-user staging service status/start/stop/restart;
- optional private service health checks;
- private PostgreSQL backups with safe metadata listing;
- local read-only PostgreSQL restore preflight without database mutation;
- controlled migration status/apply with mandatory pre-migration backup;
- staging-only release planning and asynchronous deployment jobs;
- clean-Git release archives, atomic activation and health-gated rollback;
- safe release history plus one-step asynchronous staging rollback;
- built-in allow-listed project adapters with safe capability inspection;
- strict MCP tool arguments: unknown fields are rejected rather than ignored;
- short-lived human approval gates for migration, deploy and rollback;
- staging-only mutation policy; production remains read-only;
- private ChatGPT connectivity can use OpenAI Secure MCP Tunnel without an inbound public port;
- predefined test profiles only;
- test timeout, cancellation and process-group cleanup;
- scrubbed, bounded test logs;
- recovery of interrupted test-job metadata after restart;
- interactive setup, status and doctor commands;
- CLI project management without manual YAML editing;
- CLI test-profile management with pytest, Ruff and custom presets;
- non-root local installer and guided Quickstart.
What Runner MCP deliberately does not do
Runner MCP is not intended to provide:
- a general remote shell;
- arbitrary commands supplied by an AI client;
- automatic production database restore;
- database restore execution in the current implementation;
- automatic multi-release rollback cascades;
- unrestricted service control;
- untrusted public-fork execution on a privileged persistent runner.
Production actions remain out of scope until stronger approval and isolation controls are implemented.
Safety model
Runner MCP is built around:
- deny by default;
- explicit project, service and test-profile allow-lists;
- no arbitrary shell as a normal interface;
- no secrets in MCP tool output;
- strict path validation;
- auditable actions;
- least-privilege runtime permissions;
- explicit risk classes for operational tools;
- external operator emergency stop;
- retention confirmation before operator actions;
- one code rollback step per approved action;
- database restore always requiring explicit human approval;
- DNS-rebinding protection tied to the configured MCP resource URL.
See:
- security/SECURITY_BASELINE.md
- security/THREAT_MODEL.md
- security/OPERATOR_SAFETY.md
- security/TEST_EXECUTION.md
Public repository rule
This repository must never contain real infrastructure details.
Do not commit:
- real IP addresses or hostnames;
- internal domains;
- private service endpoints or ports;
- usernames;
- absolute deployment paths from a real installation;
- database endpoints;
- credentials or tokens;
- private keys;
- database dumps or backups.
Public examples use placeholders only. Real values belong in private local configuration or an appropriate secret store.
Controlled test execution
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.
Rollback philosophy
Code rollback and database recovery are separate operations.
Code releases are retained using both:
- a minimum number of releases;
- a minimum age.
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.
Development
Target runtime: Python 3.12+.
Core technologies:
- official MCP Python SDK;
- Pydantic;
- PyYAML;
- Starlette;
- Uvicorn;
- pytest;
- Ruff.
The implementation uses Streamable HTTP for MCP.
Do not connect a privileged persistent self-hosted runner to untrusted public pull-request code.
Project status
The current implementation state is tracked in:
- handover/CURRENT_STATE.md
- roadmap/ROADMAP.md
- FUTURE_LAB.md — experimental research, benchmarks and moonshots kept separate from the stable core
Runner MCP v0.1.3 is the current canonical cross-registry alpha release. The technical alpha/MVP core is complete and the project is now in maintenance mode. Runtime, self-update/recovery, bounded first-party control, GitHub mailbox/Agent Bus support and the optional coarse Runner Fabric bridge have live acceptance evidence. Future Runner MCP changes should be driven by security, defects, compatibility, or a concrete operational requirement; broader orchestration and new automation belong in Runner Fabric rather than expanding Runner MCP into a general remote-control layer.
來源:README.md,提交 ba673d7
工具
0版本歷史
2- v0.1.3最新Oct 2, 2026
- v0.1.2Sep 27, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分