Skip to main content

runspec-mcp

Connect Claude Code to the runspec runnables installed across your machines — local venvs and remote SSH venvs — from one config file, with credentials injected as environment variables and each runnable's declared autonomy carried into Claude Code's permission layer.

runspec-mcp is a small local MCP gateway: Claude Code spawns it as a single MCP server; it reads your hosts + credential metadata, discovers the runnables in every configured venv (runspec local --format json, locally and over SSH), and presents them all as MCP tools. Discovery is live — as hosts connect/disconnect or their runnables change, the tool list updates automatically (no restart, no manual refresh).

Install the Claude Code plugin (the gateway plus the autonomy hook) from a Claude Code session. With uv, nothing else to install:

/plugin marketplace add https://runspec.app/marketplace.json
/plugin install runspec-mcp@runspec

Without uv (or from a private index), pip install "runspec-mcp[credentials]" first, then:

/plugin marketplace add https://runspec.app/marketplace-pip.json
/plugin install runspec-mcp@runspec-pip

Either way, the plugin asks for your runspec-console config folder (or a runspec_mcp.toml) when you install it. See runspec.app/mcp.

Any MCP client (Claude Desktop, Cursor, Cline, or Claude Code without the plugin) works too — runspec-mcp serve is a standard MCP stdio server. Add a mcpServers entry:

{ "mcpServers": { "runspec-mcp": {
    "command": "runspec-mcp", "args": ["serve"],
    "env": { "RUNSPEC_MCP_CONFIG": "/absolute/path/to/runspec_mcp.toml" } } } }

The Claude Code plugin adds one thing over a bare client: the PreToolUse hook that auto-approves autonomous runnables. Either way, manual runnables are refused by the gateway and password args never reach a tool schema. See docs/mcp.md for per-client details and the config-seed ("fleet adapter") how-to.

Config (runspec_mcp.toml)

[local]
venv_globs = ["~/venvs/*"]                       # local multi-venv discovery

[gateway]
refresh_interval = 30                             # background rediscovery cadence (s); 0 = off

[[host]]
name = "prod"
ssh = "deploy@prod.example.com"                  # omit ssh → this machine
runspec_paths = ["/opt/venvs/fleet/bin/runspec"]
jump = "bastion"                                 # optional ProxyJump (system ssh)

[[credential]]
id = "Windows"                                   # label → WINDOWS_* env vars
kind = "userpass"                                # userpass | password | token | ssh-key
username = "svc-bot"
# secret stored in the OS keychain:  runspec-mcp cred set Windows
# scope_hosts / scope_runnables optional — else auto-matched by a runnable's arg `env`

A runnable that declares it reads WINDOWS_USERNAME / WINDOWS_PASSWORD (via an arg env) auto-pulls the Windows credential — no scope config needed.

Secrets live in the OS keychain (keyring), keyed by credential id under the runspec-console service, so they are shared with the desktop console. Point the gateway at an existing console setup with --config-dir <dir>.

SSH keys

No SSH key ever goes in the MCP config — only path references. The gateway manages its own ed25519 keypair and uses it as the default SSH identity, so you never touch ~/.ssh; authorise it on your hosts once:

runspec-mcp key                    # print the managed public key
runspec-mcp copy-key --all         # install it on every configured host (one password prompt)

A per-host identity_file path still overrides it, and ssh-agent / ~/.ssh/id_* remain a fallback.

Commands

command what it does
runspec-mcp serve the MCP gateway (what the plugin runs)
runspec-mcp hosts list configured hosts + probe connectivity
runspec-mcp discover [--host H] print discovered tools
runspec-mcp key [--regenerate] show / rotate the managed SSH key
runspec-mcp copy-key [--all] [HOST…] install the managed key on host(s)
runspec-mcp cred set|list|rm ID manage credential secrets in the keychain
runspec-mcp seed-status show bundled config-seed contributors
runspec-mcp plugin-path print the bundled Claude Code plugin source dir
runspec-mcp claude-plugin render the plugin for this install, print its path
runspec-mcp check validate config + connectivity + manifest

Autonomy

Each runnable's autonomy maps onto a Claude Code permission decision via a PreToolUse hook the plugin ships (autonomous → allow, confirm/supervised → ask, manual → deny, unknown → ask). The gateway rewrites the hook's manifest on every discovery change, so it is always fresh. The remote side stays authoritative (venv denylist, enforce_run_as, password args omitted from schemas).

Metadata

Release files for runspec-mcp 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for runspec-mcp 0.2.3
File Size Uploaded Provenance
runspec_mcp-0.2.3.tar.gz 74.3 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for runspec-mcp 0.2.3
File Interpreter ABI Platform
runspec_mcp-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 144.5 kB

Release files / runspec_mcp-0.2.3.tar.gz

Download URL runspec_mcp-0.2.3.tar.gz
Size 74.3 kB
Tags Source
SHA-256 checksum
How to use checksums
b18ec0015ce422040727821f40381e79eea89e9c490ee0ab2c6f4a1d6f18db3d
BLAKE2b-256 checksum
How to use checksums
67bfca28760d358d39e5c40ca6c3ee51dc58e0c1e68e2cccccc38fd3b1f841c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Release files / runspec_mcp-0.2.3-py3-none-any.whl

Download URL runspec_mcp-0.2.3-py3-none-any.whl
Size 70.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
036e655d2d691686abdf2544afefcd1dae07b4f0a502078f38c13bd0c76eedd9
BLAKE2b-256 checksum
How to use checksums
88edf53e80dc4df67e6edab60841f32b9b512c9ab0a21392f4bb98b5502b9a21
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

Security for runspec-mcp 0.2.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for runspec_mcp-0.2.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 23, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page