SSH Fleet

io.github.inhumanPublished by GitHub account inhumanv0.1.5Updated Oct 24, 2026

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

Overview

AI-generated overview

Lets an assistant run curated read-only diagnostics across an allowlisted SSH fleet and one arbitrary command on a single inventory host.

What you can do
Exposes two SSH tools. ssh_probe(tags, check) runs built-in read-only checks (uptime, disk, mem, failed, logs) on every host matching the given tags, with AND semantics; arbitrary commands cannot be passed. ssh_exec(host, command) runs one arbitrary non-interactive command on a single inventory host, refusing hosts outside the inventory. Output is capped per host section, with per-host timeouts and a TOFU host-key check whose fingerprint is logged.
When to use it
Useful when an assistant needs routine fleet health checks across many tagged hosts, or a single targeted command on a known host, without giving it a general SSH shell. The read-only probe can be granted broadly; ssh_exec is meant for narrower, gated use.
Requirements
Runs locally as a stdio process, typically via the Docker image ghcr.io/inhuman/mcp-ssh-fleet. Needs a mounted inventory file (SSH_FLEET_INVENTORY_PATH) and a mounted SSH private key (SSH_FLEET_KEY_PATH). Optional settings include SSH_FLEET_TRANSPORT, SSH_FLEET_CMD_TIMEOUT_SECONDS, SSH_FLEET_OUTPUT_CAP_BYTES, SSH_FLEET_PROBE_CONCURRENCY and SSH_FLEET_PROBE_MAX_HOSTS. Network access to the target hosts is required.
Before you install
ssh_exec executes arbitrary commands on inventory hosts and is classified write-external; the server does not enforce approval or RBAC, so access gating must be done in the MCP client. The SSH private key is read from SSH_FLEET_KEY_PATH and should be mounted read-only. SSH_FLEET_AUTH_TOKEN is an optional bearer token for the http/sse transports only. Host-key verification is TOFU, so a first connection is not pinned in advance.

Installation

In SourceWeft

  1. Open SSH Fleet in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

mcp-ssh-fleet

English | Русский

[Version] [MCP Registry] [Container] [Build] [Go Version] [Go Report Card] [License: MIT] [Issues] [Last Commit]

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)

sh
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

sh
make test        # unit tests + e2e against a real in-process SSH servermake vetmake vulncheckmake buildmake docker

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

Source: README.md at commit 4536421

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.1.5LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts