Skip to main content
Glama
quanticsoul4772

Windows CLI MCP Server

Windows CLI MCP Server

NOTE

This is a fork of the originalwin-cli-mcp-server by Simon Benedict. This fork includes additional security fixes, API improvements, and new tools for enhanced functionality.

NOTE

v0.3.0 - Active development with security improvements and enhanced stability.

MCP server for secure command-line interactions on Windows systems, enabling controlled access to PowerShell, CMD, Git Bash shells, and remote systems via SSH. It allows MCP clients (like Claude Desktop) to perform operations on your system.

What's New in v0.3.0

New Capabilities:

  • SFTP file transfer operations (upload, download, list, delete)

  • WSL path support for SFTP tools (converts /mnt/c/ and \wsl.localhost\ paths)

  • Background job execution with streaming output

  • Batch command execution

  • System monitoring (CPU usage, disk space)

  • Network diagnostics (DNS lookup, connectivity testing)

  • Environment variable access with security filtering

  • Configuration value retrieval

Security Improvements:

  • Fixed path traversal, command injection, and race condition vulnerabilities

  • SSH host key verification with Trust On First Use (TOFU)

  • Error message sanitization

  • Remote shell type auto-detection with validation

  • Connection pool limits with automatic cleanup

  • Secure configuration merge that preserves security settings

IMPORTANT

This MCP server provides direct access to your system's command line interface and remote systems via SSH. When enabled, it grants access to your files, environment variables, command execution capabilities, and remote server management. Review and restrict allowed paths and SSH connections, enable directory restrictions, and configure command blocks. SeeConfiguration for details.

Related MCP server: SSH-PowerShell MCP Server

Features

  • Multi-shell support: Execute commands in PowerShell, Command Prompt (CMD), and Git Bash

  • SSH support: Execute commands on remote systems via SSH

  • Resource exposure: View SSH connections, current directory, and configuration as MCP resources

  • Security controls:

    • SSH host key verification (prevents MITM attacks)

    • Command and SSH command blocking (full paths, case variations)

    • Working directory validation

    • Maximum command length limits

    • Command logging and history tracking

    • Smart argument validation

  • Configurable:

    • Custom security rules

    • Shell-specific settings

    • SSH connection profiles

    • Path restrictions

    • Blocked command lists

See the API section for details on the tools and resources the server provides to MCP clients.

Note: The server will only allow operations within configured directories, with allowed commands, and on configured SSH connections.

Architecture

The server uses a layered architecture with dependency injection for maintainability and testability:

Foundation Layer:

  • ServiceContainer: Lightweight dependency injection with singleton, transient, and instance lifecycles

  • ToolRegistry: Manages tool registration, discovery, and execution

Service Layer:

  • ConfigManager: Configuration loading and validation

  • SecurityManager: Multi-stage command validation pipeline

  • CommandExecutor: Process spawning and timeout management

  • HistoryManager: Command history tracking with size limits

  • EnvironmentManager: Secure environment variable access with blocklist/allowlist

  • JobManager: Background job execution with lifecycle management

  • SSHConnectionPool: SSH connection management with LRU eviction

Presentation Layer:

  • 34 MCP tools organized by category (command execution, SSH operations, diagnostics, system info)

  • All tools extend BaseTool abstract class

  • Tools use dependency injection to access services

This architecture provides separation of concerns, making the codebase easier to maintain and extend. For detailed architecture documentation, see CLAUDE.md.

Usage with Claude Desktop

Add this to your claude_desktop_config.json:

{
  "mcpServers": {
    "windows-cli": {
      "command": "npx",
      "args": ["-y", "@quanticsoul4772/mcp-server-win-cli"]
    }
  }
}

For use with a specific config file, add the --config flag:

{
  "mcpServers": {
    "windows-cli": {
      "command": "npx",
      "args": [
        "-y",
        "@quanticsoul4772/mcp-server-win-cli",
        "--config",
        "path/to/your/config.json"
      ]
    }
  }
}

After configuring, you can:

  • Execute commands directly using the available tools

  • View configured SSH connections and server configuration in the Resources section

  • Manage SSH connections through the provided tools

Configuration

The server uses a JSON configuration file to customize its behavior. You can specify settings for security controls, shell configurations, and SSH connections.

  1. To create a default config file, either:

a) copy config.json.example to config.json, or

b) run:

npx @quanticsoul4772/mcp-server-win-cli --init-config ./config.json
  1. Then set the --config flag to point to your config file as described in the Usage with Claude Desktop section.

Configuration Locations

The server looks for configuration in the following locations (in order):

  1. Path specified by --config flag

  2. ./config.json in current directory

  3. ~/.win-cli-mcp/config.json in user's home directory

If no configuration file is found, the server will use a default (restricted) configuration:

Default Configuration

Note: The default configuration is designed to be restrictive and secure. Find more details on each setting in the Configuration Settings section.

{
  "security": {
    "maxCommandLength": 2000,
    "blockedCommands": [
      "rm",
      "del",
      "rmdir",
      "format",
      "shutdown",
      "restart",
      "reg",
      "regedit",
      "net",
      "netsh",
      "takeown",
      "icacls"
    ],
    "blockedArguments": [
      "--exec",
      "-e",
      "/c",
      "-enc",
      "-encodedcommand",
      "-command",
      "--interactive",
      "-i",
      "--login",
      "--system"
    ],
    "allowedPaths": ["User's home directory", "Current working directory"],
    "restrictWorkingDirectory": true,
    "logCommands": true,
    "maxHistorySize": 1000,
    "commandTimeout": 30
  },
  "shells": {
    "powershell": {
      "enabled": true,
      "command": "powershell.exe",
      "args": ["-NoProfile", "-NonInteractive", "-Command"],
      "blockedOperators": ["&", "|", ";", "`"]
    },
    "cmd": {
      "enabled": true,
      "command": "cmd.exe",
      "args": ["/c"],
      "blockedOperators": ["&", "|", ";", "`"]
    },
    "gitbash": {
      "enabled": true,
      "command": "C:\\Program Files\\Git\\bin\\bash.exe",
      "args": ["-c"],
      "blockedOperators": ["&", "|", ";", "`"]
    }
  },
  "ssh": {
    "enabled": false,
    "defaultTimeout": 30,
    "maxConcurrentSessions": 5,
    "keepaliveInterval": 10000,
    "keepaliveCountMax": 3,
    "readyTimeout": 20000,
    "connections": {}
  }
}

Configuration Settings

The configuration file is divided into three main sections: security, shells, and ssh.

Security Settings

{
  "security": {
    // Maximum allowed length for any command
    "maxCommandLength": 1000,

    // Commands to block - blocks both direct use and full paths
    // Example: "rm" blocks both "rm" and "C:\\Windows\\System32\\rm.exe"
    // Case-insensitive: "del" blocks "DEL.EXE", "del.cmd", etc.
    "blockedCommands": [
      "rm", // Delete files
      "del", // Delete files
      "rmdir", // Delete directories
      "format", // Format disks
      "shutdown", // Shutdown system
      "restart", // Restart system
      "reg", // Registry editor
      "regedit", // Registry editor
      "net", // Network commands
      "netsh", // Network commands
      "takeown", // Take ownership of files
      "icacls" // Change file permissions
    ],

    // Arguments that will be blocked when used with any command
    // Note: Checks each argument independently - "cd warm_dir" won't be blocked just because "rm" is in blockedCommands
    "blockedArguments": [
      "--exec", // Execution flags
      "-e", // Short execution flags
      "/c", // Command execution in some shells
      "-enc", // PowerShell encoded commands
      "-encodedcommand", // PowerShell encoded commands
      "-command", // Direct PowerShell command execution
      "--interactive", // Interactive mode which might bypass restrictions
      "-i", // Short form of interactive
      "--login", // Login shells might have different permissions
      "--system" // System level operations
    ],

    // List of directories where commands can be executed
    "allowedPaths": ["C:\\Users\\YourUsername", "C:\\Projects"],

    // If true, commands can only run in allowedPaths
    "restrictWorkingDirectory": true,

    // If true, saves command history
    "logCommands": true,

    // Maximum number of commands to keep in history
    "maxHistorySize": 1000,

    // Timeout for command execution in seconds (default: 30)
    "commandTimeout": 30,

    // Environment variable security controls
    // Blocked patterns - variables matching these are blocked (default includes sensitive vars)
    "blockedEnvVars": [
      "AWS_SECRET_ACCESS_KEY",
      "PASSWORD",
      "API_KEY",
      "TOKEN",
      "SECRET",
      "PATH",           // Prevents PATH manipulation attacks
      "LD_PRELOAD"      // Prevents library injection attacks
    ],

    // Optional: If set, ONLY these variables can be modified (allowlist mode)
    // "allowedEnvVars": ["PYTHONIOENCODING", "PYTHONUTF8", "NODE_ENV"],

    // Maximum number of custom environment variables per command (default: 20)
    "maxCustomEnvVars": 20,

    // Maximum length of environment variable values (default: 32768)
    "maxEnvVarValueLength": 32768
  }
}

