mcp-ssh-vps 0.4.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mcp_ssh_vps-0.4.1.dist-info/METADATA +482 -0
- mcp_ssh_vps-0.4.1.dist-info/RECORD +47 -0
- mcp_ssh_vps-0.4.1.dist-info/WHEEL +5 -0
- mcp_ssh_vps-0.4.1.dist-info/entry_points.txt +4 -0
- mcp_ssh_vps-0.4.1.dist-info/licenses/LICENSE +21 -0
- mcp_ssh_vps-0.4.1.dist-info/top_level.txt +1 -0
- sshmcp/__init__.py +3 -0
- sshmcp/cli.py +473 -0
- sshmcp/config.py +155 -0
- sshmcp/core/__init__.py +5 -0
- sshmcp/core/container.py +291 -0
- sshmcp/models/__init__.py +15 -0
- sshmcp/models/command.py +69 -0
- sshmcp/models/file.py +102 -0
- sshmcp/models/machine.py +139 -0
- sshmcp/monitoring/__init__.py +0 -0
- sshmcp/monitoring/alerts.py +464 -0
- sshmcp/prompts/__init__.py +7 -0
- sshmcp/prompts/backup.py +151 -0
- sshmcp/prompts/deploy.py +115 -0
- sshmcp/prompts/monitor.py +146 -0
- sshmcp/resources/__init__.py +7 -0
- sshmcp/resources/logs.py +99 -0
- sshmcp/resources/metrics.py +204 -0
- sshmcp/resources/status.py +160 -0
- sshmcp/security/__init__.py +7 -0
- sshmcp/security/audit.py +314 -0
- sshmcp/security/rate_limiter.py +221 -0
- sshmcp/security/totp.py +392 -0
- sshmcp/security/validator.py +234 -0
- sshmcp/security/whitelist.py +169 -0
- sshmcp/server.py +632 -0
- sshmcp/ssh/__init__.py +6 -0
- sshmcp/ssh/async_client.py +247 -0
- sshmcp/ssh/client.py +464 -0
- sshmcp/ssh/executor.py +79 -0
- sshmcp/ssh/forwarding.py +368 -0
- sshmcp/ssh/pool.py +343 -0
- sshmcp/ssh/shell.py +518 -0
- sshmcp/ssh/transfer.py +461 -0
- sshmcp/tools/__init__.py +13 -0
- sshmcp/tools/commands.py +226 -0
- sshmcp/tools/files.py +220 -0
- sshmcp/tools/helpers.py +321 -0
- sshmcp/tools/history.py +372 -0
- sshmcp/tools/processes.py +214 -0
- sshmcp/tools/servers.py +484 -0
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mcp-ssh-vps
|
|
3
|
+
Version: 0.4.1
|
|
4
|
+
Summary: MCP server for managing VPS via SSH - gives AI agents secure access to remote servers
|
|
5
|
+
Author-email: LuxVTZ <luxvtz@example.com>
|
|
6
|
+
Maintainer: LuxVTZ
|
|
7
|
+
License: MIT
|
|
8
|
+
Project-URL: Homepage, https://github.com/LuxVTZ/sshmcp
|
|
9
|
+
Project-URL: Documentation, https://github.com/LuxVTZ/sshmcp#readme
|
|
10
|
+
Project-URL: Repository, https://github.com/LuxVTZ/sshmcp
|
|
11
|
+
Project-URL: Issues, https://github.com/LuxVTZ/sshmcp/issues
|
|
12
|
+
Keywords: mcp,ssh,vps,ai,automation,claude,llm,model-context-protocol
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: System :: Systems Administration
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: mcp>=1.0.0
|
|
27
|
+
Requires-Dist: pydantic>=2.0.0
|
|
28
|
+
Requires-Dist: paramiko>=3.0.0
|
|
29
|
+
Requires-Dist: structlog>=24.0.0
|
|
30
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
31
|
+
Requires-Dist: click>=8.0.0
|
|
32
|
+
Provides-Extra: dev
|
|
33
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
34
|
+
Requires-Dist: pytest-asyncio>=0.24.0; extra == "dev"
|
|
35
|
+
Requires-Dist: pytest-mock>=3.14.0; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
37
|
+
Requires-Dist: black>=24.0.0; extra == "dev"
|
|
38
|
+
Requires-Dist: ruff>=0.8.0; extra == "dev"
|
|
39
|
+
Requires-Dist: mypy>=1.13.0; extra == "dev"
|
|
40
|
+
Provides-Extra: totp
|
|
41
|
+
Requires-Dist: pyotp>=2.9.0; extra == "totp"
|
|
42
|
+
Requires-Dist: qrcode>=7.0; extra == "totp"
|
|
43
|
+
Provides-Extra: docs
|
|
44
|
+
Requires-Dist: mkdocs>=1.5.0; extra == "docs"
|
|
45
|
+
Requires-Dist: mkdocs-material>=9.5.0; extra == "docs"
|
|
46
|
+
Requires-Dist: pymdown-extensions>=10.0.0; extra == "docs"
|
|
47
|
+
Dynamic: license-file
|
|
48
|
+
|
|
49
|
+
<p align="center">
|
|
50
|
+
<img src="https://img.shields.io/pypi/v/mcp-ssh-vps?color=blue&label=PyPI" alt="PyPI">
|
|
51
|
+
<img src="https://img.shields.io/pypi/pyversions/mcp-ssh-vps" alt="Python">
|
|
52
|
+
<img src="https://img.shields.io/github/license/LuxVTZ/sshmcp" alt="License">
|
|
53
|
+
<img src="https://img.shields.io/pypi/dm/mcp-ssh-vps?color=green" alt="Downloads">
|
|
54
|
+
</p>
|
|
55
|
+
|
|
56
|
+
<h1 align="center">🔐 SSH MCP Server</h1>
|
|
57
|
+
|
|
58
|
+
<p align="center">
|
|
59
|
+
<b>Give AI agents secure access to your VPS servers via SSH</b><br>
|
|
60
|
+
Execute commands, transfer files, manage processes — all through Model Context Protocol
|
|
61
|
+
</p>
|
|
62
|
+
|
|
63
|
+
<p align="center">
|
|
64
|
+
<a href="#-quick-start">Quick Start</a> •
|
|
65
|
+
<a href="#-features">Features</a> •
|
|
66
|
+
<a href="#-ide-integration">IDE Integration</a> •
|
|
67
|
+
<a href="#-tools-reference">Tools</a> •
|
|
68
|
+
<a href="#-security">Security</a>
|
|
69
|
+
</p>
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 🚀 Quick Start
|
|
74
|
+
|
|
75
|
+
### Install
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Via pip
|
|
79
|
+
pip install mcp-ssh-vps
|
|
80
|
+
|
|
81
|
+
# Via uvx (recommended for MCP)
|
|
82
|
+
uvx mcp-ssh-vps
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Add Your First Server
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Interactive setup
|
|
89
|
+
uvx mcp-ssh-vps --help
|
|
90
|
+
|
|
91
|
+
# Or use the CLI
|
|
92
|
+
sshmcp-cli server add --name prod --host 192.168.1.100 --user deploy
|
|
93
|
+
sshmcp-cli server test prod
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Connect to Your AI Agent
|
|
97
|
+
|
|
98
|
+
Add to your AI IDE config and start managing servers with natural language!
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
"Deploy my app to the production server"
|
|
102
|
+
"Check disk space on all servers"
|
|
103
|
+
"Restart nginx on web1 and web2"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## ✨ Features
|
|
109
|
+
|
|
110
|
+
| Feature | Description |
|
|
111
|
+
|---------|-------------|
|
|
112
|
+
| 🖥️ **Execute Commands** | Run any shell command on remote servers |
|
|
113
|
+
| 📁 **File Operations** | Read, write, and list files via SFTP |
|
|
114
|
+
| ⚙️ **Process Management** | Control systemd, pm2, supervisor services |
|
|
115
|
+
| 🏷️ **Server Tags** | Group servers with tags for batch operations |
|
|
116
|
+
| 🔄 **Batch Execution** | Run commands on multiple servers in parallel |
|
|
117
|
+
| 🔒 **Security Profiles** | Strict, moderate, or full access levels |
|
|
118
|
+
| 📝 **Audit Logging** | Track all operations for compliance |
|
|
119
|
+
| 🔑 **SSH Keys & Passwords** | Support for both authentication methods |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 🔌 IDE Integration
|
|
124
|
+
|
|
125
|
+
> **Note:** Config is auto-loaded from `~/.sshmcp/machines.json` by default. No env variables required!
|
|
126
|
+
|
|
127
|
+
### Claude Code
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
claude mcp add ssh-vps -- uvx mcp-ssh-vps
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Or add to `~/.claude.json`:
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"mcpServers": {
|
|
138
|
+
"ssh-vps": {
|
|
139
|
+
"command": "uvx",
|
|
140
|
+
"args": ["mcp-ssh-vps"]
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
### Factory Droid
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
droid mcp add ssh-vps "uvx mcp-ssh-vps"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Or add to `~/.factory/mcp.json`:
|
|
155
|
+
|
|
156
|
+
```json
|
|
157
|
+
{
|
|
158
|
+
"mcpServers": {
|
|
159
|
+
"ssh-vps": {
|
|
160
|
+
"command": "uvx",
|
|
161
|
+
"args": ["mcp-ssh-vps"]
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
### Cursor
|
|
170
|
+
|
|
171
|
+
Add to `~/.cursor/mcp.json`:
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
{
|
|
175
|
+
"mcpServers": {
|
|
176
|
+
"ssh-vps": {
|
|
177
|
+
"command": "uvx",
|
|
178
|
+
"args": ["mcp-ssh-vps"]
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
### Qwen Code
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
qwen mcp add ssh-vps uvx mcp-ssh-vps
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Or add to `~/.qwen/settings.json`:
|
|
193
|
+
|
|
194
|
+
```json
|
|
195
|
+
{
|
|
196
|
+
"mcpServers": {
|
|
197
|
+
"ssh-vps": {
|
|
198
|
+
"command": "uvx",
|
|
199
|
+
"args": ["mcp-ssh-vps"]
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
### Claude Desktop
|
|
208
|
+
|
|
209
|
+
Add to Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
|
|
210
|
+
|
|
211
|
+
```json
|
|
212
|
+
{
|
|
213
|
+
"mcpServers": {
|
|
214
|
+
"ssh-vps": {
|
|
215
|
+
"command": "uvx",
|
|
216
|
+
"args": ["mcp-ssh-vps"]
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### VS Code + Continue
|
|
225
|
+
|
|
226
|
+
Add to `.continue/config.json`:
|
|
227
|
+
|
|
228
|
+
```json
|
|
229
|
+
{
|
|
230
|
+
"experimental": {
|
|
231
|
+
"modelContextProtocolServers": [
|
|
232
|
+
{
|
|
233
|
+
"transport": {
|
|
234
|
+
"type": "stdio",
|
|
235
|
+
"command": "uvx",
|
|
236
|
+
"args": ["mcp-ssh-vps"]
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
]
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
### Windsurf
|
|
247
|
+
|
|
248
|
+
Add to `~/.codeium/windsurf/mcp_config.json`:
|
|
249
|
+
|
|
250
|
+
```json
|
|
251
|
+
{
|
|
252
|
+
"mcpServers": {
|
|
253
|
+
"ssh-vps": {
|
|
254
|
+
"command": "uvx",
|
|
255
|
+
"args": ["mcp-ssh-vps"]
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
### OpenAI Codex CLI
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
codex --mcp-config '{"ssh-vps": {"command": "uvx", "args": ["mcp-ssh-vps"]}}'
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
### Any MCP-Compatible Client
|
|
272
|
+
|
|
273
|
+
Generic stdio configuration:
|
|
274
|
+
|
|
275
|
+
```json
|
|
276
|
+
{
|
|
277
|
+
"command": "uvx",
|
|
278
|
+
"args": ["mcp-ssh-vps"]
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
> **Custom config path?** Add `"env": {"SSHMCP_CONFIG_PATH": "/custom/path.json"}`
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## 🛠️ Tools Reference
|
|
287
|
+
|
|
288
|
+
### Command Execution
|
|
289
|
+
|
|
290
|
+
| Tool | Description | Example |
|
|
291
|
+
|------|-------------|---------|
|
|
292
|
+
| `execute_command` | Run command on server | `execute_command("prod", "docker ps")` |
|
|
293
|
+
| `execute_on_multiple` | Run on multiple servers | `execute_on_multiple(["*"], "uptime")` |
|
|
294
|
+
|
|
295
|
+
### Server Management
|
|
296
|
+
|
|
297
|
+
| Tool | Description | Example |
|
|
298
|
+
|------|-------------|---------|
|
|
299
|
+
| `list_servers` | List all servers | `list_servers()` or `list_servers(tag="web")` |
|
|
300
|
+
| `add_server` | Add new server | `add_server("web1", "1.2.3.4", "root")` |
|
|
301
|
+
| `remove_server` | Remove server | `remove_server("old-server")` |
|
|
302
|
+
| `test_connection` | Test SSH connection | `test_connection("prod")` |
|
|
303
|
+
|
|
304
|
+
### File Operations
|
|
305
|
+
|
|
306
|
+
| Tool | Description | Example |
|
|
307
|
+
|------|-------------|---------|
|
|
308
|
+
| `read_file` | Read remote file | `read_file("prod", "/var/log/app.log")` |
|
|
309
|
+
| `upload_file` | Upload file | `upload_file("prod", "/tmp/script.sh", "#!/bin/bash\n...")` |
|
|
310
|
+
| `list_files` | List directory | `list_files("prod", "/var/log")` |
|
|
311
|
+
|
|
312
|
+
### Process Management
|
|
313
|
+
|
|
314
|
+
| Tool | Description | Example |
|
|
315
|
+
|------|-------------|---------|
|
|
316
|
+
| `manage_process` | Control services | `manage_process("prod", "restart", "nginx")` |
|
|
317
|
+
|
|
318
|
+
### Help & Info
|
|
319
|
+
|
|
320
|
+
| Tool | Description | Example |
|
|
321
|
+
|------|-------------|---------|
|
|
322
|
+
| `get_help` | Get documentation | `get_help("examples")` |
|
|
323
|
+
| `get_allowed_commands` | View security config | `get_allowed_commands("prod")` |
|
|
324
|
+
| `get_server_info` | Server details | `get_server_info("prod")` |
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## 🏷️ Server Tags & Batch Operations
|
|
329
|
+
|
|
330
|
+
### Add servers with tags
|
|
331
|
+
|
|
332
|
+
```python
|
|
333
|
+
add_server("web1", "192.168.1.10", "deploy", tags=["production", "web"])
|
|
334
|
+
add_server("web2", "192.168.1.11", "deploy", tags=["production", "web"])
|
|
335
|
+
add_server("db1", "192.168.1.20", "deploy", tags=["production", "database"])
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
### Filter by tag
|
|
339
|
+
|
|
340
|
+
```python
|
|
341
|
+
list_servers(tag="web") # Only web servers
|
|
342
|
+
list_servers(tag="production") # All production servers
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Execute on tagged servers
|
|
346
|
+
|
|
347
|
+
```python
|
|
348
|
+
execute_on_multiple(["tag:web"], "nginx -t") # All web servers
|
|
349
|
+
execute_on_multiple(["tag:production"], "uptime") # All production
|
|
350
|
+
execute_on_multiple(["*"], "df -h") # ALL servers
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## 🔒 Security
|
|
356
|
+
|
|
357
|
+
### Security Profiles
|
|
358
|
+
|
|
359
|
+
| Profile | Allowed Commands | Use Case |
|
|
360
|
+
|---------|-----------------|----------|
|
|
361
|
+
| `strict` | `git`, `ls`, `cat`, `df`, `uptime` | Read-only monitoring |
|
|
362
|
+
| `moderate` | + `docker`, `npm`, `systemctl`, `pm2` | Standard DevOps |
|
|
363
|
+
| `full` | All commands (except `rm -rf /`) | Full access |
|
|
364
|
+
|
|
365
|
+
### Set security level
|
|
366
|
+
|
|
367
|
+
```python
|
|
368
|
+
add_server("prod", "1.2.3.4", "root", security_level="full")
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
### Audit Logging
|
|
372
|
+
|
|
373
|
+
All commands are logged with timestamps, user, and results:
|
|
374
|
+
|
|
375
|
+
```
|
|
376
|
+
2024-01-15T10:30:00Z | prod | root | docker ps | exit_code=0 | 150ms
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## 📁 Configuration
|
|
382
|
+
|
|
383
|
+
### Config Location
|
|
384
|
+
|
|
385
|
+
```
|
|
386
|
+
~/.sshmcp/machines.json
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### Example Config
|
|
390
|
+
|
|
391
|
+
```json
|
|
392
|
+
{
|
|
393
|
+
"machines": [
|
|
394
|
+
{
|
|
395
|
+
"name": "production",
|
|
396
|
+
"host": "192.168.1.100",
|
|
397
|
+
"port": 22,
|
|
398
|
+
"user": "deploy",
|
|
399
|
+
"auth": {
|
|
400
|
+
"type": "key",
|
|
401
|
+
"key_path": "~/.ssh/id_rsa"
|
|
402
|
+
},
|
|
403
|
+
"security": {
|
|
404
|
+
"allowed_commands": [".*"],
|
|
405
|
+
"forbidden_commands": [".*rm\\s+-rf\\s+/$"],
|
|
406
|
+
"timeout_seconds": 120
|
|
407
|
+
},
|
|
408
|
+
"tags": ["production", "web"],
|
|
409
|
+
"description": "Main production server"
|
|
410
|
+
}
|
|
411
|
+
]
|
|
412
|
+
}
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
### Environment Variable
|
|
416
|
+
|
|
417
|
+
```bash
|
|
418
|
+
export SSHMCP_CONFIG_PATH=/custom/path/machines.json
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## 📖 Usage Examples
|
|
424
|
+
|
|
425
|
+
### Check status of all servers
|
|
426
|
+
|
|
427
|
+
```
|
|
428
|
+
User: Check the status of all my servers
|
|
429
|
+
AI: I'll run uptime on all configured servers...
|
|
430
|
+
|
|
431
|
+
execute_on_multiple(["*"], "uptime && df -h | head -5")
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### Deploy application
|
|
435
|
+
|
|
436
|
+
```
|
|
437
|
+
User: Deploy the latest code to production
|
|
438
|
+
AI: I'll pull the latest changes and restart the service...
|
|
439
|
+
|
|
440
|
+
execute_command("prod", "cd /app && git pull origin main")
|
|
441
|
+
execute_command("prod", "npm install --production")
|
|
442
|
+
execute_command("prod", "pm2 restart all")
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
### Debug server issues
|
|
446
|
+
|
|
447
|
+
```
|
|
448
|
+
User: Why is the web server slow?
|
|
449
|
+
AI: Let me check system resources and logs...
|
|
450
|
+
|
|
451
|
+
execute_command("web1", "top -bn1 | head -20")
|
|
452
|
+
execute_command("web1", "tail -50 /var/log/nginx/error.log")
|
|
453
|
+
execute_command("web1", "free -m && df -h")
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
## 🤝 Contributing
|
|
459
|
+
|
|
460
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
461
|
+
|
|
462
|
+
```bash
|
|
463
|
+
git clone https://github.com/LuxVTZ/sshmcp.git
|
|
464
|
+
cd sshmcp
|
|
465
|
+
pip install -e ".[dev]"
|
|
466
|
+
pytest
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
---
|
|
470
|
+
|
|
471
|
+
## 📄 License
|
|
472
|
+
|
|
473
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
474
|
+
|
|
475
|
+
---
|
|
476
|
+
|
|
477
|
+
<p align="center">
|
|
478
|
+
Made with ❤️ for the AI agent ecosystem<br>
|
|
479
|
+
<a href="https://pypi.org/project/mcp-ssh-vps/">PyPI</a> •
|
|
480
|
+
<a href="https://github.com/LuxVTZ/sshmcp">GitHub</a> •
|
|
481
|
+
<a href="https://github.com/LuxVTZ/sshmcp/issues">Issues</a>
|
|
482
|
+
</p>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
mcp_ssh_vps-0.4.1.dist-info/licenses/LICENSE,sha256=ppiqeMeZlSPENPupmFrUYQ4hLLBVSRXCP-d-fce7in4,1072
|
|
2
|
+
sshmcp/__init__.py,sha256=COyOmnYje5IWNGRx6giHMqj_aosq8fy9HskrEwILMb4,83
|
|
3
|
+
sshmcp/cli.py,sha256=gHaKkgBHSN3Zlf3gDMjYqfSxfwYIR_mlGW3yN3R7lPU,13687
|
|
4
|
+
sshmcp/config.py,sha256=AwpjGSrUvZTbhtFzs-xZu2P-bc7SfVWh6GYBu2dLhdk,3924
|
|
5
|
+
sshmcp/server.py,sha256=vVpsN2xBM-gXesaNSGaAII0CjK0HojKkfusLv31YnD0,17363
|
|
6
|
+
sshmcp/core/__init__.py,sha256=AiFSxn9RBB0f_6bBsDP8Y8WDyPgU38W_2SImrkMqQ6s,174
|
|
7
|
+
sshmcp/core/container.py,sha256=83MUkbmI4pI4pcdadUAsUuYU1mKugR20CQnJsGPyvSI,8300
|
|
8
|
+
sshmcp/models/__init__.py,sha256=mSJBlHEiiBlB43IoJiD4ozj4YWpsGe-tJ0ntSACTPgE,386
|
|
9
|
+
sshmcp/models/command.py,sha256=HgEqmgvUsTiGsrWfAXIty9QTxaH366LouM9Eg5jJS7o,2447
|
|
10
|
+
sshmcp/models/file.py,sha256=1uHk9P8SAbDLmA_jwTah7kYfA5gXUYILyliTLonSjng,3600
|
|
11
|
+
sshmcp/models/machine.py,sha256=CmO_JW_hZetSqk73AeoZTPcw0UL9-6Lc5CSo1LwE_VA,4732
|
|
12
|
+
sshmcp/monitoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
+
sshmcp/monitoring/alerts.py,sha256=rnpqBWCC2mL7_2kP9m_YKp9rwZb1ADoGBLi1D1mGSSY,14239
|
|
14
|
+
sshmcp/prompts/__init__.py,sha256=-Zf5OF4pXqrJr-y7TmlUBJxHNdvojthhk5KLljeabwI,249
|
|
15
|
+
sshmcp/prompts/backup.py,sha256=FH7KM4Q4WUiPjAaBMY1mjSXCpK84mUcZURgXjmTxp88,4796
|
|
16
|
+
sshmcp/prompts/deploy.py,sha256=NzLDE0I7E0zU1YLZc0VVqyCEFkNErlJnFGX3BNy7Jek,3388
|
|
17
|
+
sshmcp/prompts/monitor.py,sha256=2_XWUt1ciqAcx0uBhwyOAt1pCwzQQ8fG4P812bLx-SA,3452
|
|
18
|
+
sshmcp/resources/__init__.py,sha256=KFrZR23kZ2RT6uHKMVTW5uAjo_aCN3WGSXnRXmEbmsM,234
|
|
19
|
+
sshmcp/resources/logs.py,sha256=dir6kisW9W9vPtwGsUZsqdSALRvN4Bk2t4t9-4BmxAY,2915
|
|
20
|
+
sshmcp/resources/metrics.py,sha256=Al_yIm9y1f8c4oPChYTvffBVs-CzKcrZQm2c0mFtNzo,5756
|
|
21
|
+
sshmcp/resources/status.py,sha256=aHZNm0rdrl2a9zQcppqYAsy1AePVYdVNZXGmhSzZ_XI,4506
|
|
22
|
+
sshmcp/security/__init__.py,sha256=LAqP2FkGXt5CW7qQLfwAzHU83r__hKtgmyXp9No3WlU,311
|
|
23
|
+
sshmcp/security/audit.py,sha256=Jezna19k9OH_DZCoec5tCJpTWTf0TarnP2yco84g-mw,8288
|
|
24
|
+
sshmcp/security/rate_limiter.py,sha256=ddDMfU_mbIgOwz8OKr2XsfcgorDINiAfE1ABGIsj_KY,6372
|
|
25
|
+
sshmcp/security/totp.py,sha256=tO1NhllxWmu4oYqC5pcrCCWzAlXSSRFW5elv-W5SAaQ,10308
|
|
26
|
+
sshmcp/security/validator.py,sha256=8kOkLoLh16SUaKsRI2AN7goWFiQYeBMP-ld-ROny--s,6424
|
|
27
|
+
sshmcp/security/whitelist.py,sha256=yuTvMgxiv-fQ3iSPWxWGJrsTVHFlwAkZOBu2Viz7ht8,4743
|
|
28
|
+
sshmcp/ssh/__init__.py,sha256=Ck8L6zoDtuvjkU-DPV7mqUWTIJDYovg7r-6K6ZcO9wo,188
|
|
29
|
+
sshmcp/ssh/async_client.py,sha256=puiOfPRVsDBxiTR7CHwMPQNnxvqZytOmyCCCydRgBz0,6904
|
|
30
|
+
sshmcp/ssh/client.py,sha256=lfqQ8PSDisSqcP7E2YHHRxv4Xk2MNuuSSKwMQCqlX1w,14226
|
|
31
|
+
sshmcp/ssh/executor.py,sha256=vvEMqMHx-hdxEA3FzbW3Ek2dBWS0C5Ij5RU8NW3Y0PY,1957
|
|
32
|
+
sshmcp/ssh/forwarding.py,sha256=bL-GqWH--oq_fTWhXKjeQyIM_KUuRfON8cRu3knhhYQ,11487
|
|
33
|
+
sshmcp/ssh/pool.py,sha256=5NKlsIH97_b5RGpj0K4bu16flKac2eLBN0ZhsoLYR00,10967
|
|
34
|
+
sshmcp/ssh/shell.py,sha256=cHbqkW6TznP6sQWEZYCp1gLU9UYLqDzjStm1j2wtCMw,14301
|
|
35
|
+
sshmcp/ssh/transfer.py,sha256=2atMkC3oJHmI7Cmrlb-rmTwdxWJxWiPfcOUyJhbcl-I,15052
|
|
36
|
+
sshmcp/tools/__init__.py,sha256=NWHpxtrS6oitZNY9LKz6uY_QZ3gNa9wAaRLjs64GLRg,317
|
|
37
|
+
sshmcp/tools/commands.py,sha256=ork58xsVPj5_uWojT6OXbkJvgldN-0865aFMfmU0Sjw,7135
|
|
38
|
+
sshmcp/tools/files.py,sha256=7ywoi9S9xz-bPOr9NQNSz245zRfJ8A8_UA1zCFCzDvo,6342
|
|
39
|
+
sshmcp/tools/helpers.py,sha256=BA9Qs5nOeAvWG41V7fZSSP1KsfFMPgwBw2ccVWsMD4Q,12004
|
|
40
|
+
sshmcp/tools/history.py,sha256=PGfDYTseTjPHGGs1S2WvCsVPwxAUF213nR0uGQqUGBE,10906
|
|
41
|
+
sshmcp/tools/processes.py,sha256=sGVufPMjgjt0nDwcwTzuSFLVnWVA4HexmS0-w41sMuA,6429
|
|
42
|
+
sshmcp/tools/servers.py,sha256=Gp-vgFJgd30pd_VxvXFiaTr5un1TtYX7g_HGzUsywTg,13842
|
|
43
|
+
mcp_ssh_vps-0.4.1.dist-info/METADATA,sha256=7DRnqSW_bziZwEl1AO0dV6WoEkFf4MGIJHwOex7Korw,10808
|
|
44
|
+
mcp_ssh_vps-0.4.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
45
|
+
mcp_ssh_vps-0.4.1.dist-info/entry_points.txt,sha256=fU7-NaKaiAoXlyQoLIIKapL4qm9BZByuLjnrOJC-U-8,108
|
|
46
|
+
mcp_ssh_vps-0.4.1.dist-info/top_level.txt,sha256=otSZGi7nsFnamz7vfHqrlwx188M1FsniIEXwNr9H4o4,7
|
|
47
|
+
mcp_ssh_vps-0.4.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 SSH MCP Project
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
sshmcp
|
sshmcp/__init__.py
ADDED