Skip to main content
Glama

stm32-mcp

Claude Code が STM32 ハードウェアのビルド、フラッシュ、通信を行えるようにする MCP サーバーです。

stm32-mcp は、私がハードウェア開発に取り組む方法にかなり特化していますが、他の人にも役立つ可能性が高いです! 多くのワークフローに合わせて調整できますが、これは私のワークフロー(stlink-v3 mini、そのヘッダー上の VCP、STM32 マイクロコントローラ)に焦点を絞っています。

次のようなことができます。

私: ねえ、今誰が接続されてる?

claude: 名前のない2つのプローブが、名前のない2つのPCBに接続されています

私: わかった、彼らに自分が誰か聞いて、その応答に基づいてニックネームを付けて

claude: 了解しました。プローブにもニックネームを付けますか? あなたのボードは「doorbell A」と「synthesizer B」です

私: うん、そのプローブにペンキマーカーで印を付けたよ。ドアベルのは「青」、シンセのは「赤」って呼んで

claude: 完了しました。次は何をしますか?

私: 両方にVCPコマンドを与えてお互いに通信できるようにして、それからドアベルにシンセをデートに誘わせて

claude: 考え中... 完了しました。シンセは断りました。世の中には他にも魚がたくさんいますよ、ドアベル!

MCP (Model Context Protocol) は、Claude のような AI アシスタントが外部ツールを使用できるようにするオープン標準です。このサーバーは、Claude にファームウェアのコンパイル、ボードへのフラッシュ、シリアル通信、SWD 経由のメモリ読み取り機能を提供します。柔軟で対話的です。

[!WARNING] このサーバーは、AI にコンパイラ、デバッグプローブ、シリアルポートへの直接アクセスを許可します。ファームウェアのフラッシュ、メモリの上書き、ハードウェアへの任意のデータ送信が可能です。これは強力で便利ですが、サンドボックスではありません。実行する前に、何が接続されているかを把握してください。

前提条件

  • STM32CubeIDE/Applications/STM32CubeIDE.app(macOS)または /opt/st/stm32cubeide_*(Linux)にインストールされていること

  • Python 3.10+

  • OpenOCDbrew install open-ocd)— フラッシュ、メモリ読み書き、ライブモニタリング用

  • オープンソースの stlink ツールbrew install stlink)— プローブ列挙用

  • ST-Link が USB 経由で接続されていること(フラッシュ/ボード情報用)

  • シリアルポートが利用可能であること(ST-Link VCP または USB-UART アダプタ)

Related MCP server: jlink-mcp

インストール

git clone https://github.com/shieldyguy/stm32-mcp.git
cd stm32-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .

Claude Code への登録

オプション A: CLI

claude mcp add stm32 -- /path/to/stm32-mcp/.venv/bin/python -m stm32_mcp.server

オプション B: プロジェクト設定

プロジェクトの .claude/settings.json または .claude.json に追加します:

{
  "mcpServers": {
    "stm32": {
      "command": "/path/to/stm32-mcp/.venv/bin/python",
      "args": ["-m", "stm32_mcp.server"]
    }
  }
}

セルフサービス CLI

bin/ には、MCP ツールが使用するのと同じコードへの4つの薄いラッパーが含まれています

コマンド

使用法

stm32-list

ニックネーム付きの接続済みプローブ + ボードを一覧表示

stm32-flash

stm32-flash <probe|board> <file.elf> [--noverify] [--noreset]

stm32-build

stm32-build <project_path> [Debug|Release] [--clean]

stm32-bf

stm32-bf <project_path> <probe|board> [Debug|Release] [--clean]

stm32-help

これらのコマンドとその使用法を一覧表示(スクリプトから自動生成)

bin/ を PATH に追加します:

export PATH="/path/to/stm32-mcp/bin:$PATH"

プローブのニックネームとボードのニックネームは解決されます。

ビルドは MCP のヘッドレス CubeIDE ワークスペースロックを共有するため、stm32-build/stm32-bf がエージェント駆動のビルドと競合した場合、その背後でキューに入ります。

利用可能なツール

ビルドとフラッシュ