Shell Configuration

{
  "shells": {
    "powershell": {
      // Enable/disable this shell
      "enabled": true,
      // Path to shell executable
      "command": "powershell.exe",
      // Default arguments for the shell
      "args": ["-NoProfile", "-NonInteractive", "-Command"],
      // Optional: Specify which command operators to block
      "blockedOperators": ["&", "|", ";", "`"],  // Block all command chaining
      // Optional: Default environment variables for this shell
      "defaultEnv": {
        "PYTHONIOENCODING": "utf-8",
        "PYTHONUTF8": "1"
      }
    },
    "cmd": {
      "enabled": true,
      "command": "cmd.exe",
      "args": ["/c"],
      "blockedOperators": ["&", "|", ";", "`"]  // Block all command chaining
    },
    "gitbash": {
      "enabled": true,
      "command": "C:\\Program Files\\Git\\bin\\bash.exe",
      "args": ["-c"],
      "blockedOperators": ["&", "|", ";", "`"]  // Block all command chaining
    }
  }
}

WSL Path Support

The SFTP tools (sftp_download, sftp_upload) support downloading and uploading files to Windows Subsystem for Linux (WSL) paths:

Supported path formats:

  • \\wsl.localhost\Ubuntu\home\user\file - WSL network path (recommended)

  • \\wsl$\Ubuntu\home\user\file - WSL legacy network path

  • /home/user/file - Unix absolute path (uses default distribution)

  • /mnt/c/Users/user/file - WSL mount path format

Requirements:

  • WSL must be installed: wsl --install

  • At least one distribution must be configured

  • Include WSL paths in allowedPaths configuration

Example configuration:

{
  "security": {
    "allowedPaths": [
      "C:\\Users\\username",
      "\\\\wsl.localhost\\Ubuntu\\home\\username"
    ],
    "restrictWorkingDirectory": true
  }
}

Troubleshooting WSL paths:

  • If you get "WSL is not installed" error, run wsl --install and restart

  • If you get "Path not allowed" error, add the WSL path to allowedPaths

  • Use \\wsl.localhost\ paths for better compatibility with Windows tools

SSH Configuration

{
  "ssh": {
    // Enable/disable SSH functionality
    "enabled": false,

    // Default timeout for SSH commands in seconds
    "defaultTimeout": 30,

    // Maximum number of concurrent SSH sessions
    "maxConcurrentSessions": 5,

    // Interval for sending keepalive packets (in milliseconds)
    "keepaliveInterval": 10000,

    // Maximum number of failed keepalive attempts before disconnecting
    "keepaliveCountMax": 3,

    // Timeout for establishing SSH connections (in milliseconds)
    "readyTimeout": 20000,

    // Enable strict host key checking (recommended for security)
    // - true (default): Reject connections to unknown hosts (prevents MITM attacks)
    // - false: Use Trust On First Use (TOFU) - accept and store new host keys
    "strictHostKeyChecking": true,

    // SSH connection profiles
    "connections": {
      // NOTE: these examples are not set in the default config!
      // Example: Local Raspberry Pi
      "raspberry-pi": {
        "host": "raspberrypi.local", // Hostname or IP address
        "port": 22, // SSH port
        "username": "pi", // SSH username
        "password": "raspberry", // Password authentication (if not using key)
        "keepaliveInterval": 10000, // Override global keepaliveInterval
        "keepaliveCountMax": 3, // Override global keepaliveCountMax
        "readyTimeout": 20000 // Override global readyTimeout
      },
      // Example: Remote server with key authentication
      "dev-server": {
        "host": "dev.example.com",
        "port": 22,
        "username": "admin",
        "privateKeyPath": "C:\\Users\\YourUsername\\.ssh\\id_rsa", // Path to private key
        "keepaliveInterval": 10000,
        "keepaliveCountMax": 3,
        "readyTimeout": 20000
      }
    }
  }
}

API

Tools

The server provides 34 MCP tools organized into 4 categories:

Command Execution (6 tools)

  • execute_command - Execute a command in PowerShell, CMD, or Git Bash

  • read_command_history - Get history of executed commands with outputs and exit codes

  • start_background_job - Start a command as a background job (async execution)

  • get_job_status - Get status and metadata for a background job

  • get_job_output - Retrieve output from a background job with streaming support

  • execute_batch - Execute multiple commands sequentially with stop-on-error mode

SSH Operations (12 tools)

  • ssh_execute - Execute command on remote SSH host

  • ssh_disconnect - Close SSH connection

  • create_ssh_connection - Add new SSH connection to config

  • read_ssh_connections - List all configured SSH connections

  • update_ssh_connection - Modify existing SSH connection

  • delete_ssh_connection - Remove SSH connection from config

  • read_ssh_pool_status - Get SSH connection pool status and health

  • validate_ssh_connection - Test SSH config and connectivity

  • sftp_upload - Upload file to remote host via SFTP

  • sftp_download - Download file from remote host via SFTP

  • sftp_list_directory - List files/directories on remote host

  • sftp_delete - Delete file or directory on remote host

Diagnostics & Configuration (12 tools)

  • check_security_config - Inspect security rules (commands, paths, operators, limits, environment)

  • test_connection - Test shell connectivity and basic functionality

  • validate_command - Dry-run validation without execution

  • explain_exit_code - Get detailed explanation for exit codes

  • validate_config - Validate configuration file syntax

  • read_environment_variable - Read single environment variable (with security filtering)

  • list_environment_variables - List accessible environment variables

  • get_config_value - Get specific config value by dot notation path

  • reload_config - Validate and preview config reload

  • dns_lookup - Perform DNS lookups (A, AAAA, MX, TXT, NS, CNAME records)

  • test_connectivity - Test network connectivity with SSRF protection

System Info & Monitoring (4 tools)

  • read_current_directory - Get current working directory

  • get_cpu_usage - Get CPU usage with configurable sampling interval

  • get_disk_space - Get disk space for specific drives or all drives

  • list_processes - List running processes (disabled by default for security)

Resources

The server exposes 5 MCP resources for configuration and status monitoring:

  • ssh://{connectionId} - Individual SSH connection details (passwords masked)

  • ssh://config - Complete SSH configuration with all connections

  • cli://currentdir - Current working directory of the CLI server

  • cli://config - CLI server configuration (sensitive data excluded)

  • cli://background-jobs - Status of all background command execution jobs

Troubleshooting

This section covers common issues and their solutions when using the Windows CLI MCP Server.

Understanding Exit Codes

The server uses specific exit codes to indicate the result of command execution:

  • 0: Success - Command executed successfully

  • -1: Execution failure - Command failed to run, timed out, or encountered a process error

  • -2: Validation failure - Command was blocked by security rules before execution

When you see a non-zero exit code, check the error message to understand what went wrong.

Issue: "Command is blocked" or "Command contains blocked command"

Symptoms:

  • Command execution returns exit code -2

  • Error message: "Command contains blocked command: [command]"

  • Commands like del, rm, shutdown, or reg fail immediately

Cause: The command or one of its arguments matches an entry in the security.blockedCommands or security.blockedArguments list. The server blocks these commands to prevent potentially dangerous operations.

Solution:

  1. First, verify which commands are blocked using the diagnostic tool:

    {
      "tool": "check_security_config",
      "arguments": {
        "category": "commands"
      }
    }
  2. If you need to allow a specific command, create or edit your config.json:

    {
      "security": {
        "blockedCommands": [
          // Remove the command you want to allow from this list
          // Or create a minimal list with only commands you want to block
          "format",
          "shutdown",
          "reg",
          "regedit"
        ]
      }
    }
  3. Important: If you're using a custom config file, remember that the server uses secure merge logic:

    • Blocked commands and arguments use UNION: Both default blocks AND your custom blocks are combined

    • To completely override the defaults, you must explicitly list ONLY the commands you want to block

  4. Restart the MCP server after changing the configuration (restart Claude Desktop or your MCP client)

Prevention:

  • Review the Default Configuration section to understand which commands are blocked by default

  • Use the validate_command tool to test commands before running them

  • Consider using alternative commands (e.g., Remove-Item in PowerShell instead of rm)

Related Configuration: See Security Settings for details on blockedCommands and blockedArguments.

Issue: "Path not allowed" or "Working directory outside allowed paths"

Symptoms:

  • Command execution returns exit code -2

  • Error message: "Working directory is outside allowed paths"

  • Commands fail even though they seem safe

Cause: You're trying to execute a command in a directory that's not in the security.allowedPaths list, and security.restrictWorkingDirectory is set to true.

CRITICAL: Understanding Config Merge Behavior

The server uses a security-first merge strategy for allowedPaths:

  • allowedPaths uses INTERSECTION (not union!)

  • Only paths that appear in BOTH the default config AND your custom config are allowed

  • This prevents accidentally weakening security by adding overly broad paths

