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用法
配置
该服务器使用 SQLite 数据库 ( ssh.db ) 来存储 SSH 凭据。该数据库文件将在服务器启动时自动创建。
工具
该服务器提供以下工具:
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执照
国际学习中心
贡献
分叉存储库
创建你的功能分支
提交你的更改
推送到分支
创建新的 Pull 请求
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.17 npm2MIT
- FlicenseAqualityDmaintenanceA local Model Context Protocol server that allows LLMs to securely execute shell commands on remote Linux and Windows systems via SSH connections.67 npm2-