Metadata-Version: 2.4
Name: ssh-mcp-vn
Version: 0.1.3
Summary: High-performance SSH & SFTP MCP Server for Linux
Author-email: NamHT <namht@example.com>
License: MIT
Requires-Python: >=3.12
Description-Content-Type: text/markdown
Requires-Dist: mcp>=1.2.0
Requires-Dist: asyncssh>=2.14.0
Requires-Dist: pydantic>=2.8.0
Requires-Dist: pydantic-settings>=2.4.0
Requires-Dist: python-dotenv>=1.0.0
Provides-Extra: dev
Requires-Dist: pytest>=8.0.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
Requires-Dist: ruff>=0.5.0; extra == "dev"
Requires-Dist: mypy>=1.10.0; extra == "dev"

# SSH & SFTP MCP Server (ssh-mcp-vn)

Một MCP (Model Context Protocol) Server mạnh mẽ dùng để thực thi lệnh (SSH) và truyền tải file (SFTP) trên **nhiều máy chủ Linux từ xa (multi-host)** cùng lúc.

## Hướng dẫn cài đặt

### Chạy qua UVX (Được khuyến nghị)
Bạn có thể chạy trực tiếp server này qua `uvx` mà không cần phải tải hay cài đặt thủ công:

```bash
uvx ssh-mcp-vn
```

## Các tính năng chính

- **Hỗ trợ Multi-host**: Có thể tương tác với nhiều máy chủ Linux mà không cần chạy nhiều instance.
- **Thực thi qua SSH**: Chạy lệnh bash/shell tùy ý trên máy chủ từ xa.
- **Quản lý thư mục**: Dễ dàng tạo cấu trúc thư mục từ xa (hoạt động giống lệnh `mkdir -p`).
- **Tải lên qua SFTP**: Đẩy file từ máy tính cá nhân lên máy chủ từ xa.
- **Tải về qua SFTP**: Tải file từ máy chủ từ xa về máy tính.
- **Liệt kê file bằng SFTP**: Xem danh sách các file trong một thư mục bất kỳ trên máy chủ.

## Cấu hình (Khuyên dùng qua File JSON)

Vì mảng cấu hình có thể khá dài và việc viết chuỗi JSON dính liền với các dấu `\` (escape) trong cấu hình môi trường sẽ phức tạp, bạn nên tách cấu hình ra một file JSON riêng biệt.

**Bước 1:** Tạo một file có tên `ssh_servers.json` ở bất kỳ đâu trên máy của bạn (ví dụ `C:\Users\NamHT\ssh_servers.json`) và điền danh sách các server dạng mảng thuần túy:

```json
[
  {
    "name": "production_server",
    "host": "192.168.1.100",
    "user": "root",
    "password": "mat_khau_1",
    "port": 22
  },
  {
    "name": "staging_server",
    "host": "192.168.1.101",
    "user": "ubuntu",
    "key_path": "/path/to/key.pem"
  }
]
```

**Bước 2:** Cập nhật `mcp_config.json` của ArcticFactory chỉ truyền vào biến `SSH_CONFIG_FILE` trỏ đến file đó:

```json
{
  "mcpServers": {
    "ssh-server": {
      "command": "uvx",
      "args": [
        "ssh-mcp-vn"
      ],
      "env": {
        "SSH_CONFIG_FILE": "C:\\Users\\NamHT\\ssh_servers.json"
      }
    }
  }
}
```

### Các trường trong từng block JSON cấu hình
Mỗi object của một server hỗ trợ các trường sau:
- `name` (bắt buộc): Tên gọi riêng cho server này (VD: "production", "staging") để giúp công cụ AI nhận biết server muốn thao tác.
- `host` (bắt buộc): Địa chỉ IP hoặc Hostname của máy chủ SSH.
- `user` (bắt buộc): Tên đăng nhập (username).
- `port` (tùy chọn): Cổng SSH, mặc định là 22.
- `password` (tùy chọn): Mật khẩu đăng nhập.
- `key_path` (tùy chọn): Đường dẫn tuyệt đối đến file khóa bí mật (private key) nếu dùng key để đăng nhập.

## Danh sách công cụ (Tools)

*(Tất cả các công cụ đều yêu cầu tham số `server_name` để hệ thống biết sẽ thao tác trên máy chủ nào).*

- `ssh_execute_command`: Chạy một lệnh shell trên máy Linux từ xa.
- `ssh_create_folder`: Tạo thư mục từ xa.
- `sftp_upload_file`: Chuyển một file từ local lên máy chủ.
- `sftp_download_file`: Lấy một file từ máy chủ về local.
- `sftp_list_directory`: Liệt kê tất cả file trong một thư mục từ xa.

## License
MIT