ツール

説明

stm32_build

CubeIDE ヘッドレスビルダーを使用してファームウェアをコンパイル

stm32_flash

ST-Link SWD 経由で .elf/.bin/.hex をボードにフラッシュ

stm32_build_and_flash

ビルド + フラッシュを1ステップで実行(90%のケース)

stm32_board_info

ST-Link/MCU 情報(デバイス ID、フラッシュサイズ、電圧)を読み取り

マルチボード管理

ツール

説明

stm32_list_probes

ニックネームと MCU ID を持つすべての接続済みボードを表示

stm32_set_nickname

ボード(MCU UID による)またはプローブ(ST-Link SN による)に名前を付ける

ボードのニックネームは物理的な MCU に従います(プローブの交換後も持続)。プローブのニックネームは ST-Link ハードウェアに従います。すべてのツールの probe パラメータでニックネームを使用できます。

シリアル通信

ツール

説明

serial_list_ports

シリアルポートを一覧表示(ST-Link VCP ポートにニックネームをマーク)

serial_connect

シリアル接続を開く

serial_send

データを送信し、応答を読み取る

serial_read

バッファリングされたシリアルデータを読み取る

serial_disconnect

シリアル接続を閉じる

serial_sequence

1回の呼び出しで複数ステップの送信/遅延/メモリシーケンスを実行

デバッグとモニタリング

ツール

説明

stm32_read_memory

アドレスまたは変数名(ELF シンボルから)でメモリを読み取る

stm32_write_memory

アドレスまたは変数名でメモリを書き込む

live_memory_start

SWD 経由の継続的なバックグラウンドメモリモニタリングを開始

live_memory_read

ライブメモリセッションから最近のエントリを読み取る

live_memory_stop

ライブメモリセッションを停止

ハードウェアシーケンス

serial_sequence は、1回のツール呼び出しで複数のステップ(シリアル送信、遅延、ウェブカメラキャプチャ、SWD メモリ読み書き)をスケジュールします。遅延はエグゼキュータスレッドで time.sleep() を使用します。Claude は個々のツール呼び出しのタイミングを正確に制御できないため、これによりコマンドと期待値のタイミングを厳密に制御できます。

ステップタイプ

[
  { "send": "SIM_LEFT", "to": "/dev/cu.usbmodem11202" },
  { "delay_ms": 500 },
  {
    "send": "GET_BLINK_STATE",
    "to": "/dev/cu.usbmodem11402",
    "expect": "BLINK"
  },
  { "capture": true, "label": "post_brake" },
  {
    "mem_write": true,
    "address": "0x48000418",
    "value": "0x40",
    "probe": "yellow"
  },
  { "delay_ms": 1000 },
  {
    "mem_read": true,
    "address": "0x48000400",
    "count": 2,
    "probe": "yellow",
    "label": "gpio_post"
  }
]
  • 送信ステップ: {send, to, expect?, read_timeout?, line_ending?}toserial_connect からのポートパス

  • 遅延ステップ: {delay_ms} — 実際の time.sleep()、ツール呼び出しの往復ではない

  • キャプチャステップ: {capture: true, label?, device_index?} — PNG が /tmp/stm32-captures/ に保存されます

  • メモリ書き込みステップ: {mem_write: true, address | symbol + elf_path, value, probe, width?}

  • メモリ読み取りステップ: {mem_read: true, address | symbol + elf_path, probe, count?, width?, label?}

メモリステップの注意:

  • probe は ST-Link SN、プローブのニックネーム、またはボードのニックネームを受け入れます

  • address は16進数です(例: "0x48000418")。代わりに symbol + elf_path を使用して名前で解決できます

  • width は 8/16/32 ビットで、デフォルトは 32(symbol を使用する場合はシンボルサイズから自動検出)

  • 各メモリ操作は現在、新しい OpenOCD プロセスを起動します(操作ごとに数十ミリ秒のオーバーヘッド)。したがって、メモリ操作間のタイミングは約50ミリ秒未満は概算です。遅延自体は正確です。

