Skip to main content
Glama
widjis
by widjis

SSH MCP Server

A Model Context Protocol (MCP) server that provides SSH functionality including file copying between servers, command execution, and file management.

Features

  • 🔐 SSH Connection Management: Connect to multiple SSH servers with connection pooling

  • 📁 File Operations: Copy files between local and remote servers, or between remote servers

  • 🖥️ Command Execution: Execute commands on remote servers

  • 📋 File Listing: List files and directories on local or remote systems

  • ℹ️ File Information: Get detailed file information (size, permissions, timestamps)

  • 🔑 Authentication: Support for password and private key authentication

Related MCP server: SSH MCP Server

Installation

npm install
npm run build

Usage

Claude Desktop Integration

To use this SSH MCP server with Claude Desktop, you need to configure it in your Claude Desktop settings.

1. Build the Server

npm install
npm run build

2. Configure Claude Desktop

Add the following configuration to your Claude Desktop MCP settings file:

On macOS: ~/Library/Application Support/Claude/claude_desktop_config.json On Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "ssh-server": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-ssh/dist/index.js"],
      "env": {}
    }
  }
}

Important: Replace /absolute/path/to/mcp-ssh/ with the actual absolute path to your mcp-ssh project directory.

3. Restart Claude Desktop

After adding the configuration, restart Claude Desktop completely for the changes to take effect.

4. Verify Installation

Once restarted, you should see the SSH tools available in Claude Desktop. You can test by asking Claude to:

  • "Connect to an SSH server"

  • "List available SSH tools"

  • "Copy a file between servers"

Development Mode

npm run dev

Production

npm run build
npm start

Quick Start

New to SSH MCP Server? Check out our How to Use Authentication Guide for simple, step-by-step instructions on connecting to your servers using natural language with Claude Desktop.

Available Tools

1. ssh_connect

Connect to an SSH server.

Parameters:

  • host (string): SSH server hostname or IP address

  • port (number, default: 22): SSH port number

  • username (string): SSH username

  • password (string, optional): SSH password

  • privateKeyPath (string, optional): Path to private key file

  • passphrase (string, optional): Passphrase for private key

  • connectionId (string): Unique identifier for this connection

Authentication Methods:

  1. Password Authentication:

{
  "host": "192.168.1.100",
  "username": "your_username",
  "password": "your_password",
  "connectionId": "server1"
}
  1. SSH Key Authentication:

{
  "host": "192.168.1.100",
  "username": "your_username",
  "privateKeyPath": "/path/to/private/key",
  "passphrase": "optional_passphrase",
  "connectionId": "server1"
}

2. ssh_disconnect

Disconnect from an SSH server.

Parameters:

  • connectionId (string): Connection ID to disconnect

3. ssh_execute

Execute a command on a remote SSH server.

Parameters:

  • connectionId (string): SSH connection ID

  • command (string): Command to execute

  • cwd (string, optional): Working directory for command execution

Example:

{
  "connectionId": "server1",
  "command": "ls -la /home/user",
  "cwd": "/home/user"
}

4. ssh_copy_file

Copy files between local and remote servers or between remote servers.

Parameters:

  • sourceConnectionId (string): Source SSH connection ID (use "local" for local files)

  • sourcePath (string): Source file path

  • targetConnectionId (string): Target SSH connection ID (use "local" for local files)

  • targetPath (string): Target file path

  • createDirectories (boolean, default: true): Create target directories if they don't exist

Examples:

Local to Remote:

{
  "sourceConnectionId": "local",
  "sourcePath": "/local/file.txt",
  "targetConnectionId": "server1",
  "targetPath": "/remote/file.txt"
}

Remote to Local:

{
  "sourceConnectionId": "server1",
  "sourcePath": "/remote/file.txt",
  "targetConnectionId": "local",
  "targetPath": "/local/file.txt"
}

Remote to Remote:

{
  "sourceConnectionId": "server1",
  "sourcePath": "/path/on/server1/file.txt",
  "targetConnectionId": "server2",
  "targetPath": "/path/on/server2/file.txt"
}

5. ssh_list_files

List files and directories on local or remote server.

Parameters:

  • connectionId (string): SSH connection ID (use "local" for local files)

  • remotePath (string): Directory path to list

  • showHidden (boolean, default: false): Show hidden files