Example of INCORRECT configuration:

// DEFAULT CONFIG (implicit):
// allowedPaths: ["C:\\Users\\YourName", "C:\\Development\\Projects\\MCP\\project-root"]

// YOUR CONFIG:
{
  "security": {
    "allowedPaths": ["C:\\MyProjects"]  // This will BLOCK everything!
  }
}

// RESULT: Intersection = [] (empty!)
// No paths are allowed because there's no overlap!

Example of CORRECT configuration:

// DEFAULT CONFIG (implicit):
// allowedPaths: ["C:\\Users\\YourName", "C:\\Development\\Projects\\MCP\\project-root"]

// YOUR CONFIG:
{
  "security": {
    "allowedPaths": [
      "C:\\Users\\YourName",  // Keep defaults you want
      "C:\\Development\\Projects\\MCP\\project-root",  // Keep defaults you want
      "C:\\MyProjects"  // Add new paths
    ]
  }
}

// RESULT: All three paths are allowed

Solution:

  1. Check which paths are currently allowed:

    {
      "tool": "check_security_config",
      "arguments": {
        "category": "paths"
      }
    }
  2. Identify your current working directory:

    {
      "tool": "read_current_directory"
    }
  3. Update your config.json to include BOTH the defaults AND your new paths:

    {
      "security": {
        "allowedPaths": [
          "C:\\Users\\YourUsername",  // Include existing defaults!
          "C:\\Development\\Projects",  // Include existing defaults!
          "C:\\YourNewPath"  // Add your new path
        ],
        "restrictWorkingDirectory": true
      }
    }
  4. Alternative: Disable path restrictions entirely (NOT recommended for security):

    {
      "security": {
        "restrictWorkingDirectory": false
      }
    }
  5. Restart the MCP server

Prevention:

  • Always include existing allowed paths when adding new ones

  • Use absolute paths (e.g., C:\Users\Name not ~ or relative paths)

  • Test path validation before running important commands using validate_command

  • Use forward slashes / or escaped backslashes \\ in JSON config files

Related Configuration: See Security Settings for details on allowedPaths and restrictWorkingDirectory.

Issue: SSH Connection Failed

Symptoms:

  • ssh_execute or validate_ssh_connection returns an error

  • Error messages like "Connection refused", "Authentication failed", "Connection timeout", or "Host not found"

  • SSH commands work from terminal but fail through MCP

Common Causes:

  1. Network/Firewall Issues:

    • Firewall blocking port 22 (or custom SSH port)

    • Host is unreachable or hostname resolution fails

    • VPN required but not connected

  2. Authentication Issues:

    • Incorrect username or password

    • Private key file not found or has wrong permissions

    • Private key requires passphrase (not supported)

    • SSH key not authorized on remote server

  3. Configuration Issues:

    • Wrong hostname or IP address

    • Wrong port number

    • SSH not enabled in server config

    • Connection ID doesn't exist

Solution:

  1. Verify SSH is enabled in your config:

    {
      "ssh": {
        "enabled": true,  // Must be true!
        "connections": {
          // Your connections here
        }
      }
    }
  2. Test the SSH connection configuration:

    {
      "tool": "validate_ssh_connection",
      "arguments": {
        "connectionConfig": {
          "host": "your-server.example.com",
          "port": 22,
          "username": "your-username",
          "password": "your-password"  // Or use privateKeyPath
        }
      }
    }
  3. For authentication failures:

    Password authentication:

    {
      "ssh": {
        "enabled": true,
        "connections": {
          "my-server": {
            "host": "server.example.com",
            "port": 22,
            "username": "admin",
            "password": "your-password"  // Ensure password is correct
          }
        }
      }
    }

    Key-based authentication:

    {
      "ssh": {
        "enabled": true,
        "connections": {
          "my-server": {
            "host": "server.example.com",
            "port": 22,
            "username": "admin",
            "privateKeyPath": "C:\\Users\\YourName\\.ssh\\id_rsa"  // Use full path
          }
        }
      }
    }

    Important for key authentication:

    • Ensure the private key file exists at the specified path

    • Private key must NOT require a passphrase (passphrase-protected keys are not supported)

    • Public key must be added to ~/.ssh/authorized_keys on the remote server

    • Private key file permissions should be restrictive (read-only for owner)

  4. For connection timeouts:

    • Increase timeout values in your config:

    {
      "ssh": {
        "enabled": true,
        "readyTimeout": 30000,  // 30 seconds to establish connection
        "connections": {
          "my-server": {
            "host": "server.example.com",
            "port": 22,
            "username": "admin",
            "password": "your-password",
            "readyTimeout": 60000  // Override global timeout for this connection
          }
        }
      }
    }
  5. Check connection pool status:

    {
      "tool": "read_ssh_pool_status"
    }
  6. Test from command line first:

    # Test if you can connect via standard SSH
    ssh username@server.example.com
    
    # Test specific port
    ssh -p 2222 username@server.example.com
  7. For "Host not found" errors:

    • Use IP address instead of hostname if DNS resolution is failing

    • Verify hostname is correct and accessible from your network

    • Check if VPN connection is required

Prevention:

  • Use validate_ssh_connection before adding connections to verify configuration

  • Test SSH access from command line before configuring in MCP

  • Use key-based authentication for better security (ensure keys don't require passphrase)

  • Keep connection credentials up to date

  • Monitor connection pool status if managing many SSH connections

Related Configuration: See SSH Configuration for details on SSH settings.

Issue: Command Times Out

Symptoms:

  • Command execution returns exit code -1

  • Error message: "Command execution timed out"

  • Long-running commands are killed before completion

Cause: The command took longer than the configured commandTimeout (default: 30 seconds) to complete.

Solution:

  1. For individual commands, override the timeout in the tool call:

    {
      "tool": "execute_command",
      "arguments": {
        "shell": "powershell",
        "command": "your-long-running-command",
        "timeout": 120  // 120 seconds for this command only
      }
    }
  2. For all commands, increase the default timeout in your config.json:

    {
      "security": {
        "commandTimeout": 120  // 120 seconds default for all commands
      }
    }
  3. For SSH commands, configure SSH-specific timeout:

    {
      "ssh": {
        "enabled": true,
        "defaultTimeout": 120,  // 120 seconds for all SSH commands
        "connections": {
          "slow-server": {
            "host": "server.example.com",
            "port": 22,
            "username": "admin",
            "password": "password"
            // This connection will use the defaultTimeout of 120 seconds
          }
        }
      }
    }
  4. Restart the MCP server after changing configuration

Prevention:

  • Set appropriate timeout values for your use case

  • Break long-running operations into smaller commands

  • Use background jobs or scheduled tasks for very long operations

  • Monitor command execution time using read_command_history

Using Custom Environment Variables

You can pass custom environment variables to commands for encoding, locale, or other settings:

{
  "tool": "execute_command",
  "arguments": {
    "shell": "powershell",
    "command": "python -c \"print('Hello 世界')\"",
    "env": {
      "PYTHONIOENCODING": "utf-8",
      "PYTHONUTF8": "1"
    }
  }
}

Security notes:

  • Sensitive variables (AWS keys, passwords, tokens) are blocked by default

  • PATH and LD_PRELOAD are blocked to prevent privilege escalation

  • Use check_security_config with "category": "environment" to see blocked variables

  • In allowlist mode, only explicitly allowed variables can be set

PowerShell Unicode Display Limitation:

PowerShell's default console encoding may not display Unicode characters correctly (showing ?? instead of emojis/special characters). This is a PowerShell console limitation, not a server issue - the environment variables ARE set correctly.

Workarounds:

  1. Use GitBash for Unicode-heavy workflows - it handles UTF-8 natively:

    {
      "shell": "gitbash",
      "command": "/c/path/to/python.exe -c \"import os; print(os.environ.get('MESSAGE'))\"",
      "env": { "MESSAGE": "Hello 世界 🎉", "PYTHONIOENCODING": "utf-8" }
    }
  2. Set PowerShell encoding at the start of your command:

    {
      "shell": "powershell",
      "command": "[Console]::OutputEncoding = [System.Text.Encoding]::UTF8; Write-Output $env:MESSAGE",
      "env": { "MESSAGE": "Hello 世界 🎉" }
    }
  3. Configure shell defaultEnv to always set UTF-8 encoding (see Shell Configuration)

Related Configuration: See Security Settings for commandTimeout and SSH Configuration for defaultTimeout.

Issue: Shell Operators Blocked (Pipes, Redirects, Command Chaining)

Symptoms:

  • Command execution returns exit code -2

  • Error message: "Command contains blocked operator: &" (or |, ;, >, <, etc.)

  • Commands with pipes, redirects, or command chaining fail

  • Error mentions Unicode variants or zero-width characters

Cause: The server blocks shell operators (&, |, ;, `, >, <, >>, 2>, 2>&1) and their Unicode homoglyphs to prevent command injection attacks. This is a security feature enabled by default.

Solution:

  1. For PowerShell users, use PowerShell cmdlets instead of pipes:

    # Instead of: dir | findstr "test"
    # Use: Get-ChildItem | Where-Object { $_.Name -like "*test*" }
    
    # Instead of: command1 && command2
    # Use: command1; if ($?) { command2 }
  2. For simple output redirection, capture output programmatically instead:

    • The MCP server already captures and returns stdout/stderr

    • Use read_command_history to review output from previous commands

  3. For complex operations, break into multiple separate commands:

    // Instead of one command with pipes:
    // "dir | findstr test > output.txt"
    
    // Execute as separate commands:
    // Command 1:
    {
      "tool": "execute_command",
      "arguments": {
        "shell": "powershell",
        "command": "Get-ChildItem | Where-Object { $_.Name -like '*test*' } | Out-String"
      }
    }
    // Then save the result programmatically if needed
  4. If you absolutely must use operators (NOT recommended for security):

    You can modify blocked operators per shell in your config.json:

    {
      "shells": {
        "powershell": {
          "enabled": true,
          "command": "powershell.exe",
          "args": ["-NoProfile", "-NonInteractive", "-Command"],
          "blockedOperators": [";", "`"]  // Only block some operators (RISKY!)
        }
      }
    }

    Warning: Removing operator blocks significantly increases security risk. Only do this if you fully understand the implications.

  5. Test before running:

    {
      "tool": "validate_command",
      "arguments": {
        "shell": "powershell",
        "command": "your-command-here"
      }
    }

