| Crates.io | ssh-mcp |
| lib.rs | ssh-mcp |
| version | 0.1.3 |
| created_at | 2025-05-16 01:50:58.798849+00 |
| updated_at | 2025-05-16 04:08:23.71399+00 |
| description | SSH Model Context Protocol Server Integration |
| homepage | |
| repository | https://github.com/mingyang91/ssh-mcp |
| max_upload_size | |
| id | 1675877 |
| size | 68,683 |
A Rust implementation of an SSH client server with Model Context Protocol (MCP) integration, allowing Large Language Models (LLMs) to connect to a SSH server and utilize SSH features.
Lightweight and Efficient:
ssh-mcp: only 4.3MB binary size, 1.8MB memory footprintssh-mcp-stdio: only 1.5MB binary size, 2.3MB memory usagedocker: only 27.5MB final image sizeport_forward feature)You have two options for installation:
No Rust toolchain required - just Docker!
# Pull the pre-built image from Docker Hub
docker pull mingyang91/ssh-mcp
# Run the server
docker run -p 8000:8000 mingyang91/ssh-mcp
Or build the image yourself:
# Build the Docker image
docker build -t ssh-mcp .
# Run the server
docker run -p 8000:8000 ssh-mcp
Prerequisites:
cargo install ssh-mcp
To use SSH-MCP with mcpServers, add the following configuration to your mcpServers JSON configuration:
{
"mcpServers": {
"ssh": {
"command": "ssh-mcp-stdio",
"args": []
}
}
}
{
"mcpServers": {
"ssh": {
"command": "docker",
"args": ["run", "--entrypoint", "ssh-mcp-stdio", "-i", "--rm", "ssh-mcp"]
}
}
}
This will register the SSH handler, allowing LLMs to manage SSH connections through your MCP server.
{
"command": "ssh_connect",
"params": {
"address": "example.com:22",
"username": "user",
"password": "password"
}
}
{
"command": "ssh_connect",
"params": {
"address": "example.com:22",
"username": "user",
"key_path": "/path/to/private_key"
}
}
{
"command": "ssh_connect",
"params": {
"address": "example.com:22",
"username": "user"
}
}
Response:
{
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"message": "Successfully connected to user@example.com:22",
"authenticated": true
}
If connection fails:
{
"error": "Failed to connect: Connection refused"
}
{
"command": "ssh_execute",
"params": {
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"command": "ls -la"
}
}
Response:
{
"stdout": "total 32\ndrwxr-xr-x 5 user group 4096 Jan 1 12:00 .\ndrwxr-xr-x 25 user group 4096 Jan 1 12:00 ..\n-rw-r--r-- 1 user group 142 Jan 1 12:00 file.txt\n",
"stderr": "",
"exit_code": 0
}
Note: Port forwarding is enabled by default via the port_forward feature flag.
{
"command": "ssh_forward",
"params": {
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"local_port": 8080,
"remote_address": "internal-server",
"remote_port": 80
}
}
Response:
{
"local_address": "127.0.0.1:8080",
"remote_address": "internal-server:80",
"active": true
}
{
"command": "ssh_disconnect",
"params": {
"session_id": "c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b"
}
}
Response:
"Session c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b disconnected successfully"
{
"command": "ssh_list_sessions"
}
Response:
[
"c8a3b2e1-4f5d-6e7c-8a9b-0c1d2e3f4a5b",
"d9b4c3a2-5e6f-7g8h-9i0j-1k2l3m4n5o6p"
]
The server can be configured through the following environment variables:
| Variable | Description | Default |
|---|---|---|
| MCP_PORT | Port for the MCP server | 8000 |
| RUST_LOG | Logging level | info |
The project uses Cargo features to enable/disable certain functionality:
| Feature | Description | Default |
|---|---|---|
| port_forward | Enables SSH port forwarding support | Enabled |
To build without port forwarding:
cargo build --release --no-default-features
Contributions are welcome! Please feel free to submit a Pull Request.
This project uses GitHub Actions for continuous integration and deployment:
CARGO_REGISTRY_TOKEN, DOCKERHUB_USERNAME, and DOCKERHUB_TOKEN secrets in your GitHub repository settingsThis project is licensed under the MIT License - see the LICENSE file for details.