6. ssh_file_info

Get file information (size, permissions, etc.).

Parameters:

  • connectionId (string): SSH connection ID (use "local" for local files)

  • filePath (string): File path to get info for

Troubleshooting

Claude Desktop Integration Issues

Server not appearing in Claude Desktop:

  1. Verify the absolute path in claude_desktop_config.json is correct

  2. Ensure the server was built successfully (npm run build)

  3. Check that dist/index.js exists in your project directory

  4. Restart Claude Desktop completely (quit and reopen)

  5. Check Claude Desktop logs for error messages

Permission errors:

  1. Ensure Node.js has permission to read the project directory

  2. On macOS, you may need to grant Claude Desktop full disk access in System Preferences > Security & Privacy

SSH connection failures:

  1. Verify SSH server is accessible from your machine

  2. Test SSH connection manually: ssh username@hostname

  3. Check SSH key permissions (should be 600): chmod 600 ~/.ssh/id_rsa

  4. Ensure SSH key is in the correct format (OpenSSH)

File transfer issues:

  1. Check file paths are absolute and correct

  2. Verify write permissions on target directories

  3. Ensure sufficient disk space on target system

Getting Help

If you encounter issues:

  1. Check the Claude Desktop console/logs for error messages

  2. Verify your configuration matches the examples exactly

  3. Test SSH connections manually before using the MCP server

Security Considerations

  • Private keys should be stored securely with appropriate file permissions (600)

  • Use SSH key authentication instead of passwords when possible

  • Consider using SSH agent forwarding for additional security

  • The server maintains connection pools - ensure proper cleanup on shutdown

Error Handling

The server provides detailed error messages for:

  • Connection failures

  • Authentication errors

  • File operation errors

  • Invalid parameters

  • Missing connections

Connection Management

  • Connections are pooled and reused for efficiency

  • Each connection has a unique ID for reference

  • Connections are automatically cleaned up on server shutdown

  • Use ssh_disconnect to manually close connections

Temporary Files

For remote-to-remote file transfers, temporary files are created in /tmp/ and automatically cleaned up after transfer completion or on error.

Dependencies

  • @modelcontextprotocol/sdk: MCP SDK for server implementation

  • node-ssh: SSH client for Node.js

  • ssh2: Low-level SSH2 client

  • zod: Runtime type validation

License

MIT

Available Tools

18 tools
ssh_close_interactive_shellC

Close an interactive shell session

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesInteractive session ID to close

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 ('close') but doesn't explain what happens upon closure (e.g., whether the session is terminated gracefully, if output is lost, or if it requires specific permissions). This is a significant gap for a tool that likely involves session management.

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 and wastes no space, 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?

Given the complexity of session management and the lack of annotations or output schema, the description is incomplete. It doesn't cover behavioral aspects like side effects, error conditions, or what happens post-closure, which are crucial for an AI agent to use this tool correctly in context.

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%, with the single parameter 'sessionId' well-documented in the schema. The description doesn't add any meaning beyond this (e.g., how to obtain the sessionId or format requirements), so it meets the baseline of 3 where 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 verb ('close') and resource ('interactive shell session'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'ssh_disconnect' (which might close connections rather than specific shell sessions), leaving some ambiguity about when to use each.

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 'ssh_disconnect' or 'ssh_execute' for ending sessions. It mentions the resource but doesn't specify prerequisites (e.g., must have an active shell session) or exclusions, 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.

ssh_connectC

Connect to an SSH server