Prevention:

  • Use PowerShell cmdlets and native command features instead of shell operators

  • Learn PowerShell piping syntax (|) which is safer within PowerShell context

  • Break complex operations into multiple commands

  • Understand that operator blocking is a critical security feature

Related Configuration: See Shell Configuration for blockedOperators setting.

Using Diagnostic Tools

The server provides built-in diagnostic tools to help troubleshoot issues:

validate_command - Test Commands Before Running

Validate a command without executing it to see if it would be blocked:

{
  "tool": "validate_command",
  "arguments": {
    "shell": "powershell",
    "command": "Remove-Item test.txt",
    "workingDir": "C:\\MyProjects"  // Optional
  }
}

Returns when valid:

{
  "valid": true,
  "shell": "powershell",
  "command": "Remove-Item test.txt",
  "workingDir": "C:\\MyProjects",
  "message": "Command passed all security validation stages"
}

Returns when invalid:

{
  "valid": false,
  "shell": "powershell",
  "command": "rm -rf /",
  "workingDir": "C:\\MyProjects",
  "reason": "Command contains blocked command: rm"
}

Use cases:

  • Test commands before running to avoid validation failures

  • Debug why specific commands are being blocked

  • Verify path and operator restrictions

  • Check command length limits

check_security_config - Inspect Security Rules

View current security configuration to understand what's blocked:

{
  "tool": "check_security_config",
  "arguments": {
    "category": "all"  // Options: "all", "commands", "paths", "operators", "limits"
  }
}

Categories:

  • "commands": Shows blocked commands and arguments

  • "paths": Shows allowed paths and directory restriction status

  • "operators": Shows blocked operators for each shell

  • "limits": Shows max command length and timeout settings

  • "all": Shows everything

Use cases:

  • Understand which commands are blocked and why

  • Verify allowed paths are configured correctly

  • Check timeout and length limits

  • Audit security configuration

read_command_history - Review Past Executions

Review command history to see exit codes and outputs:

{
  "tool": "read_command_history",
  "arguments": {
    "limit": 10  // Number of recent commands to retrieve
  }
}

Returns: Array of command history entries with:

  • command: The command that was executed

  • timestamp: When it was executed

  • output: Combined stdout/stderr

  • exitCode: Result code (0, -1, or -2)

Use cases:

  • Track which commands succeeded or failed

  • Identify patterns in command failures

  • Review command outputs for debugging

  • Monitor command execution over time

validate_ssh_connection - Test SSH Configuration

Test SSH connection configuration before using it:

{
  "tool": "validate_ssh_connection",
  "arguments": {
    "connectionConfig": {
      "host": "server.example.com",
      "port": 22,
      "username": "admin",
      "password": "your-password"  // Or use privateKeyPath
    }
  }
}

Returns:

  • isValid: Whether connection was successful

  • shellType: Detected shell type on remote server (bash, zsh, powershell, fish, etc.)

  • error: Error message if connection failed

Use cases:

  • Test SSH credentials before adding to config

  • Verify network connectivity to remote hosts

  • Detect remote shell type for compatibility

  • Debug SSH authentication issues

Getting Help

If you're still experiencing issues after trying these solutions:

  1. Check the command history to see exact error messages and exit codes

  2. Use diagnostic tools to validate your configuration and commands

  3. Review the configuration merge behavior - especially for allowedPaths (intersection) vs blockedCommands (union)

  4. Check the GitHub repository for known issues and updates: https://github.com/quanticsoul4772/win-cli-mcp-server

  5. Report bugs with:

    • Error messages and exit codes

    • Configuration file (sanitized - remove passwords!)

    • Steps to reproduce

    • Output from check_security_config diagnostic tool

License

This project is licensed under the MIT License - see the LICENSE file for details.

Available Tools

34 tools
check_security_configA

[Diagnostics] Get current security configuration including blocked commands, allowed paths, and restrictions. Use this to troubleshoot why commands are being blocked.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by configuration category (optional, default: all)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must convey behavioral traits. It indicates a read-only diagnostic operation ('Get current security configuration') with no mention of side effects, which is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, efficiently structured with a '[Diagnostics]' prefix. Every part adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one optional param, no output schema), the description fully covers purpose, usage, and output content. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single optional parameter (category) having enum and description. Description does not add extra meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get current security configuration' and specifies contents: 'blocked commands, allowed paths, and restrictions'. It distinguishes from sibling tools (like execute_command) by its diagnostic nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this to troubleshoot why commands are being blocked', giving a clear usage scenario. Does not mention when not to use, but provides sufficient guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_ssh_connectionC

[SSH Operations] Create a new SSH connection

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesID of the SSH connection
connectionConfigYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but only states the action. It does not disclose behavioral traits such as whether the connection is established immediately, failure handling, or side effects like credential storage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short and front-loaded, but it sacrifices necessary detail. It is concise but under-specified for a creation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of a nested object parameter and no output schema or annotations, the description is incomplete. It does not explain what happens after creation, how to use the connection, or error states.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool description adds no meaning beyond the input schema, which has 50% coverage. For instance, 'connectionId' is not explained as a user-defined identifier, and the schema already describes 'connectionConfig' fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Create a new SSH connection', which distinguishes it from sibling tools like 'delete_ssh_connection' and 'ssh_execute'. However, it lacks specificity about what 'creating' entails (e.g., persistent session or stored configuration).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'update_ssh_connection' or 'validate_ssh_connection'. There is no mention of prerequisites or typical workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_ssh_connectionB

[SSH Operations] Delete an existing SSH connection

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesID of the SSH connection to delete

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent. The description only states the action 'Delete' without explaining potential side effects, such as impact on active sessions or error conditions. The behavioral context is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with a category prefix. Every word is functional, and there is no wasted content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having only one parameter and no output schema, the description lacks important context about prerequisites (e.g., need to disconnect first) or consequences of deletion. It feels incomplete for a destructive operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with one parameter 'connectionId' already described. The tool description adds no further meaning beyond the schema, so baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb 'Delete' and the resource 'existing SSH connection'. It clearly distinguishes from sibling tools like create_ssh_connection and update_ssh_connection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like update_ssh_connection or ssh_disconnect. No preconditions or when-not-to-use are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dns_lookupA

[Diagnostics] Perform DNS lookup for hostname

Example usage:

{
  "hostname": "google.com",
  "record_type": "A",
  "timeout": 5000
}

Supported record types: A, AAAA, MX, TXT, NS, CNAME, ALL

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoTimeout in milliseconds (default: 5000, max: 10000)
hostnameYesHostname to lookup (e.g., "google.com")
record_typeNoDNS record type to query (default: A)A

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It mentions the timeout and record types but does not disclose network dependencies, potential delays, or permissions. It adds some context via example but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, well-structured with a clear example and list. Every part serves a purpose with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While parameters are well-covered, there is no output schema and the description does not explain what the tool returns (e.g., IP addresses for A records). This leaves incomplete information for an agent to know what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the descriptions in the schema already document parameters. The description adds a usage example and lists record types, but does not substantially enhance understanding beyond schema defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies the tool performs DNS lookup for a hostname, includes an example, and lists supported record types. It clearly distinguishes from sibling tools which are SSH or configuration related.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives like test_connection or test_connectivity. It lacks context for usage scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_batchA

[Command Execution] Execute multiple commands sequentially

Example usage:

