mcp-ssh-fleet
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 |
|
|
|
|
| listen address for http/sse |
| — | optional |
|
| path to the inventory (configmap) |
|
| path to the private key (secret) |
|
| output cap per section |
|
| per-host timeout |
|
| probe parallelism pool |
|
| 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:latestThis 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 dockerRelease: tag vX.Y.Z → GitHub Actions builds and publishes a multi-arch image
to ghcr.io/inhuman/mcp-ssh-fleet.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/inhuman/mcp-ssh-fleet'
If you have feedback or need assistance with the MCP directory API, please join our Discord server