SSH remote execution and host management server exposing tools for command execution, file transfer, host management, credentials, monitoring, and templates via FastMCP (HTTP/SSE transport).
Server has 29 tools with mostly complete schemas and descriptions. Naming follows verb_noun convention well (list_hosts, add_host, run_command). Descriptions average ~80-120 chars, meeting baseline. However, critical gaps exist: no output schemas documented for any tool, error handling lacks recovery guidance, and several tools combine multiple concerns (run_command_multi, health_check). Security concerns: credentials passed as parameters in save_credential tool, no permission gates on destructive operations (delete_credential, clear_exec_log, remove_host). Monitoring tools (start_monitoring, stop_monitoring) lack timeout/cancellation semantics. Tool composition issues: expand_template conflates lookup+execution; ai_analyze requires external Ollama dependency not validated upfront.
Add a new host to vms.yaml.
Add a new command template to vms.yaml.
Analyze command output using a local Ollama LLM. Requires Ollama running locally. Returns analysis and recommendations.
List all stored credentials (ip and user only, no passwords) for audit purposes.
Check if a credential is stored for a host (does not return the password).
Clear all execution log entries.
Get command execution history for a host or all hosts. Returns last N commands with timestamps and exit codes.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., what fields does health_check return? what structure does run_command_multi use for per-host results?). This violates pattern:tool and pattern:response-shaper.
Credentials passed as tool parameters (save_credential accepts 'password' param). Credentials in params leak into logs and prompt history. Must use server-side secret injection via environment variables or vault. Violates pattern:secret-injection.
Destructive operations lack permission gates and confirmation steps. delete_credential, clear_exec_log, remove_host, remove_template can be called without authorization checks or dry-run confirmation. Agents can accidentally destroy data. Violates pattern:permission-gate and pattern:confirmation-request.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Delete a stored credential for a host.
Download a file from a host via SFTP. Auto-appends to exec.log on completion.
Expand a template by name and run it on a host. Returns the command output.
Export execution log to CSV or JSON format.
Perform a comprehensive health check on all hosts: ping, SSH connectivity, disk space, memory, and system load. Returns a markdown report.
Bulk import hosts from CSV or JSON content. CSV requires header row with columns: project,alias,ip,port,user,env,zone,tags,auth. JSON requires array of host objects with at minimum 'project', 'alias', 'ip'. Returns a summary of added vs skipped (duplicate alias) hosts.
List all hosts from vms.yaml grouped by project as a markdown table.
List all command templates from vms.yaml with their descriptions.
Get the current status of monitoring: which hosts are being monitored, interval, and latest metrics.
Check if Ollama is running and list available models.
Check reachability of hosts by alias using TCP connect to each host's SSH port. Returns status for each host (up/down). Uses parallel execution.
Read execution log entries. Returns the last N entries (default 100) as JSON.
Remove a host from vms.yaml. Set also_delete_credential=True to also delete the stored password.
Remove a command template from vms.yaml.
Run a shell command on a single host via SSH. Returns stdout, stderr, exit code, and elapsed time. Auto-appends to exec.log. Set force=True to bypass the destructive command guard.
Run a shell command on multiple hosts in parallel. Returns results for each host with stdout, stderr, exit code, and elapsed time. Auto-appends to exec.log for each host.
Encrypt and store a password for a host. Credentials are stored in encrypted form and never logged.
Save command output to a file in the data/output directory for later retrieval.
Start continuous monitoring of specified hosts. Collects metrics (CPU, memory, disk, network) at regular intervals. Sends alerts via webhook when thresholds are exceeded.
Stop monitoring of specified hosts or all hosts if no aliases provided.
Update a single field of an existing host in vms.yaml. Supported fields: ip, port, user, env, zone, auth, keyFile, timeout, tags. For tags, pass comma-separated values: "kubernetes, database"
Upload a file to a host via SFTP. Auto-appends to exec.log on completion.
expand_template combines two concerns: template lookup and command execution. Should split into get_template (returns template text) and run_command (executes). Current design prevents agents from inspecting templates before execution. Violates pattern:tool (single responsibility).
ai_analyze and ollama_status depend on external Ollama service but do not validate availability upfront or provide fallback guidance. If Ollama is down, ai_analyze fails with no recovery hint. Error handling lacks pattern:recovery-guide.