ParametersJSON Schema
NameRequiredDescriptionDefault
hostYesSSH server hostname or IP address
portNoSSH port number
usernameYesSSH username
passwordNoSSH password (if not using key)
privateKeyPathNoPath to private key file
passphraseNoPassphrase for private key
connectionIdYesUnique identifier for this connection

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. 'Connect to an SSH server' implies establishing a network connection but reveals nothing about authentication requirements, timeout behavior, connection persistence, error handling, or what happens after connection. For a security-sensitive tool with 7 parameters, this is inadequate.

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 maximally concise with a single clear sentence that states the core purpose. There's no wasted language or unnecessary elaboration, making it easy to parse and understand at a glance.

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 complex SSH connection tool with 7 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what happens after connection, how to manage the connection, what errors might occur, or how this differs from sibling connection tools. The agent lacks critical context for proper tool selection and invocation.

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%, with all 7 parameters well-documented in the schema itself. The description adds no additional parameter information beyond what's already in the structured schema, so it meets the baseline for high schema coverage without adding value.

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 ('connect') and target ('SSH server'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from its sibling 'ssh_connect_with_credential', which appears to serve a similar purpose with different authentication methods.

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 'ssh_connect_with_credential' and 'ssh_disconnect', there's no indication of when this specific connection method is preferred or what prerequisites exist for successful connection.

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

ssh_connect_with_credentialC

Connect to SSH server using saved credentials

ParametersJSON Schema
NameRequiredDescriptionDefault
credentialIdYesStored credential ID to use
connectionIdYesUnique identifier for this connection

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool establishes an SSH connection but lacks critical details: whether this initiates an interactive session, requires specific permissions, has side effects (e.g., opening network ports), or handles errors. For a connection tool with zero annotation coverage, this is a significant gap in transparency.

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 without unnecessary words. Every part ('Connect to SSH server using saved credentials') earns its place by specifying the action and method, making it appropriately 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 SSH operations (involving network connections, authentication, and potential side effects), no annotations, and no output schema, the description is incomplete. It doesn't explain what happens after connection (e.g., returns a session handle, initiates a shell), error conditions, or dependencies on other tools like 'ssh_save_credential'. This leaves the agent with insufficient context for safe and 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?

Schema description coverage is 100%, with both parameters ('credentialId' and 'connectionId') clearly documented in the schema. The description adds no additional parameter semantics beyond implying the use of saved credentials, which aligns with the schema. This meets the baseline score of 3 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 ('Connect to SSH server') and the method ('using saved credentials'), which provides a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'ssh_connect' (which likely uses different authentication methods) or 'ssh_start_interactive_shell' (which might be for different connection types).

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., needing saved credentials via 'ssh_save_credential'), exclusions, or comparisons to siblings like 'ssh_connect' (which might use direct credentials). This leaves the agent with minimal context for tool selection.

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

ssh_copy_fileB

Copy files between local and remote servers or between remote servers

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceConnectionIdYesSource SSH connection ID (use "local" for local files)
sourcePathYesSource file path
targetConnectionIdYesTarget SSH connection ID (use "local" for local files)
targetPathYesTarget file path
createDirectoriesNoCreate target directories if they don't exist

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 the full burden of behavioral disclosure. It states the action 'copy files' but doesn't mention critical behaviors: whether it overwrites existing files, handles permissions, supports recursive copying, provides progress feedback, or has rate limits. This is inadequate for a file operation tool.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core purpose and avoids unnecessary elaboration, 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 file copy operation with no annotations and no output schema, the description is incomplete. It lacks behavioral details (overwrite behavior, error handling), usage context (prerequisites like active connections), and output expectations. This leaves significant gaps for an agent to use the tool correctly.

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 5 parameters. The description adds no additional parameter semantics beyond implying directionality (local/remote), which is already covered by parameter descriptions. 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 'copy' and the resource 'files', specifying the directionality 'between local and remote servers or between remote servers'. This distinguishes it from sibling tools like ssh_list_files (list) or ssh_execute (execute commands).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing established SSH connections), exclusions, or comparisons to similar tools like ssh_file_info for checking file existence before copying.

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

ssh_delete_credentialC

Delete a saved SSH credential

ParametersJSON Schema
NameRequiredDescriptionDefault
credentialIdYesCredential ID to delete

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 ('Delete') but lacks critical details: whether this is irreversible, if it affects active SSH sessions, what permissions are required, or what happens on success/failure. For a destructive operation, this omission is significant and limits safe usage.

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, direct sentence with zero wasted words. It front-loads the key action ('Delete') and resource, making it easy to parse. Every word earns its place, achieving optimal conciseness for a simple tool.

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

Completeness2/5

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

