MCP server giving AI assistants SSH access to run commands, transfer files, and manage server fleets
SSH MCP has 6 tools with basic naming and minimal descriptions. Tool names follow verb_noun convention (list_*, execute*, upload_file, download_file), which is good. However, descriptions are extremely terse (10-40 chars), providing almost no context for LLM selection. Parameters have type definitions but lack descriptions entirely, LLMs cannot infer what 'server', 'group', 'command', 'local_path', 'remote_path' mean without explicit guidance. No output schemas are documented. Error handling is not visible in the provided code. The execute and execute_on_group tools lack critical safety documentation (are they idempotent? do they support dry-run?). No pagination, no result limits, no recovery guidance.
Download via SFTP
Run command on single server
Run command on multiple servers in parallel
Show server groups
Show configured servers
Upload via SFTP
Parameter descriptions completely missing. 'server', 'command', 'group', 'local_path', 'remote_path' have no descriptions. LLMs cannot infer whether 'server' is a hostname, IP, or config alias; whether 'command' supports pipes/redirects; or whether paths are absolute/relative.
Tool descriptions are 10 - 40 characters, far below the 50 - 200 char baseline for LLM-optimized descriptions. 'Show configured servers' and 'Run command on single server' lack context for when to use each tool vs alternatives, what they return, and any prerequisites.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields (e.g., does list_servers return server_id, hostname, status?). No pagination, result limits, or total counts visible.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 44 | <=2025-11-25 | v2 |
Destructive tools (execute, execute_on_group, upload_file, download_file) lack safety documentation. No mention of idempotency, dry-run support, confirmation steps, or rollback guidance. Agents cannot safely retry on ambiguous failures.
No error handling guidance visible. No recovery hints (e.g., 'Server not found. Call list_servers() to see available servers'). LLMs cannot self-correct on failures.