Skip to main content
Glama

ssh-mcp-server

SSH-based MCP (Model Context Protocol) server that allows remote execution of SSH commands via the MCP protocol.

Project Overview

ssh-mcp-server is a bridging tool that enables AI assistants and other applications supporting the MCP protocol to execute remote SSH commands through a standardized interface. This allows AI assistants to safely operate remote servers, execute commands, and retrieve results without directly exposing SSH credentials to AI models.

Related MCP server: SSH MCP Server

Key Features

  • Secure Connections: Supports multiple secure SSH connection methods, including password authentication and private key authentication (with passphrase support)

  • Command Security Control: Precisely control the range of allowed commands through flexible blacklist and whitelist mechanisms to prevent dangerous operations

  • Standardized Interface: Complies with MCP protocol specifications for seamless integration with AI assistants supporting the protocol

  • File Transfer: Supports bidirectional file transfers, uploading local files to servers or downloading files from servers

  • Credential Isolation: SSH credentials are managed entirely locally and never exposed to AI models, enhancing security

  • Ready to Use: Can be run directly using NPX without global installation, making it convenient and quick to deploy

  • Environment Variables: Support for credentials via environment variables for secure CI/CD integration

  • Batch Execution: Execute multiple commands in sequence with a single tool call

Tools List

Tool

Description

execute-command

Execute SSH commands with optional cwd and sudo support

execute-batch

Execute multiple commands in sequence with a single call

read-file

Read file contents from remote server with line range support

write-file

Write content to files on remote server with append mode

upload

Upload local files to remote server via SFTP

download

Download files from remote server via SFTP

test-connection

Test SSH connectivity and return server info

get-status

Get comprehensive system status (CPU, memory, disk, OS, processes)

check-port

Check if ports are open/listening on remote server

list-servers

List all configured SSH connections

Usage

MCP Configuration Examples

Important: In MCP configuration files, each command line argument and its value must be separate elements in the args array. Do NOT combine them with spaces. For example, use "--host", "192.168.1.1" instead of "--host 192.168.1.1".

Command Line Options

Options:
  -h, --host          SSH server host address
  -p, --port          SSH server port
  -u, --username      SSH username
  -w, --password      SSH password
  -k, --privateKey    SSH private key file path
  -P, --passphrase    Private key passphrase (if any)
  -W, --whitelist     Command whitelist, comma-separated regular expressions
  -B, --blacklist     Command blacklist, comma-separated regular expressions
  -s, --socksProxy    SOCKS proxy server address (e.g., socks://user:password@host:port)
  -t, --timeout       Default command timeout in milliseconds (default: 30000)

Environment Variables (alternative to CLI options):
  SSH_HOST            SSH server host address
  SSH_PORT            SSH server port (default: 22)
  SSH_USERNAME        SSH username
  SSH_PASSWORD        SSH password
  SSH_PRIVATE_KEY     SSH private key file path
  SSH_PASSPHRASE      Private key passphrase
  SSH_WHITELIST       Command whitelist
  SSH_BLACKLIST       Command blacklist
  SSH_SOCKS_PROXY     SOCKS proxy server address
  SSH_TIMEOUT         Default command timeout in milliseconds

Using Password

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--password", "pwd123456"
      ]
    }
  }
}

Using Private Key

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--privateKey", "~/.ssh/id_rsa"
      ]
    }
  }
}

Using Private Key with Passphrase

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--privateKey", "~/.ssh/id_rsa",
        "--passphrase", "pwd123456"
      ]
    }
  }
}

Using SOCKS Proxy

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--password", "pwd123456",
        "--socksProxy", "socks://username:password@proxy-host:proxy-port"
      ]
    }
  }
}

Using Command Whitelist and Blacklist

Use the --whitelist and --blacklist parameters to restrict the range of executable commands. Multiple patterns are separated by commas. Each pattern is a regular expression used to match commands.

Example: Using Command Whitelist

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--password", "pwd123456",
        "--whitelist", "^ls( .*)?,^cat .*,^df.*"
      ]
    }
  }
}

Example: Using Command Blacklist

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "ssh-mcp-server",
        "--host", "192.168.1.1",
        "--port", "22",
        "--username", "root",
        "--password", "pwd123456",
        "--blacklist", "^rm .*,^shutdown.*,^reboot.*"
      ]
    }
  }
}

