Skip to main content
Glama
ZMC1011

Keil5 MCP Server

by ZMC1011

Keil5 MCP Server

Python License: MIT MCP PyPI PRs Welcome

英語 | 中文

これは Model Context Protocol (MCP) サーバーであり、Keil MDK を使った STM32 開発で、deepseek harness に コード編集 → フラッシュ → デバッグ → フィードバック読み取り → 修正 のクローズドループを提供します。

IDE、プログラマー、ターミナルを手動で切り替える代わりに、エージェントは次のことができます:

  1. Keil プロジェクトのビルドと リアルタイムのコンパイル進捗 の確認

  2. UV4 ログから 構造化されたエラー を取得(ファイル / 行 / 列 / コード / メッセージ)

  3. エラーコードの説明 と原因・修正提案の提示

  4. ソースファイルを安全に編集(すべての編集は 自動バックアップ されます)

  5. 公式 UV4 チャネルまたは pyOCD を介したファームウェアの フラッシュ

  6. pyOCD によるハードウェアデバッグ(ブレークポイント、ステップ、レジスタ、メモリ、RTT ログ)

  7. 公式 Keil デバッグチャネル(UV4 -d + .ini スクリプト)の実行


目次


Related MCP server: stm32-mcp

機能

  • mcp__<serverName>__<tool> として登録される 27 個の MCP ツール(例: mcp__keil__build_project

  • リアルタイムビルド進捗: percent / 現在のファイル / フェイズを表示する tail ベースのモニタ。リンクが完了するまで 95% で上限

  • 構造化された UV4 ログ解析: コンパイルエラー(main.c(25:1): error C2065: ...)、リンクエラー(L6218E)、Program Size、ビルド時間

  • エラーコード知識ベース: 一般的な armcc/armclang コード(C2065、L6218E、L6406E、...)に対する説明と修正案を内蔵

  • 安全なソース編集: すべての編集の前に .keil-mcp-backups/ を自動生成し、行範囲の置換、正規表現検索に対応

  • 公式フラッシュパス: UV4 -f はプロジェクト設定の Flash フラッシュアルゴリズムを使用します。pyOCD フォールバックは .axf を直接受け取ります

  • ハードウェアデバッグ: pyOCD プローブ制御(接続 / 停止 / 再開 / ステップ / ブレークポイント / レジスタ / メモリ / RTT)に対応

  • プローブリース: プローブごとの排他アクセス(asyncio ロック + ファイルロック)により、UV4 と pyOCD がデバッグポートを奪い合いません

  • 実行境界: 読み取り専用ツールは並行して実行されます。変更を伴うツールはセッションロック上で直列化され、asyncio.shield によりキャンセル安全になります。

  • Keil がインストールされていなくても動作: keil_doctor が不足コンポーネントを明確に報告します。サーバーは起動できます。

要件

コンポーネント

バージョン / 備考

Python

3.10+(3.12でテスト済み)

Keil MDK

UV4.exe(ビルド -b、フラッシュ -f、デバッグ -d)– ビルド/フラッシュツールには任意ですが必須です

pyOCD

pipで自動インストールされます。プローブドライバ(ST-Link / J-Link / CMSIS-DAP)が必要です

プローブ

ST-Link V2/V3、J-Link、CMSIS-DAP、Keel ULINKplus

ターゲットパック

例: pyocd pack install stm32f103c8 または Keil DFP を再利用

インストール

PyPIから

python -m venv .venv
.venv/Scripts/activate        # Windows
# source .venv/bin/activate   # Linux / macOS
pip install keil-mcp-server

パッケージは PyPI 対応です。(pyproject.toml + LICENSE + server.json を含む)まだ公開されていない場合は、下記のソースからインストールしてください。

ソースから(GitHub)

git clone https://github.com/ZMC1011/dsh-keil-mcp.git
cd ds-keil-mcp
python -m venv .venv
.venv/Scripts/activate                       # Windows
# source .venv/bin/activate                  # Linux / macOS
pip install -e ".[dev]"

インストールの確認

# Environment self-check (UV4.exe, pyocd, connected probes)
python -m keil_mcp_server --check

# List all registered tools
python -m keil_mcp_server --tools

# Run the unit tests
pytest tests -q

クイックスタート

# 1. Start the MCP server (stdio transport — the MCP client will spawn this)
python -m keil_mcp_server

# 2. In your MCP client, call e.g.:
#    keil_doctor
#    discover_keil_projects { directory: "D:/STM32Projects" }
#    configure_keil_project { project: "D:/STM32Projects/app/app.uvprojx" }
#    build_project { project: "...", target: "Target 1", stream_progress: true }
#    flash_firmware { project: "...", confirm: true }

MCPクライアント設定

DeepSeek Harness (DSH)

公式のDSH MCP ドキュメントに従い、1 つのプラグインインスタンス = 1 つの MCP サーバーを公式ブリッジプラグイン @deepseek-ai/dsh-mcp-client で接続します。プロフィールの cordis.patch.yml(または cordis.yml)に次を追加します:

- insert:
    - id: mcp-keil
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: keil                 # tools appear as mcp__keil__build_project etc.
        transport: stdio
        command: D:/000_Environment/mcp-servers/ds-keil-mcp/.venv/Scripts/python.exe
        args: ['-m', 'keil_mcp_server']
        env:
          KEIL_UV4_PATH: D:/002_software/Keil5/UV4/UV4.exe
          KEIL_PROJECT_DIR: D:/STM32Projects
        # optional: toolCallTimeoutMs: 60000, failOnStartupError: false

次のコマンドで確認します:

dsh web --dump-config | grep -A3 mcp
# or check session logs for mcp__keil__* calls

注: serverName は [A-Za-z0-9_ -]{1,32} に一致し、稼働中のインスタンス間で一意である必要があります。

Claude Desktop / その他の stdio MCP クライアント

多くの MCP クライアントは、mcpServers JSON 規則を使用します:

{
  "mcpServers": {
    "keil": {
      "command": "D:/000_Environment/mcp-servers/ds-keil-mcp/.venv/Scripts/python.exe",
      "args": ["-m", "keil_mcp_server"],
      "env": {
        "KEIL_UV4_PATH": "D:/002_software/Keil5/UV4/UV4.exe",
        "KEIL_PROJECT_DIR": "D:/STM32Projects"
      }
    }
  }
}

venv を使わないソースチェックアウトの場合は、uv でも有効です:

{
  "mcpServers": {
    "keil": {
      "command": "uv",
      "args": ["--directory", "D:/path/to/ds-keil-mcp", "run", "keil_mcp_server"]
    }
  }
}

ツール

27 個すべてのツールは構造化された JSON を返します。破壊的な操作(flash / erase)には confirm=True が必要です。

ビルドとエラー

ツール

説明

主なパラメータ → 結果

build_project

UV4 -b(または -r 再ビルド / -c クリーン)でコンパイル、指で表示するリアルタイム進捗

project, target?, timeout_seconds?, stream_progress?, clean?, rebuild?{status, returncode, build_log, errors[], summary, progress?}

build_progress_status

進行中のビルド進捗を照会

build_id{status, percent, current_file, phase}

build_cancel

ビルドのキャンセルを要求

build_id{success}

parse_build_errors

UV4 ログを構造化エラーに解析

log_path? または log_content?{errors[], warnings[], summary}

explain_build_error

エラーコード → 説明 + 原因 + 修正

error_code, message?, file?, line?{explanation, common_causes[], suggested_fixes[]}

ソース編集

ツール

説明

主なパラメータ → 結果

source_read

行番号付きでソースを読む

file, start_line?, end_line?{content, total_lines, ...}

source_Ve

行範囲を置換;自動バックアップを先に作成

file, start_line, end_line, new_content{success, lines_changed, backup_path}

source_search

ソースファイルを検索(テキストまたは正規表現)

pattern, path?, files?, regex?{matches[]}

公式デバッグチャンネル

ツール

説明

主なパラメータ → 結果

uv4_debug_session

UV4 -d + 生成された .ini デバッグスクリプトを実行(ヘッドレスでブレークポイント / 実行 / ステップ)

project, target?, ini_path?, breakpoint?, dump_vars?, timeout_seconds?{success, returncode, output}

uv4_debug_dde

セッション ID でセッション出力を読む

session_id{output}

プロジェクトと環境

ツール

説明

主なパラメータ → 結果

keil_doctor

環境チェック:UV4.exe、pyocd、パック、接続プローブ

— → {uv4_exists, pyocd_installed, probes[], status}

discover_keil_projects

ディレクトリ配下の *.uvprojx を検索

directory?, recursive?{projects[]}

configure_keil_project

プロジェクトを解析: ターゲット、デバイス、パック、グループ、ソースファイル

project, target?{targets[], device, pack_id, source_files[]}

フラッシュ

ツール

説明

主なパラメータ → 結果

flash_firmware

UV4 -f(推奨)または pyOCD でフラッシュ

project?, image?, backend?, probe_id?, confirm{success, log}

erase_flash

チップのフラッシュを消去(pyOCD erase -c

confirm, probe_id?, chip?{success, output}

verify_flash

チップをイメージと照合(pyOCD verify

image, probe_id?{success, output}

プローブデバッグ

ツール

説明

probe_connect / probe_disconnect

pyOCD プローブの接続 / 切断(切断により UV4 -f 用のポートが解放されます)

probe_halt / probe_resume / probe_step

コア制御

set_breakpoint / continue_target

シンボルまたはアドレスでブレークポイントを設定、続行

probe_read_registers

r0-r15, sp, lr, pc, xpsr を読み取る

probe_read_memory

アドレスのメモリを読み取る(16進バイト)

read_rtt_log

SEGGER RTT 出力を読み取る(実行中の場合)

アーキテクチャ

┌──────────────────────────────────────────────────────────────┐
│  MCP Client (DeepSeek Harness / Claude Desktop / ...)        │
│  → tools registered as mcp__keil__*                          │
└──────────────────────────────┬───────────────────────────────┘
                               │ stdio (JSON-RPC 2.0)
┌──────────────────────────────▼───────────────────────────────┐
│  keil-mcp-server (Python, FastMCP)                           │
│                                                              │
│  server.py   — tool registration + Execution Boundary        │
│                (read-only whitelist → concurrent;            │
│                 mutating tools → session lock +              │
│                 asyncio.to_thread + asyncio.shield)          │
│                                                              │
│  tools/      — MCP tool layer (27 tools)                     │
│                                                              │
│  core/       — deliverable layer                             │
│    uv4_runner.py      UV4 -b/-r/-c/-f/-d process runner      │
│    build_progress.py  realtime log tail monitor              │
│    error_parser.py    UV4 log → structured errors + KB       │
│    source_editor.py   read/edit/search + auto-backup         │
│    uv4_debug.py       UV4 -d + .ini script engine            │
│    probe_lease.py     per-probe exclusive lease              │
│    project_utils.py   .uvprojx parser (namespace-tolerant)   │
│                                                              │
│  models.py / config.py / config.yaml                         │
└───────────────┬──────────────────────────────┬───────────────┘
                │                              │
      ┌─────────▼─────────┐          ┌─────────▼─────────┐
      │ Keil MDK (UV4.exe)│          │ pyOCD + probe     │
      │ build/flash/debug │          │ ST-Link/J-Link/   │
      │                   │          │ CMSIS-DAP → chip  │
      └───────────────────┘          └───────────────────┘

依存関係の方向: MCP レイヤ → ツール → コア → Keil MDK / pyOCD → ターゲットチップ。

主な設計ポイント:

  • 実行境界(McuBuddy に着想を得た方式): 読み取り専用ツールは並行実行されます。それ以外の操作はすべて、セッションごとの asyncio.Lock で直列化され、ワーカースレッド(asyncio.to_thread)で実行され、キャンセル保護(asyncio.shield)されます。

  • プローブ・リース: UV4 の -f と pyOCD はデバッグ・ポートを共有できません。ProbeLease(asyncioロック + filelock)がアクセスを直列化します。フラッシュ・フローでは、UV4 が引き継ぐ前に pyOCD を切断します。

  • リアルタイム進捗: デーモン・スレッドが UV4 ログをティルし、.uvprojx から解析したソースファイル数に対して compiling 行をカウントします(Build Time Elapsed マーカまで進捗は 95% に制限)。

  • 壊れた XML への耐性: 古い Keil プロジェクトには不一致のタグ(例: <b498>...</bUseTDR>)が含まれます。プロジェクト・パーサは解析前にそれらを修復します。

設定

config.yaml(同梱)+ 環境変数による上書き:

keil:
  uv4_path: "C:/Keil_v5/UV4/UV4.exe"        # or env KEIL_UV4_PATH
  default_project_dir: ""                   # or env KEIL_PROJECT_DIR
build:
  build_timeout: 300
  stream_progress: true
  tail_flush_wait: 3        # seconds to wait for UV4 log tail flush after exit
error:
  max_errors: 200
source:
  backup_dir: ".keil-mcp-backups"
probe_lease:
  lock_dir: ".keil-mcp-locks"
server:
  transport: "stdio"
  log_level: "INFO"

エンドジエンドのワークフロー例

典型的なエージェント・セッション(ツール名は DSH プレフィックス mcp__keil__ 付きで表示):

1. mcp__keil__keil_doctor                       # environment + probe OK?
2. mcp__keil__discover_keil_projects            # find .uvprojx files
3. mcp__keil__configure_keil_project            # parse targets/device/sources
4. mcp__keil__build_project (stream_progress)   # compile; on failure:
5. mcp__keil__parse_build_errors                # structured errors[]
6. mcp__keil__explain_build_error               # causes + fixes
7. mcp__keil__source_edit                       # fix code (auto-backup)
   → back to 4 until 0 errors
8. mcp__keil__flash_firmware (confirm=true)     # UV4 -f → "Verify OK"
9. mcp__keil__probe_connect + set_breakpoint    # attach debugger
10. mcp__keil__probe_read_registers / _memory   # observe chip state
11. mcp__keil__read_rtt_log                     # firmware logs
    → if logic bug found: source_edit → rebuild → reflash

安全ルール

レベル

操作

既定

読み取り専用

チップ一致、レジスタ/メモリ/シンボル読取り出し、ログ

確認なし

実行

一時停止 / 再開 / ストップ / リセット

確認を促す

状態書き込み

メモリ/レジスタ・書込み、ブレークポイント・ウオッチポイント

確認

永続的破壊

フラッシュ消去 / プライグラミング

明示の確認 + 復旧計画

ホスト・プロセス

Keil ビルド、GDB サーバー

確認を促す

原理: 行動前に対象の証拠を収集します。まず対象チッを特定。フラッシュ前に対象/範囲/イメージ/復旧手段を確認します。

テスト

pytest tests -q        # 11 unit tests: log parsing, source editing, progress, project parsing

手動スモーク・テスト(tests/ 内):

python tests/raw_handshake.py    # bare JSON-RPC initialize + tools/list over stdio
python tests/func_test.py        # end-to-end tool calls through the MCP client SDK

トラブルシューティング

症状

原因 / 対処

Target DLL has been cancelled on flash のエラー

pyOCD が依然としてプローブを占有している。UV4 バックエンドの flash_firmware の前に probe_disconnect を呼び出す(またはプローブ・リースに任せる)。

UV4.exe not found

設定の KEIL_UV4_PATH または keil.uv4_path を設定する。確認には keil_doctor を実行する。

No module named keil_mcp_server`

venv の編集可能インストールが古いパスを参照している。現在のチェックアウトから再インストールする: pip install -e .

No target connected

プローブの配線 / ドイバを確認する。keil_doctor で検出されたプローブが覧できます。

pyocd pack install が必要

例: 例: pyocd pack install stm32f103xe。または pyOCD を Keil の DFP フォルダを指すよう設定。

ロードマップ

  • PyPI に公開し、MCP レジストリに登録する

  • MCUBUDY_TOOLSETS スタイルのメイン切替

  • ELF シンボル解決による set_break の名前指定

  • RTOS タスクの対応(FrRTO)

  • ユニットテスト用の COVID-19 CI

  • Linux/macOS 対応メモ(Keil は Windows 専用; pyOCD 部分はクロス・プラットフォーム)

貢献

貢献を歓待しています!変更の議論のため、まず issue をオープンしてください。その後 PR を提出ください。

License

MIT — 署名を条件に自由に使用・修正・再配布できます。

A
license - permissive license
Not graded
quality - not tested
C
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
    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
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude Code to build, flash, and communicate with STM32 hardware over SWD and serial, including multi-board management, live memory monitoring, and hardware sequences.
    21
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to flash firmware, program memory, modify option bytes, erase chips, reset boards, and capture SWO printf traces for STM32 microcontrollers via STM32CubeCLT.
    12

View all related MCP servers

Related MCP Connectors

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/ZMC1011/dsh-keil-mcp'

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