Windows CLI MCP Server
Enables execution of Git commands through Git Bash shell on Windows systems for version control operations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Windows CLI MCP Servercheck disk space on C: drive"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Windows CLI MCP Server
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.
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
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.
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.jsonThen set the
--configflag 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):
Path specified by
--configflag./config.json in current directory
~/.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 --installAt least one distribution must be configured
Include WSL paths in
allowedPathsconfiguration
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 --installand restartIf you get "Path not allowed" error, add the WSL path to
allowedPathsUse
\\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
-2Error message: "Command contains blocked command: [command]"
Commands like
del,rm,shutdown, orregfail 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:
First, verify which commands are blocked using the diagnostic tool:
{ "tool": "check_security_config", "arguments": { "category": "commands" } }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" ] } }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
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_commandtool to test commands before running themConsider using alternative commands (e.g.,
Remove-Itemin PowerShell instead ofrm)
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
-2Error 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 allowedSolution:
Check which paths are currently allowed:
{ "tool": "check_security_config", "arguments": { "category": "paths" } }Identify your current working directory:
{ "tool": "read_current_directory" }Update your
config.jsonto 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 } }Alternative: Disable path restrictions entirely (NOT recommended for security):
{ "security": { "restrictWorkingDirectory": false } }Restart the MCP server
Prevention:
Always include existing allowed paths when adding new ones
Use absolute paths (e.g.,
C:\Users\Namenot~or relative paths)Test path validation before running important commands using
validate_commandUse 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_executeorvalidate_ssh_connectionreturns an errorError messages like "Connection refused", "Authentication failed", "Connection timeout", or "Host not found"
SSH commands work from terminal but fail through MCP
Common Causes:
Network/Firewall Issues:
Firewall blocking port 22 (or custom SSH port)
Host is unreachable or hostname resolution fails
VPN required but not connected
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
Configuration Issues:
Wrong hostname or IP address
Wrong port number
SSH not enabled in server config
Connection ID doesn't exist
Solution:
Verify SSH is enabled in your config:
{ "ssh": { "enabled": true, // Must be true! "connections": { // Your connections here } } }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 } } }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_keyson the remote serverPrivate key file permissions should be restrictive (read-only for owner)
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 } } } }Check connection pool status:
{ "tool": "read_ssh_pool_status" }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.comFor "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_connectionbefore adding connections to verify configurationTest 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
-1Error 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:
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 } }For all commands, increase the default timeout in your
config.json:{ "security": { "commandTimeout": 120 // 120 seconds default for all commands } }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 } } } }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_configwith"category": "environment"to see blocked variablesIn 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:
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" } }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 世界 🎉" } }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
-2Error 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:
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 }For simple output redirection, capture output programmatically instead:
The MCP server already captures and returns stdout/stderr
Use
read_command_historyto review output from previous commands
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 neededIf 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.
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 contextBreak 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 executedtimestamp: When it was executedoutput: Combined stdout/stderrexitCode: 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 successfulshellType: 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:
Check the command history to see exact error messages and exit codes
Use diagnostic tools to validate your configuration and commands
Review the configuration merge behavior - especially for
allowedPaths(intersection) vsblockedCommands(union)Check the GitHub repository for known issues and updates: https://github.com/quanticsoul4772/win-cli-mcp-server
Report bugs with:
Error messages and exit codes
Configuration file (sanitized - remove passwords!)
Steps to reproduce
Output from
check_security_configdiagnostic tool
License
This project is licensed under the MIT License - see the LICENSE file for details.
Available Tools
34 toolscheck_security_configA
[Diagnostics] Get current security configuration including blocked commands, allowed paths, and restrictions. Use this to troubleshoot why commands are being blocked.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by configuration category (optional, default: all) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| connectionId | Yes | ID of the SSH connection | |
| connectionConfig | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| connectionId | Yes | ID of the SSH connection to delete |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Timeout in milliseconds (default: 5000, max: 10000) | |
| hostname | Yes | Hostname to lookup (e.g., "google.com") | |
| record_type | No | DNS record type to query (default: A) | A |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Custom environment variables applied to all commands (optional) | |
| shell | Yes | Shell to use for command execution | |
| timeout | No | Timeout per command in seconds (default: 60) | |
| commands | Yes | Array of commands to execute sequentially | |
| stopOnError | No | Stop execution if a command fails (default: true) |
TDQS
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.
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.
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.
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.
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.
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"
}| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Custom environment variables for command execution (optional). Example: {"PYTHONIOENCODING": "utf-8"} | |
| shell | Yes | Shell to use for command execution | |
| command | Yes | Command to execute | |
| timeout | No | Command timeout in seconds (overrides config default) | |
| workingDir | No | Working directory for command execution (optional) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| exit_code | Yes | Exit code to explain (e.g., 0, -1, -2, or process-specific codes) |
TDQS
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.
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.
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.
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.
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.
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"
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Configuration path in dot notation (e.g., "security.maxCommandLength") | |
| show_type | No | Include value type information (default: true) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| interval | No | Measurement interval in milliseconds (default: 1000, min: 100, max: 10000) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | Unit for disk space values (default: GB) | GB |
| drive | No | Specific drive letter (e.g., "C", "D"). Omit for all drives. |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Job ID to query | |
| offset | No | Start position in output (default: 0, for streaming use last totalSize) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Job ID to query |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Regex pattern to filter variable names (e.g., "^PATH|^TEMP") | |
| category | No | Filter by variable category (Windows-specific, default: all) | all |
| show_blocked_count | No | Show count of blocked variables (default: true) |
TDQS
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.
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.
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.
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.
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.
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 } }
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results (default: 10, max: 50) | |
| filter | No | Filter processes by name (partial match) | |
| sort_by | No | Sort results by (default: cpu) | cpu |
TDQS
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.
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.
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.
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.
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.
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
}
]| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of history entries to return (default: 10, max: 1000) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the environment variable to read (case-insensitive) | |
| show_blocked_reason | No | Show reason if variable is blocked (default: true) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| validate_before | No | Validate config file before reloading (default: true) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| remotePath | Yes | Absolute path to remote file or directory to delete | |
| isDirectory | No | Set to true to delete a directory (default: false) | |
| connectionId | Yes | ID of the SSH connection to use |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| localPath | Yes | Absolute path where file will be saved locally | |
| remotePath | Yes | Absolute path to remote file to download | |
| connectionId | Yes | ID of the SSH connection to use |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | Optional glob pattern to filter files (e.g., "*.txt") | |
| remotePath | Yes | Absolute path to remote directory | |
| connectionId | Yes | ID of the SSH connection to use |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| localPath | Yes | Absolute path to local file to upload | |
| remotePath | Yes | Absolute path on remote host where file will be uploaded | |
| connectionId | Yes | ID of the SSH connection to use |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| connectionId | Yes | ID of the SSH connection to disconnect |
TDQS
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.
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.
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.
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.
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.
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"
}
}
}
}| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Custom environment variables for remote command execution (optional). Note: SSH server must allow AcceptEnv for these variables. | |
| command | Yes | Command to execute | |
| connectionId | Yes | ID of the SSH connection to use |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| env | No | Custom environment variables for command execution (optional) | |
| shell | Yes | Shell to use for command execution | |
| command | Yes | Command to execute | |
| timeout | No | Job timeout in seconds (default: 300, max: 3600) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| shell | Yes | Shell to test (powershell, cmd, or gitbash) | |
| working_dir | No | Optional working directory to test access |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Hostname or IP address to test | |
| port | No | Port number to test (default: 80) | |
| timeout | No | Connection timeout in milliseconds (default: 5000, max: 10000) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| connectionId | Yes | ID of the SSH connection to update | |
| connectionConfig | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| shell | Yes | Shell to validate against | |
| command | Yes | Command to validate | |
| workingDir | No | Working directory to validate (optional) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| show_merge_details | No | Show detailed merge process (intersection for paths, union for blocks) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| connectionConfig | Yes |
TDQS
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.
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.
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.
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.
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.
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.
34 tool updates
v0.3.0- First observed
check_security_config - First observed
create_ssh_connection - First observed
delete_ssh_connection - First observed
dns_lookup - First observed
execute_batch - First observed
execute_command - First observed
explain_exit_code - First observed
get_config_value - First observed
get_cpu_usage - First observed
get_disk_space - First observed
get_job_output - First observed
get_job_status - First observed
list_environment_variables - First observed
list_processes - First observed
read_command_history - First observed
read_current_directory - First observed
read_environment_variable - First observed
read_ssh_connections - First observed
read_ssh_pool_status - First observed
read_system_info - First observed
reload_config - First observed
sftp_delete - First observed
sftp_download - First observed
sftp_list_directory - First observed
sftp_upload - First observed
ssh_disconnect - First observed
ssh_execute - First observed
start_background_job - First observed
test_connection - First observed
test_connectivity - First observed
update_ssh_connection - First observed
validate_command - First observed
validate_config - First observed
validate_ssh_connection
TDQS
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).
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.
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.
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
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
Scoped, audited SSH exec, sessions, and SFTP on your saved servers without exposing credentials
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Execute PowerShell commands securely with controlled timeouts and input validation. Retrieve syste…
Remote MCP for Copilot CLI switch gate MCP, structured receipts, audit logs, and reviewer-ready evid
Related MCP Servers
- AlicenseBqualityFmaintenanceA 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.91,215269MIT
- FlicenseBqualityDmaintenanceEnables 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-
- AlicenseAqualityBmaintenanceEnables 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.6364MIT
- AlicenseAqualityCmaintenanceEnables 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.1716MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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