Note: If both whitelist and blacklist are specified, the system will first check whether the command is in the whitelist, and then check whether it is in the blacklist. The command must pass both checks to be executed.

Multi-SSH Connection Example

You can specify multiple SSH connections by passing multiple --ssh parameters, each with a unique name:

npx ssh-mcp-server \
  --ssh "name=dev,host=1.2.3.4,port=22,user=alice,password=xxx" \
  --ssh "name=prod,host=5.6.7.8,port=22,user=bob,password=yyy"

In MCP tool calls, specify the connection name via the connectionName parameter. If omitted, the default connection is used.

Example (execute command on 'prod' connection):

{
  "tool": "execute-command",
  "params": {
    "cmdString": "ls -al",
    "connectionName": "prod"
  }
}

Example (execute command with timeout options):

{
  "tool": "execute-command",
  "params": {
    "cmdString": "ping -c 10 127.0.0.1",
    "connectionName": "prod",
    "timeout": 5000
  }
}

Command Execution Timeout

The execute-command tool supports timeout options to prevent commands from hanging indefinitely:

  • timeout: Command execution timeout in milliseconds (optional, default is 30000ms)

This is particularly useful for commands like ping, tail -f, or other long-running processes that might block execution.

List All SSH Servers

You can use the MCP tool list-servers to get all available SSH server configurations:

Example call:

{
  "tool": "list-servers",
  "params": {}
}

Example response:

[
  { "name": "dev", "host": "1.2.3.4", "port": 22, "username": "alice" },
  { "name": "prod", "host": "5.6.7.8", "port": 22, "username": "bob" }
]

Test Connection

Use the test-connection tool to verify SSH connectivity before running commands:

{
  "tool": "test-connection",
  "params": {
    "connectionName": "prod"
  }
}

Example response:

{
  "success": true,
  "connectionTime": "245ms",
  "server": {
    "host": "192.168.1.1",
    "port": 22,
    "username": "root",
    "hostname": "my-server"
  }
}

Batch Command Execution

Use the execute-batch tool to run multiple commands in sequence:

{
  "tool": "execute-batch",
  "params": {
    "commands": ["cd /var/log", "ls -la", "df -h"],
    "connectionName": "prod",
    "stopOnError": true
  }
}

Example response:

{
  "summary": {
    "total": 3,
    "executed": 3,
    "succeeded": 3,
    "failed": 0
  },
  "results": [
    { "command": "cd /var/log", "success": true, "output": "", "executionTime": "12ms" },
    { "command": "ls -la", "success": true, "output": "...", "executionTime": "15ms" },
    { "command": "df -h", "success": true, "output": "...", "executionTime": "18ms" }
  ]
}

Using Environment Variables

For CI/CD pipelines or secure deployments, you can use environment variables instead of CLI arguments:

{
  "mcpServers": {
    "ssh-mcp-server": {
      "command": "npx",
      "args": ["-y", "ssh-mcp-server"],
      "env": {
        "SSH_HOST": "192.168.1.1",
        "SSH_PORT": "22",
        "SSH_USERNAME": "root",
        "SSH_PASSWORD": "pwd123456"
      }
    }
  }
}

Working Directory and Sudo

The execute-command tool supports cwd and sudo parameters:

{
  "tool": "execute-command",
  "params": {
    "cmdString": "ls -la",
    "cwd": "/var/log",
    "sudo": true
  }
}

Read Remote File

Read file contents with optional line range:

{
  "tool": "read-file",
  "params": {
    "path": "/etc/nginx/nginx.conf",
    "maxLines": 50,
    "startLine": 10
  }
}

Write Remote File

Write content to remote files:

{
  "tool": "write-file",
  "params": {
    "path": "/tmp/config.txt",
    "content": "key=value\nother=setting",
    "append": false,
    "createDirs": true
  }
}

Get Server Status

Get comprehensive system information:

{
  "tool": "get-status",
  "params": {}
}

Returns: hostname, OS, CPU, memory, disk, processes, services, uptime, and more.

Check Port

Check if a port is open:

{
  "tool": "check-port",
  "params": {
    "port": 80,
    "host": "localhost"
  }
}

Example response:

{
  "port": 80,
  "host": "localhost",
  "open": true,
  "service": "nginx",
  "pid": "1234"
}

Security Considerations

This server provides powerful capabilities to execute commands and transfer files on remote servers. To ensure it is used securely, please consider the following:

  • Command Whitelisting: It is strongly recommended to use the --whitelist option to restrict the set of commands that can be executed. Without a whitelist, any command can be executed on the remote server, which can be a significant security risk.

  • Private Key Security: The server reads the SSH private key into memory. Ensure that the machine running the ssh-mcp-server is secure. Do not expose the server to untrusted networks.

  • Denial of Service (DoS): The server does not have built-in rate limiting. An attacker could potentially launch a DoS attack by flooding the server with connection requests or large file transfers. It is recommended to run the server behind a firewall or reverse proxy with rate-limiting capabilities.

  • Path Traversal: The server has built-in protection against path traversal attacks on the local filesystem. However, it is still important to be mindful of the paths used in upload and download commands.

Available Tools

10 tools
check-portC

Check if a port is open/listening on the remote server or test connectivity to external hosts

ParametersJSON Schema
NameRequiredDescriptionDefault
portYesPort number to check
hostNoHost to check (optional, default is 'localhost' for local port check)
connectionNameNoSSH connection name (optional, default is 'default')
timeoutNoConnection timeout in seconds (optional, default is 5)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions checking ports and connectivity but lacks critical details: whether this requires specific permissions (e.g., network access), what happens on failure (e.g., error messages), rate limits, or if it's a read-only operation. The dual-purpose nature (local vs. external) adds ambiguity without clarifying behavioral differences.

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

Conciseness4/5

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

The description is a single, efficient sentence that front-loads the core functionality. It avoids redundancy and waste, though it could be slightly more structured to separate local vs. external use cases for better clarity.

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

Completeness2/5

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

Given the tool's complexity (network operations with 4 parameters) and lack of annotations and output schema, the description is incomplete. It doesn't cover return values, error conditions, security implications, or how results are presented, leaving significant gaps for an agent to understand tool behavior fully.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain port ranges, host formats, or SSH connection implications). Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool's purpose with specific verbs ('check if a port is open/listening', 'test connectivity') and resources ('port', 'remote server', 'external hosts'). It distinguishes from some siblings like 'download' or 'upload', but doesn't explicitly differentiate from 'test-connection' which might have overlapping functionality.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'test-connection' or other connectivity-related siblings. It mentions both local and external checks but doesn't specify scenarios or prerequisites for choosing between them, leaving the agent without clear usage context.

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

downloadC

Download file from connected server

ParametersJSON Schema
NameRequiredDescriptionDefault
remotePathYesRemote path
localPathYesLocal path
connectionNameNoSSH connection name (optional, default is 'default')

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the basic action but doesn't mention important behavioral aspects like error conditions (e.g., what happens if the file doesn't exist), authentication requirements, file size limitations, or whether the operation is idempotent. The description is minimal and lacks necessary operational context.

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

Conciseness5/5

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

The description is extremely concise at just 5 words, front-loading the essential information with zero wasted words. It efficiently communicates the core function without unnecessary elaboration, 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.

Completeness2/5

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