Given the tool's destructive nature and lack of annotations or output schema, the description is incomplete. It doesn't address behavioral risks, error conditions, or return values, leaving gaps for safe invocation. For a delete operation with no structured safety hints, more context is needed to ensure proper 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 schema has 100% description coverage, with the parameter 'credentialId' clearly documented in the schema itself. The description adds no additional meaning beyond the schema, such as how to obtain the ID or format requirements. Baseline 3 is appropriate since the schema adequately covers parameter semantics.

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 verb ('Delete') and resource ('a saved SSH credential'), making the purpose immediately understandable. It distinguishes from siblings like 'ssh_list_credentials' and 'ssh_save_credential' by focusing on deletion rather than listing or creation. However, it doesn't specify the scope (e.g., from local storage or a remote system), which prevents a perfect score.

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., needing an existing credential), exclusions (e.g., not for active connections), or related tools like 'ssh_list_credentials' for identifying IDs. Without such context, an agent must infer usage from the name alone.

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

ssh_disconnectC

Disconnect from an SSH server

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesConnection ID to disconnect

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 but lacks details on effects (e.g., whether it terminates all sessions, requires specific permissions, or handles errors). This is a significant gap for a tool that likely involves network 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, direct sentence with zero wasted words, making it highly efficient and front-loaded. It immediately conveys the core purpose without unnecessary elaboration.

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 lack of annotations or output schema, the description is insufficient. It doesn't cover behavioral aspects like side effects, error handling, or return values, leaving gaps for safe and effective tool invocation.

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, documenting the 'connectionId' parameter clearly. The description adds no additional meaning beyond what the schema provides, so it meets the baseline for high schema coverage without compensating value.

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

Purpose4/5

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

The description clearly states the action ('Disconnect') and target resource ('from an SSH server'), making the purpose immediately understandable. It doesn't differentiate from sibling tools like 'ssh_close_interactive_shell', which might handle a specific type of disconnection, so it misses the top score.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'ssh_close_interactive_shell' or in what context disconnection is appropriate. The description assumes usage without specifying prerequisites or exclusions.

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

ssh_docker_deployC

Deploy Docker containers with working directory context

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesSSH connection ID
workingDirectoryYesDirectory containing docker-compose.yml or Dockerfile
deploymentTypeYesType of Docker deployment
imageNameNoDocker image name (for build/run)
containerNameNoContainer name (for run)
composeFileNoDocker compose file namedocker-compose.yml
buildArgsNoBuild arguments for Docker build
envVarsNoEnvironment variables
portsNoPort mappings (e.g., ["8080:80", "3000:3000"])
volumesNoVolume mappings (e.g., ["/host/path:/container/path"])
detachedNoRun in detached mode

TDQS

C2.6/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 'working directory context' but fails to detail critical behaviors: it doesn't specify if this is a read-only or destructive operation (likely destructive as it deploys containers), what happens on failure, or any side effects like network changes. For a complex deployment tool with 11 parameters, this is a significant gap in transparency.

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 gets straight to the point without fluff. It's front-loaded with the core action ('Deploy Docker containers') and includes a key constraint. However, it could be more structured by explicitly mentioning the three deployment types or linking to sibling tools, but it avoids wastefulness.

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 (11 parameters, no annotations, no output schema), the description is insufficient. It doesn't cover behavioral aspects like error handling, output format, or prerequisites (e.g., SSH connection setup). For a deployment tool that likely involves mutations and side effects, more context is needed to guide the agent effectively, making it incomplete.

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 11 parameters thoroughly. The description adds minimal value beyond the schema—it hints at the 'workingDirectory' parameter's role but doesn't explain parameter interactions (e.g., how deploymentType affects other params). Baseline 3 is appropriate as the schema does the heavy lifting, though the description could have clarified dependencies.

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

Purpose3/5

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

The description 'Deploy Docker containers with working directory context' states the general action (deploy Docker containers) and mentions a key constraint (working directory context), but it's vague about what 'deploy' entails—it could mean building, running, or composing. It doesn't clearly distinguish from sibling tools like ssh_docker_status, which monitors containers, leaving ambiguity about its specific 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?

No explicit guidance is provided on when to use this tool versus alternatives. While the description implies it's for Docker deployments, it doesn't specify prerequisites (e.g., needing an SSH connection first) or contrast with siblings like ssh_execute for general commands. The lack of when-to-use or when-not-to-use statements leaves the agent to infer context from parameters alone.

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

ssh_docker_statusC

Check Docker container status in working directory

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesSSH connection ID
workingDirectoryNoWorking directory to check (defaults to current)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions checking status but doesn't disclose behavioral traits such as what 'status' includes (e.g., running/stopped containers, logs), whether it's read-only (implied by 'check'), error handling, or output format. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste—it directly states the tool's purpose without redundancy. It's appropriately sized for a simple tool and front-loaded with the core action, 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?

