Two tools with basic schemas and descriptions, but significant gaps in parameter descriptions, output documentation, error handling, and security. Tool naming follows verb_noun convention (good), but parameters expose credentials as direct parameters (critical security flaw per pattern:secret-injection). Descriptions are present but generic and lack action guidance. No output schemas documented. Error handling returns unstructured text without recovery guidance. Input schemas exist for both tools with type definitions, but parameter descriptions are minimal (1-2 words). Missing: idempotency guarantees, pagination, batch operations, actionable error messages, and permission gating for destructive operations.
Tools (2)
new-ssh-connectionwriteauthsource verified46/100
Create a new ssh connection to a server
run-safe-commandwriteauthsource verified50/100
Run a safe command on the server through an ssh connection, if the command is unsafe it will not be run
CRITICAL: Credentials (password) exposed as tool parameter. Must never appear in tool params, use server-side secret injection via environment variables or vault. Agent traces log every parameter; secrets in params leak into logs and prompt history.
Parameter descriptions are too generic (1-2 words: 'Host of the server', 'Port of the server'). LLMs cannot infer parameter meaning from these minimal descriptions. Add format constraints, ranges, examples of valid values, and dependency hints.
No output schema documented for either tool. LLMs cannot plan downstream operations or extract structured data without knowing the response shape. Document what fields are returned, their types, and whether responses are paginated.
new-ssh-connectionrun-safe-command
Recommendations
URGENT: Remove 'password' from new-ssh-connection parameters. Inject SSH credentials via environment variables (SSH_PASSWORD, SSH_KEY_PATH) or a secure vault. Pass only non-sensitive identifiers (host, port, username) as parameters.
Expand tool descriptions to 100-300 characters. Example for new-ssh-connection: 'Establish an SSH connection to a remote server. Returns connection status and connection ID for use with subsequent commands. Requires valid credentials loaded via server configuration. Note: Connection persists until explicitly closed.'
Add parameter constraints: port range 1-65535 with default 22, username min 1 char, host non-empty hostname/IP. Validate inputs and return 'Invalid port: must be 1-65535; got {port}' on failure.
Document output schema for both tools. Example for new-ssh-connection: {connection_id: string, host: string, username: string, status: 'connected'|'failed', message: string}. Example for run-safe-command: {exit_code: number, stdout: string, stderr: string, execution_time_ms: number}.
Replace unstructured error responses with structured errors. Include: error_code (e.g. 'SSH_AUTH_FAILED'), category ('retryable'|'user-fixable'|'fatal'), message, and recovery hint. Example: {error_code: 'SSH_AUTH_FAILED', category: 'user-fixable', message: 'Authentication failed for user@host:22', hint: 'Check credentials and firewall rules. Verify SSH service is running on the target host.'}
Add explicit permission gates for run-safe-command. Example: check a server-side ACL before execution. Return {error: 'Permission denied', required_permission: 'execute:ssh:commands'} if the calling agent lacks authority.
Error responses are unstructured text ('SSH connection to {host} failed: {err.message}', 'Command execution rejected...') without recovery guidance. LLMs need actionable errors: category (retryable/user-fixable/fatal), what went wrong, and what to try next.
run-safe-command accepts arbitrary commands and relies on an external Ollama LLM (llama2) for safety validation. No permission gating, no audit trail of executed commands, no rate limiting. A compromised agent or malicious prompt can bypass 'safe' classification and execute destructive commands.
No idempotency guarantees. If new-ssh-connection is retried after a transient error, it will create duplicate connections. If run-safe-command is retried, the same command executes twice. Agents retry on ambiguous failures, non-idempotent tools risk duplicate side effects.
No input validation. 'port' is a number with no range (0-65535). 'command' is a free string with no format constraints. LLMs can pass invalid ports or malformed commands without any early validation or actionable error feedback.
Tool descriptions lack context for selection. 'Create a new ssh connection' and 'Run a safe command' do not explain WHEN to use each tool, what prerequisites exist, or what happens on failure. LLMs cannot distinguish between similar tools without explicit action guidance.
No audit trail or logging of tool invocations. There is client-side logging to a file, but no structured audit log of: who called what tool, with which parameters, at what time, and what happened. This violates compliance and debugging requirements.
Tool descriptions are only 47-99 characters. Rubric baseline for tool descriptions is 194 chars (p10=34, p90=392). These descriptions are at the low end, insufficient for LLM-driven selection and action planning.
new-ssh-connectionrun-safe-command
Implement command logging and audit trail. Log every execution: {timestamp, agent_id, command, safety_check_result, exit_code, duration_ms}. Store in a queryable format (database, syslog, or structured JSON) for compliance and debugging.
Add idempotency support for new-ssh-connection via a connection_id or reuse-existing flag. Document that repeated calls with the same parameters reuse the existing connection rather than creating duplicates.
For run-safe-command, document the safety validation model: which LLM, which policy file, fallback behavior if Ollama is unavailable. Add a dry-run parameter to preview command output without side effects.
Add dependency documentation. Example for run-safe-command: 'Requires an active SSH connection created by new-ssh-connection first. Provide connection_id as a parameter.'
Expand parameter descriptions. Example: 'host: Remote server hostname or IP address (e.g. 192.168.1.10 or example.com).' Example: 'port: SSH service port on the remote server (default 22, range 1-65535).' Example: 'username: SSH login username (min 1 character, no spaces).'
Add tool annotations (readOnlyHint, destructiveHint, idempotentHint) where applicable. Mark run-safe-command as potentially destructive and indicate whether it is idempotent after first execution.