Serial Web Terminal MCP
Serial Web Terminal MCP
Ein Model Context Protocol-Server, der KI-Programmierassistenten (Claude Code, Cursor, Windsurf usw.) die Interaktion mit seriellen Schnittstellengeräten ermöglicht.
KI-Agenten können eine Verbindung zu seriellen Geräten herstellen, Befehle senden und Ausgaben erfassen – während Benutzer den gesamten Prozess in Echtzeit über ein browserbasiertes Terminal verfolgen.
✨ Funktionen
🔌 Serielle Verbindung — Verbindung zu COM-Ports,
/dev/ttyUSB*,/dev/ttyS*usw. mit automatischem Login🖥️ Web-Terminal — xterm.js-Browser-Terminal mit Echtzeit-Serien-E/A (wie Xshell)
🤖 MCP-Server — Native Tool-Integration; KI-Agenten rufen direkt über das MCP-Protokoll auf
📝 Zeitgestempelte Protokolle — Jede Zeile wird mit Zeitstempel protokolliert, tägliche Rotation, entspricht exakt der Terminalanzeige
⌨️ Bidirektional — KI sendet Befehle + Benutzer kann manuell im Browser-Terminal tippen
🌐 Mehrsprachiger Login — Erkennt Login-/Passwort-Aufforderungen in Englisch, Chinesisch und Japanisch
⏱️ Warten-und-Senden — Warte auf bestimmte Ausgabe und sende dann sofort Daten (z. B. uboot-Passwortfenster)
🛡️ Timeout-Wiederherstellung — Automatisches Strg+C bei Timeout, keine hängenden Sitzungen
📦 Installation
pip install mcp pyserial aiohttpOder aus den Anforderungen:
pip install -r requirements.txt🚀 Schnellstart
1. Konfigurieren Sie Ihren KI-Client
Claude Code (.mcp.json im Projektstamm oder ~/.claude/claude_config.json):
{
"mcpServers": {
"serial-terminal": {
"command": "python",
"args": ["/path/to/serial_mcp_server.py"]
}
}
}Cursor (Einstellungen → MCP → Server hinzufügen):
{
"mcpServers": {
"serial-terminal": {
"command": "python",
"args": ["/path/to/serial_mcp_server.py"]
}
}
}Siehe
examples/für gebrauchsfertige Konfigurationsdateien.
2. Sprechen Sie mit Ihrem KI-Assistenten
> List available serial ports
AI: [calls serial_list_ports] → Found COM3, COM4...
> Connect to COM3, username admin, password ****
AI: [calls serial_connect(port="COM3", login_user="admin", login_pass="****")]
→ Serial connected, Web terminal: http://localhost:8080
> Run uname -a
AI: [calls serial_send(command="uname -a")]
→ Linux device 4.19.246 aarch64 GNU/LinuxÖffnen Sie http://localhost:8080 in Ihrem Browser, um die seriellen Operationen der KI in Echtzeit zu verfolgen.
🔧 MCP-Tools
Tool | Beschreibung |
| Alle verfügbaren seriellen Schnittstellengeräte auflisten |
| Mit einer seriellen Schnittstelle verbinden und das Web-Terminal starten (unterstützt automatischen Login) |
| Einen Shell-Befehl senden und die Geräteausgabe zurückgeben |
| Rohdaten senden (z. B. Strg+C = |
| Auf bestimmte Ausgabe warten, dann sofort Daten senden (für zeitkritische Operationen) |
| Aktuellen Verbindungsstatus prüfen |
| Zeitgestempelte Betriebsprotokolle abrufen |
| Trennen und das Web-Terminal stoppen |
serial_connect
Mit einem seriellen Gerät mit optionalem automatischem Login verbinden.
Parameter | Typ | Standard | Beschreibung |
| str | (erforderlich) | Serieller Gerätename (z. B. |
| int |
| Baudrate |
| str |
| Automatischer Login-Benutzername (leer lassen, um zu überspringen) |
| str |
| Automatisches Login-Passwort |
| str |
| Befehl, der nach dem Login ausgeführt werden soll (verhindert Sitzungstimeout) |
| int |
| Web-Terminal-Port |
serial_send
Einen Shell-Befehl senden und die Ausgabe erfassen.
Parameter | Typ | Standard | Beschreibung |
| str | (erforderlich) | Auszuführender Shell-Befehl |
| int |
| Antwort-Timeout in Sekunden |
serial_wait_send
Auf eine bestimmte Zeichenfolge in der seriellen Ausgabe warten, dann sofort Daten senden. Ideal für:
Eingabe von uboot während des Neustarts (3-Sekunden-Passwortfenster)
Reaktion auf Login-Aufforderungen
Jede „Warte auf X, dann sende Y“-Automatisierung
Parameter | Typ | Standard | Beschreibung |
| str | (erforderlich) | Zielzeichenfolge, auf die gewartet werden soll |
| str | (erforderlich) | Daten, die gesendet werden sollen, wenn das Ziel gefunden wird |
| int |
| Maximale Wartezeit in Sekunden |
| str |
| Optionale Daten, die vor dem Warten gesendet werden sollen (z. B. |
🖥️ Eigenständige Nutzung (ohne MCP)
serial_web.py kann unabhängig über die HTTP-API ausgeführt werden:
# Start with auto-login
python serial_web.py --port COM3 --baud 115200 \
--login-user admin --login-pass secret \
--init-cmd "unset TMOUT"
# List available ports
python serial_web.py --listHTTP-API
# Send a command
curl -s -X POST http://localhost:8080/api/send \
-H "Content-Type: application/json" \
-d '{"command":"ls /","timeout":5}'
# Send raw data (Ctrl+C)
curl -s -X POST http://localhost:8080/api/raw \
-H "Content-Type: application/json" \
-d '{"data":"\x03"}'
# Wait-and-send
curl -s -X POST http://localhost:8080/api/wait-send \
-H "Content-Type: application/json" \
-d '{"wait_for":"login:","send_data":"admin","timeout":30}'
# Check status
curl -s http://localhost:8080/api/status
# Get logs
curl -s "http://localhost:8080/api/log?lines=50"CLI-Argumente
Argument | Standard | Beschreibung |
| (erforderlich) | Serieller Gerätename (COM3, /dev/ttyUSB0) |
|
| Baudrate |
|
| Webserver-Port |
| (keiner) | Automatischer Login-Benutzername |
| (keiner) | Automatisches Login-Passwort |
|
| Befehl nach dem Login (mehrere mit |
| (automatisch) | Benutzerdefinierter Regex zur Erkennung der Eingabeaufforderung |
| — | Verfügbare serielle Schnittstellen auflisten |
📝 Protokollformat
Protokolle werden in logs/serial_YYYYMMDD.log gespeichert (tägliche Rotation):
2026-08-06 15:32:22 device # uname -a
2026-08-06 15:32:22 Linux device 4.19.246 aarch64 GNU/Linux
2026-08-06 15:32:23 device # cat /proc/cpuinfo | head -5
2026-08-06 15:32:23 processor : 0
2026-08-06 15:32:23 >>> 自动登录流程完成Terminalausgabe:
Zeitstempel Inhalt(aus dem xterm.js-Puffer extrahiert – entspricht exakt der Browseranzeige)Systemereignisse:
Zeitstempel >>> Nachricht(Login, Start usw.)
Zeilenwiedergabetreue:
Keine Umbruchaufteilung — Zeilen, die vom Terminal umbrochen wurden (80-Spalten-Umbruch), werden wieder zu einer einzigen logischen Zeile zusammengeführt
Fortschrittsbalken-erkennend —
\r-Überschreibungssequenzen (10%\r20%\r30%) werden auf den endgültigen sichtbaren Zustand (30%) reduziertRücktasten-erkennend — Manuelle Bearbeitungen mit Rücktaste werden als die endgültig bearbeitete Zeile aufgezeichnet
Jede Zeile trägt immer einen Zeitstempel-Präfix
🏗️ Architektur
AI Agent (Claude Code / Cursor / ...)
└─ MCP Protocol (stdio)
└─ serial_mcp_server.py
└─ HTTP API
└─ serial_web.py (aiohttp)
├─ Serial Port (pyserial)
├─ Web Terminal (xterm.js + WebSocket)
└─ Log Recording
Browser
└─ http://localhost:8080
├─ xterm.js terminal (real-time serial data)
└─ Log panel (timestamped logs)📁 Projektstruktur
serial-web-terminal/
├── serial_web.py # Core: Web terminal + HTTP API
├── serial_mcp_server.py # MCP Server (wraps HTTP API)
├── tests/
│ └── test_regression.py # Regression test suite (68 tests)
├── examples/
│ ├── claude-code.json # Claude Code MCP config
│ └── cursor.json # Cursor MCP config
├── requirements.txt
├── LICENSE
└── README.md🧪 Testen
Führen Sie die Regressionstestsuite aus (kein physisches serielles Gerät erforderlich):
python tests/test_regression.py -vTests umfassen:
Ausgabebereinigung (ANSI-Entfernung, Echo-Entfernung, Eingabeaufforderungsentfernung)
Erkennung von Eingabeaufforderungen (Shell-Eingabeaufforderungen, bekannte Eingabeaufforderungen)
Protokollzeilenpufferung (Rücktastenbehandlung, Teilzeilen, ANSI-Bereinigung)
Erkennung von Schlüsselwörtern für automatischen Login (Englisch, Chinesisch, Japanisch)
Befehl senden/empfangen (seriell simulieren, Timeout, Strg+C-Wiederherstellung)
Warten-und-Senden (sofortige Übereinstimmung, dynamische Übereinstimmung, Timeout, Auslöser)
HTML-Seitenstruktur (keine doppelten IDs, erforderliche Elemente)
MCP-Server-Tool-Registrierung
HTTP-API-Endpunkte (Status, Senden, Rohdaten, Protokoll – Fehlerbehandlung)
Sicherheit (keine fest codierten Anmeldeinformationen, .gitignore-Abdeckung)
🌐 Automatischer Login
Der automatische Login-Ablauf unterstützt mehrsprachige Eingabeaufforderungen:
Sprache | Login-Eingabeaufforderungen | Passwort-Eingabeaufforderungen |
Englisch |
|
|
Chinesisch |
|
|
Japanisch | — |
|
Login-Ablauf:
Eingabetaste senden, um das Terminal zu aktivieren
login:-Eingabeaufforderung erkennen → Benutzername sendenPassword:-Eingabeaufforderung erkennen → Passwort sendenAuf Shell-Eingabeaufforderung warten
stty cols 200ausführen (breites Terminal, verhindert 80-Spalten-Umbruch)--init-cmdausführen (Standard:unset TMOUT)
Wenn bereits angemeldet (keine Login-Eingabeaufforderung erkannt), wird zu Schritt 5 gesprungen.
📄 Lizenz
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Live browser debugging for AI assistants — DOM, console, network via MCP.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/WakkeWang/serial-terminal-mcp-tool'
If you have feedback or need assistance with the MCP directory API, please join our Discord server