Given no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain what the tool returns (e.g., container list, status codes), error conditions, or dependencies (e.g., requires Docker installed). For a tool interacting with Docker via SSH, more context is needed to use it effectively.

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 both parameters (connectionId and workingDirectory). The description adds minimal value beyond the schema by implying the working directory context but doesn't provide additional syntax, format details, or usage examples. Baseline 3 is appropriate as the schema handles parameter documentation.

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 ('Check') and resource ('Docker container status'), specifying the scope ('in working directory'). It distinguishes from siblings like ssh_docker_deploy (deploy vs. check) and ssh_execute (general execution vs. specific Docker check). However, it doesn't explicitly differentiate from all siblings (e.g., ssh_file_info also checks status but for files).

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 minimal guidance, implying usage when needing to check Docker container status in a working directory via SSH. It lacks explicit when-to-use scenarios, prerequisites (e.g., requires an active SSH connection), or alternatives (e.g., vs. ssh_execute for custom Docker commands). No exclusions or comparisons to siblings are mentioned.

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

ssh_executeC

Execute a command on a remote SSH server

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesSSH connection ID
commandYesCommand to execute on remote server
cwdNoWorking directory for command execution

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden but provides minimal behavioral details. It states what the tool does but doesn't disclose critical traits like whether it's read-only or destructive, authentication requirements, error handling, or output format (e.g., stdout/stderr). This leaves significant gaps for safe and effective use.

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's front-loaded and wastes no space, 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?

Given the complexity of SSH command execution (involving connections, commands, and potential side effects), no annotations, and no output schema, the description is incomplete. It lacks details on prerequisites, safety, or what to expect in return, which are crucial for this type of tool.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents parameters like 'connectionId' and 'command'. The description adds no additional meaning beyond implying execution context, meeting the baseline for high coverage without extra value.

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

Purpose4/5

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

The description clearly states the action ('Execute a command') and target ('on a remote SSH server'), making the purpose immediately understandable. It doesn't differentiate from siblings like ssh_start_interactive_shell or ssh_send_input, which are related but distinct operations, so it misses the highest score.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. For example, it doesn't mention prerequisites like needing an established SSH connection (via ssh_connect) or when to prefer interactive shells (ssh_start_interactive_shell) over command execution. The description assumes context without stating it.

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

ssh_file_infoC

