MCP.Market

Cygnus SSH MCP server

by cygnussystems·io.github.cygnussystems/cygnus-ssh-mcp·v1.5.1·5 stars

SSH-based MCP control of remote Linux, macOS, and Windows servers -- 46 purpose-built tools.

A88/100grade A
What users say
No reviews yet
Be the first
Safety scan
A88/100

full report

Adoption
Growing

5 stars38 downloads/wk

Reviews

Write one

Nobody has reviewed Cygnus SSH yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Cygnus SSH tools (46, 15 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • list_tools

    Retrieves a list of all available tools on this MCP server, along with their descriptions.

  • ssh_archive_createwrite action

    Create a compressed archive from a directory.

  • ssh_archive_extract

    Extract an archive to a directory. The accepted format is platform-specific and determined purely by `archive_path`'s file extension (not by inspecting the archive's actual content): - Linux/macOS: `.tar.gz`, `.tgz`, or `.tar` only. A `.zip` file (e.g. created by ssh_archive_create on Windows) will fail here with an unsupported-format error. - Windows: `.zip` only. A `.tar`/`.tar.gz` file (e.g. cr

  • ssh_cmd_check_status

    Wait for the specified duration, then check the status of a command started with ssh_cmd_run. Call this repeatedly - it's designed to be polled - after ssh_cmd_run returns status='io_timeout' or 'wait_timeout' (the remote command is still genuinely running in both cases - background monitoring keeps collecting its output/exit code), until you get a TERMINAL status below. Do not rerun the original

  • ssh_cmd_clear_history

    Clear the command history for the current SSH connection.

  • ssh_cmd_history

    Retrieve command execution history with optional output snippets.

  • ssh_cmd_killwrite action

    Terminate a currently running command by its handle ID (the `id` field from ssh_cmd_run's response).

  • ssh_cmd_output

    Retrieve captured output from a command started with ssh_cmd_run, identified by its handle_id. Useful after an io_timeout/wait_timeout to see progress so far - including output produced after that call returned, since background monitoring keeps collecting it - or any time to re-inspect an earlier command's output without rerunning it.

  • ssh_cmd_runwrite action
  • ssh_conn_add_host
  • ssh_conn_connect

    Establish an SSH connection using a pre-configured host. The host can be specified by its 'user@hostname' key or by its alias.

  • ssh_conn_host_info

    Get detailed SSH connection status and system information.

  • ssh_conn_is_connected

    Check if there is an active SSH connection.

  • ssh_conn_status

    Get essential SSH connection status information.

  • ssh_conn_verify_sudo

    Check whether elevated access is available on the remote system, without running any privileged command. Call this before using `use_sudo=True` on other tools if you're not sure elevation will succeed.

  • ssh_dir_batch_delete_fileswrite action

    Recursively find and delete files matching a filename glob pattern (same pattern syntax as ssh_dir_search_glob, e.g. `*.tmp`) under a directory. `dry_run` DEFAULTS TO `True` - calling this with no arguments other than `path`/`pattern` only PREVIEWS which files would be deleted and deletes NOTHING; you must explicitly pass `dry_run=False` to actually delete.

  • ssh_dir_calc_size

    Calculate the total size of a directory recursively (sum of all file sizes under it).

  • ssh_dir_copy

    Copy a directory recursively (remote-to-remote; for local<->remote use ssh_dir_transfer instead).

  • ssh_dir_deletewrite action

    Delete a directory and all its contents recursively. `dry_run` DEFAULTS TO `True` - calling this with no arguments other than `path` only PREVIEWS what would be deleted and deletes NOTHING; you must explicitly pass `dry_run=False` to actually delete. Refuses to delete a small set of critical paths outright (root, home directory, `C:\Windows`, `C:\Users`, etc.) regardless of `dry_run`.

  • ssh_dir_list_advanced

    List contents of a directory recursively with full metadata (size, permissions, ownership, modification time) - use this instead of ssh_dir_list_files_basic (which only returns bare filenames, non-recursive) when you need more than just names, or ssh_dir_search_glob when you only need to filter by filename pattern without full metadata (that tool is also faster for large trees).

  • ssh_dir_list_files_basic

    List the immediate contents of a directory (via SFTP - not recursive, no metadata). For recursive listing with size/permissions/type/etc., or to filter by filename pattern, use ssh_dir_list_advanced or ssh_dir_search_glob instead.

  • ssh_dir_mkdirwrite action

    Create a directory on the remote system.

  • ssh_dir_removewrite action

    Remove a directory on the remote system - this is the simple `rmdir`/`Remove-Item` equivalent. There is NO dry-run/preview mode here (unlike ssh_dir_delete below) - it acts immediately. If `recursive=False` (default) and the directory is not empty, this RAISES an exception rather than returning an error dict - it does not partially delete anything.

  • ssh_dir_search_files_content

    Recursively search file CONTENTS for a pattern under a directory (unlike ssh_dir_search_glob/ssh_file_find_lines_with_pattern, which match filenames or search within a single already-known file respectively).

  • ssh_dir_search_glob

    Recursively search for files (or directories, with `include_dirs=True`) matching a filename glob pattern (e.g. `*.log`) - matches by NAME only, not content; use ssh_dir_search_files_content instead to search inside files. For metadata beyond just path/type (size, mtime, permissions), use ssh_dir_list_advanced instead.

  • ssh_dir_transferwrite action

    Transfer directories between local and remote systems.

  • ssh_file_copy

    Copy a file on the remote host (source and destination are both remote paths - for local<->remote transfers use ssh_file_transfer instead).

  • ssh_file_delete_line_by_contentwrite action

    Delete a line by its exact content. `match_line` must match EXACTLY ONE line in the file (whitespace-trimmed, literal text - not a pattern); if it matches zero lines or more than one, the operation fails with a descriptive error rather than guessing which line(s) to delete. Use ssh_file_find_lines_with_pattern first if you're not sure the line is unique. (Equivalent to ssh_file_replace_line_multi(

  • ssh_file_find_lines_with_pattern

    Search for a pattern in a remote file and return matching lines with their line numbers. Use this to find WHERE a pattern occurs before using ssh_file_get_context_around_line to see surrounding lines, or ssh_file_replace_line/ssh_file_delete_line_by_content to edit (those require an exact, unique line match - this tool helps you find that exact line first).

  • ssh_file_get_context_around_line

    Get lines before and after a line, to see it in context before editing. Like the line-editing tools (ssh_file_replace_line and siblings), `match_line` must match exactly one line in the file (whitespace-trimmed, literal text, not a pattern) - use ssh_file_find_lines_with_pattern first if you're not sure the line is unique.

  • ssh_file_insert_lines_after_matchwrite action

    Insert one or more new lines immediately after a matching line. `match_line` must match EXACTLY ONE line in the file (whitespace-trimmed, literal text - not a pattern); if it matches zero lines or more than one, the operation fails with a descriptive error rather than guessing. Use ssh_file_find_lines_with_pattern first if you're not sure the line is unique.

  • ssh_file_move

    Move or rename a file or directory (works for both - whichever `source` is).

  • ssh_file_read

    Read file contents directly via SFTP.

  • ssh_file_replace_line

    Replace a line in a file with a new line. `match_line` must match EXACTLY ONE line in the file (whitespace-trimmed, literal text - not a pattern); if it matches zero lines or more than one, the operation fails with a descriptive error rather than guessing which line you meant. Use ssh_file_find_lines_with_pattern first if you're not sure the line is unique.

  • ssh_file_replace_line_multi

    Replace a line in a file with one or more new lines (or delete it, with an empty list). Use this instead of ssh_file_replace_line when you need to insert more than one line, or delete a line without using the separate ssh_file_delete_line_by_content tool.

  • ssh_file_stat

    Get status information about a file or directory (via SFTP stat - works the same way on all platforms, no shell command involved).

  • ssh_file_transferwrite action

    Transfer a single FILE between the local machine (running this MCP server) and the remote host, via SFTP. Both `local_path` and `remote_path` must be file paths, not directories - for whole-directory transfers, use ssh_dir_transfer instead. For remote-to-remote copies (no local machine involved), use ssh_file_copy instead.

  • ssh_file_writewrite action

    Create a new file, or overwrite/append to an existing one, with the given content (works the same whether or not the file already exists - `append=True` on a nonexistent file just creates it). Handles special characters and multi-line content properly.

  • ssh_host_disconnect

    Disconnect the current SSH connection if one exists.

  • ssh_host_list

    List all configured SSH hosts with their aliases and descriptions. This is the ONLY correct way to see what hosts are configured - never read the host configuration TOML file directly (ssh_conn_add_host's docstring names its path). That file stores every host's password, sudo password, and key passphrase in plaintext; this tool deliberately omits all of that and returns only the fields below. If y

  • ssh_host_removewrite action

    Remove a host configuration from the host configuration TOML file (see ssh_conn_add_host's docstring for its exact path and why you should never read it directly - use ssh_host_list to see what's configured instead).

  • ssh_host_updatewrite action
  • ssh_host_use_config

    Switch which host configuration file ssh_host_list, ssh_conn_connect, ssh_conn_add_host, ssh_host_update, and ssh_host_remove all operate against, for the rest of this session (or until you call this again) - not just for one call. This is the same "one active thing at a time" model ssh_conn_connect uses for SSH connections, applied to host configuration files instead; the two are completely indep

  • ssh_task_killwrite action

    Terminate a background task (launched via ssh_task_launch, or any other real remote PID) by sending a signal to its PID.

  • ssh_task_launch

    Launch a command in the background and return its PID immediately, without waiting for it to complete.

  • ssh_task_status

    Check the liveness of a background task by PID (from ssh_task_launch, or any other real remote PID - e.g. the `pid` field from ssh_cmd_run). This does a live check on the remote host every call, not a cached lookup, so it's safe to call repeatedly.

Public scan report

scanner v0.1.9 · 2026-09-25 · same rubric, same numbers if you re-run it

no findings
  • Code scan15 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenancelast push 66 days ago12/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Overall 88/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Cygnus SSH compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
88/100
higher than 75% of 48,255 servers
Tools
46
the typical server has 7
Tools that change things
33%
typical: 0%. Fewer write tools means less an agent can break
GitHub stars
5
more than 83% of 28,688 servers
Downloads a week
38
more than 29% of 12,191 servers with a package

What its tools let an agent do: 31 read · 15 change

Install Cygnus SSH in Claude Code, Cursor or VS Code

claude mcp add cygnus-ssh-mcp -- uvx cygnus-ssh-mcp
Add to Cursor

What the publisher says

From the Cygnus SSH repository's README, as published. We do not edit it. Read it on GitHub

<!-- mcp-name: io.github.cygnussystems/cygnus-ssh-mcp -->

cygnus-ssh-mcp

Cross-platform SSH MCP server with 46 purpose-built tools for real server management by AI agents

Give Claude, OpenCode, or any MCP-compatible AI assistant full control of your Linux, macOS, and Windows servers with 46 specialized tools

Prerequisites · Installation · Quick Start · Features · Documentation

[!TIP]

A note from the author: I've been running this daily since April 2025 — over a

year now — to manage a dozen+ machines and devices, plus a Proxmox host running

30+ containers, across a network tied together with Tailscale. It started as a

tool to solve my own problem, and it's saved me a huge amount of manual work ever

since. After a year of running it against Linux, I've since added support for

Windows, macOS, and other devices with reduced shells like BusyBox. I'm

open-sourcing it now because I think anyone running real infrastructure will find

it just as useful. This is a young public repo, but the tool behind it isn't new

or unproven — it's been battle-tested against my own servers for over a year.

If you find it useful, a ⭐ star or a mention to someone who manages their own

infrastructure goes a long way for a project this new — thank you!

Why cygnus-ssh-mcp?

cygnus-ssh-mcp is an MCP server - usable from Claude Desktop, Claude Code, OpenCode, or any other MCP-compatible client - that connects your AI assistant directly to your remote servers over SSH, exposing 46 purpose-built tools instead of one generic command-runner. It turns natural-language requests into real systems administration - connecting by alias, editing files, managing background processes, handling sudo - across Linux, macOS, and Windows targets alike.

Doing that properly means solving a pile of genuinely hard, per-platform problems that a naive ssh wrapper never has to face - and that this project hit and fixed the hard way, including:

  • Getting a real PID back from a Windows target, instead of a meaningless local channel number
  • Recovering the actual exit code when Win32-OpenSSH silently flattens it to 1
  • Reading file contents via SFTP instead of Get-Content, because PowerShell's console encodes stdout in its OEM code page and corrupts anything non-ASCII
  • Killing a sudo'd background process without leaving its privileged child orphaned or blindly firing SIGKILL at the wrong PID

None of this shows up until you actually run these tools against real Linux, macOS, and Windows targets under real conditions - which is exactly how every one of these was found and fixed here, not guessed at from documentation.

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Cygnus SSH: common questions

Is Cygnus SSH MCP server safe?
Yes, by our scan: it is graded A (88/100). Read the Cygnus SSH safety report
How do I install Cygnus SSH?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Cygnus SSH need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is Cygnus SSH maintained?
The last commit was 106 days ago (2026-07-21). The latest release is v1.5.1.
What can I use instead of Cygnus SSH?
Servers from other publishers that do the same job: SSH — policy-gated remote access MCP server.
How does Cygnus SSH compare with other MCP servers?
safety score 88/100 (higher than 75% of 48,255 servers); tools 46 (the typical server has 7); tools that change things 33% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to Cygnus SSH

Same job from other publishers: the closest match first, then the best rated.