Skip to main content
Glama

SSH MCP Server

Let AI clients safely operate your servers โ€” an SSH-based MCP server

Execute commands and transfer files on remote hosts through standardized MCP tools, with a built-in web admin console and Windows tray application.

Release CI/CD License: ISC

What It Does

Connect MCP-compatible AI clients such as Claude Code and Cursor to your SSH servers, and the AI can:

  • โš™๏ธ Execute commands โ€” remote operations, log troubleshooting, service management

  • ๐Ÿ“ค Upload / ๐Ÿ“ฅ Download files โ€” configuration distribution, log retrieval, resumable large-file transfers

  • ๐Ÿ–ฅ๏ธ Multi-host management โ€” a three-level tree of Project โ†’ Environment โ†’ Host, configured once and usable everywhere

Two usage forms, choose as needed:

Form

Suitable Scenarios

CLI / npm package

Attach to any MCP client as a stdio MCP Server, lightweight and ready to use

Windows desktop app (recommended)

Pure tray resident + built-in web admin console + online self-update, zero Node.js environment required

Related MCP server: sshops

โœจ Key Features

Connectivity

  • ๐Ÿ” Multiple authentication methods: password / private key (including encrypted private keys) / SSH Agent / keyboard-interactive 2FA

  • ๐Ÿ”— SOCKS5 and HTTP(S) proxy support, tunneling through jump networks

  • ๐Ÿš„ Dual transfer modes:

    • exec โ€” one channel per command, for standard Linux hosts

    • shell โ€” persistent session + marker protocol, adapted for bastion hosts / jump servers

  • โฑ๏ธ Independent timeouts at three levels: connection / command / SFTP; large files use fastPut/fastGet with segmented concurrency

Security Policy

  • Command whitelist / blacklist (regex), with both host-level and global-level filtering

  • Local and remote path whitelists, constraining the scope of file transfers

  • Full audit logging: commands, outputs, and transfer records are traceable

Web Admin Console

  • Project-environment-host three-level visual management, with drag-to-sort connections

  • Test connection, JSON batch import/export, automatic reuse of ~/.ssh/config

  • Scheduled backup snapshots and one-click restore; one-click registration of MCP clients (Claude Code, etc.)

  • Light and dark themes, following the system setting

Windows Desktop App

  • ๐ŸŽฏ Pure tray single exe: SSH service, MCP Server, and Admin static site all embedded, no Node.js dependency

  • Auto-start on boot, keeps running on shutdown; "Open Admin Page" goes straight to the system default browser

  • ๐Ÿ”„ Online self-update: built-in minisign signature verification, automatically detects new versions and upgrades silently

๐Ÿ“ธ Interface Overview

Connection Management โ€” manage all hosts with a three-level tree:

System Page โ€” service status and one-click MCP client registration:

๐Ÿš€ Quick Start

Option 1: Windows Desktop App

Download SSH-MCP-Server_x.x.x_x64-setup.exe from Releases and install it. After launch, it stays in the system tray; use the tray menu item "Open Admin Page" to enter the web console.

Existing users will be upgraded automatically on subsequent releases, with no manual action needed.

Option 2: npm Package (stdio MCP Server)

# ๅ…จๅฑ€ๅฎ‰่ฃ…
npm install -g @sieop/ssh-mcp-server

Register it in your MCP client (using Claude Code as an example):

claude mcp add ssh-server -- ssh-mcp-server --host your.server.com --username root --password YOUR_PWD

Or write the JSON configuration directly:

{
  "mcpServers": {
    "ssh-server": {
      "command": "npx",
      "args": ["-y", "@sieop/ssh-mcp-server", "--host", "your.server.com", "--username", "root", "--password", "YOUR_PWD"]
    }
  }
}

Configuration files and multi-connection mode are also supported; see docs/migration.md and the CLI help (--help) for details.

Option 3: Build from Source

git clone https://github.com/SIE-Operations-and-Maintenance-Team/ssh-mcp-server.git
cd ssh-mcp-server && npm install

npm run build                 # ๆž„ๅปบ Node ็‰ˆ
npm test                      # ่ฟ่กŒๆต‹่ฏ•
npm --prefix admin-web install && npm --prefix admin-web run build   # ๆž„ๅปบ็ฎก็†ๅฐๅ‰็ซฏ
npm run tauri:build           # ๆž„ๅปบ Windows ๆกŒ้ขๅบ”็”จ๏ผˆ้œ€ Rust ๅทฅๅ…ท้“พ๏ผ‰

๐Ÿงฐ MCP Tools Overview

Tool

Description

execute-command

Execute commands remotely, supporting directory switching, timeout, and output limits, subject to whitelist/blacklist constraints

upload / download