Get file information (size, permissions, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesSSH connection ID (use "local" for local files)
filePathYesFile path to get info for

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries full burden but provides minimal behavioral context. It mentions what information is retrieved but doesn't cover error handling, permissions needed, whether it's read-only (implied by 'Get'), or output format. This leaves gaps for a tool interacting with remote systems.

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 waste. It's front-loaded with the core purpose and includes relevant examples (size, permissions), making it appropriately sized for its 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?

Given no annotations and no output schema, the description is incomplete. It doesn't explain the return values (e.g., format of file info), error cases, or dependencies on SSH connections, which are critical for a tool in this context with siblings involving remote operations.

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 parameters are well-documented in the schema. The description adds no additional meaning beyond implying the tool retrieves metadata for a file, which aligns with but doesn't enhance the schema's details on connectionId and filePath.

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 verb 'Get' and the resource 'file information', specifying attributes like size and permissions. It distinguishes from siblings like ssh_list_files (which lists files) and ssh_read_output (which reads file content), but doesn't explicitly name alternatives or contrast scope.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an SSH connection first), exclusions, or compare with similar tools like ssh_list_files for metadata at scale.

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

ssh_get_working_directoryB

Get the current working directory for a connection

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesSSH connection ID

TDQS

B3.1/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. While 'Get' implies a read-only operation, it doesn't specify whether this requires active connection status, what happens if the connection is invalid, or what format the directory path returns. For a tool with zero annotation coverage, this leaves significant behavioral gaps.

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 communicates the core purpose without any wasted words. It's appropriately sized for a simple tool and gets straight to the point with clear subject-verb-object structure.

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 simple read operation with one well-documented parameter and no output schema, the description is minimally adequate. However, it doesn't address connection state requirements or return format, which would be helpful given the lack of annotations. The description meets basic requirements but could provide more context about the tool's behavior and output.

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%, with the single parameter 'connectionId' clearly documented in the schema. The description doesn't add any additional parameter context beyond what the schema already provides, so the baseline score 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 verb 'Get' and the resource 'current working directory for a connection', making the purpose immediately understandable. It doesn't explicitly distinguish from sibling tools like 'ssh_set_working_directory', but the 'Get' vs 'Set' distinction is implied through contrasting verbs.

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 needing an established SSH connection, nor does it clarify relationships with sibling tools such as 'ssh_set_working_directory' or 'ssh_execute' which might affect or depend on the working directory.

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

ssh_list_credentialsB

List all saved SSH credentials

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('List') but doesn't describe what 'saved SSH credentials' entails (e.g., format, scope like user/system-wide), potential side effects (e.g., if listing exposes sensitive data), or output behavior (e.g., pagination, error handling). For a tool with zero annotation coverage, this leaves significant gaps.

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 ('List all saved SSH credentials') that directly conveys the core functionality without any wasted words. It is appropriately sized and front-loaded, making it easy to parse quickly.

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

Completeness3/5

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

Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is minimally adequate. It states what the tool does but lacks details on behavior, output format, or usage context. For a simple list operation, this might suffice, but it doesn't provide a complete picture for an agent to use it effectively without additional assumptions.

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 the schema fully documents the absence of inputs. The description doesn't need to add parameter details, and it correctly implies no parameters are required by not mentioning any. This meets the baseline for tools with no parameters.

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 'List all saved SSH credentials' clearly states the verb ('List') and resource ('saved SSH credentials'), making the tool's purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'ssh_save_credential' or 'ssh_delete_credential' beyond the obvious action difference, which is why it doesn't reach a perfect score.

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., needing saved credentials first), compare it to similar tools like 'ssh_connect' (which might list active connections), or specify use cases (e.g., credential management vs. connection establishment).

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

ssh_list_filesC

List files and directories on local or remote server

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesSSH connection ID (use "local" for local files)
remotePathYesDirectory path to list
showHiddenNoShow hidden files

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 but reveals little about behavior. It doesn't disclose what permissions are needed, whether it's read-only (implied but not stated), what format the output takes (list vs tree vs details), error conditions, or rate limits. The mention of 'local or remote' is helpful context but insufficient for a mutation-free tool.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and includes the key scope detail ('local or remote server'). 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?

For a tool with no annotations and no output schema, the description is incomplete. It doesn't explain what the output looks like (file list format, metadata included), error behavior, or dependencies on other tools (like ssh_connect). Given the sibling tool complexity, more context about when this is the right choice would be valuable.

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 three parameters. The description adds no additional parameter semantics beyond what's in the schema (like explaining 'local' special value for connectionId or path conventions). 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.

Purpose4/5

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

The description clearly states the verb 'list' and the resources 'files and directories', and specifies the scope 'on local or remote server'. However, it doesn't explicitly differentiate from sibling tools like ssh_file_info (which gets metadata for a specific file) or ssh_execute (which could also list files via command execution).

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 needing an established SSH connection first), nor does it compare to sibling tools like ssh_execute (which could run 'ls' commands) or ssh_file_info (for single file details).

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

ssh_read_outputC

Read output from an interactive shell session

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesInteractive session ID
timeoutNoTimeout in milliseconds to wait for output
clearBufferNoClear the output buffer after reading

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 but offers minimal behavioral insight. It mentions reading output but doesn't disclose what happens on timeout, how output is formatted, whether it's blocking/non-blocking, or error conditions. This is inadequate for a tool that interacts with live shell sessions.

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's appropriately sized and front-loaded with the core purpose.

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

Completeness2/5

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

For a tool that reads from interactive sessions with no annotations and no output schema, the description is insufficient. It doesn't explain return values, error handling, or important behavioral aspects like what 'output' includes (stdout, stderr, both). More context is needed given the 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 the schema fully documents all three parameters. The description adds no additional parameter context beyond implying a session exists, which is already covered by the sessionId parameter's description. 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.

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 output') and resource ('from an interactive shell session'), making the purpose immediately understandable. It doesn't explicitly differentiate from siblings like ssh_execute or ssh_send_input, but the focus on reading output from an existing session is reasonably distinct.

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., needing an active session via ssh_start_interactive_shell), exclusions, or comparisons to non-interactive execution tools like ssh_execute.

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

