Skip to main content
Glama
WakkeWang

Serial Web Terminal MCP

by WakkeWang

Serial Web Terminal MCP

Python 3.11+ Licencia: MIT Compatible con MCP

Un servidor Model Context Protocol que brinda a los asistentes de codificación con IA (Claude Code, Cursor, Windsurf, etc.) la capacidad de interactuar con dispositivos de puerto serie.

Los agentes de IA pueden conectarse a dispositivos serie, enviar comandos y capturar la salida, mientras los usuarios observan todo el proceso en tiempo real a través de un terminal basado en navegador.

✨ Características

  • 🔌 Conexión Serie — Conéctese a puertos COM, /dev/ttyUSB*, /dev/ttyS*, etc. con inicio de sesión automático

  • 🖥️ Terminal Web — Terminal xterm.js en navegador que muestra E/S serie en tiempo real (como Xshell)

  • 🤖 Servidor MCP — Integración nativa de herramientas; los agentes de IA llaman directamente mediante el protocolo MCP

  • 📝 Registros con Marca de Tiempo — Cada línea se registra con marca de tiempo, rotación diaria, coincide exactamente con la visualización del terminal

  • ⌨️ Bidireccional — La IA envía comandos + el usuario puede escribir manualmente en el terminal del navegador

  • 🌐 Inicio de Sesión Multilingüe — Detecta automáticamente los mensajes de inicio de sesión/contraseña en inglés, chino y japonés

  • ⏱️ Esperar y Enviar — Espera una salida específica y luego envía datos inmediatamente (p. ej., ventanas de contraseña de uboot)

  • 🛡️ Recuperación por Tiempo de Espera — Ctrl+C automático en caso de tiempo de espera, sin sesiones colgadas

Related MCP server: UART MCP Server

📦 Instalación

pip install mcp pyserial aiohttp

O desde los requisitos:

pip install -r requirements.txt

🚀 Inicio Rápido

1. Configure su cliente de IA

Claude Code (.mcp.json en la raíz del proyecto o ~/.claude/claude_config.json):

{
  "mcpServers": {
    "serial-terminal": {
      "command": "python",
      "args": ["/path/to/serial_mcp_server.py"]
    }
  }
}

Cursor (Configuración → MCP → Añadir Servidor):

{
  "mcpServers": {
    "serial-terminal": {
      "command": "python",
      "args": ["/path/to/serial_mcp_server.py"]
    }
  }
}

Consulte examples/ para archivos de configuración listos para usar.

2. Hable con su asistente de IA

> 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

Abra http://localhost:8080 en su navegador para ver las operaciones serie de la IA en tiempo real.

🔧 Herramientas MCP

Herramienta

Descripción

serial_list_ports

Lista todos los dispositivos de puerto serie disponibles

serial_connect

Conecta a un puerto serie e inicia el terminal web (admite inicio de sesión automático)

serial_send

Envía un comando shell y devuelve la salida del dispositivo

serial_raw

Envía datos en bruto (p. ej., Ctrl+C = \x03)

serial_wait_send

Espera una salida específica, luego envía datos inmediatamente (para operaciones críticas en tiempo)

serial_status

Verifica el estado actual de la conexión

serial_log

Obtiene registros de operaciones con marca de tiempo

serial_disconnect

Desconecta y detiene el terminal web

serial_connect

Conecta a un dispositivo serie con inicio de sesión automático opcional.

Parámetro

Tipo

Por Defecto

Descripción

port

str

(obligatorio)

Nombre del dispositivo serie (p. ej., COM3, /dev/ttyUSB0)

baudrate

int

115200

Tasa de baudios

login_user

str

""

Nombre de usuario para inicio de sesión automático (omitir si está vacío)

login_pass

str

""

Contraseña para inicio de sesión automático

init_cmd

str

unset TMOUT

Comando a ejecutar tras el inicio de sesión (evita el tiempo de espera de la sesión)

web_port

int

8080

Puerto del terminal web

serial_send

Envía un comando shell y captura la salida.

Parámetro

Tipo

Por Defecto

Descripción

command

str

(obligatorio)

Comando shell a ejecutar

timeout

int

8

Tiempo de espera de respuesta en segundos

serial_wait_send

