MicroPython向けのMCPサーバーを作ってみた
最近LLMをさまざまなツールやシステムにつなげる流れが広がっています。マイコンのような物理デバイスも、うまく扱えればかなりおもしろくなるはずです。そこで今回は MicroPython が動作するボードに対して、LLMから直接コード実行などを行えるMCPサーバーを実装してみました。
何ができるのか
このMCPサーバーを使うと、LLMがMicroPythonボードに対してファイルの読み書き、コード実行、シリアル出力を確認しながら作業を進めます。単にコードを書くためだけでなく、実機を触って確かめながら進められるのがポイントです。
特におもしろいのは、ボード固有の情報を /HARDWARE.md に蓄積していけるところです。どのGPIOに何がつながっているか、温湿度センサのアドレスは何か、といった情報を会話の中で整理して書き込み、次の作業からその内容を前提に進められます。
たとえば、こんなやり取りができます。


こういう形で、一度与えたハードウェア情報をあとから使い回せるようになっています。/HARDWARE.md をデバイスの説明書として扱えます。短いコードをデバイスに書き込み、/HARDWARE.md に使い方を書いておけば、LLMはそのコードを使ってデバイスを制御するようになります。めちゃ便利!
どんな仕組みで動いているのか
仕組みとしてはシンプルで、MCPサーバーがホストPC上で動作し、USBシリアル経由でMicroPythonボードと通信します。MCPサーバー側で各種操作をツールとして公開し、LLMはそのツールを呼び出すことでMicroPythonボードを操作します。
MicroPython側は特別な常駐プログラムを必要とせず、基本的にはREPLやファイルシステムに対する操作をベースにしています。そのため、既存のMicroPythonボードに対して導入しやすい構成になっています。ESP32やRaspberry Pi Picoなど、MicroPythonが動くボードなら大体動くと思います。

今回は先日発売した# ESPr® Developer C5(16MB Flash / 8MB PSRAM)を利用しました。温湿度気圧センサーと近接センサーを接続しています。
触ってみると結構おもしろい
実際に触ってみると、これはターミナルを通した対話的なプログラムとは少し違うおもしろさがあります。ファイルを読んで、必要なら書き換えて、コードを試しに実行して、シリアル出力を見ながら挙動を確かめる。そうした一連の流れを、LLMとの会話の中で進められるのは新鮮でした。
特に、MicroPythonのように試行錯誤しながら開発することが多い環境とは相性がよさそうです。センサー値を読んでみる、ピン設定を変えて試す、ログを見て原因を探る、といった作業がうまくいけばかなり自然な形で回せそうだなと。
「AIが書いたコードを実機で動かす」ではなく、「AIが実際にデバイスを触りながら確認する」という体験には何か可能性がありそうだなと感じました。一方で、技術的にはおもしろいものの、決定的なユースケースはまだ見えていません。教育用途、試作の補助、ちょっとした自動化など、相性がよさそうな方向はいくつか考えられますが。。
まとめ
今回はMicroPython向けのMCPサーバーを実装し、LLMからボードを操作できるところまで作ってみました。実装してみたことで、技術的なおもしろさや可能性はかなり感じています。
ただ「これを何に使うと本当にうれしいのか」まだはっきり見えていません。教育、試作、自動化に限らず、こういう場面で使えそう、こういう構成にするとおもしろそう、といったアイディアがあればぜひ知りたいです。みなさんなら、どう活用しますか?
以上です。