{
  "shell": "powershell",
  "commands": [
    "cd C:\\project",
    "npm install",
    "npm run build"
  ],
  "stopOnError": true,
  "timeout": 300
}

Executes commands in order. If stopOnError=true, stops on first failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoCustom environment variables applied to all commands (optional)
shellYesShell to use for command execution
timeoutNoTimeout per command in seconds (default: 60)
commandsYesArray of commands to execute sequentially
stopOnErrorNoStop execution if a command fails (default: true)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must cover behavioral traits. It mentions sequential execution and stopOnError, but omits details on output handling, error reporting, or potential side effects (e.g., state changes). This is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a clear title-like line, an example, and a short sentence. It is front-loaded with the purpose. However, the example is somewhat lengthy and could be abbreviated without loss of clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and medium complexity (5 parameters, nested objects), the description lacks crucial details about return values, stdout/stderr handling, and how to retrieve command results. This omission leaves the agent underinformed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is documented. The description adds an example that contextualizes usage (e.g., shell, commands, stopOnError, timeout), but does not significantly enhance understanding beyond the schema. The 'env' parameter is missing from the example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes multiple commands sequentially, with an example demonstrating a typical use case. This distinguishes it from the sibling 'execute_command' which likely handles single commands.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for sequential batch execution but does not explicitly state when to use this tool versus alternatives like 'execute_command' or 'start_background_job'. No when-not or alternative guidance provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_commandA

[Command Execution] Execute a command in the specified shell (powershell, cmd, or gitbash)

Example usage (PowerShell):

{
  "shell": "powershell",
  "command": "Get-Process | Select-Object -First 5",
  "workingDir": "C:\\Users\\username"
}

Example usage with custom environment variables:

{
  "shell": "powershell",
  "command": "python -c \"print('Hello 世界')\"",
  "env": {
    "PYTHONIOENCODING": "utf-8",
    "PYTHONUTF8": "1"
  }
}

Example usage (CMD):

{
  "shell": "cmd",
  "command": "dir /b",
  "workingDir": "C:\\Projects"
}

Example usage (Git Bash):