Espera una cadena específica en la salida serie, luego envía datos inmediatamente. Ideal para:

  • Entrar en uboot durante un reinicio (ventana de contraseña de 3 segundos)

  • Responder a mensajes de inicio de sesión

  • Cualquier automatización de "esperar X, luego enviar Y"

Parámetro

Tipo

Por Defecto

Descripción

wait_for

str

(obligatorio)

Cadena objetivo a esperar

send_data

str

(obligatorio)

Datos a enviar cuando se encuentra el objetivo

timeout

int

60

Tiempo máximo de espera en segundos

trigger

str

""

Datos opcionales a enviar antes de esperar (p. ej., \r\n para reactivar un mensaje estático)

🖥️ Uso Independiente (sin MCP)

serial_web.py puede ejecutarse de forma independiente mediante API HTTP:

# 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

API HTTP

# 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"

Argumentos de CLI

Argumento

Por Defecto

Descripción

--port

(obligatorio)

Nombre del dispositivo serie (COM3, /dev/ttyUSB0)

--baud

115200

Tasa de baudios

--web-port

8080

Puerto del servidor web

--login-user

(ninguno)

Nombre de usuario para inicio de sesión automático

--login-pass

(ninguno)

Contraseña para inicio de sesión automático

--init-cmd

unset TMOUT

Comando posterior al inicio de sesión (use ; para múltiples)

--prompt-regex

(automático)

Expresión regular personalizada para detección de mensajes

--list

—

Lista los puertos serie disponibles

📝 Formato de Registro

Los registros se guardan en logs/serial_YYYYMMDD.log (rotación diaria):

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  >>> 自动登录流程完成
  • Salida del terminal: marca de tiempo contenido (extraída del búfer de xterm.js — coincide exactamente con la visualización del navegador)

  • Eventos del sistema: marca de tiempo >>> mensaje (inicio de sesión, arranque, etc.)

Fidelidad de las líneas del registro:

  • Sin división por ajuste — las líneas con ajuste suave del terminal (ajuste de 80 columnas) se fusionan de nuevo en una sola línea lógica

  • Consciente de barras de progreso — las secuencias de sobrescritura \r (10%\r20%\r30%) se colapsan al estado visible final (30%)

  • Consciente de retroceso — las ediciones manuales con retroceso se registran como la línea final editada

  • Cada línea siempre lleva un prefijo de marca de tiempo

🏗️ Arquitectura

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)

📁 Estructura del Proyecto

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

🧪 Pruebas

Ejecute el conjunto de pruebas de regresión (no requiere dispositivo serie físico):

python tests/test_regression.py -v

Las pruebas cubren:

  • Limpieza de salida (eliminación de ANSI, eliminación de eco, eliminación de mensajes)

  • Detección de mensajes (mensajes de shell, mensajes conocidos)

  • Almacenamiento en búfer de líneas de registro (manejo de retroceso, líneas parciales, limpieza ANSI)

  • Detección de palabras clave de inicio de sesión automático (inglés, chino, japonés)

  • Envío/recepción de comandos (serie simulada, tiempo de espera, recuperación con Ctrl+C)

  • Esperar y enviar (coincidencia inmediata, coincidencia dinámica, tiempo de espera, disparador)

  • Estructura de página HTML (sin IDs duplicados, elementos requeridos)

  • Registro de herramientas del servidor MCP

  • Puntos finales de la API HTTP (estado, envío, en bruto, registro — manejo de errores)

  • Seguridad (sin credenciales codificadas, cobertura de .gitignore)

🌐 Inicio de Sesión Automático

El flujo de inicio de sesión automático admite mensajes en varios idiomas:

Idioma

Mensajes de Inicio de Sesión

Mensajes de Contraseña

Inglés

login:

Password:

Chino

登录: 用户名:

口令: 密码:

Japonés

—

パスワード:

Flujo de inicio de sesión:

  1. Enviar Enter para despertar el terminal

  2. Detectar mensaje login: → enviar nombre de usuario

  3. Detectar mensaje Password: → enviar contraseña

  4. Esperar mensaje de shell

  5. Ejecutar stty cols 200 (terminal ancho, evita el ajuste de 80 columnas)

  6. Ejecutar --init-cmd (por defecto: unset TMOUT)

Si ya ha iniciado sesión (no se detecta mensaje de inicio de sesión), salta al paso 5.

📄 Licencia

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