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 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
- [health]
78
- timeout = 5
79
- endpoints = [
80
- "https://example.com/health",
81
- ]
82
- ```
83
-
84
- ## Quellmodule
85
-
86
- | Modul | Quellpfad | LoC | Dependencies |
87
- |---|---|---|---|
88
- | deploy.py | `.TOPICS/.UMBRUCH/deploy.py` | ~221 | paramiko (SFTP) |
89
- | cli.py (Mail) | `.TOPICS/.UMBRUCH/cli.py` | ~516 | stdlib (imaplib, smtplib) |
90
- | traffic_analyzer.py | `.TOPICS/.UMBRUCH/traffic_analyzer.py` | ~300 | stdlib |
91
- | health.py | neu | ~50 | stdlib (urllib) |
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
- ## Status
12
-
13
- - Transport: stdio via the Python MCP SDK
14
- - Package status: public alpha package under `ellmos-ai`
15
- - Current core: MCP tool listing, MCP tool dispatch, config loading, HTTP health checks, richer access-log analysis
16
- - Safe alpha handlers: `sc_deploy` builds local SHA256 manifests and configuration diagnostics in dry-run mode; `sc_mail_*` reports mail configuration gaps without IMAP/SMTP operations
17
- - i18n: localized MCP tool descriptions, input-schema field descriptions, and unknown-tool errors for `en`, `de`, `es`, `zh`, `ja`, `ru` with English fallback
18
-
19
- ## Install
20
-
21
- 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`.
22
-
23
- ```powershell
24
- npm install -g ellmos-servercommander-mcp@alpha
25
- ellmos-servercommander
26
- ```
27
-
28
- For local development:
29
-
30
- ```powershell
31
- cd "C:\Users\User\OneDrive\.TOPICS\.AI\.MCP\ellmos-servercommander-mcp"
32
- $env:PYTHONIOENCODING = "utf-8"
33
- python -m pip install -e ".[dev]"
34
- python -m pytest -q
35
- ```
36
-
37
- Do not create a `.venv` inside a OneDrive-synced folder. If you need an isolated environment, create it outside OneDrive.
38
-
39
- ## Start From Source
40
-
41
- ```powershell
42
- $env:PYTHONPATH = "src"
43
- python -m servercommander.server
44
- ```
45
-
46
- ## Configuration
47
-
48
- Example: [config/servercommander.example.toml](config/servercommander.example.toml)
49
-
50
- Default paths:
51
-
52
- - `%USERPROFILE%\.servercommander\config.toml`
53
- - `%USERPROFILE%\.config\servercommander\config.toml`
54
- - override with `SERVERCOMMANDER_CONFIG`
55
-
56
- Language can be configured with `[server].language`, `SERVERCOMMANDER_LANG`, or `SERVERCOMMANDER_LOCALE`.
57
-
58
- ```toml
59
- [server]
60
- name = "ellmos-servercommander"
61
- language = "en" # en, de, es, zh, ja, ru
62
- ```
63
-
64
- Secrets should be referenced through environment variables, for example `$MAIL_PASSWORD` or `$SFTP_PASSWORD`.
65
-
66
- ## Tools
67
-
68
- - `sc_health_check`: checks HTTP endpoints and reports status code plus latency
69
- - `sc_logs_analyze`: analyzes Apache/Nginx access logs from inline text or a local file, including status classes, bytes, referers, error paths, and suspicious request markers
70
- - `sc_deploy`: creates a deployment plan with a local SHA256 manifest and profile diagnostics, but does not upload yet
71
- - `sc_deploy_status`: shows configured deploy profiles, selected-profile diagnostics, and the current alpha history status
72
- - `sc_mail_list`, `sc_mail_read`, `sc_mail_send`, `sc_mail_search`: safe alpha status responses with mail configuration diagnostics and no IMAP/SMTP connections
73
-
74
- ## Development
75
-
76
- ```powershell
77
- $env:PYTHONIOENCODING = "utf-8"
78
- $env:PYTHONDONTWRITEBYTECODE = "1"
79
- python -m pytest -q
80
- npm run smoke
81
- npm pack --dry-run
82
- ```
83
-
84
- Next useful step: add explicitly configured execution adapters for SFTP and IMAP/SMTP, keep dry-run defaults, and extend log analysis with persisted reports.
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
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
14
+ [![npm version](https://img.shields.io/npm/v/ellmos-servercommander-mcp.svg)](https://www.npmjs.com/package/ellmos-servercommander-mcp)
15
+ [![Python](https://img.shields.io/badge/python-%3E%3D3.10-blue.svg)](https://www.python.org/)
16
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg)](https://nodejs.org/)
17
+ [![MCP](https://img.shields.io/badge/MCP-stdio-blueviolet.svg)](https://modelcontextprotocol.io/)
18
+ [![Status: alpha](https://img.shields.io/badge/status-alpha-orange.svg)](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.