mcpField
P
PlatformIO

PlatformIO

ローカル
github.com開発ツール66 週間前に更新

PlatformIO について

PlatformIOは、AIコーディングエージェントがPlatformIOプロジェクトと接続ハードウェアを扱うためのMCPサーバーです。ファームウェアのビルドや書き込み、テスト、シリアル監視、デバッグ、クラッシュ解析、リソースレポートに対応します。

主な機能

  1. 01ファームウェアのビルドと書き込み
  2. 02シリアル出力の監視
  3. 03テストと静的チェックの実行
  4. 04クラッシュとコアダンプの解析
  5. 05GDBによるデバッグ
  6. 06メモリ、電力、ファームウェアサイズの確認

活用シーン

  1. 01組み込みプロジェクトのビルドと書き込み
  2. 02起動ログによるデバイス起動の検証
  3. 03クラッシュ箇所のソースコード特定
  4. 04ファームウェアのメモリと電力の確認

MCP 対応

MCPクライアントに、PlatformIOのプロジェクト、ビルド、ハードウェア、テスト、監視、解析、デバッグ用ツールを提供します。ポリシーにより、ビルドのみまたは読み取り専用に制限できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"powerdragonfire-platformio": {
"command": "uvx",
"args": [
"platformio.mcp"
],
"env": {
"PLATFORMIO_MCP_POLICY": "<PLATFORMIO_MCP_POLICY>",
"PLATFORMIO_MCP_PROJECT_DIR": "<PLATFORMIO_MCP_PROJECT_DIR>",
"PLATFORMIO_MCP_PIO": "<PLATFORMIO_MCP_PIO>"
}
}
}
}
起動コマンドuvx platformio.mcp
設定が必要な環境変数
PLATFORMIO_MCP_POLICYfull (default), build_only, or read_only
PLATFORMIO_MCP_PROJECT_DIRDefault project directory when a tool is called without project_dir
PLATFORMIO_MCP_PIOExplicit path to the pio executable (auto-detected otherwise)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiplatformio.mcp0.1.0

ツール

29

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

platformio.mcp

AI コーディングエージェントに実機を操作させましょう。
PlatformIO 用の MCP サーバーです。ビルド、書き込み(シリアルまたは OTA)、シリアルの監視、テストの実行、クラッシュやコアダンプの解析、パーティションテーブルの確認、ヒープと電力の監視、GDB によるデバッグ、ファームウェアのサイズ削減ができます。

CI PyPI Python 3.12+ ツール MIT

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_devicesPlatformIO のバージョンとポリシー;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_coredumpESP32 のパーティション CSV チェック(アラインメント、重複、サイズ適合、OTA スロット)と、チップ上の実際のテーブルとの差分;フラッシュから取得してデコードしたコアダンプ
📈 ランタイムpio_memory_watch · pio_power_profileシリアルから解析したヒープとスタックのテレメトリー(リーク判定とタスクごとの余裕を含む);シリアル電流計または Nordic PPK2 から取得した電流値(スリープ時/アクティブ時の内訳とバッテリー推定を含む)
🐞 デバッグpio_debug_start / cmd / stop / listpio 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_backtraceESP32 の 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_otaWi-Fi 経由で書き込みます。失敗の原因を修正方法に対応づけます(パスワードの誤り、ArduinoOTA.handle() の呼び出しがない、ファイアウォール、OTA スロットがないなど)pio run -t upload --upload-port <ip>(espota に自動切り替え)、または espota.py を直接実行します
🔌 pio_port_diagnose書き込み時にポートを開けない理由を調べます。自分のセッション、別のプロセス、権限、またはボードがブートローダーモードになっていないことが原因かどうかを確認しますlsof/fuser + pio device list。プロセスを強制終了することはありません
📚 pio_deps_checklib_deps の順序によって勝者が暗黙に決まるライブラリ名の衝突、バージョンが固定されていない指定、残存ファイル、循環依存を検出します.pio/libdeps と lib/ のマニフェスト、および build=true による LDF 依存グラフを使います

🔒 安全ポリシー

サーバーの env で PLATFORMIO_MCP_POLICY を設定するか、install に --policy を渡します。

ポリシービルド可能書き込み/消去/シリアル書き込み可能用途
full(デフォルト)✅✅自分の作業ベンチ
build_only✅❌共有ラボ、CI、「見るだけで変更しない」用途
read_only❌❌コードレビュー、オンボーディング、信頼できないプロンプト

MCP クライアントも、ツールを呼び出す前に毎回確認を求めます。ポリシーは第 2 の防御層であり、唯一の防御層ではありません。

⚙️ 設定

変数用途デフォルト
PLATFORMIO_MCP_POLICYfull、build_only、read_onlyfull
PLATFORMIO_MCP_PROJECT_DIRproject_dir を指定せずにツールを呼び出した場合に使用するプロジェクトサーバーの作業ディレクトリ
PLATFORMIO_MCP_PIOpio 実行ファイルの明示的なパス自動検出
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

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。