SSH Fleet

Official registry Other

Curated ssh_probe diagnostics and single-host ssh_exec over an allowlisted SSH fleet.

What can you do with SSH Fleet?

  • ssh_probe(tags, check) — curated read-only diagnostics on every host
  • ssh_exec(host, command) — one arbitrary non-interactive command on ONE

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

OCI package ghcr.io/inhuman/mcp-ssh-fleet:0.1.5
Claude Code
claude mcp add ssh-fleet -e 'SSH_FLEET_TRANSPORT=stdio' -e 'SSH_FLEET_CMD_TIMEOUT_SECONDS=20' -e 'SSH_FLEET_OUTPUT_CAP_BYTES=8192' -e 'SSH_FLEET_PROBE_CONCURRENCY=8' -e 'SSH_FLEET_PROBE_MAX_HOSTS=50' -e 'SSH_FLEET_AUTH_TOKEN=<your ssh_fleet_auth_token>' -- docker run -i --rm ghcr.io/inhuman/mcp-ssh-fleet:0.1.5
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "ssh-fleet": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "ghcr.io/inhuman/mcp-ssh-fleet:0.1.5"
            ],
            "env": {
                "SSH_FLEET_TRANSPORT": "stdio",
                "SSH_FLEET_CMD_TIMEOUT_SECONDS": "20",
                "SSH_FLEET_OUTPUT_CAP_BYTES": "8192",
                "SSH_FLEET_PROBE_CONCURRENCY": "8",
                "SSH_FLEET_PROBE_MAX_HOSTS": "50",
                "SSH_FLEET_AUTH_TOKEN": "<your ssh_fleet_auth_token>"
            }
        }
    }
}

Environment variables

  • SSH_FLEET_TRANSPORT MCP transport. Must be 'stdio' for direct docker/stdio use.
  • SSH_FLEET_CMD_TIMEOUT_SECONDS Per-host command timeout in seconds (1..600).
  • SSH_FLEET_OUTPUT_CAP_BYTES Cap on output bytes per host section (>=256).
  • SSH_FLEET_PROBE_CONCURRENCY Parallelism for ssh_probe.
  • SSH_FLEET_PROBE_MAX_HOSTS Safety cap on the number of hosts in one probe.
  • SSH_FLEET_AUTH_TOKEN secret Optional X-MCP-AUTH bearer token (only used by the http/sse transports).

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. mcp-ssh-fleet
  2. Tools
  3. Configuration (env)
  4. Quickstart (docker, stdio)
  5. Connecting an MCP client (http/sse)
  6. Development

mcp-ssh-fleet

English | Русский

MCP server that gives an agent two tools over SSH to a fleet of hosts outside Kubernetes. The SSH key is a mounted secret (never enters model context); the inventory is a fail-closed allowlist.

Tools

  • ssh_probe(tags, check) — curated read-only diagnostics on every host carrying the given tags (AND semantics, like GitLab runner tags). check is one of a built-in set: uptime, disk, mem, failed, logs. Arbitrary commands cannot be passed. Class: read-only.
  • ssh_exec(host, command) — one arbitrary non-interactive command on ONE inventory host (by name or address; hosts outside the inventory are refused). Class: write-external: the server executes the command, while access gating (approval/RBAC) belongs to the MCP client.

Both: output size cap, per-host timeout, TOFU host-key check (fingerprint in logs), output as one section per host.

Configuration (env)

VariableDefaultMeaning
SSH_FLEET_TRANSPORThttphttp (StreamableHTTP, endpoint /mcp) \sse \stdio
SSH_FLEET_ADDR:8080listen address for http/sse
SSH_FLEET_AUTH_TOKEN—optional X-MCP-AUTH token
SSH_FLEET_INVENTORY_PATH/etc/ssh-fleet/inventory.yamlpath to the inventory (configmap)
SSH_FLEET_KEY_PATH/etc/ssh-fleet/id_ed25519path to the private key (secret)
SSH_FLEET_OUTPUT_CAP_BYTES8192output cap per section
SSH_FLEET_CMD_TIMEOUT_SECONDS20per-host timeout
SSH_FLEET_PROBE_CONCURRENCY8probe parallelism pool
SSH_FLEET_PROBE_MAX_HOSTS50safety cap on hosts per probe

Inventory format — see deploy/inventory.example.yaml.

Quickstart (docker, stdio)

docker run -i --rm \
  -v /path/to/inventory.yaml:/etc/ssh-fleet/inventory.yaml:ro \
  -v /path/to/id_ed25519:/etc/ssh-fleet/id_ed25519:ro \
  -e SSH_FLEET_TRANSPORT=stdio \
  ghcr.io/inhuman/mcp-ssh-fleet:latest

This is the shape MCP clients use when installing from the MCP Registry (io.github.inhuman/mcp-ssh-fleet).

Connecting an MCP client (http/sse)

By default the server speaks StreamableHTTP; register it as a regular HTTP MCP server with endpoint /mcp (URL like http://<host>:8080/mcp). Both tools become available to the client.

Client-side security recommendations:

  • ssh_probe is read-only (curated checks only) and can be granted broadly.
  • ssh_exec is arbitrary execution (write-external). Gate its access on the client side (approval / RBAC / user allowlist) — the server merely executes a command on an inventory host; it does not decide access policy.

Development

make test        # unit tests + e2e against a real in-process SSH server
make vet
make vulncheck
make build
make docker

Release: tag vX.Y.Z → GitHub Actions builds and publishes a multi-arch image to ghcr.io/inhuman/mcp-ssh-fleet.

Frequently asked questions

What is SSH Fleet?

Curated ssh_probe diagnostics and single-host ssh_exec over an allowlisted SSH fleet.

How do I install SSH Fleet?

It runs on your machine. In Claude Code: claude mcp add ssh-fleet -e 'SSH_FLEET_TRANSPORT=stdio' -e 'SSH_FLEET_CMD_TIMEOUT_SECONDS=20' -e 'SSH_FLEET_OUTPUT_CAP_BYTES=8192' -e 'SSH_FLEET_PROBE_CONCURRENCY=8' -e 'SSH_FLEET_PROBE_MAX_HOSTS=50' -e 'SSH_FLEET_AUTH_TOKEN=<your ssh_fleet_auth_token>' -- docker run -i --rm ghcr.io/inhuman/mcp-ssh-fleet:0.1.5. For other clients, paste the JSON configuration from this page into their MCP settings.

Does SSH Fleet need an API key?

Yes. It expects SSH_FLEET_AUTH_TOKEN, which you set in its configuration.

Is SSH Fleet open source?

Yes. Its code is on GitHub under the MIT license.

Who maintains SSH Fleet?

It is published by inhuman. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.