SSH MCP Server
SSH MCP サーバー
SSH機能を提供するモデルコンテキストプロトコル(MCP)サーバー実装。このサーバーは、MCPプロトコルを介した安全なリモートアクセスと実行を可能にします。
特徴
MCPプロトコルを使用したSSHサーバーの実装
データの永続性のためのSQLiteデータベース統合
型安全性と開発エクスペリエンスの向上を実現する TypeScript 実装
Related MCP server: Remote Command MCP Server
前提条件
Node.js(v16以上を推奨)
npm または yarn パッケージマネージャー
開発のためのTypeScriptの知識
インストール
Smithery経由でインストール
Smithery経由で Claude Desktop 用の SSH サーバーを自動的にインストールするには:
npx -y @smithery/cli install @KinoThe-Kafkaesque/ssh-mcp-server --client claude手動インストール
リポジトリをクローンします。
git clone <repository-url>
cd ssh-server依存関係をインストールします:
npm installプロジェクトをビルドします。
npm run build使用法
構成
サーバーはSSH認証情報を保存するためにSQLiteデータベース( ssh.db )を使用します。データベースファイルはサーバーの起動時に自動的に作成されます。
ツール
サーバーは次のツールを提供します。
ssh_exec
SSH 経由でコマンドを実行します。
入力パラメータ:
host: 接続先のホスト。(必須)command: 実行するコマンド。(必須)username: SSH接続に使用するユーザー名。(必須)privateKeyPath: 秘密鍵ファイルへのパス。(必須)
使用例:
{
"tool_name": "ssh_exec",
"arguments": {
"host": "example.com",
"command": "ls -l",
"username": "user",
"privateKeyPath": "/path/to/private/key"
}
}注意: privateKeyPathは、秘密鍵ファイルへの有効なパスである必要があります。
資格情報の追加
新しい SSH 資格情報を追加します。
入力パラメータ:
name: 資格情報の名前。(必須)host: 接続先のホスト。(必須)username: SSH接続に使用するユーザー名。(必須)privateKeyPath: 秘密鍵ファイルへのパス。(必須)
使用例:
{
"tool_name": "add_credential",
"arguments": {
"name": "my_credential",
"host": "example.com",
"username": "user",
"privateKeyPath": "/path/to/private/key"
}
}注意: privateKeyPathは、秘密鍵ファイルへの有効なパスである必要があります。
資格情報のリスト
保存されているすべての SSH 資格情報を一覧表示します。
入力パラメータ:
なし
使用例:
{
"tool_name": "list_credentials",
"arguments": {}
}資格情報を削除する
保存された SSH 資格情報を削除します。
入力パラメータ:
name: 削除する資格情報の名前。(必須)
使用例:
{
"tool_name": "remove_credential",
"arguments": {
"name": "my_credential"
}
}サーバーの起動
npm startサーバーは設定されたポートで実行を開始します (デフォルト設定はソース コードで変更できます)。
プロジェクト構造
src/- ソースコードディレクトリbuild/- コンパイルされたJavaScript出力node_modules/- プロジェクトの依存関係
依存関係
@modelcontextprotocol/sdk: MCP プロトコルの実装sqlite3: SQLite データベース ドライバーtypescript: TypeScript サポートの開発依存関係
発達
プロジェクトに変更を加えるには:
src/ディレクトリに変更を加えますプロジェクトを再構築します。
npm run build変更をテストするにはサーバーを起動します。
npm startライセンス
ISC
貢献
リポジトリをフォークする
機能ブランチを作成する
変更をコミットする
ブランチにプッシュする
新しいプルリクエストを作成する
Available Tools
5 toolsadd_credentialC
Add a new SSH credential with private key file path
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| name | Yes | ||
| privateKeyPath | Yes | ||
| username | Yes |
TDQS
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 states it adds a credential but doesn't cover critical aspects: whether this requires admin permissions, if it overwrites existing credentials, error handling (e.g., invalid file paths), or what happens on success (e.g., confirmation message). It mentions 'private key file path' but not how it's stored or used. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to scan. Every part of the sentence contributes directly to the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (a mutation tool for SSH credentials), lack of annotations, no output schema, and low schema coverage, the description is incomplete. It doesn't explain return values, error cases, or behavioral nuances. For a tool that likely involves security-sensitive operations, more context is needed to ensure safe and correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only mentions 'private key file path', which maps to one of the four parameters (privateKeyPath). It doesn't explain the other parameters (host, name, username), their purposes, formats, or constraints. The description adds minimal value beyond the schema, failing to address the coverage gap adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add') and resource ('SSH credential'), specifying it's for a new credential with a private key file path. It distinguishes from siblings like list_credentials (read) and remove_credential (delete), though it doesn't explicitly mention rsync_copy or ssh_exec. The purpose is specific but could be more detailed about what 'add' entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing private key file), exclusions, or comparisons to siblings like ssh_exec (which might use credentials). The description implies usage for adding SSH credentials but lacks contextual advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_credentialsB
List all stored SSH credentials
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't describe how it behaves: no information about return format (e.g., list structure, credential details), pagination, error conditions, or authentication requirements. This is a significant gap for a tool that accesses 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.
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 action and resource, making it easy to parse. Every word earns its place without redundancy or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of listing credentials (sensitive data access) with no annotations and no output schema, the description is incomplete. It doesn't explain what information is returned (e.g., credential IDs, types, metadata), security implications, or how to handle the results, leaving critical gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so the schema already fully documents the input. The description appropriately doesn't add parameter details, and the baseline for 0 parameters is 4. It could be 5 if it explicitly stated 'no parameters required' but this is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all stored SSH credentials'), making the purpose immediately understandable. However, it doesn't differentiate from potential sibling tools like 'get_credentials' or 'search_credentials' if they existed, 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.
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 'add_credential' or 'remove_credential'. It doesn't mention prerequisites, context, or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_credentialC
Remove a stored SSH credential
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool performs a removal operation, implying mutation, but doesn't address critical aspects like whether this is destructive, irreversible, requires specific permissions, or what happens on success/failure. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation with no annotations, 0% schema coverage, and no output schema), the description is incomplete. It lacks details on behavior, parameters, return values, and error handling, making it inadequate for safe and effective use by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the single parameter 'name' is undocumented in the schema. The description adds no semantic information about this parameter, such as what 'name' refers to (e.g., credential identifier), its format, or examples. It fails to compensate for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove') and resource ('stored SSH credential'), making the purpose immediately understandable. It doesn't explicitly distinguish from siblings like 'add_credential' or 'list_credentials', but the verb 'Remove' inherently differentiates it from those operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'add_credential' or 'list_credentials'. The description lacks context about prerequisites (e.g., needing an existing credential to remove) or exclusions, leaving usage entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rsync_copyC
Copy files/directories between local and remote server via rsync
| Name | Required | Description | Default |
|---|---|---|---|
| credentialName | Yes | Name of the stored credential to use | |
| direction | Yes | Direction of copy (toRemote or fromRemote) | |
| localPath | Yes | Path on the local machine | |
| remotePath | Yes | Path on the remote server |
TDQS
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 copying via rsync but doesn't cover critical aspects like whether it overwrites files, handles symlinks, requires specific permissions, has rate limits, or what happens on errors. This leaves significant gaps 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.
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 any fluff. It's front-loaded and every word contributes to understanding the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of file copying with rsync, no annotations, and no output schema, the description is inadequate. It lacks details on behavior, error handling, and output format, which are essential for safe and effective use of this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional meaning beyond implying the need for paths and direction, which is already clear from the schema. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Copy files/directories') and the mechanism ('via rsync'), specifying both the resource (files/directories) and the scope (between local and remote server). It doesn't explicitly differentiate from sibling tools like ssh_exec, but the focus on copying distinguishes it from credential management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like ssh_exec for other operations, nor does it mention prerequisites such as needing stored credentials. It only states what the tool does, not when or why to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ssh_execC
Execute command over SSH using private key file path
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes | ||
| host | Yes | ||
| privateKeyPath | Yes | ||
| username | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the authentication mechanism but doesn't describe execution behavior (e.g., synchronous/asynchronous, timeout handling, error propagation, output capture, or security implications). For a potentially destructive remote execution tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core functionality without unnecessary words. It's appropriately sized for a tool with this complexity level and gets straight to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a remote execution tool with 4 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what happens during execution, how output is returned, error handling, security considerations, or typical use patterns. The agent would need to guess about important behavioral aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for all 4 parameters, the description doesn't add any semantic information beyond what's implied by parameter names. It mentions 'private key file path' which aligns with the privateKeyPath parameter name but doesn't explain format expectations, path resolution, or relationships between parameters like host and username.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute command') and resource ('over SSH using private key file path'), making the purpose immediately understandable. It doesn't distinguish from sibling tools like rsync_copy or credential management tools, but it's specific enough to understand what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like rsync_copy or when SSH execution is appropriate. It mentions the authentication method (private key file path) but doesn't explain prerequisites, error conditions, or typical use cases.
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.
5 tool updates
v1.0.0- First observed
add_credential - First observed
list_credentials - First observed
remove_credential - First observed
rsync_copy - First observed
ssh_exec
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose with no overlap: credential management (add, list, remove) is separate from remote operations (rsync, ssh_exec). The descriptions clearly differentiate between managing stored credentials and performing remote actions, eliminating any potential for misselection.
All tools follow a consistent verb_noun pattern with snake_case: add_credential, list_credentials, remove_credential, rsync_copy, ssh_exec. The naming is predictable and readable throughout, with no deviations or mixed conventions.
With 5 tools, this server is well-scoped for SSH operations. Each tool earns its place by covering essential functions: credential management (3 tools) and remote execution/copy (2 tools). This count is appropriate for the domain without being too thin or heavy.
The tool surface covers core SSH workflows: credential lifecycle (add, list, remove) and remote operations (execute, copy). A minor gap exists in credential updates (e.g., update_credential), but agents can work around this by removing and re-adding. Overall, the set provides good coverage for the stated purpose.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Model Context Protocol server for Studex tools, notifications, and profile integrations
Model Context Protocol server for todo.vu task management and time tracking.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA secure SSH server implementation for Model Context Protocol that enables remote command execution and file operations, supporting both password and key-based authentication.58MIT
- AlicenseBqualityFmaintenanceA Model Context Protocol server that enables remote execution of shell commands across different operating systems, automatically handling platform-specific differences between Windows and Unix-like systems.1MIT
- AlicenseBqualityDmaintenanceA server that enables remote command execution over SSH through the Model Context Protocol (MCP), supporting both password and private key authentication.119 npm2MIT
- FlicenseAqualityDmaintenanceA local Model Context Protocol server that allows LLMs to securely execute shell commands on remote Linux and Windows systems via SSH connections.64 npm2-