MCP server for remote SSH command execution with interactive terminal support via tmux
Server has 8 well-named tools with complete input schemas and descriptions. Tool names follow verb_noun convention (list_*, open_*, execute_*, get_*, close_*). Descriptions are detailed (100-300 chars) and include usage guidance. However, output schemas are not documented, LLMs cannot predict response structure for downstream chaining. Parameter descriptions are present but lack format constraints (e.g., session_name regex, command validation rules). execute_command includes critical safety guidance for agents but lacks structured error recovery hints. No pagination support documented for list tools. Missing per-tool risk annotations (readOnlyHint, destructiveHint, idempotentHint).
Closes an SSH connection and terminates the tmux session. Call this when you're done working with a remote server to clean up resources. The log file is preserved for later review if needed. Any running commands in this session will be terminated.
Executes a command on a remote server via SSH. The command is sent to the terminal immediately and this function returns right away. To see the command output and check if it has completed, use get_terminal_output after a reasonable wait time. Look for the command prompt (e.g., '$', '#', or your custom prompt) to return in the output, which indicates the command has finished - just like a human would do when working in a terminal. **IMPORTANT INSTRUCTION FOR AI AGENTS:** Before executing any command that might modify the filesystem, change system configuration, install/remove software, restart services, or perform any other state-changing operation, you MUST ask the user for explicit confirmation. Only proceed after receiving clear user approval. Read-only operations can be executed without confirmation. When in doubt about whether a command is safe, ask for confirmation first.
Retrieves server-specific information and instructions for a connection configuration. Use this after opening a connection to learn about server-specific procedures, commands, and important information. The information applies to all sessions for this server configuration, so you only need to call it once per server configuration.
Captures the current visible terminal output (like taking a screenshot of the terminal). Use this after executing a command to see the output and check if the command has completed. Look for the command prompt returning (e.g., '$', '#') to confirm the command finished. This is the primary way to retrieve command results and monitor command execution.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects) for list_available_configs, open_connection, list_connections, get_terminal_output, get_server_info. This breaks tool chaining, agent cannot extract session_id or connection details for downstream calls.
Parameter constraints missing. session_name accepts 'alphanumeric, underscores, hyphens only' per description, but no regex pattern or minLength/maxLength in schema. command parameter has no length limit or injection guards documented. LLMs cannot validate inputs before sending.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). execute_command is IRREVERSIBLE but lacks destructiveHint. open_connection and close_connection lack idempotentHint clarity. LLMs cannot reason about retry safety or side effects without explicit annotations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Sends Ctrl+C signal to the remote terminal to interrupt a running command. Use this when a command is taking too long or appears stuck. The function returns immediately after sending the signal - wait a moment (1-2 seconds) then check get_terminal_output to verify the command was interrupted.
Lists all available SSH server configurations that you can connect to. Use this to discover what remote servers are available before opening a connection. Returns connection names, hosts, and descriptions for each configured server.
Lists all currently active SSH sessions. Shows session names, connection details, and status for each session. Use this to see what connections you have open and their current state.
Opens a new SSH connection to a remote server and creates a persistent tmux session for it. You must provide a connection_config_name (from list_available_configs) and a unique session_name. The session will remain active until you explicitly close it. Use the session_name to execute commands and manage this connection. After successfully opening a connection, check if the server has additional information by calling get_server_info with the connection_config_name.
Error handling lacks recovery guidance. No documented error cases, retryability, or next-step hints. If execute_command fails (timeout, permission denied, command not found), LLM has no guidance on whether to retry, ask user, or abort.
No pagination or result limits documented. list_available_configs and list_connections may return unbounded lists. If 1000 configs exist, returning all wastes tokens and risks context exhaustion. No limit, offset, or cursor parameters.