SFTP file transfer with segmented concurrency for large files and path whitelist validation

list-servers

List all available connections

๐Ÿ—๏ธ Architecture

โ”Œโ”€ Windows ๆกŒ้ขๅบ”็”จ๏ผˆTauri 2 ็บฏๆ‰˜็›˜ๅ• exe๏ผ‰โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                                            โ”‚
โ”‚  SSH ่ฟžๆŽฅๆฑ  โ”€โ”€ MCP StreamableHTTP (/mcp)                   โ”‚
โ”‚      โ”‚                                                     โ”‚
โ”‚  Admin API (/admin/api/*) โ”€โ”€ ๅ†…ๅตŒ้™ๆ€็ซ™็‚น (/admin/)        โ”‚
โ”‚                                                            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ็ณป็ปŸ้ป˜่ฎคๆต่งˆๅ™จๆ‰“ๅผ€็ฎก็†้กต โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Node ็‰ˆ๏ผˆnpm ๅŒ…๏ผ‰๏ผšstdio MCP Server ๏ผ‹ ๅฏ้€‰ --admin ๅฏๅŠจๅŒไธ€ๅฅ— Web ็ฎก็†ๅฐ

Key modules: src/services/ssh-connection-manager.ts (SSH core), src/server/ (Fastify Admin service), src-tauri/ (Rust desktop shell), admin-web/ (React admin console).

๐Ÿ“‹ More Documentation

๐Ÿ“„ License

ISC ยฉ SIE Operations and Maintenance Team

This project is derived from classfang/ssh-mcp-server, refactored and extended on its basis.

Available Tools

5 tools
downloadC

Download file from 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, the description carries the full burden of behavioral disclosure. It only states that a file is downloaded from a connected server; it does not mention that localPath will be written, files may be overwritten, or that a valid connectionName is needed. This is a significant gap for a tool with side effects on the local filesystem.

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, front-loaded sentence with no filler words. However, it may be underspecified for a tool that writes to the local filesystem, so it is not maximally effective.

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 3-parameter tool with no output schema and no annotations, the description is incomplete. It omits behavioral details such as overwrite behavior and default connection semantics (though connectionName is documented in the schema). An agent would need to infer several operational aspects beyond what is given.

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 already contains descriptions for all three parameters (localPath, remotePath, connectionName), and schema coverage is 100%. The description adds no additional parameter-level meaning, so the baseline score applies.

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 states the precise operation ('Download file') and the source ('from connected server'), clearly identifying it as a remote-to-local transfer. It is distinct from siblings like upload, execute-command, and list-directory, though it does not explicitly distinguish itself by name.

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 about when to use this tool versus alternatives such as upload or list-directory. The description merely restates the operation and leaves the agent to infer selection criteria from the tool name.

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

execute-commandB

Execute command on connected server and get output result

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutNoCommand execution timeout in milliseconds (optional; overrides the connection's commandTimeoutMs or shellCommandTimeoutMs, which defaults to 30000ms)
cmdStringYesCommand to execute
directoryNoWorking directory for command execution
connectionNameNoSSH connection name (optional, default is 'default')

TDQS

B3.3/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It only says commands are executed and output is returned; it fails to mention that this can run arbitrary, potentially destructive commands on the server, how timeouts or working directories affect execution, or what the output result contains (e.g., stdout, stderr, exit code).

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 action and outcome with no redundant words. It is concise and well-structured, though it could have included more behavioral context without becoming bloated.

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 powerful command-execution tool with four parameters and no output schema, the description is incomplete. It does not explain return values, failure modes, side effects, or how parameters like directory and connectionName influence execution. Given the potential for destructive commands, more context is necessary for safe and correct 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 input schema provides 100% description coverage for all four parameters, including default behavior for timeout and connectionName. The description text adds no additional parameter meaning, but the schema already documents each field adequately, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource: "Execute command on connected server and get output result." This clearly conveys the tool's action and outcome, and it is immediately distinguishable from the sibling tools (upload, download, list-servers, list-directory), which all perform different operations.

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

Usage Guidelines3/5

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

The description implies this is for running shell commands on a server versus the file transfer and listing operations of sibling tools, but it provides no explicit when-to-use guidance, prerequisites, or exclusions. Usage context is inferable rather than stated.

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

list-directoryA

List entries of a remote directory (name, type, size, mtime) via SFTP

ParametersJSON Schema
NameRequiredDescriptionDefault
remotePathYesAbsolute POSIX directory path on the remote server, e.g. /var/log
connectionNameNoSSH connection name (optional, default is 'default')

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It does communicate that this is a list/read operation and what fields appear in the result, which is helpful. It doesn't mention behaviors like connection requirements, symlink handling, error conditions, or non-existent paths, but the core read-only nature is reasonably clear.

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, tight sentence that front-loads the action and resource, then adds the useful output-field detail. There is no wasted text.

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

Completeness4/5

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

For a simple listing tool, the description plus fully documented schema covers the essential context: what is listed, what fields are returned, and how the path/connection parameters behave. It lacks explicit return format details and error behavior, but those are minor given the simplicity and lack of an output schema.

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 already describes both parameters fully, including path format and the optional default for connectionName. The description adds no new parameter-level semantics, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a clear verb ('List'), a specific resource ('entries of a remote directory'), and the key returned attributes (name, type, size, mtime). It clearly distinguishes this tool from siblings like execute-command, upload, download, and list-servers.

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

Usage Guidelines3/5

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

The intended use is implied by the description: when you need a directory listing over SFTP. However, there is no explicit guidance about when to prefer this over alternatives, no exclusions, and no mention of prerequisites such as needing a configured SSH connection.

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

list-serversA

List all available SSH server configurations

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. 'List' implies a read-only operation, but the description does not clarify what 'available' means, whether the tool connects to servers, or what kind of configuration data is returned.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler or repetition. It communicates exactly what the tool does in the fewest words necessary.

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

Completeness4/5

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

For a simple, zero-parameter listing tool, this description is mostly complete. It clearly identifies the action and resource, though adding the output format or clarifying what 'configurations' includes would make it fully self-sufficient.

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

Parameters4/5

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

The tool has zero parameters and the schema already covers everything relevant. With no parameters to explain, the baseline of 4 applies, and the description does not need to add parameter-level detail.

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

Purpose5/5

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

The description uses a specific verb ('list') and resource ('SSH server configurations'), making the tool's purpose immediately clear. It is also naturally distinct from sibling tools like execute-command, upload, download, and list-directory.

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 gives no guidance on when to use this tool versus alternatives. It does not mention workflows such as 'use this before connecting to a server' or exclude cases where list-directory might be more appropriate.

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?

Annotations are completely absent, so the description carries the full burden of behavioral disclosure. It only states the basic action and does not mention whether an existing remote file is overwritten, whether directories are created, what permissions are required, or any side effects. This is a significant gap for a mutation-like upload operation.

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 single sentence is concise and front-loaded with the core action ('Upload file'), containing no filler. It effectively states the purpose in minimal words, though it could be slightly expanded with useful context without losing conciseness.

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 too sparse. It does not explain what happens on success or failure, whether the remote path refers to a file or directory, or how the 'connected server' is determined. The schema covers parameter names but the overall operational context is 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?

The input schema already provides descriptions for all three parameters, with 100% coverage, so the baseline applies. The description adds no additional parameter meaning, but because the schema fully covers 'localPath', 'remotePath', and 'connectionName', a score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('Upload file') and the target ('connected server'), which distinguishes it from siblings like 'download' or 'execute-command'. However, it does not explicitly differentiate from these siblings by naming them or elaborating on the remote context, so it misses the top 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 gives no guidance on when to use this tool versus alternatives like 'download' or 'execute-command'. It does not mention prerequisites, such as needing an existing server connection, nor when not to use this tool. Usage is only vaguely implied by the verb 'Upload'.

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.

  1. 5 tool updatesv1.1.3
    • First observeddownload
    • First observedexecute-command
    • First observedlist-directory
    • First observedlist-servers
    • First observedupload

TDQS

A3.5/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct operation: remote command execution, file upload, file download, server configuration listing, and directory listing. There is no meaningful overlap or ambiguity between them.

Naming Consistency4/5

Naming mostly follows a clear verb-object pattern with lowercase hyphenation, like execute-command, list-servers, and list-directory. The standalone upload and download verbs deviate slightly from the hyphenated style but remain intuitive and consistent in intent.

Tool Count5/5

Five tools is well-scoped for an SSH MCP server, covering the essential interactions without unnecessary bloat. Each tool earns its place and the set feels focused.

Completeness4/5

The set covers command execution, file transfer, directory browsing, and server enumeration, which are core SSH workflows. Minor gaps like missing explicit remote delete, rename, or mkdir tools are workable because command execution can handle those operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that enables remote SSH command execution and bidirectional file transfers through a standardized interface. It allows AI assistants to securely manage remote servers while keeping credentials isolated and applying command-level security controls.
    ISC
  • A
    license
    Not graded
    quality
    C
    maintenance
    A lightweight, zero-agent SSH operations tool that enables remote command execution, file transfer, and audit logging. It integrates as an MCP server for AI-driven infrastructure management.
    5 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that gives AI agents SSH capabilities to execute commands, transfer files, and inspect remote systems through a preconfigured host list.
    51 npm
    MIT