Skip to main content
Glama
WakkeWang

Serial Web Terminal MCP

by WakkeWang

Serial Web Terminal MCP

Python 3.11+ License: MIT MCP Compatible

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

Related MCP server: UART MCP Server

📦 Installation

pip install mcp pyserial aiohttp

Oder 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

serial_list_ports

Alle verfügbaren seriellen Schnittstellengeräte auflisten

serial_connect

Mit einer seriellen Schnittstelle verbinden und das Web-Terminal starten (unterstützt automatischen Login)

serial_send

Einen Shell-Befehl senden und die Geräteausgabe zurückgeben

serial_raw

Rohdaten senden (z. B. Strg+C = \x03)

serial_wait_send

Auf bestimmte Ausgabe warten, dann sofort Daten senden (für zeitkritische Operationen)

serial_status

Aktuellen Verbindungsstatus prüfen

serial_log

Zeitgestempelte Betriebsprotokolle abrufen

serial_disconnect

Trennen und das Web-Terminal stoppen

serial_connect

Mit einem seriellen Gerät mit optionalem automatischem Login verbinden.

Parameter

Typ

Standard

Beschreibung

port

str

(erforderlich)

Serieller Gerätename (z. B. COM3, /dev/ttyUSB0)

baudrate

int

115200

Baudrate

login_user

str

""

Automatischer Login-Benutzername (leer lassen, um zu überspringen)

login_pass

str

""

Automatisches Login-Passwort

init_cmd

str

unset TMOUT

Befehl, der nach dem Login ausgeführt werden soll (verhindert Sitzungstimeout)

web_port

int

8080

Web-Terminal-Port

serial_send

Einen Shell-Befehl senden und die Ausgabe erfassen.

Parameter

Typ

Standard

Beschreibung

command

str

(erforderlich)

Auszuführender Shell-Befehl

timeout

int

8

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

wait_for

str

(erforderlich)

Zielzeichenfolge, auf die gewartet werden soll

send_data

str

(erforderlich)

Daten, die gesendet werden sollen, wenn das Ziel gefunden wird

timeout

int

60

Maximale Wartezeit in Sekunden

trigger

str

""

Optionale Daten, die vor dem Warten gesendet werden sollen (z. B. \r\n, um eine statische Eingabeaufforderung erneut auszulösen)

🖥️ 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 --list

HTTP-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

--port

(erforderlich)

Serieller Gerätename (COM3, /dev/ttyUSB0)

--baud

115200

Baudrate

--web-port

8080

Webserver-Port

--login-user

(keiner)

Automatischer Login-Benutzername

--login-pass

(keiner)

Automatisches Login-Passwort

--init-cmd

unset TMOUT

Befehl nach dem Login (mehrere mit ; trennen)

--prompt-regex

(automatisch)

Benutzerdefinierter Regex zur Erkennung der Eingabeaufforderung

--list

—

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%) reduziert

  • Rü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 -v

Tests 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

login:

Password:

Chinesisch

登录: 用户名:

口令: 密码:

Japanisch

—

パスワード:

Login-Ablauf:

  1. Eingabetaste senden, um das Terminal zu aktivieren

  2. login:-Eingabeaufforderung erkennen → Benutzername senden

  3. Password:-Eingabeaufforderung erkennen → Passwort senden

  4. Auf Shell-Eingabeaufforderung warten

  5. stty cols 200 ausführen (breites Terminal, verhindert 80-Spalten-Umbruch)

  6. --init-cmd ausführen (Standard: unset TMOUT)

Wenn bereits angemeldet (keine Login-Eingabeaufforderung erkannt), wird zu Schritt 5 gesprungen.

📄 Lizenz

MIT

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to interact with physical serial port devices across platforms (Windows COM/Linux tty) with support for asynchronous communication, URC pattern recognition, and structured logging.
    1
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to communicate with serial port devices, supporting port management, data transmission in text/binary modes, interactive terminal sessions, and automatic reconnection.
    14
    12
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Allows AI agents to interact with serial devices via RS232/UART, enabling port listing, connection, read/write, control line manipulation, and protocol specification for automated debugging and testing.
    27
    52 PyPI
    24
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to communicate with UART/serial devices, offering tools for port management, data read/write, and protocol handling.
    MIT