For a file transfer tool with no annotations and no output schema, the description is insufficient. It doesn't address what the tool returns (success/failure indicators, error messages), doesn't mention side effects (does it overwrite existing local files?), and provides minimal context about the server connection. The description should do more given the tool's complexity and lack of structured metadata.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters. The description doesn't add any meaningful semantic context beyond what's in the schema - it doesn't explain path format expectations, connection management, or default behavior. The baseline of 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('Download') and resource ('file from connected server'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from its sibling 'upload' tool, which would require explicit comparison to achieve a score of 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'read-file' or 'upload'. It mentions 'connected server' but doesn't specify prerequisites or contextual constraints, leaving the agent to infer usage scenarios without explicit direction.

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

execute-batchC

Execute multiple commands in sequence on connected server

ParametersJSON Schema
NameRequiredDescriptionDefault
commandsYesArray of commands to execute in sequence
connectionNameNoSSH connection name (optional, default is 'default')
timeoutNoTimeout per command in milliseconds (optional, default is 30000ms)
stopOnErrorNoStop execution if a command fails (optional, default is false)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions sequential execution but fails to disclose critical traits such as authentication requirements, error handling details beyond stopOnError, rate limits, or what happens on failure (e.g., partial results). This leaves significant gaps for a tool that executes commands on a server.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose ('Execute multiple commands in sequence on connected server') with zero waste. Every word earns its place, making it highly concise and well-structured.

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

Completeness2/5

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

Given the complexity of executing multiple commands on a server, no annotations, and no output schema, the description is incomplete. It lacks details on return values, error scenarios, security implications, and how it interacts with sibling tools, making it inadequate for safe and effective use by an agent.

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

Parameters3/5

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

The schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional meaning beyond implying 'multiple commands,' which is covered by the commands parameter. Baseline 3 is appropriate as the schema does the heavy lifting, but the description doesn't compensate with extra insights.

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

Purpose4/5

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

The description clearly states the action ('execute multiple commands in sequence') and the target ('on connected server'), which distinguishes it from single-command tools like execute-command. However, it doesn't explicitly differentiate from other batch or sequential operations that might exist among siblings, though none are listed, making it clear but not fully sibling-differentiated.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like execute-command for single commands or other tools for different operations. It lacks explicit context, prerequisites, or exclusions, leaving the agent to infer usage based on the need for multiple commands.

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

execute-commandC

Execute command on connected server and get output result

ParametersJSON Schema
NameRequiredDescriptionDefault
cmdStringYesCommand to execute
connectionNameNoSSH connection name (optional, default is 'default')
timeoutNoCommand execution timeout in milliseconds (optional, default is 30000ms)
cwdNoWorking directory to execute the command in (optional)
sudoNoExecute command with sudo privileges (optional, default is false)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions executing a command and getting output, but fails to cover critical aspects like security implications (e.g., potential for destructive commands), error handling, or output format details. This is inadequate for a tool that can perform arbitrary server operations.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It is front-loaded with the core action and result, making it easy to parse quickly.

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

Completeness2/5

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

For a tool with 5 parameters, no annotations, and no output schema, the description is insufficient. It doesn't address the complexity of command execution, such as handling different server environments, security risks, or what the 'output result' entails (e.g., stdout, stderr, exit codes).

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all parameters. The description adds no additional semantic context beyond implying execution occurs on a server, which is already suggested by the tool name. It doesn't explain parameter interactions or provide examples.

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

Purpose4/5

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

The description clearly states the action ('execute command') and the target ('on connected server'), and specifies the outcome ('get output result'). It distinguishes from siblings like 'test-connection' or 'read-file' by focusing on command execution, though it doesn't explicitly contrast with 'execute-batch' which is a close sibling.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'execute-batch' for multiple commands or 'test-connection' for connectivity checks. It lacks context about prerequisites (e.g., server must be connected) or exclusions (e.g., not for file operations).

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

get-statusB

Get comprehensive system status information from the remote server (OS, CPU, memory, disk, processes, services)

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNameNoSSH connection name (optional, default is 'default')
refreshNoForce refresh status instead of using cached data (optional, default is false)

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions retrieving data from a 'remote server' via SSH (implied by the connectionName parameter), but doesn't specify authentication requirements, rate limits, error conditions, or whether this is a read-only operation. The description adds minimal context beyond what's obvious from the tool name.

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

Conciseness4/5

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

The description is a single, efficient sentence that front-loads the core purpose. It could be slightly more structured by separating the 'what' from the 'components', but it avoids redundancy and every element (verb, resource, scope, components) earns its place without waste.

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

Completeness3/5

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

For a read operation with 2 optional parameters and 100% schema coverage, the description is minimally adequate. However, with no annotations and no output schema, it should provide more behavioral context (e.g., response format, error handling). The listed components help, but don't fully compensate for missing structured data about the operation's behavior.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents both parameters. The description doesn't add any parameter-specific information beyond what's in the schema (e.g., it doesn't explain what 'comprehensive system status' includes beyond the listed components, or how refresh interacts with caching). Baseline 3 is appropriate when schema does the heavy lifting.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'comprehensive system status information', specifying exactly what data is retrieved (OS, CPU, memory, disk, processes, services). It distinguishes this tool from siblings like 'check-port' or 'list-servers' by focusing on detailed system metrics rather than connectivity or file operations.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites like requiring an established SSH connection, nor does it compare to siblings like 'test-connection' for basic connectivity checks or 'execute-command' for custom queries. Usage context is implied but not explicitly stated.

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

list-serversB

List all available SSH server configurations

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states it lists 'all available' configurations but doesn't disclose behavioral traits like whether this requires authentication, how results are formatted, if there are rate limits, or what 'available' means in practice. The description is minimal and lacks operational context.

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

Conciseness5/5

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

The description is a single, clear sentence that efficiently communicates the core functionality without any wasted words. It's front-loaded with the essential information and appropriately sized for a simple listing tool.

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

Completeness2/5

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

Given no annotations and no output schema, the description is insufficiently complete. A listing tool should ideally describe what information is returned (e.g., server names, IPs, connection details) and any important constraints. The current description leaves too much undefined for practical agent use.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, maintaining focus on the tool's purpose. Baseline is 4 for zero-parameter tools when schema coverage is complete.

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

Purpose4/5

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

The description clearly states the action ('List') and resource ('SSH server configurations'), making the purpose immediately understandable. It doesn't differentiate from siblings like 'get-status' or 'test-connection' which might also retrieve server information, but it's specific enough to understand what it does.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get-status' and 'test-connection' that might provide overlapping functionality, there's no indication of when this listing operation is preferred over other server-related tools.

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

read-fileC

Read contents of a file from the remote server

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the file to read
connectionNameNoSSH connection name (optional, default is 'default')
maxLinesNoMaximum number of lines to read (optional, reads entire file if not specified)
startLineNoLine number to start reading from (optional, 1-indexed, default is 1)
sudoNoRead file with sudo privileges (optional, default is false)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool reads file contents but doesn't mention potential side effects (e.g., whether it logs access, requires authentication, or has rate limits), error handling (e.g., what happens if the file doesn't exist), or output format (e.g., text, binary). This leaves significant gaps for a tool with remote server access.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action ('Read contents'), making it easy to parse, and every part of the sentence contributes to understanding the tool's function.

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

Completeness2/5

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

For a tool with 5 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what the tool returns (e.g., file content as text, error messages), behavioral constraints (e.g., file size limits, encoding issues), or how it interacts with sibling tools. Given the complexity and lack of structured data, more detail is needed for effective use.

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

Parameters3/5

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

The description doesn't add any parameter-specific information beyond what's already in the schema, which has 100% coverage with clear descriptions for all 5 parameters. Since the schema fully documents parameters like 'path', 'maxLines', and 'sudo', the description meets the baseline but doesn't provide extra context (e.g., typical use cases for 'sudo' or line numbering conventions).

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

Purpose4/5

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

The description clearly states the action ('Read contents') and resource ('a file from the remote server'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'download' or 'upload', which also involve file operations but with different purposes.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'download' (which might retrieve files) or 'write-file' (which modifies files). There's no mention of prerequisites, such as needing an established connection or file permissions, leaving usage context unclear.

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

test-connectionC

Test SSH connection and return server information

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNameNoSSH connection name (optional, default is 'default')

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool tests SSH connection and returns server information, but doesn't describe what 'server information' includes (e.g., OS details, uptime), how failures are handled, whether it requires authentication, or if it has side effects (e.g., logging attempts). This is a significant gap for a tool with potential security and operational implications.

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

Conciseness5/5

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

The description is extremely concise and front-loaded, consisting of a single, clear sentence that directly states the tool's function. There is no wasted verbiage or redundant information, making it efficient for quick comprehension by an AI agent.

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

Completeness2/5

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

Given the complexity of SSH operations and the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'server information' entails, how errors are reported, or any behavioral nuances (e.g., timeout settings). For a tool that interacts with external systems, this leaves critical gaps in understanding its full context and usage.

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

Parameters3/5

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

The input schema has 100% description coverage, with the single parameter 'connectionName' documented as optional with a default value. The description doesn't add any meaning beyond this, such as explaining what a 'connection name' represents or how it maps to SSH configurations. Given the high schema coverage, a baseline score of 3 is appropriate, as the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('Test SSH connection') and resource ('server information'), making it immediately understandable. However, it doesn't explicitly distinguish this tool from siblings like 'check-port' or 'get-status', which might also involve connection testing or server status checking, leaving some ambiguity about its unique role.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., SSH setup), exclusions (e.g., when other tools might be better), or contextual cues (e.g., use for initial connectivity checks before operations like 'execute-command'). This lack of usage context leaves the agent to infer appropriate scenarios.

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

uploadC

Upload file to connected server

ParametersJSON Schema
NameRequiredDescriptionDefault
localPathYesLocal path
remotePathYesRemote path
connectionNameNoSSH connection name (optional, default is 'default')

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('upload') but doesn't describe potential side effects (e.g., file overwriting, network usage), authentication needs, error conditions, or response format. This is inadequate for a mutation tool with zero annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place.

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

Completeness2/5

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

Given this is a mutation tool (upload implies write) with no annotations and no output schema, the description is incomplete. It lacks critical details like success/failure behavior, file size limits, or connection requirements. The schema covers parameters well, but overall context for safe use is insufficient.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters with basic descriptions. The description adds no additional meaning about parameters beyond implying file transfer between local and remote paths. Baseline 3 is appropriate as the schema handles the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('upload') and resource ('file to connected server'), making the purpose immediately understandable. It distinguishes from siblings like 'download' and 'write-file' by specifying the direction and target. However, it doesn't explicitly differentiate from all siblings (e.g., 'execute-batch' is unrelated).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'write-file' or 'download'. It doesn't mention prerequisites (e.g., needing an established connection) or exclusions (e.g., not for local operations). The context is implied but not explicit.

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

write-fileC

Write content to a file on the remote server

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to the file to write
contentYesContent to write to the file
connectionNameNoSSH connection name (optional, default is 'default')
appendNoAppend to file instead of overwriting (optional, default is false)
sudoNoWrite file with sudo privileges (optional, default is false)
createDirsNoCreate parent directories if they don't exist (optional, default is false)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. While 'write content' implies a mutation operation, the description doesn't mention permission requirements, error conditions, side effects (like overwriting existing files), or what happens on success/failure. For a file write tool with zero annotation coverage, this is a significant gap.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero wasted words. It's appropriately sized and front-loaded with the core functionality, 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.

Completeness2/5

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

For a file write operation with 6 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what the tool returns, error handling, or important behavioral aspects like whether it creates files, overwrites existing content, or requires specific permissions. The description should provide more context given the tool's complexity.

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

Parameters3/5

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

Schema description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any parameter-specific information beyond what's already in the schema descriptions. The baseline of 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('write content') and target ('to a file on the remote server'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from its sibling 'upload', which might have overlapping functionality for file operations on remote servers.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'upload' or 'read-file'. There's no mention of prerequisites, use cases, or exclusions, leaving the agent to infer usage context from the tool name alone.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 10 tool updatesv1.0.1
    • First observedcheck-port
    • First observeddownload
    • First observedexecute-batch
    • First observedexecute-command
    • First observedget-status
    • First observedlist-servers
    • First observedread-file
    • First observedtest-connection
    • First observedupload
    • First observedwrite-file

TDQS

A3.6/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no significant overlap: check-port tests connectivity, execute-command and execute-batch handle command execution, get-status retrieves system info, list-servers manages configurations, and read-file/write-file/upload/download handle file operations. The descriptions clearly differentiate these functions, making misselection unlikely.

Naming Consistency5/5

All tools follow a consistent verb-noun naming pattern using kebab-case (e.g., check-port, execute-command, list-servers). This uniformity makes the tool set predictable and easy to understand, with no deviations in style or convention.

Tool Count5/5

With 10 tools, the count is well-scoped for an SSH server management domain. Each tool serves a distinct and necessary function, such as connection testing, command execution, file management, and system monitoring, without being excessive or insufficient for the intended purpose.

Completeness5/5

The tool set provides comprehensive coverage for SSH server operations, including connection management (test-connection, list-servers), system monitoring (get-status, check-port), command execution (execute-command, execute-batch), and full file CRUD operations (read-file, write-file, upload, download). No obvious gaps exist for core workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to securely execute commands, transfer files, and manage port forwarding on remote servers via SSH.
    168
    36
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to securely execute commands on remote hosts via SSH and SFTP, with persistent shells, file transfers, screenshots, and an audit log.
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ZachFlint/ssh-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server