ellmos-servercommander-mcp 0.1.0-alpha.5 → 0.1.0-alpha.7
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.
- package/CHANGELOG.md +23 -0
- package/KONZEPT.md +93 -91
- package/LICENSE +21 -0
- package/README.md +168 -84
- package/README_de.md +166 -82
- package/config/servercommander.example.toml +39 -35
- package/llms.txt +53 -0
- package/package.json +57 -46
- package/pyproject.toml +29 -29
- package/server.json +22 -0
- package/src/servercommander/__init__.py +1 -1
- package/src/servercommander/health.py +68 -65
- package/src/servercommander/i18n.py +262 -250
- package/src/servercommander/logs.py +174 -105
- package/src/servercommander/mail.py +62 -6
- package/src/servercommander/server.py +181 -179
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## 0.1.0-alpha.7 - 2026-06-13
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
- `sc_health_check`: `urlopen()` runs in worker threads via `asyncio.to_thread` + `asyncio.gather`, so concurrent health checks no longer block the MCP event loop.
|
|
9
|
+
- npm package file selection now includes only Python source files from `src/`, preventing local `__pycache__` bytecode from entering the tarball.
|
|
10
|
+
- Corrected the unreleased changelog entry for log-report persistence to use the implemented `persist_report`, `[logs].persist_reports`, and `[logs].reports_dir` names.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- `sc_mail_*`: action-specific readiness diagnostics now distinguish IMAP needs for list/read/search from SMTP needs for send, while keeping mail execution disabled in alpha.
|
|
14
|
+
- `sc_logs_analyze`: optional persistence of log-analysis JSON reports to a configurable output directory; enabled via `persist_report` per call or `[logs].persist_reports` in `servercommander.toml`.
|
|
15
|
+
- Example config keys `[logs].persist_reports` and `[logs].reports_dir` added to `config/servercommander.example.toml`.
|
|
16
|
+
- `server.json` with MCP Registry metadata for `io.github.ellmos-ai/ellmos-servercommander-mcp`.
|
|
17
|
+
- `llms.txt` with canonical project context, search phrases, disambiguation, current tools, and sibling ellmos MCP servers.
|
|
18
|
+
- MIT `LICENSE` text so GitHub and package consumers can detect the repository license directly.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
- README and README_de: start tables, search/disambiguation context, and ellmos MCP family links.
|
|
22
|
+
- Expanded npm and Python package keywords for server operations, MCP hosts, access-log analysis, deployment dry-runs, and health checks.
|
|
23
|
+
- Included `server.json`, `llms.txt`, and `LICENSE` in the npm package file list.
|
package/KONZEPT.md
CHANGED
|
@@ -1,91 +1,93 @@
|
|
|
1
|
-
# ellmos-servercommander-mcp — Konzept
|
|
2
|
-
|
|
3
|
-
> Server-Operations als MCP: Deploy, Mail, Logs, Health-Checks.
|
|
4
|
-
> Aus .UMBRUCH-Tools extrahiert und parametrisiert.
|
|
5
|
-
|
|
6
|
-
## Tools
|
|
7
|
-
|
|
8
|
-
| Tool | Quelle | Beschreibung |
|
|
9
|
-
|---|---|---|
|
|
10
|
-
| `sc_deploy` | .UMBRUCH deploy.py (~221 LoC) | SFTP-Delta-Deploy mit SHA256 (parametrisiert: host, user, remote_path) |
|
|
11
|
-
| `sc_deploy_status` | .UMBRUCH deploy.py | Letztes Deployment prüfen (Zeitstempel, geänderte Dateien, Dauer) |
|
|
12
|
-
| `sc_mail_list` | .UMBRUCH cli.py (~516 LoC) | IMAP-Postfach auflisten (Ordner, ungelesen, letzte N) |
|
|
13
|
-
| `sc_mail_read` | .UMBRUCH cli.py | E-Mail lesen (nach ID oder Suchfilter) |
|
|
14
|
-
| `sc_mail_send` | .UMBRUCH cli.py | E-Mail senden (SMTP, mit Anhängen) |
|
|
15
|
-
| `sc_mail_search` | .UMBRUCH cli.py | E-Mails durchsuchen (FTS, Datum, Absender) |
|
|
16
|
-
| `sc_logs_analyze` | .UMBRUCH traffic_analyzer.py | Server-Logs parsen (Apache/Nginx), Bot-Filterung, Traffic-Stats |
|
|
17
|
-
| `sc_health_check` | neu | HTTP-Endpoint(s) prüfen, Status-Codes + Latenz melden |
|
|
18
|
-
|
|
19
|
-
## Vorarbeiten
|
|
20
|
-
|
|
21
|
-
### De-Hardcoding (deploy.py)
|
|
22
|
-
- Aktuell hardcoded: projektspezifischer Host, SFTP-Account und feste Pfade
|
|
23
|
-
- Ziel: host/user/remote_path/local_path als Tool-Argumente ODER Config-Profile
|
|
24
|
-
- Config-Profile für wiederkehrende Deploys: `[profiles.umbruch]`, `[profiles.other]`
|
|
25
|
-
|
|
26
|
-
### Mail-Kern extrahieren (cli.py)
|
|
27
|
-
- GUI-Code (gui.py, 2935 LoC) bleibt draußen
|
|
28
|
-
- CLI-Kern (~516 LoC) als Basis: IMAP-Verbindung, SMTP-Versand, FTS5-Cache
|
|
29
|
-
- Credential-Handling: Config-Datei mit verschlüsseltem Passwort oder Env-Variable
|
|
30
|
-
|
|
31
|
-
### Kein Hardcoding von Credentials
|
|
32
|
-
- Alle Secrets via Config oder Env-Variablen
|
|
33
|
-
- Referenz: `$SFTP_PASSWORD`, `$IMAP_PASSWORD` etc.
|
|
34
|
-
|
|
35
|
-
## Architektur
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
ellmos-servercommander-mcp/
|
|
39
|
-
├── src/servercommander/
|
|
40
|
-
│ ├── server.py # MCP-Server Entry Point
|
|
41
|
-
│ ├── config.py # Konfiguration
|
|
42
|
-
│ ├── deploy.py # sc_deploy, sc_deploy_status
|
|
43
|
-
│ ├── mail.py # sc_mail_list/read/send/search
|
|
44
|
-
│ ├── logs.py # sc_logs_analyze
|
|
45
|
-
│ └── health.py # sc_health_check
|
|
46
|
-
├── config/
|
|
47
|
-
│ └── servercommander.example.toml
|
|
48
|
-
├── tests/
|
|
49
|
-
└── pyproject.toml
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Konfigurationsbeispiel
|
|
53
|
-
|
|
54
|
-
```toml
|
|
55
|
-
[server]
|
|
56
|
-
name = "ellmos-servercommander"
|
|
57
|
-
|
|
58
|
-
[deploy.profiles.example_site]
|
|
59
|
-
host = "sftp.example.com"
|
|
60
|
-
user = "deploy-user"
|
|
61
|
-
remote_path = "/var/www/example"
|
|
62
|
-
local_path = "./dist"
|
|
63
|
-
protocol = "sftp"
|
|
64
|
-
|
|
65
|
-
[mail]
|
|
66
|
-
imap_host = "imap.example.com"
|
|
67
|
-
imap_port = 993
|
|
68
|
-
smtp_host = "smtp.example.com"
|
|
69
|
-
smtp_port = 587
|
|
70
|
-
username = "$MAIL_USER"
|
|
71
|
-
password = "$MAIL_PASSWORD"
|
|
72
|
-
cache_db = "~/.servercommander/mail_cache.db"
|
|
73
|
-
|
|
74
|
-
[logs]
|
|
75
|
-
default_format = "apache"
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
|
89
|
-
|
|
90
|
-
|
|
|
91
|
-
|
|
|
1
|
+
# ellmos-servercommander-mcp — Konzept
|
|
2
|
+
|
|
3
|
+
> Server-Operations als MCP: Deploy, Mail, Logs, Health-Checks.
|
|
4
|
+
> Aus .UMBRUCH-Tools extrahiert und parametrisiert.
|
|
5
|
+
|
|
6
|
+
## Tools
|
|
7
|
+
|
|
8
|
+
| Tool | Quelle | Beschreibung |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| `sc_deploy` | .UMBRUCH deploy.py (~221 LoC) | SFTP-Delta-Deploy mit SHA256 (parametrisiert: host, user, remote_path) |
|
|
11
|
+
| `sc_deploy_status` | .UMBRUCH deploy.py | Letztes Deployment prüfen (Zeitstempel, geänderte Dateien, Dauer) |
|
|
12
|
+
| `sc_mail_list` | .UMBRUCH cli.py (~516 LoC) | IMAP-Postfach auflisten (Ordner, ungelesen, letzte N) |
|
|
13
|
+
| `sc_mail_read` | .UMBRUCH cli.py | E-Mail lesen (nach ID oder Suchfilter) |
|
|
14
|
+
| `sc_mail_send` | .UMBRUCH cli.py | E-Mail senden (SMTP, mit Anhängen) |
|
|
15
|
+
| `sc_mail_search` | .UMBRUCH cli.py | E-Mails durchsuchen (FTS, Datum, Absender) |
|
|
16
|
+
| `sc_logs_analyze` | .UMBRUCH traffic_analyzer.py | Server-Logs parsen (Apache/Nginx), Bot-Filterung, Traffic-Stats, optional persistierte JSON-Reports |
|
|
17
|
+
| `sc_health_check` | neu | HTTP-Endpoint(s) prüfen, Status-Codes + Latenz melden |
|
|
18
|
+
|
|
19
|
+
## Vorarbeiten
|
|
20
|
+
|
|
21
|
+
### De-Hardcoding (deploy.py)
|
|
22
|
+
- Aktuell hardcoded: projektspezifischer Host, SFTP-Account und feste Pfade
|
|
23
|
+
- Ziel: host/user/remote_path/local_path als Tool-Argumente ODER Config-Profile
|
|
24
|
+
- Config-Profile für wiederkehrende Deploys: `[profiles.umbruch]`, `[profiles.other]`
|
|
25
|
+
|
|
26
|
+
### Mail-Kern extrahieren (cli.py)
|
|
27
|
+
- GUI-Code (gui.py, 2935 LoC) bleibt draußen
|
|
28
|
+
- CLI-Kern (~516 LoC) als Basis: IMAP-Verbindung, SMTP-Versand, FTS5-Cache
|
|
29
|
+
- Credential-Handling: Config-Datei mit verschlüsseltem Passwort oder Env-Variable
|
|
30
|
+
|
|
31
|
+
### Kein Hardcoding von Credentials
|
|
32
|
+
- Alle Secrets via Config oder Env-Variablen
|
|
33
|
+
- Referenz: `$SFTP_PASSWORD`, `$IMAP_PASSWORD` etc.
|
|
34
|
+
|
|
35
|
+
## Architektur
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
ellmos-servercommander-mcp/
|
|
39
|
+
├── src/servercommander/
|
|
40
|
+
│ ├── server.py # MCP-Server Entry Point
|
|
41
|
+
│ ├── config.py # Konfiguration
|
|
42
|
+
│ ├── deploy.py # sc_deploy, sc_deploy_status
|
|
43
|
+
│ ├── mail.py # sc_mail_list/read/send/search
|
|
44
|
+
│ ├── logs.py # sc_logs_analyze
|
|
45
|
+
│ └── health.py # sc_health_check
|
|
46
|
+
├── config/
|
|
47
|
+
│ └── servercommander.example.toml
|
|
48
|
+
├── tests/
|
|
49
|
+
└── pyproject.toml
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Konfigurationsbeispiel
|
|
53
|
+
|
|
54
|
+
```toml
|
|
55
|
+
[server]
|
|
56
|
+
name = "ellmos-servercommander"
|
|
57
|
+
|
|
58
|
+
[deploy.profiles.example_site]
|
|
59
|
+
host = "sftp.example.com"
|
|
60
|
+
user = "deploy-user"
|
|
61
|
+
remote_path = "/var/www/example"
|
|
62
|
+
local_path = "./dist"
|
|
63
|
+
protocol = "sftp"
|
|
64
|
+
|
|
65
|
+
[mail]
|
|
66
|
+
imap_host = "imap.example.com"
|
|
67
|
+
imap_port = 993
|
|
68
|
+
smtp_host = "smtp.example.com"
|
|
69
|
+
smtp_port = 587
|
|
70
|
+
username = "$MAIL_USER"
|
|
71
|
+
password = "$MAIL_PASSWORD"
|
|
72
|
+
cache_db = "~/.servercommander/mail_cache.db"
|
|
73
|
+
|
|
74
|
+
[logs]
|
|
75
|
+
default_format = "apache"
|
|
76
|
+
persist_reports = false
|
|
77
|
+
reports_dir = "~/.servercommander/log_reports"
|
|
78
|
+
|
|
79
|
+
[health]
|
|
80
|
+
timeout = 5
|
|
81
|
+
endpoints = [
|
|
82
|
+
"https://example.com/health",
|
|
83
|
+
]
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Quellmodule
|
|
87
|
+
|
|
88
|
+
| Modul | Herkunft | LoC | Dependencies |
|
|
89
|
+
|---|---|---|---|
|
|
90
|
+
| deploy.py | interne Extraktionsnotiz | ~221 | paramiko (SFTP) |
|
|
91
|
+
| cli.py (Mail) | interne Extraktionsnotiz | ~516 | stdlib (imaplib, smtplib) |
|
|
92
|
+
| traffic_analyzer.py | interne Extraktionsnotiz | ~300 | stdlib |
|
|
93
|
+
| health.py | neu | ~50 | stdlib (urllib) |
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Lukas Geiger
|
|
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.
|
package/README.md
CHANGED
|
@@ -1,84 +1,168 @@
|
|
|
1
|
-
# ellmos-servercommander-mcp
|
|
2
|
-
|
|
3
|
-
<p align="center">
|
|
4
|
-
<img src="assets/servercommander-logo.jpg" alt="ellmos ServerCommander MCP logo" width="360">
|
|
5
|
-
</p>
|
|
6
|
-
|
|
7
|
-
Alpha MCP server for server operations: deployment dry-runs, mail status, access-log analysis, and HTTP health checks.
|
|
8
|
-
|
|
9
|
-
German README: [README_de.md](README_de.md)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
|
|
1
|
+
# ellmos-servercommander-mcp
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="assets/servercommander-logo.jpg" alt="ellmos ServerCommander MCP logo" width="360">
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
Alpha MCP server for server operations: deployment dry-runs, mail status, access-log analysis, and HTTP health checks.
|
|
8
|
+
|
|
9
|
+
German README: [README_de.md](README_de.md)
|
|
10
|
+
|
|
11
|
+
*Part of the [ellmos-ai](https://github.com/ellmos-ai) family.*
|
|
12
|
+
|
|
13
|
+
[](https://opensource.org/licenses/MIT)
|
|
14
|
+
[](https://www.npmjs.com/package/ellmos-servercommander-mcp)
|
|
15
|
+
[](https://www.python.org/)
|
|
16
|
+
[](https://nodejs.org/)
|
|
17
|
+
[](https://modelcontextprotocol.io/)
|
|
18
|
+
[](https://www.npmjs.com/package/ellmos-servercommander-mcp)
|
|
19
|
+
|
|
20
|
+
**Discoverability:** Published on [npm](https://www.npmjs.com/package/ellmos-servercommander-mcp) as `ellmos-servercommander-mcp`, described for MCP catalogs in [`server.json`](server.json), and summarized for AI search/indexing in [`llms.txt`](llms.txt).
|
|
21
|
+
|
|
22
|
+
## Start Here
|
|
23
|
+
|
|
24
|
+
| Goal | Start with |
|
|
25
|
+
|---|---|
|
|
26
|
+
| Add ServerCommander to Claude Desktop, Claude Code, Cursor, or another MCP host | [MCP Client Configuration](#mcp-client-configuration) |
|
|
27
|
+
| Check a public or internal HTTP endpoint before a deploy | `sc_health_check` |
|
|
28
|
+
| Inspect Apache/Nginx access logs for errors, bots, referrers, and suspicious paths | `sc_logs_analyze` |
|
|
29
|
+
| Build a dry-run deployment manifest before SFTP/SSH execution exists | `sc_deploy` and `sc_deploy_status` |
|
|
30
|
+
| Wire mail operations later without accidental sends today | `sc_mail_list`, `sc_mail_read`, `sc_mail_send`, `sc_mail_search` |
|
|
31
|
+
|
|
32
|
+
## Status
|
|
33
|
+
|
|
34
|
+
- Transport: stdio via the Python MCP SDK
|
|
35
|
+
- Package status: public alpha package under `ellmos-ai`
|
|
36
|
+
- Current core: MCP tool listing, MCP tool dispatch, config loading, HTTP health checks, richer access-log analysis with optional persisted JSON reports
|
|
37
|
+
- Safe alpha handlers: `sc_deploy` builds local SHA256 manifests and configuration diagnostics in dry-run mode; `sc_mail_*` reports protocol-specific IMAP/SMTP readiness without opening mail connections
|
|
38
|
+
- i18n: localized MCP tool descriptions, input-schema field descriptions, and unknown-tool errors for `en`, `de`, `es`, `zh`, `ja`, `ru` with English fallback
|
|
39
|
+
|
|
40
|
+
## Install
|
|
41
|
+
|
|
42
|
+
The npm package contains a Node wrapper that starts the Python server. You still need Python 3.10+ and the Python package `mcp>=1.0.0`.
|
|
43
|
+
|
|
44
|
+
### Option 1: Install From npm
|
|
45
|
+
|
|
46
|
+
```powershell
|
|
47
|
+
npm install -g ellmos-servercommander-mcp@alpha
|
|
48
|
+
ellmos-servercommander
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Option 2: Install From Source
|
|
52
|
+
|
|
53
|
+
```powershell
|
|
54
|
+
git clone https://github.com/ellmos-ai/ellmos-servercommander-mcp.git
|
|
55
|
+
cd ellmos-servercommander-mcp
|
|
56
|
+
$env:PYTHONIOENCODING = "utf-8"
|
|
57
|
+
python -m pip install -e ".[dev]"
|
|
58
|
+
python -m pytest -q
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Avoid creating a `.venv` inside cloud-synced folders if your sync client locks files. If you need an isolated environment, create it outside that folder.
|
|
62
|
+
|
|
63
|
+
## Start From Source
|
|
64
|
+
|
|
65
|
+
```powershell
|
|
66
|
+
$env:PYTHONPATH = "src"
|
|
67
|
+
python -m servercommander.server
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## MCP Client Configuration
|
|
71
|
+
|
|
72
|
+
### Global npm Install
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"mcpServers": {
|
|
77
|
+
"servercommander": {
|
|
78
|
+
"command": "ellmos-servercommander"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Source Checkout
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"mcpServers": {
|
|
89
|
+
"servercommander": {
|
|
90
|
+
"command": "python",
|
|
91
|
+
"args": ["-m", "servercommander.server"],
|
|
92
|
+
"env": {
|
|
93
|
+
"PYTHONPATH": "/absolute/path/to/ellmos-servercommander-mcp/src"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Replace `/absolute/path/to/ellmos-servercommander-mcp` with your local checkout path.
|
|
101
|
+
|
|
102
|
+
## Server Configuration
|
|
103
|
+
|
|
104
|
+
Example: [config/servercommander.example.toml](config/servercommander.example.toml)
|
|
105
|
+
|
|
106
|
+
Default paths:
|
|
107
|
+
|
|
108
|
+
- `%USERPROFILE%\.servercommander\config.toml`
|
|
109
|
+
- `%USERPROFILE%\.config\servercommander\config.toml`
|
|
110
|
+
- override with `SERVERCOMMANDER_CONFIG`
|
|
111
|
+
|
|
112
|
+
Language can be configured with `[server].language`, `SERVERCOMMANDER_LANG`, or `SERVERCOMMANDER_LOCALE`.
|
|
113
|
+
|
|
114
|
+
```toml
|
|
115
|
+
[server]
|
|
116
|
+
name = "ellmos-servercommander"
|
|
117
|
+
language = "en" # en, de, es, zh, ja, ru
|
|
118
|
+
|
|
119
|
+
[logs]
|
|
120
|
+
default_format = "apache" # apache | nginx
|
|
121
|
+
persist_reports = false
|
|
122
|
+
reports_dir = "~/.servercommander/log_reports"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Secrets should be referenced through environment variables, for example `$MAIL_PASSWORD` or `$SFTP_PASSWORD`.
|
|
126
|
+
|
|
127
|
+
## Tools
|
|
128
|
+
|
|
129
|
+
- `sc_health_check`: checks HTTP endpoints and reports status code plus latency
|
|
130
|
+
- `sc_logs_analyze`: analyzes Apache/Nginx access logs from inline text or a local file, including status classes, bytes, referers, error paths, suspicious request markers, and optional JSON report persistence via `persist_report`
|
|
131
|
+
- `sc_deploy`: creates a deployment plan with a local SHA256 manifest and profile diagnostics, but does not upload yet
|
|
132
|
+
- `sc_deploy_status`: shows configured deploy profiles, selected-profile diagnostics, and the current alpha history status
|
|
133
|
+
- `sc_mail_list`, `sc_mail_read`, `sc_mail_send`, `sc_mail_search`: safe alpha status responses with action-specific IMAP/SMTP readiness diagnostics and no mail connections
|
|
134
|
+
|
|
135
|
+
## Search And Disambiguation
|
|
136
|
+
|
|
137
|
+
ServerCommander is the ellmos operations MCP server for local-first server administration workflows. Use this repo when searching for:
|
|
138
|
+
|
|
139
|
+
- MCP server operations tools
|
|
140
|
+
- MCP deploy dry-run server
|
|
141
|
+
- MCP access log analyzer
|
|
142
|
+
- MCP HTTP health check tool
|
|
143
|
+
- local-first server management MCP
|
|
144
|
+
- Claude Code server operations MCP
|
|
145
|
+
- safe SFTP deployment planning MCP
|
|
146
|
+
|
|
147
|
+
It is not the GitHub MCP server, not a generic shell-command MCP server, not a hosting provider control panel, and not a production SFTP/IMAP executor yet. The current alpha surface is intentionally diagnostic and dry-run first.
|
|
148
|
+
|
|
149
|
+
## ellmos MCP Family
|
|
150
|
+
|
|
151
|
+
- [ellmos-filecommander-mcp](https://github.com/ellmos-ai/ellmos-filecommander-mcp): filesystem operations, process management, OCR, archives, and exports
|
|
152
|
+
- [ellmos-codecommander-mcp](https://github.com/ellmos-ai/ellmos-codecommander-mcp): code analysis, JSON repair, imports, diffs, regex, and format conversion
|
|
153
|
+
- [ellmos-clatcher-mcp](https://github.com/ellmos-ai/ellmos-clatcher-mcp): repair, conversion, duplicate detection, batch operations, and document utilities
|
|
154
|
+
- [n8n-manager-mcp](https://github.com/ellmos-ai/n8n-manager-mcp): n8n workflow management through MCP
|
|
155
|
+
- [ellmos-controlcenter-mcp](https://github.com/ellmos-ai/ellmos-controlcenter-mcp): local MCP discovery, profiles, bundles, and control-plane checks
|
|
156
|
+
- [ellmos-homebase-mcp](https://github.com/ellmos-ai/ellmos-homebase-mcp): BACH integration hub, memory, knowledge base, state, swarm, and auto-chain orchestration
|
|
157
|
+
|
|
158
|
+
## Development
|
|
159
|
+
|
|
160
|
+
```powershell
|
|
161
|
+
$env:PYTHONIOENCODING = "utf-8"
|
|
162
|
+
$env:PYTHONDONTWRITEBYTECODE = "1"
|
|
163
|
+
python -m pytest -q
|
|
164
|
+
npm run smoke
|
|
165
|
+
npm pack --dry-run
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Next useful step: add explicitly configured execution adapters for SFTP and IMAP/SMTP while keeping dry-run/status-only defaults.
|