Serial Web Terminal MCP
Serial Web Terminal MCP
Model Context Protocol サーバーで、AIコーディングアシスタント(Claude Code、Cursor、Windsurfなど)にシリアルポートデバイスとの対話機能を提供します。
AIエージェントはシリアルデバイスに接続し、コマンドを送信し、出力を取得できます。ユーザーはブラウザベースのターミナルを通じてプロセス全体をリアルタイムで監視できます。
✨ 機能
🔌 シリアル接続 — COMポート、
/dev/ttyUSB*、/dev/ttyS*などに接続し、自動ログイン対応🖥️ ウェブターミナル — xterm.js ブラウザターミナルでリアルタイムシリアルI/Oを表示(Xshellのような)
🤖 MCPサーバー — ネイティブツール統合。AIエージェントがMCPプロトコル経由で直接呼び出し
📝 タイムスタンプ付きログ — すべての行にタイムスタンプ付きで記録、日次ローテーション、ターミナル表示と完全一致
⌨️ 双方向 — AIがコマンド送信+ユーザーがブラウザターミナルで手動入力可能
🌐 多言語ログイン — 英語、中国語、日本語のログイン/パスワードプロンプトを自動検出
⏱️ 待機&送信 — 特定の出力を待ってから即座にデータを送信(例:ubootパスワードウィンドウ)
🛡️ タイムアウト回復 — タイムアウト時に自動Ctrl+C、セッションがハングしない
Related MCP server: UART MCP Server
📦 インストール
pip install mcp pyserial aiohttpまたは requirements から:
pip install -r requirements.txt🚀 クイックスタート
1. AIクライアントを設定
Claude Code(プロジェクトルートの .mcp.json または ~/.claude/claude_config.json):
{
"mcpServers": {
"serial-terminal": {
"command": "python",
"args": ["/path/to/serial_mcp_server.py"]
}
}
}Cursor(設定→MCP→サーバー追加):
{
"mcpServers": {
"serial-terminal": {
"command": "python",
"args": ["/path/to/serial_mcp_server.py"]
}
}
}設定ファイルのサンプルは
examples/を参照してください。
2. AIアシスタントに指示
> 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ブラウザで http://localhost:8080 を開くと、AIのシリアル操作をリアルタイムで確認できます。
🔧 MCPツール
ツール | 説明 |
| 利用可能なシリアルポートデバイスをすべて一覧表示 |
| シリアルポートに接続し、ウェブターミナルを起動(自動ログイン対応) |
| シェルコマンドを送信し、デバイスの出力を返す |
| 生データを送信(例: Ctrl+C = |
| 特定の出力を待ち、その後即座にデータを送信(時間重視の操作向け) |
| 現在の接続状態を確認 |
| タイムスタンプ付きの操作ログを取得 |
| 切断し、ウェブターミナルを停止 |
serial_connect
シリアルデバイスに接続(オプションで自動ログイン)。
パラメータ | 型 | デフォルト | 説明 |
| str | (必須) | シリアルデバイス名(例: |
| int |
| ボーレート |
| str |
| 自動ログインユーザー名(空欄の場合はスキップ) |
| str |
| 自動ログインパスワード |
| str |
| ログイン後に実行するコマンド(セッションタイムアウト防止) |
| int |
| ウェブターミナルのポート |
serial_send
シェルコマンドを送信し、出力を取得。
パラメータ | 型 | デフォルト | 説明 |
| str | (必須) | 実行するシェルコマンド |
| int |
| 応答タイムアウト(秒) |
serial_wait_send
シリアル出力で特定の文字列を待ち、その後即座にデータを送信。以下のような場合に最適:
再起動中にubootに入る(3秒のパスワードウィンドウ)
ログインプロンプトへの応答
「Xを待ち、Yを送信」という任意の自動化
パラメータ | 型 | デフォルト | 説明 |
| str | (必須) | 待機対象の文字列 |
| str | (必須) | 対象が見つかったときに送信するデータ |
| int |
| 最大待機時間(秒) |
| str |
| 待機前に送信するオプションデータ(例: |
🖥️ スタンドアロン使用(MCPなし)
serial_web.py はHTTP API経由で独立して実行可能:
# 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引数
引数 | デフォルト | 説明 |
| (必須) | シリアルデバイス名(COM3、/dev/ttyUSB0) |
|
| ボーレート |
|
| ウェブサーバーポート |
| (なし) | 自動ログインユーザー名 |
| (なし) | 自動ログインパスワード |
|
| ログイン後のコマンド(複数ある場合は |
| (自動) | カスタムプロンプト検出用正規表現 |
| — | 利用可能なシリアルポートを一覧表示 |
📝 ログ形式
ログは logs/serial_YYYYMMDD.log に保存されます(日次ローテーション):
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 >>> 自动登录流程完成ターミナル出力:
タイムスタンプ 内容(xterm.jsバッファから抽出 — ブラウザ表示と完全一致)システムイベント:
タイムスタンプ >>> メッセージ(ログイン、起動など)
ログ行の忠実性:
折り返し分割なし — ターミナルでソフト折り返しされた行(80桁折り返し)は、1つの論理行にマージ
プログレスバー対応 —
\r上書きシーケンス(10%\r20%\r30%)は最終表示状態(30%)に整理バックスペース対応 — バックスペースによる手動編集は、最終編集行として記録
すべての行には常にタイムスタンププレフィックスが付きます
🏗️ アーキテクチャ
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)📁 プロジェクト構成
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🧪 テスト
回帰テストスイートを実行(物理シリアルデバイス不要):
python tests/test_regression.py -vテスト内容:
出力クリーニング(ANSI除去、エコー除去、プロンプト除去)
プロンプト検出(シェルプロンプト、既知のプロンプト)
ログ行バッファリング(バックスペース処理、部分行、ANSIクリーニング)
自動ログインキーワード検出(英語、中国語、日本語)
コマンド送信/受信(モックシリアル、タイムアウト、Ctrl+C回復)
待機&送信(即時マッチ、動的マッチ、タイムアウト、トリガー)
HTMLページ構造(重複IDなし、必須要素)
MCPサーバーツール登録
HTTP APIエンドポイント(status、send、raw、log — エラーハンドリング)
セキュリティ(ハードコードされた認証情報なし、.gitignoreのカバレッジ)
🌐 自動ログイン
自動ログインフローは多言語プロンプトに対応:
言語 | ログインプロンプト | パスワードプロンプト |
英語 |
|
|
中国語 |
|
|
日本語 | — |
|
ログインフロー:
Enterキーを送信してターミナルを起動
login:プロンプトを検出 → ユーザー名を送信Password:プロンプトを検出 → パスワードを送信シェルプロンプトを待機
stty cols 200を実行(ワイドターミナル、80桁折り返し防止)--init-cmdを実行(デフォルト:unset TMOUT)
既にログインしている場合(ログインプロンプトが検出されない場合)、ステップ5にスキップします。
📄 ライセンス
This server cannot be deployed
Maintenance
Related MCP Connectors
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
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 explicitly paired computers, servers, and VMs for permitted remote actions.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables 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-
- AlicenseAqualityCmaintenanceEnables AI assistants to communicate with serial port devices, supporting port management, data transmission in text/binary modes, interactive terminal sessions, and automatic reconnection.1412MIT
- AlicenseAqualityBmaintenanceAllows 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.2752 PyPI24MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to communicate with UART/serial devices, offering tools for port management, data read/write, and protocol handling.MIT