ssh_save_credentialC

Save SSH credentials for reuse

ParametersJSON Schema
NameRequiredDescriptionDefault
credentialIdYesUnique identifier for this credential
hostYesSSH server hostname or IP address
portNoSSH port number
usernameYesSSH username
passwordNoSSH password (if not using key)
privateKeyPathNoPath to private key file
passphraseNoPassphrase for private key

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It states the tool saves credentials but lacks critical behavioral details: where credentials are stored (e.g., in-memory, file, database), security implications (e.g., encryption, persistence), whether it overwrites existing credentials with the same ID, or what happens on success/failure. This is inadequate for a tool handling sensitive data.

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 no wasted words. It's front-loaded with the core purpose, making it easy to parse quickly. Every word earns its place by conveying the essential action and resource.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete for a tool that handles sensitive SSH credentials. It misses key context: storage method, security behavior, interaction with sibling tools (e.g., ssh_list_credentials), and what 'reuse' entails. For a 7-parameter mutation tool, this leaves significant gaps.

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 7 parameters. The description adds no parameter-specific information beyond implying credential persistence. Baseline 3 is appropriate since the schema handles parameter semantics, though the description doesn't compensate for any gaps (none exist).

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 ('Save') and resource ('SSH credentials for reuse'), making the purpose understandable. It doesn't explicitly distinguish from siblings like ssh_delete_credential or ssh_list_credentials, but the verb 'Save' implies creation/persistence versus deletion or listing.

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., needing to save credentials before using ssh_connect_with_credential), exclusions, or comparisons to other credential-related tools like ssh_delete_credential or ssh_list_credentials.

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

ssh_send_inputC

Send input to an interactive shell session with optional typing simulation

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesInteractive session ID
inputYesInput to send to the shell
simulateTypingNoSimulate human typing with delays

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions 'optional typing simulation' which hints at behavioral traits (delays), but lacks critical details: whether this requires specific permissions, if input is buffered or immediate, error handling (e.g., invalid sessionId), or side effects (e.g., session state changes). For a tool that interacts with shell sessions, this is a significant gap in transparency.

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 waste—it front-loads the core action ('Send input to an interactive shell session') and adds optional detail ('with optional typing simulation'). Every word earns its place, making it appropriately sized and well-structured for quick comprehension.

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 complexity (interactive shell interaction), no annotations, and no output schema, the description is incomplete. It doesn't explain return values (e.g., success/failure, output handling), error conditions, or dependencies on other tools like ssh_start_interactive_shell. For a tool with behavioral nuances and sibling interactions, this leaves critical gaps for an AI 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?

Schema description coverage is 100%, so the schema fully documents parameters (sessionId, input, simulateTyping). The description adds minimal value beyond the schema—it implies 'typing simulation' relates to simulateTyping but doesn't elaborate on delay behavior or use cases. Baseline 3 is appropriate as the schema does the heavy lifting, though no extra semantic context is provided.

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 verb ('Send input') and resource ('to an interactive shell session'), specifying the action and target. It distinguishes from siblings like ssh_execute (non-interactive) and ssh_read_output (receiving output), though not explicitly named. However, it doesn't fully differentiate from all siblings like ssh_start_interactive_shell (initiating sessions).

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., requiring an active interactive session started via ssh_start_interactive_shell), exclusions (e.g., not for non-interactive commands), or comparisons with siblings like ssh_execute for one-off commands. Usage 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.

ssh_set_working_directoryC

Set the current working directory for a connection

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesSSH connection ID
workingDirectoryYesWorking directory path to set as current

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 ('Set') but lacks details on permissions required, whether changes are persistent across sessions, error handling, or side effects. 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 that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, 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?

Given the tool involves mutation (setting a directory) with no annotations and no output schema, the description is incomplete. It doesn't explain what happens on success/failure, return values, or behavioral nuances, which are critical for an agent to use it correctly in context with siblings.

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 both parameters ('connectionId' and 'workingDirectory') fully. The description implies setting a directory path but adds no syntax, format, or validation details beyond what the schema provides, meeting the baseline for high coverage.

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 ('Set') and resource ('current working directory for a connection'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'ssh_get_working_directory' or 'ssh_execute' which might also involve directory operations, missing full sibling distinction.

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., needing an active SSH connection), exclusions, or compare to siblings like 'ssh_get_working_directory' for retrieval or 'ssh_execute' for commands in a directory, 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.

