SSH MCP server - execute commands and transfer files on remote servers via MCP
ssh-mcp defines 8 tools with consistent naming patterns (verb_noun format), but exhibits significant gaps in schema rigor and error handling. All tools have descriptions and input schemas, but parameter descriptions lack depth and constraint specification. Output schemas are not documented. Tools follow a clear naming convention (execute-command, upload, download, list-servers, server-status, list-remote, dir-sync, port-forward) that correctly starts with action verbs. However, parameters like 'command' in execute-command lack detail about escaping, allowed commands, or failure modes. The 'direction' enum in dir-sync is properly constrained, but other string parameters lack enums or format specifications. No evidence of pagination support for list-servers or list-remote despite potential large results. Error handling delegates to errorResult() helper but provides no recovery guidance in tool descriptions.
Synchronize a local directory with a remote directory via SFTP
Download a file from a remote server to local filesystem via SFTP
Execute a command on a remote server and return stdout/stderr
List files and directories on a remote server
List all configured SSH servers with their connection status.
Set up port forwarding to a remote server
Collect system status (hostname, OS, CPU, memory, disk, GPUs, processes, services) from a remote server via a single batched SSH command.
Upload a local file to a remote server via SFTP
Missing output schema documentation. Tools like execute-command, upload, download, and server-status have no visible documentation of their return types. LLMs cannot plan chained calls without knowing what fields to expect.
Parameter descriptions lack constraint specification. 'command' in execute-command does not document escaping rules, forbidden commands, or timeout behavior. 'remotePath' and 'localPath' lack format specifications or security warnings about path traversal.
No pagination or result limiting documented. list-servers and list-remote lack limit/offset parameters and could return unbounded results, exhausting context windows. No documentation of result caps.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | <=2025-11-25 | v2 |
Error handling provides no recovery guidance. errorResult() wraps errors but tool descriptions do not document what errors are possible, how to recover, or whether errors are retryable. No examples of actionable error messages.
Destructive tools (execute-command, upload, dir-sync) lack confirmation/dry-run guidance. No mention in descriptions of risks, confirmation steps, or undo capabilities. execute-command could delete files with no warning.
No scope or permission declarations in tool definitions. No documentation of what SSH credentials or permissions each tool requires, limiting least-privilege configuration.
connectionName parameter appears on all tools but lacks guidance on default server selection. Description says 'Defaults to the first server' but does not explain how to discover server names or handle missing servers.
port-forward description lacks detail on port binding requirements, firewall rules, and tunnel lifecycle. Unclear whether ports remain bound after tool returns or require explicit shutdown.