Skip to main content
Glama
SWITCHSCIENCE

mcp-micropython-bridge

README.md
# mcp-micropython-bridge

MicroPython REPL への MCP ブリッジサーバー。

Claude Desktop, Codex (VSCode), Copilot (VSCode), Antigravity などの MCP クライアントから、
USB Serial または WebREPL 経由で MicroPython (ESP32, RP2040, etc.) を操作できます。

`HARDWARE.md` を単なる配線メモではなく、将来のセッションが再利用するためのボード固有ドキュメントとして育てていく運用を想定しています。たとえばサーボ操作の依頼が来たら、その場限りのコード片で済ませるのではなく、小さな helper module をデバイス上に作成し、今後の使い方や前提が増えたときだけ `HARDWARE.md` に短い利用メモを追記して、次回以降はその helper を再利用する形を推奨します。

## セットアップ

```powershell
# 依存関係のインストール
uv sync

# サーバー起動(動作確認用)
uv run mcp-micropython-bridge

# tools ラッパー経由の実機テスト CLI
uv run python -m mcp_micropython.device_test_cli --target COM3
```

## MicroPython ファームウェアの書き込み

このツールを使用するには、ターゲットデバイスに MicroPython ファームウェアを本体に書き込む必要があります。
詳細は [MicroPython 公式サイト](https://micropython.org/) を参照してください。

### ターゲット別ダウンロードページ

- [ESP32](https://micropython.org/download/?mcu=esp32)
- [ESP32-S3](https://micropython.org/download/?mcu=esp32s3)
- [ESP32-C5](https://micropython.org/download/?mcu=esp32c5)
- [RP2040](https://micropython.org/download/?mcu=rp2040)
- [RP2350](https://micropython.org/download/?mcu=rp2350)

### ESP32 へのインストール例 (`esptool.py`)

ESP32 シリーズは `esptool.py` を利用してコマンドラインからインストールできます。

1. `esptool` をインストール:
   ```bash
   pip install esptool
   ```
2. 既存フラッシュの消去:
   ```bash
   esptool.py --chip esp32 --port COMx erase_flash
   ```
3. 新しいファームウェアの書き込み:
   ```bash
   esptool.py --chip esp32 --port COMx --baud 460800 write_flash -z 0x1000 <firmware_file>.bin
   ```
   (※ チップの種類 (esp32, esp32s3, etc.) や構成により、書き込みアドレスが `0x0` になる場合があります。詳細は各ダウンロードページの指示に従ってください)


## MCP クライアントへの登録

`claude_desktop_config_example.json` を参考に、各クライアントの設定ファイルに追記してください。

```json
{
  "mcpServers": {
    "micropython": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\mcp-micropython-bridge",
        "run",
        "mcp-micropython-bridge"
      ]
    }
  }
}
```

## 提供リソース

| リソース | 説明 |
|---|---|
| `micropython://guide/recipes` | よくある作業の進め方 |
| `micropython://policy/hardware-docs` | `HARDWARE.md` を更新すべき条件 |
| `micropython://guide/troubleshooting` | よくある問題の復旧手順 |
| `micropython://guide/limitations` | 既知の制約一覧 |

## 提供ツール

| ツール | 説明 |
|---|---|
| `micropython_list_ports` | 利用可能なシリアルポートを列挙 |
| `micropython_connect` | `COM3` または `host[:port]` に接続 |
| `micropython_disconnect` | 接続を切断 |
| `micropython_connection_status` | 現在の接続状態を取得 |
| `micropython_exec` | Python コードをブロック実行 |
| `micropython_eval` | 式を評価して値を返す |
| `micropython_get_info` | デバイス情報取得 |
| `micropython_reset` | ソフトリセット |
| `micropython_interrupt` | Ctrl-C を送って実行中の処理を中断 |
| `micropython_read_stream` | 一定時間ぶんの出力を読む |
| `micropython_read_until` | 特定文字列が出るまで待つ |
| `micropython_reset_and_capture` | ボードをリセットして起動ログを取得(serial 専用) |
| `micropython_list_files` | ファイル一覧 |
| `micropython_stat_path` | パス情報取得 |
| `micropython_read_file` | ファイル読み出し |
| `micropython_read_lines` | 行単位で一部読み出し |
| `micropython_head_lines` | 先頭数行を読み出し |
| `micropython_tail_lines` | 末尾数行を読み出し |
| `micropython_read_hardware_md` | `/HARDWARE.md` を読み出し |
| `micropython_upload_file` | ローカルファイルをデバイスへ転送 |
| `micropython_download_file` | デバイスファイルをローカルへ保存 |
| `micropython_hash_file` | デバイスファイルの SHA-256 を取得 |
| `micropython_compare_local_remote` | ローカルとデバイスの一致確認 |
| `micropython_write_file` | ファイル書き込み |
| `micropython_append_file` | ファイル追記 |
| `micropython_delete_file` | ファイル削除 |
| `micropython_make_dir` | ディレクトリ作成 |
| `micropython_remove_dir` | 空ディレクトリ削除 |
| `micropython_rename_path` | パス名変更 |

`micropython_exec(timeout=...)` の `timeout` は、コード送信開始から Raw REPL への復帰完了までを含む全体予算として扱います。
`micropython_read_file` / `micropython_read_hardware_md` / `micropython_write_file` / `micropython_append_file` の `timeout` も同じ意味です。

`micropython_write_file` は `content` によるテキスト書き込みと `content_base64` によるバイナリ書き込みをサポートします。
`micropython_append_file` も同じ入出力形式で末尾追記できます。
`micropython_read_file(as_base64=True)` を使うと、改行コードや非 UTF-8 バイト列を保持したまま取得できます。

## 実機テスト CLI

`src/mcp_micropython/tools` の登録済みツール関数を `FakeMCP` 経由で呼び出し、実機に対して接続確認やファイル I/O、serial 専用の stream/reset 系チェックをまとめて実行できます。

```powershell
# Serial で拡張セットを実行
uv run python -m mcp_micropython.device_test_cli --target COM3

# WebREPL で共通テストだけ実行
uv run python -m mcp_micropython.device_test_cli --target 192.168.1.10:8266 --password secret --tests common,filesystem

# エントリーポイントから起動
uv run mcp-micropython-device-test --target COM3 --tests all
```

主なオプション:

- `--target`: `COM3` または `host[:port]`
- `--password`: WebREPL 用パスワード
- `--baudrate`: serial ボーレート
- `--tests`: `all`, `common`, `filesystem`, `serial`, `stream`, `reset`
- `--large-file-size`: 長文転送テストのサイズ
- `--exec-timeout`: `exec` / ファイル操作タイムアウト
- `--read-timeout`: `read_until` / `read_stream` / `reset_and_capture` の待機時間
- `--reconnect-timeout`: serial リセット後に COM ポートが再出現するまで待つ時間

serial で `stream` / `reset` を実行する場合、一時的に `/main.py` を差し替えて起動ログを検証したあと、元の内容へ復元します。`/boot.py` は変更しませんが、変更前提の確認として読み出します。

## WebREPL 事前設定

WebREPL 接続を使う場合は、対象ボード側の Wi-Fi 接続と `webrepl.start()` が事前設定済みである必要があります。
この MCP サーバーは設定済みの WebREPL へ接続することだけを担当し、`boot.py` への初期セットアップは行いません。

このリポジトリには、初期設定用ファイルとして `device_root\boot.py` と `device_root\setup.py` を同梱しています。

- `device_root\boot.py`
  デバイス起動時に NVS から Wi-Fi SSID / Wi-Fi パスワード / WebREPL パスワードを読み出し、Wi-Fi 接続と `webrepl.start()` を実行します
- `device_root\setup.py`
  serial REPL 上で一度だけ実行する初期設定スクリプトです。入力した値を NVS へ保存します

`setup.py` で保存する `WEBREPL_PASSWORD` は MicroPython WebREPL の制約に合わせて 8 文字以下にしてください。
資格情報はファイルではなく NVS に保存されますが、デバイス実機に保持される点は同じなので、取り扱い注意です。

設定後の流れ:

1. serial 接続で `device_root\boot.py` をデバイスの `/boot.py` として書き込む
2. serial 接続で `device_root\setup.py` をデバイスの `/setup.py` として書き込む
3. serial REPL で `import setup` を実行し、Wi-Fi SSID / Wi-Fi パスワード / WebREPL パスワードを保存する
4. ボードを再起動する
5. Wi-Fi 側で割り当てられた IP アドレスを確認し、接続する

TDQS

B3.4/5.0

Scored across 29 tools

Disambiguation4/5

Most tools target a distinct resource and action, with clear separation between file reads, uploads, downloads, stream reads, and directory operations. A few pairs such as eval vs exec and read_file vs download_file require reading descriptions, but boundaries are still understandable.

Naming Consistency5/5

All tools use the same micropython_ prefix and snake_case verb_noun style, making the set predictable and easy to scan.

Tool Count3/5

29 tools is heavy for this server, and several convenience operations around file reading and streaming could likely be consolidated. The breadth is justifiable for a MicroPython bridge, but the count sits at the borderline of being excessive.

Completeness4/5

The surface covers connection lifecycle, execution, reset/interrupt, file CRUD, directory operations, transfers, hashing/comparison, and stream reading. Minor gaps such as recursive directory deletion or on-device copy remain, but core workflows are well covered.

Maintenance

ActivityInactive
ResponsivenessNo issues