ssh_start_interactive_shellC

Start an interactive shell session with PTY support for typing simulation

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionIdYesSSH connection ID
sessionIdYesUnique identifier for this interactive session
shellNoShell to use (e.g., /bin/bash, /bin/zsh)/bin/bash
colsNoTerminal columns
rowsNoTerminal rows

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 'PTY support for typing simulation,' hinting at interactive capabilities, but fails to describe critical behaviors such as session lifecycle management, how output is handled (e.g., via ssh_read_output), or potential side effects like resource consumption. This leaves significant gaps for a tool that initiates interactive sessions.

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 ('Start an interactive shell session') and adds a key feature ('with PTY support for typing simulation') without unnecessary details. 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 starting an interactive shell session, no annotations, and no output schema, the description is incomplete. It lacks information on return values, error handling, session management dependencies (e.g., on ssh_read_output for reading output), and behavioral nuances, leaving the agent under-informed for effective tool invocation.

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%, with each parameter clearly documented in the input schema (e.g., connectionId as 'SSH connection ID,' shell with default '/bin/bash'). The description adds no additional parameter semantics beyond implying interactive use, so it meets the baseline score of 3 where 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 ('Start an interactive shell session') and specifies key functionality ('with PTY support for typing simulation'), which distinguishes it from non-interactive execution tools like ssh_execute. However, it doesn't explicitly differentiate from all sibling tools, such as ssh_close_interactive_shell, which is related but opposite in purpose.

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 ssh_execute for non-interactive commands or ssh_connect for establishing connections. It lacks context about prerequisites (e.g., needing an active SSH connection via connectionId) or exclusions, leaving the agent to infer usage from parameter names 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. 18 tool updates
    • First observedssh_close_interactive_shell
    • First observedssh_connect
    • First observedssh_connect_with_credential
    • First observedssh_copy_file
    • First observedssh_delete_credential
    • First observedssh_disconnect
    • First observedssh_docker_deploy
    • First observedssh_docker_status
    • First observedssh_execute
    • First observedssh_file_info
    • First observedssh_get_working_directory
    • First observedssh_list_credentials
    • First observedssh_list_files
    • First observedssh_read_output
    • First observedssh_save_credential
    • First observedssh_send_input
    • First observedssh_set_working_directory
    • First observedssh_start_interactive_shell

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap. For example, ssh_connect establishes a connection, ssh_execute runs commands, ssh_list_files enumerates files, and ssh_docker_deploy handles container deployment. The descriptions reinforce unique functions, preventing misselection.

Naming Consistency5/5

All tools follow a consistent 'ssh_verb_noun' pattern, such as ssh_connect, ssh_execute, and ssh_list_files. This uniform naming scheme makes the tool set predictable and easy to navigate, with no deviations in style or structure.

Tool Count4/5

With 18 tools, the count is slightly high but reasonable for the SSH server domain, which requires operations for connection management, file handling, command execution, Docker integration, and credential storage. It covers a broad scope without being excessive.

Completeness5/5

The tool set provides comprehensive coverage for SSH operations, including connection lifecycle (connect, disconnect), file management (copy, list, info), command execution (execute, interactive shell), Docker deployment, and credential handling. No obvious gaps exist for typical SSH 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

  • F
    license
    B
    quality
    D
    maintenance
    Enables seamless SSH operations including secure connections, file transfers, interactive shell sessions, and Docker container management on remote servers. Supports both password and SSH key authentication with credential management and connection pooling.
    18
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables secure SSH connections to multiple remote servers with support for command execution, file transfers (SFTP), directory listing, and both password and key-based authentication.
    7
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables remote server management through SSH and SFTP, supporting command execution, file transfers, and interactive shell sessions. It allows for multiple concurrent connections using either password or SSH key authentication.
    11
    19
    4
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables secure SSH connections to remote servers for executing shell commands and managing active sessions. It supports authentication via passwords or private keys and provides optional host-based access control.
    4
    210
    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/widjis/mcp-ssh'

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