パラメータ

  • on_failure: "continue"(デフォルト)はすべてのステップを実行します。"stop" は最初の失敗で中止します。

  • filter_responses: true の場合、expect パターンは > で始まる VCP 応答行のみに一致します(デバッグノイズを無視)。

出力

Step 1 [/dev/cu.usbmodem11202] SEND: SIM_LEFT
  Response: >OK:SIM_LEFT

Step 2 DELAY: 500ms

Step 3 [/dev/cu.usbmodem11402] SEND: GET_BLINK_STATE
  Response: >BLINK_STATE:BLINK
  Expect "BLINK": PASS

Step 4 [yellow] MEM_WRITE: Wrote 0x00000040 to 0x48000418

Step 5 DELAY: 1000ms

Step 6 [yellow] MEM_READ: gpio_post 0x48000400: 0xabffdfff 0x00000080

Summary: 2/2 sends OK, 1/1 assertions PASS, 1/1 mem_writes OK, 1/1 mem_reads OK

ライブメモリモニタリング

ファームウェアを変更したりシリアルを使用したりせずに、SWD 経由でファームウェア変数をリアルタイムで監視します。OpenOCD は永続的なサブプロセスとして実行され、組み込みの TCL ソケットを介して変数をポーリングします。

セッションの開始

live_memory_start(
    variables='["blink", "ts"]',       # symbol names from ELF
    elf_path="/path/to/firmware.elf",
    probe="taillight",                  # board/probe nickname
    interval_ms=500                     # min 250ms
)

変数は次のいずれかです:

  • シンボル名(文字列): "blink"arm-none-eabi-nm を使用して ELF から解決

  • シンボル + タイプを持つ辞書: {"symbol": "temperature", "type": "float"} — 32ビット値を IEEE 754 として解釈

  • 生のアドレスを持つ辞書: {"address": "0x20000304", "name": "x", "width": 32}

最近の値を読み取る

live_memory_read(session_id="abc123", last_n=10)

インメモリリングバッファ(最大100エントリ)から最近のエントリを返します。完全な履歴は JSONL 出力ファイルに書き込まれます。

JSONL 出力形式

{ "t": 1709830123.456, "elapsed_s": 1.002, "values": { "blink": 65539 } }

セッションの停止

live_memory_stop(session_id="abc123")

統計(期間、読み取り回数、エラー回数、出力ファイルパス)を返します。

制約

  • プローブごとに1セッション — これはハードウェアの制約です(単一の SWD 接続)

  • フラッシュ前に停止live_memory は SWD 接続を保持します。セッションがアクティブな場合、stm32_flashstm32_read/write_memory は失敗します

  • TCL ポート 6666 — OpenOCD のデフォルト。競合がある場合は、他の OpenOCD インスタンスを先に停止してください

シリアルのデフォルト

  • ボーレート: 115200

  • 行末: LF(\n

  • 読み取りポーリング: 50ms のバイト間スリープ、200ms の無音ブレーク

  • バッファ制限: 最大読み取り 4096 バイト

開発

MCP Inspector

source .venv/bin/activate
mcp dev src/stm32_mcp/server.py

ループバックテスト

シリアルツールは、pyserial のループバックを使用してハードウェアなしでテストできます:

import serial
ser = serial.serial_for_url("loop://", baudrate=115200, timeout=0.1)
ser.write(b"PING\n")
print(ser.read(100))  # b'PING\n'
A
license - permissive license
Not graded
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI tools like Claude Code and Codex CLI to read and write serial port data, facilitating embedded development workflows such as coding, flashing, and debugging.
    42
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants like Claude to directly debug microcontrollers via JLink, supporting breakpoints, single-step, memory/register access, variable inspection, RTT logging, and firmware flashing.
    25
    5
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to interact with STM32 development boards via J-Link debugger using RTT communication, supporting connection, logging, memory operations, and firmware flashing through natural language.
    12
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • Persistent context for Claude. Your AI always knows your projects and next actions across sessions.

  • Live SEO workflow tools for Claude Code, Codex, and AI agents.

  • Read, edit, publish, and preview your pepita websites from Claude.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/shieldyguy/stm32-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server