{
  "shell": "gitbash",
  "command": "ls -la",
  "workingDir": "/c/Users/username"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
envNoCustom environment variables for command execution (optional). Example: {"PYTHONIOENCODING": "utf-8"}
shellYesShell to use for command execution
commandYesCommand to execute
timeoutNoCommand timeout in seconds (overrides config default)
workingDirNoWorking directory for command execution (optional)

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It does not mention side effects (e.g., file writes, process spawning), error handling, blocking vs. async execution, or permission requirements. The focus is on examples, not behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear purpose statement, followed by three well-structured examples. While somewhat lengthy, the examples are functional and demonstrate key usage scenarios. Could be slightly more concise by reducing example duplication.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description adequately covers how to use the tool but misses behavioral details (return format, error handling, async behavior). It is sufficient for basic usage but not fully complete for complex decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by providing concrete examples showing real usage patterns, including environment variable encoding and working directory paths. This helps the agent understand parameter usage beyond the basic schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a clear statement: 'Execute a command in the specified shell (powershell, cmd, or gitbash)'. This specific verb+resource combination distinguishes it from sibling tools like ssh_execute (remote) and validate_command (dry-run).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples implicitly show usage for local command execution across different shells, but no explicit when-to-use or when-not-to-use guidance is provided. Sibling names like ssh_execute and execute_batch hint at alternatives, but the description does not explicitly differentiate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_exit_codeA

[Diagnostics] Explain what an exit code means and how to resolve issues

ParametersJSON Schema
NameRequiredDescriptionDefault
exit_codeYesExit code to explain (e.g., 0, -1, -2, or process-specific codes)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must convey behavior fully. It clearly indicates a read-only, explanatory function without side effects. However, it does not mention any constraints (e.g., supported exit code ranges) or how resolution advice is generated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with a useful category tag '[Diagnostics]'. It is front-loaded and contains no filler, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description should hint at the response format (e.g., text, structured result). It does not, leaving the agent to guess. However, for a simple explanatory tool, this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers the single parameter fully (100%). The description adds examples like '0, -1, -2' and clarifies 'process-specific codes', which helps agents infer the expected input beyond the schema's type and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: explaining exit codes and providing resolution guidance. The '[Diagnostics]' prefix immediately categorizes it among siblings focused on execution and configuration, making its role distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when an exit code needs interpretation, but it does not explicitly state when to use this tool over alternatives or when not to use it. No exclusions or alternative tool references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_config_valueB

[Diagnostics] Get a specific configuration value by path (dot notation)

Example usage:

{
  "path": "security.maxCommandLength",
  "show_type": true
}

Examples:

  • "security.maxCommandLength"

  • "shells.powershell.enabled"

  • "ssh.strictHostKeyChecking"

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesConfiguration path in dot notation (e.g., "security.maxCommandLength")
show_typeNoInclude value type information (default: true)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It indicates a read operation ('Get') but omits any behavioral traits like required permissions or caching behavior. However, the tool is simple and unlikely to have side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: a tag line, one sentence, a code block example, and a bullet list. No superfluous text; every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter getter with no output schema, the description is nearly complete. It could mention return format, but examples provide sufficient context for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers both parameters fully (100% coverage). The description adds example paths, but doesn't provide meaning beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it gets a configuration value by dot notation. The '[Diagnostics]' tag provides context, but it doesn't explicitly differentiate from sibling tools like 'check_security_config' or 'validate_config'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. It lacks explicit when/when-not scenarios or comparisons with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cpu_usageA

[System Info] Get CPU usage percentage with configurable sampling interval

Example usage:

{
  "interval": 1000
}

Returns CPU usage percentage measured over the interval (default: 1 second).

ParametersJSON Schema
NameRequiredDescriptionDefault
intervalNoMeasurement interval in milliseconds (default: 1000, min: 100, max: 10000)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, but the description explains the behavior: it measures CPU usage over an interval and returns a percentage. It does not mention side effects or permissions, which is acceptable for a read-only system tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short, front-loaded with purpose, and includes a helpful example. It could be slightly more concise but is well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and a simple tool, the description adequately explains the return value and behavior. It could mention potential edge cases but is complete enough for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a description for the interval parameter. The description adds an example but does not provide additional semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get CPU usage percentage' with configurable interval, distinguishing it from sibling tools which are mostly SSH/command related.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is provided, but the description implies its purpose through the title and example.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_disk_spaceA

[System Info] Get disk space information for all drives or specific drive

Example usage:

{
  "drive": "C",
  "unit": "GB"
}

Returns disk space info (total, used, free) in specified units.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitNoUnit for disk space values (default: GB)GB
driveNoSpecific drive letter (e.g., "C", "D"). Omit for all drives.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states that the tool returns disk space info (total, used, free) but does not explicitly confirm it is read-only or disclose any potential side effects. The description is adequate but lacks explicit behavioral transparency beyond what is implied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using a single line of purpose, a code example, and a one-line output summary. The example is helpful but could be shortened. No unnecessary words; front-loaded with purpose. Slight room for improvement in integration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description outlines the return shape (total, used, free) but lacks details on key names, error behavior, or handling of invalid drives. It covers the main use case but is not exhaustive for a tool with potential edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining that omitting the 'drive' parameter returns all drives, and includes an example showing default unit 'GB'. This clarifies parameter usage beyond the schema's enum/type descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get disk space information for all drives or specific drive.' It uses a specific verb ('Get') and resource ('disk space information'), and distinguishes from siblings like get_cpu_usage or list_processes, which cover different system metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an example usage but does not explicitly state when to use this tool versus alternatives. However, given that sibling tools cover different domains (SSH, security, commands), the purpose is clear enough to infer appropriate usage. No explicit exclusion or alternative guidance is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_job_outputA

[Command Execution] Get output from a background job with streaming support

Example usage:

{
  "jobId": "job_1",
  "offset": 0
}

Returns job output. Use offset to get only new output since last call (streaming).

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesJob ID to query
offsetNoStart position in output (default: 0, for streaming use last totalSize)

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry full behavioral burden. It only states that output is returned and offset enables streaming, but lacks details on output persistence, error handling, or limits. For a read tool, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences plus an example code block. It front-loads the purpose and provides a clear example. Every element adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the basic operation and parameter usage, it lacks information about the return format (no output schema). It does not specify whether output is text, JSON, or other, leaving a gap for a tool that retrieves command output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the offset parameter's role in streaming beyond the schema's description, and provides an example usage, improving agent understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get output from a background job with streaming support', specifying the verb and resource. It distinguishes from siblings like get_job_status and execute_command by emphasizing output retrieval and streaming.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives guidance on using offset for streaming ('Use offset to get only new output since last call'). However, it does not provide explicit when-to-use or when-not-to-use relative to alternatives, such as when to call get_job_output vs get_job_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_job_statusA

[Command Execution] Get status and metadata for a background job

Example usage:

{
  "jobId": "job_1"
}

Returns job status, runtime, exit code, and output preview (first 500 chars).

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYesJob ID to query

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full burden. It discloses that the tool is read-only (get status) and returns specific data, but does not mention authorization needs, rate limits, or whether the job persists after retrieval. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise: a header, a one-line summary, an example, and a list of returned fields. Every sentence serves a purpose with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single parameter, no output schema, and no nested objects, the description covers the essential return information and example. It could be more complete by listing possible status values, but it is sufficient for typical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single parameter jobId, with schema description 'Job ID to query'. The description adds only an example, not additional semantic meaning beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get status and metadata for a background job' and lists specific return fields (status, runtime, exit code, output preview), making the tool's purpose unambiguous. It implicitly distinguishes from siblings like get_job_output (which returns full output) and start_background_job (which creates jobs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for checking background jobs started by start_background_job, but does not explicitly state when to use this tool versus alternatives like get_job_output. No exclusion or when-not guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_environment_variablesA

[Diagnostics] List all accessible environment variables with optional filtering

Example usage:

{
  "filter": "^PATH|^TEMP",
  "show_blocked_count": true,
  "category": "system"
}

Security:

  • Sensitive variables (API keys, passwords) automatically excluded

  • Case-insensitive filtering

  • Read-only access

ParametersJSON Schema
NameRequiredDescriptionDefault
filterNoRegex pattern to filter variable names (e.g., "^PATH|^TEMP")
categoryNoFilter by variable category (Windows-specific, default: all)all
show_blocked_countNoShow count of blocked variables (default: true)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses security exclusions, case-insensitive filtering, and read-only access. Could add more about output format or behavior with no results, but is transparent enough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with three clear sections: purpose statement, practical example, and security note. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 optional parameters and no output schema, description covers purpose, parameters, example, and security. Could specify return format (e.g., list of variable names and values) but is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, baseline 3. Description adds context: filter is regex, category is Windows-specific, show_blocked_count shows count of blocked variables. Example usage clarifies parameter interaction, adding value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all accessible environment variables with optional filtering. This distinguishes it from the sibling 'read_environment_variable' (singular), making purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when needing multiple variables with optional filtering and provides an example. It does not explicitly state when not to use or compare to alternatives, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_processesA

[System Info] List running processes (requires opt-in configuration)

Example usage:

{
  "filter": "chrome",
  "limit": 10,
  "sort_by": "cpu"
}

SECURITY: This tool is disabled by default. Process enumeration can be used for reconnaissance. To enable, add to config.json: { "security": { "allowProcessListing": true } }

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results (default: 10, max: 50)
filterNoFilter processes by name (partial match)
sort_byNoSort results by (default: cpu)cpu

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description discloses security implications (reconnaissance) and configuration requirements. It does not detail output format or side effects, but covers key behavioral traits adequately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently front-loaded with purpose, followed by a clear example and security note. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description omits return format but compensates with example usage and security setup instructions. It is largely complete but could specify that it returns a list of process details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All parameters are documented in the schema (100% coverage), and the description adds a concrete usage example showing how to use filter, limit, and sort_by together. This enhances understanding beyond the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List running processes' with a category tag, making the tool's purpose immediately obvious. It is distinct from sibling tools which focus on other system info or commands.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides context on when to use by noting it requires opt-in configuration and is disabled by default. However, it does not explicitly contrast with alternative tools or specify when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_command_historyA

[Command Execution] Get the history of executed commands

Example usage:

{
  "limit": 5
}

Example response:

[
  {
    "command": "Get-Process",
    "output": "...",
    "timestamp": "2024-03-20T10:30:00Z",
    "exitCode": 0
  }
]
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of history entries to return (default: 10, max: 1000)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description includes an example response showing output structure. However, it does not disclose important behavioral traits like ordering or persistence of history.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with purpose. The example usage aids understanding but could be considered slightly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without annotations or output schema, the description adequately covers the return format via example, but lacks context on ordering, persistence, and edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema covers 100% of parameters with a clear description for 'limit'. The description adds no additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get the history of executed commands', with a specific verb and resource. It is distinct from sibling tools like execute_command and validate_command.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use or not use this tool compared to alternatives; usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_current_directoryA

[System Info] Get the current working directory

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, and the description is minimal. It does not disclose any behavioral traits such as side effects or permissions, but for a simple read operation, the lack of detail is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that wastes no words. It delivers the necessary information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no output schema, the description completes its core task. However, it could hint at the output format, but overall it is sufficient for such a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and schema description coverage is 100% (trivially). The description adds no additional meaning beyond the schema, meeting the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get the current working directory' clearly states the specific verb and resource. It distinguishes from sibling tools like read_system_info or list_environment_variables by focusing on a single, concrete task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when/when-not guidance is provided. Usage is implied by the tool's simplicity, but compared to siblings like read_system_info, the description does not clarify when to choose this over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_environment_variableA

[Diagnostics] Read a single environment variable with security filtering

Example usage:

{
  "name": "PATH",
  "show_blocked_reason": true
}

Security:

  • Sensitive variables (API_KEY, PASSWORD, TOKEN, SECRET) are blocked

  • Case-insensitive variable name matching

  • Read-only access (no write operations)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the environment variable to read (case-insensitive)
show_blocked_reasonNoShow reason if variable is blocked (default: true)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description discloses read-only access, case-insensitive blocking of sensitive variables, and a reason option, adding value beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with purpose, includes an informative example, and each sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While it covers purpose and security, it does not describe the output format or return value, which is a gap given no output schema is provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description adds no extra parameter semantics beyond the example usage, which demonstrates the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads a single environment variable with security filtering, distinguishing it from list_environment_variables which lists all variables.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an example usage and security notes, but does not explicitly state when to use this tool versus list_environment_variables; however the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_ssh_connectionsA

[SSH Operations] Read all SSH connections

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. The wording 'Read' implies safe read-only operation, but it does not explicitly confirm non-destructive nature or other traits. Adequate for a simple read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, clear sentence with no unnecessary words. The [SSH Operations] tag provides grouping context without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and many sibling tools, the description could have explained return format or scope. It is minimally sufficient but lacks completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; baseline of 4 applies. Description adds no parameter info, but none is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states 'Read all SSH connections', which is a specific verb+resource and clearly distinguishes from create/delete/update siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like read_ssh_pool_status or other read tools; no exclusions or recommendations provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_ssh_pool_statusB

[SSH Operations] Get the status and health of the SSH connection pool

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description bears the full burden of disclosure. It only states that the tool gets status/health, implying a read-only operation, but does not elaborate on any behavioral traits such as authentication requirements, rate limits, or side effects. No destructive or idempotent hints are given.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no wasted words. The category tag '[SSH Operations]' provides useful context. It is concise and effectively front-loaded with the action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and annotations, the description is incomplete. It does not specify what format or fields the status/health output contains (e.g., JSON, connection counts, error states). For a tool that returns status, this omission limits an agent's ability to interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema description coverage is 100% by default. The description does not need to add parameter information since none exist. This meets the baseline for parameter semantics with no parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and clearly identifies the resource as 'status and health of the SSH connection pool'. It distinguishes this tool from sibling tools like 'create_ssh_connection' or 'test_connection' by focusing on pool-level health rather than individual connections or commands.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as 'test_connection' or 'read_ssh_connections'. It does not mention prerequisites, exclusions, or typical scenarios, leaving the agent to infer usage without any comparative context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_system_infoA

[Diagnostics] Get system information for troubleshooting

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and the description offers no behavioral details beyond being read-only. It could mention potential data volume or system-specific output.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, efficient, but could be better structured with explicit front-loading of purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks detail on what specific system information is returned (e.g., hostname, OS, uptime), leaving ambiguity despite zero parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and 100% schema coverage, the description adds no parameter info, but baseline 4 is appropriate as no extra documentation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves generic system information for troubleshooting, distinguishing it from more specific sibling tools like get_cpu_usage or get_disk_space.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for diagnostics but does not explicitly state when to use it versus alternatives or when to avoid it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reload_configA

[Diagnostics] Validate configuration file and preview reload (server restart required)

Example usage:

{
  "validate_before": true
}

Note: This tool validates the config file. To apply changes, restart the MCP server.

ParametersJSON Schema
NameRequiredDescriptionDefault
validate_beforeNoValidate config file before reloading (default: true)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses that a server restart is required and mentions validation and preview, but lacks details on side effects, what 'preview' means, or any safety info.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loaded with key info (purpose, restart requirement). The code example is arguably unnecessary but not harmful. Overall, it's efficient with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given low complexity and no output schema, the description is adequate but missing details about what the tool outputs during preview, error handling, or post-validation steps. It could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add additional meaning beyond the schema's description of the validate_before parameter, offering no extra semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool validates the configuration file and previews a reload, explicitly noting that a server restart is required. This is specific and distinguishes it from siblings like validate_config.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates the tool is for validation before restart, but does not explicitly contrast with validate_config or other siblings. The note about restart provides context, but guidance on when to use vs alternatives is implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sftp_deleteA

[SSH Operations] Delete file or directory on remote host via SFTP

Example usage:

{
  "connectionId": "raspberry-pi",
  "remotePath": "/home/pi/file.txt",
  "isDirectory": false
}

SECURITY WARNING: Deletion is permanent and cannot be undone. Remote path must be absolute. Set isDirectory=true to delete directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
remotePathYesAbsolute path to remote file or directory to delete
isDirectoryNoSet to true to delete a directory (default: false)
connectionIdYesID of the SSH connection to use

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses permanent deletion (cannot be undone) and absolute path requirement. With no annotations, this adds important behavioral context, though error behavior is not covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: one line purpose, example JSON, two key warnings. No wasted words, information front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, usage, and security. For a delete operation with 3 params and no output schema, this is sufficient, though missing error handling or prerequisite guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already describes parameters well (100% coverage). Description reinforces with example and clarifies default for isDirectory, adding moderate value beyond schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear statement 'Delete file or directory on remote host via SFTP' with specific verb and resource. Distinct from sibling tools like sftp_download or sftp_upload.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides security warning and path requirement, but no explicit guidance on when to use vs alternatives (e.g., sftp_list_directory for confirmation). Implied usage only.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sftp_downloadA

[SSH Operations] Download file from remote host via SFTP

Example usage:

{
  "connectionId": "raspberry-pi",
  "remotePath": "/home/pi/file.txt",
  "localPath": "C:\\downloads\\file.txt"
}

Security: Local path must be absolute. Creates parent directories if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
localPathYesAbsolute path where file will be saved locally
remotePathYesAbsolute path to remote file to download
connectionIdYesID of the SSH connection to use

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that local path must be absolute and that parent directories are created if needed, but does not mention error handling, permissions, or side effects beyond file creation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with no wasted words. It starts with a clear purpose, includes a representative example, and adds a security note—all in a well-structured format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, no output schema, no annotations), the description covers purpose, usage, and key constraints. It lacks details about return values or error handling, but the overall behavior is adequately described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all parameters with descriptions (100% coverage). The description adds value by specifying the absolute path requirement and directory creation behavior, which supplements the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Download file from remote host via SFTP'), includes a specific verb and resource, and distinguishes from sibling tools like sftp_upload and sftp_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an example usage and mentions security (absolute local path, directory creation), but does not explicitly state when to use this tool vs alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sftp_list_directoryA

[SSH Operations] List files and directories on remote host via SFTP

Example usage:

{
  "connectionId": "raspberry-pi",
  "remotePath": "/home/pi",
  "pattern": "*.txt"
}

Security: Remote path must be absolute. Pattern supports glob wildcards.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternNoOptional glob pattern to filter files (e.g., "*.txt")
remotePathYesAbsolute path to remote directory
connectionIdYesID of the SSH connection to use

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the remote path must be absolute and that patterns support glob wildcards, which adds useful behavioral context. It does not mention read-only status or pagination, but for a list operation this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise with an example, JSON snippet, and two bullet points. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with no output schema, the description covers the operation, parameters, example, and security. It could mention recursion depth, but overall it is complete enough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds the requirement that remotePath must be absolute and explains pattern supports glob wildcards, providing additional meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists files and directories on a remote host via SFTP, which is a specific verb and resource. It distinguishes itself from siblings like sftp_download and sftp_upload that perform different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an example and security notes but does not explicitly state when to use this tool over alternatives like execute_command for listing directories. No when-not or sibling comparisons are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sftp_uploadB

[SSH Operations] Upload file to remote host via SFTP

Example usage:

{
  "connectionId": "raspberry-pi",
  "localPath": "C:\\data\\file.txt",
  "remotePath": "/home/pi/file.txt"
}

Security: Validates local file exists. Remote path must be absolute.

ParametersJSON Schema
NameRequiredDescriptionDefault
localPathYesAbsolute path to local file to upload
remotePathYesAbsolute path on remote host where file will be uploaded
connectionIdYesID of the SSH connection to use

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It mentions security validation (file exists, absolute path) but omits important behaviors like whether files are overwritten, failure handling, or connection state requirements. Partial coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise with a purpose sentence, an example, and a security note. Front-loaded with the core action. The example is helpful but slightly lengthy; overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks behavioral completeness: no output schema or description of return values, error handling, or prerequisites (e.g., connection must be active). Important gaps for a file upload tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters. The description adds an example and a security note on path absolutes, providing marginal extra context. Baseline of 3 is appropriate as description doesn't significantly enhance parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Upload file to remote host via SFTP', specifying the exact action, resource (file), protocol, and direction. It distinguishes itself from siblings like sftp_download and sftp_delete by the upload action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives such as execute_command or other upload methods. The description lacks explicit context on prerequisites or exclusions, leaving the agent to infer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_disconnectB

[SSH Operations] Disconnect from an SSH server

Example usage:

{
  "connectionId": "raspberry-pi"
}

Use this to cleanly close SSH connections when they're no longer needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesID of the SSH connection to disconnect

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided. The description mentions 'cleanly close' but does not detail error handling, side effects, or prerequisites beyond the action itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with a clear category header, action statement, example, and usage guidance. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the basic purpose but omits return values, edge cases, and relationship to sibling tools like 'delete_ssh_connection'. For a simple tool, it is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the description adds an example. However, it does not provide additional meaning beyond the schema description 'ID of the SSH connection to disconnect'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action 'Disconnect from an SSH server' and the use case. However, it does not differentiate from the sibling tool 'delete_ssh_connection', which could cause confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description suggests using it when connections are no longer needed, but provides no explicit guidance on when not to use it or alternatives like 'execute_command'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ssh_executeC

[SSH Operations] Execute a command on a remote host via SSH

Example usage:

{
  "connectionId": "raspberry-pi",
  "command": "uname -a"
}

Configuration required in config.json:

{
  "ssh": {
    "enabled": true,
    "connections": {
      "raspberry-pi": {
        "host": "raspberrypi.local",
        "port": 22,
        "username": "pi",
        "password": "raspberry"
      }
    }
  }
}
ParametersJSON Schema
NameRequiredDescriptionDefault
envNoCustom environment variables for remote command execution (optional). Note: SSH server must allow AcceptEnv for these variables.
commandYesCommand to execute
connectionIdYesID of the SSH connection to use

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without any annotations, the description fails to disclose key behaviors such as synchronous execution, return format (stdout, stderr, exit code), error handling, or potential side effects. The only additional behavioral note is about AcceptEnv for environment variables.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear purpose sentence but becomes verbose with example code and configuration JSON. While structured, it includes redundant information that could be shorter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema, the description does not explain return values or error scenarios. It also misses prerequisites beyond configuration, such as the need for SSH to be enabled. For a tool with multiple siblings, this is a significant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds value beyond the input schema by providing an example usage and a note about SSH server configuration for the env parameter. The schema already has 100% coverage, and the description clarifies each parameter's role, especially connectionId with a clear definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Execute a command on a remote host via SSH'), providing a specific verb and resource. However, it does not explicitly differentiate from sibling tools like execute_command (which may be local), leaving some ambiguity about when to use this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The description implies SSH connection must be pre-configured but does not state prerequisites or scenarios where other tools are preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_background_jobA

