SSH Fleet
Curated ssh_probe diagnostics and single-host ssh_exec over an allowlisted SSH fleet.
Que pouvez-vous faire avec SSH Fleet ?
ssh_probe(tags, check)— curated read-only diagnostics on every hostssh_exec(host, command)— one arbitrary non-interactive command on ONE
Installation
Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).
ghcr.io/inhuman/mcp-ssh-fleet:0.1.5claude 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
{
"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>"
}
}
}
}
Variables d'environnement
SSH_FLEET_TRANSPORTMCP transport. Must be 'stdio' for direct docker/stdio use.SSH_FLEET_CMD_TIMEOUT_SECONDSPer-host command timeout in seconds (1..600).SSH_FLEET_OUTPUT_CAP_BYTESCap on output bytes per host section (>=256).SSH_FLEET_PROBE_CONCURRENCYParallelism for ssh_probe.SSH_FLEET_PROBE_MAX_HOSTSSafety cap on the number of hosts in one probe.SSH_FLEET_AUTH_TOKENsecret Optional X-MCP-AUTH bearer token (only used by the http/sse transports).
Documentation
Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.
Sommaire
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).checkis 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)
| Variable | Default | Meaning | ||
|---|---|---|---|---|
SSH_FLEET_TRANSPORT | http | http (StreamableHTTP, endpoint /mcp) \ | sse \ | stdio |
SSH_FLEET_ADDR | :8080 | listen address for http/sse | ||
SSH_FLEET_AUTH_TOKEN | — | optional X-MCP-AUTH token | ||
SSH_FLEET_INVENTORY_PATH | /etc/ssh-fleet/inventory.yaml | path to the inventory (configmap) | ||
SSH_FLEET_KEY_PATH | /etc/ssh-fleet/id_ed25519 | path to the private key (secret) | ||
SSH_FLEET_OUTPUT_CAP_BYTES | 8192 | output cap per section | ||
SSH_FLEET_CMD_TIMEOUT_SECONDS | 20 | per-host timeout | ||
SSH_FLEET_PROBE_CONCURRENCY | 8 | probe parallelism pool | ||
SSH_FLEET_PROBE_MAX_HOSTS | 50 | safety 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_probeisread-only(curated checks only) and can be granted broadly.ssh_execis 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.
Questions fréquentes
Qu'est-ce que SSH Fleet ?
Curated ssh_probe diagnostics and single-host ssh_exec over an allowlisted SSH fleet.
Comment installer SSH Fleet ?
Il s'exécute sur votre machine. Dans 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. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.
Faut-il une clé API pour SSH Fleet ?
Oui. Il attend SSH_FLEET_AUTH_TOKEN, à renseigner dans sa configuration.
SSH Fleet est-il open source ?
Oui. Son code est sur GitHub sous licence MIT.
Qui maintient SSH Fleet ?
Il est publié par inhuman. AI.tn le référence sans le maintenir ni le recommander.
Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.