PlatformIO について
PlatformIOは、AIコーディングエージェントがPlatformIOプロジェクトと接続ハードウェアを扱うためのMCPサーバーです。ファームウェアのビルドや書き込み、テスト、シリアル監視、デバッグ、クラッシュ解析、リソースレポートに対応します。
主な機能
- 01ファームウェアのビルドと書き込み
- 02シリアル出力の監視
- 03テストと静的チェックの実行
- 04クラッシュとコアダンプの解析
- 05GDBによるデバッグ
- 06メモリ、電力、ファームウェアサイズの確認
活用シーン
- 01組み込みプロジェクトのビルドと書き込み
- 02起動ログによるデバイス起動の検証
- 03クラッシュ箇所のソースコード特定
- 04ファームウェアのメモリと電力の確認
MCP 対応
MCPクライアントに、PlatformIOのプロジェクト、ビルド、ハードウェア、テスト、監視、解析、デバッグ用ツールを提供します。ポリシーにより、ビルドのみまたは読み取り専用に制限できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx platformio.mcpPLATFORMIO_MCP_POLICYfull (default), build_only, or read_onlyPLATFORMIO_MCP_PROJECT_DIRDefault project directory when a tool is called without project_dirPLATFORMIO_MCP_PIOExplicit path to the pio executable (auto-detected otherwise)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
29掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
platformio.mcp
AI コーディングエージェントに実機を操作させましょう。
PlatformIO 用の MCP サーバーです。ビルド、書き込み(シリアルまたは OTA)、シリアルの監視、テストの実行、クラッシュやコアダンプの解析、パーティションテーブルの確認、ヒープと電力の監視、GDB によるデバッグ、ファームウェアのサイズ削減ができます。
Python ネイティブ · Node 不要 · 1 行でインストール · Claude Code、Claude Desktop、Cursor、Codex、Windsurf、Cline に対応
⚡ 60 秒でインストール
uv が必要です(curl -LsSf https://astral.sh/uv/install.sh | sh)。次に、以下を実行します。
uvx platformio.mcp install --claude-code # or --cursor --claude-desktop --codex --windsurf
このマシンに PlatformIO がない場合は、--with-platformio を追加すると、サーバーと一緒に PlatformIO Core がインストールされます。オプションの追加機能:platformio.mcp[coredump] は ESP32 コアダンプアナライザーを、platformio.mcp[power] は Nordic PPK2 ドライバーを追加します。
その他の MCP クライアント(Cline、Zed、Continue など)
uvx platformio.mcp install --print
{ "mcpServers": { "platformio": { "command": "uvx", "args": ["platformio.mcp"] } } }
PlatformIO Core を同梱するには、"args": ["platformio.mcp[platformio]"] を使用します。
プラグインとして(Claude Code、Cursor:サーバーと、ループを教えるスキル)
このリポジトリは Open Plugins の構成に従っています:.mcp.json、skills/platformio/SKILL.md、rules/platformio.mdc、plugin.json。
claude plugin marketplace add powerdragonfire/platformio.mcp # Claude Code
claude plugin install [email protected]
PlatformIO をすでにお使いの場合
サーバーは PATH 上または ~/.platformio/penv 内の platformio / pio を検出します。PLATFORMIO_MCP_PIO=/path/to/pio で上書きできます。uvx platformio.mcp doctor を実行すると、エージェントから見える状態を確認できます。
🎬 動作イメージ
あなた:
view環境に書き込んで、起動することを確認してください。エージェント →
pio_flash_and_verify(env="view", expect="setup done")FAIL: ファームウェアの書き込みには成功しましたが、起動ログが失敗パターンに一致しました: 'Guru Meditation Error: Core 1 panic'ed (LoadProhibited)'。 原因:LoadProhibited。3/3 個のアドレスを解決しました: DisplayTask::run() (display_task.cpp:22) <- DisplayTask::run() (display_task.cpp:23) <- vPortTaskWrapper (port.c:143)エージェント:
display_task.cppの 22 行目でヌルポインターが発生しています。begin()より前にtft_が使われています。修正して、再ビルドし、再度書き込みます。PASS: view 環境への書き込みは 14.2 秒で完了し、2.1 秒間の起動出力の後、/dev/cu.usbserial-0001 で 'setup done' を確認しました。
コンテキストウィンドウに 40 KB のビルドログが入ることはありません。人がシリアルモニターを読む必要もありません。エージェントが受け取るのは、判定結果とファイル名、行番号です。
🔁 エージェントが実行するループ
flowchart LR
A[pio_project_envs] --> B[edit code]
B --> C[pio_build]
C -- errors with file:line --> B
C -- ok --> D[pio_flash_and_verify]
D -- PASS --> E([done])
D -- FAIL: decoded backtrace --> B
D -- TIMEOUT --> F[pio_monitor_capture]
F --> B
🧰 40 個のツール
| グループ | ツール | エージェントが受け取る情報 |
|---|---|---|
| 🔍 検出 | pio_system_info · pio_list_boards · pio_board_info · pio_list_devices | PlatformIO のバージョンとポリシー;MCU、クロック、RAM、フラッシュのサイズを含む約 1,700 種類のボード;開発ボードと思われるものにフラグを付けたシリアルポート |
| 📁 プロジェクト | pio_project_init · pio_project_envs · pio_project_metadata | 実際の pio project init(手書きの ini は使用しません);ボード、フレームワーク、モニター、アップロード設定を含むすべての環境;定義とインクルードパス |
| 🔨 ビルドと書き込み | pio_build · pio_upload · pio_upload_ota · pio_clean · pio_list_targets · pio_run_target | ステータス、解析済みのエラーと警告(ファイル、行、列)、RAM/フラッシュの使用率、直近 40 行、完全なログのパス。buildfs、erase などの追加ターゲット。ArduinoOTA 対応ボードへの Wi-Fi 経由の OTA。ポートの失敗は分類(使用中、権限なし、見つからない、応答なし)され、修正方法とともに返されます |
| 📟 シリアル | pio_monitor_start / read / write / stop / list · pio_monitor_capture · pio_port_diagnose | リングバッファ、カーソル読み取り、wait_for 正規表現に対応するバックグラウンドセッション、または管理不要の単発キャプチャ。ポートの診断:ポートを使用しているもの(このセッション、別のプロセス)、権限、修正方法 |
| ✅ 検証 | pio_test · pio_check | テストケースごとの合否とメッセージを含む Unity テスト;重大度と CWE ID 付きの cppcheck/clang-tidy の問題 |
| 📦 パッケージ | pio_pkg_search / install / uninstall / list / outdated / update · pio_deps_check | レジストリ検索と、platformio.ini との同期を保つ依存関係の変更;名前の衝突、バージョン未固定の指定、不要な依存関係、循環依存関係の監査 |
| 🧠 分析 | pio_flash_and_verify · pio_decode_backtrace · pio_size_report | ハードウェアを使用した合否判定;クラッシュダンプから解決されたファイルと行;フラッシュと RAM の全バイトの使用状況 |
| 💾 フラッシュレイアウト | pio_partition_table · pio_coredump | ESP32 のパーティション CSV チェック(アラインメント、重複、サイズ適合、OTA スロット)と、チップ上の実際のテーブルとの差分;フラッシュから取得してデコードしたコアダンプ |
| 📈 ランタイム | pio_memory_watch · pio_power_profile | シリアルから解析したヒープとスタックのテレメトリー(リーク判定とタスクごとの余裕を含む);シリアル電流計または Nordic PPK2 から取得した電流値(スリープ時/アクティブ時の内訳とバッテリー推定を含む) |
| 🐞 デバッグ | pio_debug_start / cmd / stop / list | pio debug を介したライブ GDB セッション:ブレークポイント、ステップ実行、バックトレース、変数。MI レコードを解析し、構造化された結果に変換します |
すべてのツールは ok、モデル向けに記述された 1 段落の summary、構造化フィールド、および完全な出力を参照する log_path を返します。長い出力は ~/.platformio-mcp/logs のディスク上に保存されます(新しい順に 200 ファイルを保持)。
CLI を超えるツール
| 機能 | 内部の仕組み | |
|---|---|---|
🚀 pio_flash_and_verify | 書き込み後、ポートを開き、expect に一致するまで読み取ります(pass)。クラッシュのシグネチャに一致すると fail(自動デコード)、タイムアウトすると timeout になります | pio run -t upload + pyserial。fail_on のデフォルトは Guru Meditation、HardFault、abort()、assert failed、watchdog、brownout、heap corruption です |
🩺 pio_decode_backtrace | ESP32 の Backtrace: 0x400d... ダンプ、または Cortex-M の pc/lr ダンプを、関数、ファイル、行、インラインフレーム、原因、リセット理由に変換します | pio project metadata からツールチェーンを特定し、firmware.elf に対して <target>-addr2line -pfiaC を実行します。Xtensa の A0 ウィンドウビットを補正します |
📊 pio_size_report | ファームウェアが大きい理由を調べます。Flash/RAM の割合、ロード済みセクション、サイズ上位のシンボル(file:line 付き)、ファイルごとの合計、正規表現の filter を確認できます | pio run -t checkprogsize(パーティション対応)+ GNU size -A + nm -S -C -l --size-sort |
💾 pio_partition_table | アプリのみを書き込んだ結果、古いパーティションテーブルがチップに残って発生する、気づきにくい ESP32 の破損を検出します。アライメント、重複、OTA スロット、アプリの収まりを確認します | 環境のパーティション CSV を解析します。read_device=true の場合は esptool read_flash で 0x8000 を読み取り、差分を表示します |
🧯 pio_coredump | クラッシュ後に coredump パーティションからコアダンプを取得し、タスク、レジスター、バックトレースをデコードします | esptool read_flash + オプションの esp-coredump info_corefile(platformio.mcp[coredump]) |
📈 pio_memory_watch | ファームウェアがすでに出力している情報から、リーク、断片化、スタック余裕の状態を判定します | Free heap:、heap_caps_print_heap_info、vTaskList、uxTaskGetStackHighWaterMark の各行を解析し、最小二乗法で傾きを求めます |
🔋 pio_power_profile | 平均/最小/最大/p95 電流、スリープとアクティブの内訳、消費エネルギー、バッテリー寿命の推定値を表示します | シリアルメーター(INA219 スケッチ、USB メーターのログ)または Nordic PPK2(platformio.mcp[power]) |
🐞 pio_debug_* | デバッグプローブを使って、ブレークポイント、ステップ実行、バックトレース、変数の確認を行います | GDB/MI 経由で pio debug --interface=gdb を操作し、*stopped イベントを解析します |
🌐 pio_upload_ota | Wi-Fi 経由で書き込みます。失敗の原因を修正方法に対応づけます(パスワードの誤り、ArduinoOTA.handle() の呼び出しがない、ファイアウォール、OTA スロットがないなど) | pio run -t upload --upload-port <ip>(espota に自動切り替え)、または espota.py を直接実行します |
🔌 pio_port_diagnose | 書き込み時にポートを開けない理由を調べます。自分のセッション、別のプロセス、権限、またはボードがブートローダーモードになっていないことが原因かどうかを確認します | lsof/fuser + pio device list。プロセスを強制終了することはありません |
📚 pio_deps_check | lib_deps の順序によって勝者が暗黙に決まるライブラリ名の衝突、バージョンが固定されていない指定、残存ファイル、循環依存を検出します | .pio/libdeps と lib/ のマニフェスト、および build=true による LDF 依存グラフを使います |
🔒 安全ポリシー
サーバーの env で PLATFORMIO_MCP_POLICY を設定するか、install に --policy を渡します。
| ポリシー | ビルド可能 | 書き込み/消去/シリアル書き込み可能 | 用途 |
|---|---|---|---|
full(デフォルト) | ✅ | ✅ | 自分の作業ベンチ |
build_only | ✅ | ❌ | 共有ラボ、CI、「見るだけで変更しない」用途 |
read_only | ❌ | ❌ | コードレビュー、オンボーディング、信頼できないプロンプト |
MCP クライアントも、ツールを呼び出す前に毎回確認を求めます。ポリシーは第 2 の防御層であり、唯一の防御層ではありません。
⚙️ 設定
| 変数 | 用途 | デフォルト |
|---|---|---|
PLATFORMIO_MCP_POLICY | full、build_only、read_only | full |
PLATFORMIO_MCP_PROJECT_DIR | project_dir を指定せずにツールを呼び出した場合に使用するプロジェクト | サーバーの作業ディレクトリ |
PLATFORMIO_MCP_PIO | pio 実行ファイルの明示的なパス | 自動検出 |
PLATFORMIO_MCP_LOG_DIR | コマンドログの保存先 | ~/.platformio-mcp/logs |
PLATFORMIO_MCP_MAX_LOGS | 保持するログファイルの数 | 200 |
📝 シリアルモニターに関する注意事項
セッションではポートとの通信に pyserial を直接使用します。PlatformIO 独自のモニターには対話型ターミナルが必要なためです。そのため、esp32_exception_decoder などの PlatformIO モニター用フィルターは適用されません。この処理は pio_decode_backtrace が担います。project_dir を渡すと、ボーレートとポートは platformio.ini の monitor_speed/monitor_port から取得されます。渡さない場合は、検出された単一の開発ボードを 115200 で使用します。ポートを開くとほとんどの開発ボードがリセットされるため、pio_flash_and_verify では起動ログの先頭から確認できます。
🛠️ 開発
git clone https://github.com/powerdragonfire/platformio.mcp && cd platformio.mcp
uv sync
uv run pytest # unit tests, no hardware or network
uv run pytest -m integration # builds the bundled native fixture with your PlatformIO
uv run platformio-mcp doctor # what the agent's pio_system_info sees
npx @modelcontextprotocol/inspector uv run platformio-mcp # poke tools interactively
PyPI リリースの代わりに、チェックアウトしたコードを Claude Code で使用するには、次のようにします。
claude mcp add platformio -- uv run --directory /path/to/platformio.mcp platformio-mcp
変更内容は CHANGELOG.md で追跡しています。
🤝 コントリビュート
実機からのバグ報告が、最も役立つ貢献です。issue forms を利用し、質問は Discussions で行ってください。PR を作成する前に CONTRIBUTING.md をお読みください。good first issue のラベルが付いた Issue は、初めての方に取り組みやすい範囲に設定されています。
🔭 先行事例
jl-codes/platformio-mcp は、同じ目標を持つ TypeScript サーバーで、Web ダッシュボードと GPIO ピン監査機能を備えています。このプロジェクトは、uvx を使って Python のみでインストールでき、PlatformIO 自体の同梱も可能で、クラッシュデコード、サイズの予算管理、パーティションチェック、コアダンプ、OTA、ライブ GDB、メモリ/電力プロファイリングを組み込みで利用したい方のために開発されています。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。