[Command Execution] Start a command as a background job

Example usage:

{
  "shell": "powershell",
  "command": "Start-Sleep -Seconds 30; Write-Output 'Done'",
  "timeout": 60
}

Returns job ID immediately. Use get_job_status to monitor progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoCustom environment variables for command execution (optional)
shellYesShell to use for command execution
commandYesCommand to execute
timeoutNoJob timeout in seconds (default: 300, max: 3600)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that the tool starts an async job and returns immediately. Does not mention timeout constraints, error conditions, or resource implications, which are moderately important for a command execution tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise: one-sentence purpose, clear category heading, compact example, and two key instructions. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Description covers return value (job ID) and suggests next tool. With no output schema, this is sufficient. Could mention max timeout (3600) or error handling edges, but schema covers those.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with good descriptions. The description adds an example showing shell, command, timeout usage but does not explain env or provide additional semantics beyond what the schema offers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Start a command as a background job', specifying verb and resource. Distinguishes from siblings like execute_command (synchronous) and get_job_status (monitoring).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'Returns job ID immediately. Use get_job_status to monitor progress.' Also gives example usage. Lacks explicit when-not-to-use or alternative siblings, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_connectionC

[Diagnostics] Test shell connectivity and basic functionality

ParametersJSON Schema
NameRequiredDescriptionDefault
shellYesShell to test (powershell, cmd, or gitbash)
working_dirNoOptional working directory to test access

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description must fully convey behavioral traits. It only states 'test shell connectivity and basic functionality' without any detail on side effects, what 'test' entails (e.g., runs a command, checks shell existence), or any impact on the system.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the category. Every word is meaningful with no unnecessary verbiage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description is incomplete. It does not explain the return value or output format, nor does it mention potential errors or edge cases. For a diagnostic tool, this is insufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the parameter names and types already in the schema. It does not clarify parameter usage or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it tests shell connectivity and basic functionality, with a '[Diagnostics]' prefix that categorizes it. It is distinct from sibling tools like test_connectivity (likely network-focused) and ssh_execute. However, 'basic functionality' is somewhat vague, lowering it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. The '[Diagnostics]' prefix implies a testing purpose, but there is no mention of prerequisites, when not to use it, or comparison with other diagnostic tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_connectivityA

[Diagnostics] Test network connectivity to host and port

Example usage:

{
  "host": "google.com",
  "port": 443,
  "timeout": 5000
}

Security: Blocks connections to private IPs, localhost, and cloud metadata endpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYesHostname or IP address to test
portNoPort number to test (default: 80)
timeoutNoConnection timeout in milliseconds (default: 5000, max: 10000)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries the burden. It discloses security blocks (private IPs, localhost, cloud metadata), which is key behavioral context. However, it does not mention other behaviors like response format or timeout handling (though timeout is in schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise: two sentences plus a code example. Purpose is front-loaded. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, description does not explain return values. However, it provides enough context for a simple connectivity test. Minor gap on result interpretation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all three parameters. Description adds an example but no additional meaning beyond schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool tests network connectivity to a host and port, and the '[Diagnostics]' prefix helps distinguish it from sibling tools like 'test_connection'. It provides a specific verb and resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description gives an example usage but does not explicitly state when to use this tool over alternatives (e.g., 'test_connection'). No guidance on context or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_ssh_connectionC

[SSH Operations] Update an existing SSH connection

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesID of the SSH connection to update
connectionConfigYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must fully disclose behavioral traits. It only states 'Update an existing SSH connection' without mentioning side effects, error conditions, or limitations like partial update support. This is insufficient for an agent to predict behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—a single, clear sentence with no extraneous information. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has a nested object parameter, no output schema, and no annotations, the description is too minimal. It omits key details like whether partial updates are allowed, validation rules, or what happens if the connection ID is invalid.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all parameters with descriptions, so baseline is 3. The description adds no extra meaning beyond the schema, but does not repeat or contradict it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Update') and resource ('SSH connection'), making the purpose evident. However, it does not explicitly differentiate from sibling tools like create_ssh_connection or delete_ssh_connection, though the action verb itself distinguishes it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus siblings (e.g., when a connection exists vs. needs creation). The description lacks context about prerequisites or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_commandA

[Diagnostics] Test if a command would be allowed without executing it (dry-run validation). Use this to troubleshoot security blocks before attempting execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
shellYesShell to validate against
commandYesCommand to validate
workingDirNoWorking directory to validate (optional)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It clearly indicates the tool does not execute (dry-run) and is for diagnostics, implying no side effects. Could be more explicit about no state changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence states purpose and nature (dry-run), the second advises on usage. Information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no output schema, simple parameters) and clear description, it is adequately complete. It explains what it does and when to use it. Could mention return value but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters. The description adds minimal value beyond the schema, only contextualizing the parameters for validation purposes. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'test' and resource 'command', specifying it is a dry-run validation. It distinguishes from siblings like execute_command by noting it does not execute.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states to use this tool to troubleshoot security blocks before attempting execution, implying the context of use. It does not name alternatives but context with sibling tools suggests execute_command for actual execution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_configA

[Diagnostics] Validate configuration file and show how it merges with defaults

ParametersJSON Schema
NameRequiredDescriptionDefault
show_merge_detailsNoShow detailed merge process (intersection for paths, union for blocks)

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does not disclose whether the tool modifies anything, requires specific permissions, or has side effects. The behavior beyond 'validates' and 'shows' is vague, lacking detail on output or state changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with a diagnostic tag. No unnecessary words; every part contributes to the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description is adequate. It covers the core function. However, it could be more explicit about what the output looks like or what 'show how it merges' entails.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the single parameter well. The description mentions 'show merge details' which loosely relates to the parameter, but does not add significant new meaning beyond the schema's explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool validates a configuration file and shows merge behavior with defaults. It uses specific verbs and resources, and the [Diagnostics] tag and the mention of merge details distinguish it from sibling tools like get_config_value or reload_config.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for validation and viewing merge behavior but does not explicitly state when to use it over alternatives like check_security_config or get_config_value. No when-not-to-use or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_ssh_connectionC

[SSH Operations] Validate SSH connection configuration and test connectivity

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionConfigYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It mentions 'validate configuration and test connectivity' but fails to specify whether an actual connection is made, what constitutes success/failure, or any side effects. The behavior is vague.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and to the point, using a single sentence plus a category prefix. It is efficient with no wasted words, though it could benefit from slightly more structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a complex nested parameter, the description is incomplete. It does not explain return values, error handling, or whether 'test connectivity' implies a real connection attempt. The tool's behavior is underspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is reported as 0% for the top-level parameter, though nested properties have descriptions. The description does not add meaning to the 'connectionConfig' parameter beyond what is in the nested schema. It does not compensate for the missing top-level parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'validate' and the resource 'SSH connection configuration', and includes a category prefix '[SSH Operations]'. It distinguishes from sibling tools like 'create_ssh_connection' or 'delete_ssh_connection' by focusing on validation and connectivity testing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives such as 'check_security_config' or 'create_ssh_connection'. It lacks explicit context for selecting this tool over siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 34 tool updatesv0.3.0
    • First observedcheck_security_config
    • First observedcreate_ssh_connection
    • First observeddelete_ssh_connection
    • First observeddns_lookup
    • First observedexecute_batch
    • First observedexecute_command
    • First observedexplain_exit_code
    • First observedget_config_value
    • First observedget_cpu_usage
    • First observedget_disk_space
    • First observedget_job_output
    • First observedget_job_status
    • First observedlist_environment_variables
    • First observedlist_processes
    • First observedread_command_history
    • First observedread_current_directory
    • First observedread_environment_variable
    • First observedread_ssh_connections
    • First observedread_ssh_pool_status
    • First observedread_system_info
    • First observedreload_config
    • First observedsftp_delete
    • First observedsftp_download
    • First observedsftp_list_directory
    • First observedsftp_upload
    • First observedssh_disconnect
    • First observedssh_execute
    • First observedstart_background_job
    • First observedtest_connection
    • First observedtest_connectivity
    • First observedupdate_ssh_connection
    • First observedvalidate_command
    • First observedvalidate_config
    • First observedvalidate_ssh_connection

TDQS

B3.4/5.0
Disambiguation5/5

Each tool targets a distinct function within clear categories (Diagnostics, Command Execution, SSH Operations, System Info). Descriptions are detailed and differentiate overlapping potentials (e.g., list_environment_variables vs. read_environment_variable, test_connection vs. test_connectivity).

Naming Consistency4/5

Tool names predominantly follow a consistent verb_noun pattern with underscores (e.g., create_ssh_connection, get_cpu_usage). Minor inconsistencies exist, such as ssh_disconnect instead of disconnect_ssh_connection, and mix of prefixes like 'list_' vs 'read_' for similar actions.

Tool Count2/5

34 tools is excessive for a single MCP server, indicating potential overloading. While the tools cover distinct sub-domains, the count exceeds the recommended 3-15 range, and many diagnostic tools could be collapsed into fewer, more generic tools.

Completeness3/5

Core workflows for command execution and SSH operations are covered, including CRUD for connections and SFTP. However, notable gaps exist: no process management (kill), no configuration writing, no memory or network diagnostics, limiting the server's ability to perform full lifecycle management.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    F
    maintenance
    A Model Context Protocol server that provides secure command-line access to Windows systems, allowing MCP clients like Claude Desktop to safely execute commands in PowerShell, CMD, and Git Bash shells with configurable security controls.
    9
    1,215
    269
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Enables secure SSH command execution on remote servers and local PowerShell automation through Claude Desktop. Features enterprise-grade security with SSH key authentication, network scanning, and comprehensive logging for Windows and Linux system administration.
    4
    -
  • A
    license
    A
    quality
    B
    maintenance
    Enables secure command-line interactions on Windows systems with support for PowerShell, CMD, Git Bash, and WSL shells, providing controlled file access, command execution, and configurable security restrictions.
    6
    36
    4
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables remote server administration via SSH, supporting command execution, SFTP file transfers, and multi-profile management. It features security safeguards like destructive command detection and audit logging to ensure safe interaction with remote Linux/Unix environments.
    17
    16
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/quanticsoul4772/mcp-server-win-cli'

If you have feedback or need assistance with the MCP directory API, please join our Discord server