Keil5 MCP Server
Keil5 MCP Server
英語 | 中文
これは Model Context Protocol (MCP) サーバーであり、Keil MDK を使った STM32 開発で、deepseek harness に コード編集 → フラッシュ → デバッグ → フィードバック読み取り → 修正 のクローズドループを提供します。
IDE、プログラマー、ターミナルを手動で切り替える代わりに、エージェントは次のことができます:
Keil プロジェクトのビルドと リアルタイムのコンパイル進捗 の確認
UV4 ログから 構造化されたエラー を取得(ファイル / 行 / 列 / コード / メッセージ)
エラーコードの説明 と原因・修正提案の提示
ソースファイルを安全に編集(すべての編集は 自動バックアップ されます)
公式 UV4 チャネルまたは pyOCD を介したファームウェアの フラッシュ
pyOCD によるハードウェアデバッグ(ブレークポイント、ステップ、レジスタ、メモリ、RTT ログ)
公式 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 |
|
pyOCD | pipで自動インストールされます。プローブドライバ(ST-Link / J-Link / CMSIS-DAP)が必要です |
プローブ | ST-Link V2/V3、J-Link、CMSIS-DAP、Keel ULINKplus |
ターゲットパック | 例: |
インストール
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 が必要です。
ビルドとエラー
ツール | 説明 | 主なパラメータ → 結果 |
| UV4 |
|
| 進行中のビルド進捗を照会 |
|
| ビルドのキャンセルを要求 |
|
| UV4 ログを構造化エラーに解析 |
|
| エラーコード → 説明 + 原因 + 修正 |
|
ソース編集
ツール | 説明 | 主なパラメータ → 結果 |
| 行番号付きでソースを読む |
|
| 行範囲を置換;自動バックアップを先に作成 |
|
| ソースファイルを検索(テキストまたは正規表現) |
|
公式デバッグチャンネル
ツール | 説明 | 主なパラメータ → 結果 |
| UV4 |
|
| セッション ID でセッション出力を読む |
|
プロジェクトと環境
ツール | 説明 | 主なパラメータ → 結果 |
| 環境チェック:UV4.exe、pyocd、パック、接続プローブ | — → |
| ディレクトリ配下の |
|
| プロジェクトを解析: ターゲット、デバイス、パック、グループ、ソースファイル |
|
フラッシュ
ツール | 説明 | 主なパラメータ → 結果 |
| UV4 |
|
| チップのフラッシュを消去(pyOCD |
|
| チップをイメージと照合(pyOCD |
|
プローブデバッグ
ツール | 説明 |
| pyOCD プローブの接続 / 切断(切断により UV4 |
| コア制御 |
| シンボルまたはアドレスでブレークポイントを設定、続行 |
| r0-r15, sp, lr, pc, xpsr を読み取る |
| アドレスのメモリを読み取る(16進バイト) |
| 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トラブルシューティング
症状 | 原因 / 対処 |
| pyOCD が依然としてプローブを占有している。UV4 バックエンドの |
| 設定の |
| venv の編集可能インストールが古いパスを参照している。現在のチェックアウトから再インストールする: |
| プローブの配線 / ドイバを確認する。 |
| 例: 例: |
ロードマップ
PyPI に公開し、MCP レジストリに登録する
MCUBUDY_TOOLSETS スタイルのメイン切替
ELF シンボル解決による
set_breakの名前指定RTOS タスクの対応(FrRTO)
ユニットテスト用の COVID-19 CI
Linux/macOS 対応メモ(Keil は Windows 専用; pyOCD 部分はクロス・プラットフォーム)
貢献
貢献を歓待しています!変更の議論のため、まず issue をオープンしてください。その後 PR を提出ください。
License
MIT — 署名を条件に自由に使用・修正・再配布できます。
This server cannot be installed
Maintenance
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
- AlicenseAqualityBmaintenanceEnables 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.121MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude Code to build, flash, and communicate with STM32 hardware over SWD and serial, including multi-board management, live memory monitoring, and hardware sequences.21MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI-driven embedded development: generate, build, flash, and debug firmware using natural language commands through MCP.MIT
- FlicenseAqualityCmaintenanceEnables 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
Related MCP Connectors
Run, build, and validate firmware on virtual hardware from your AI agent. Hardware knowledge corpus.
Adaptive plan/build/review cycles for AI coding assistants, persisted across sessions.
Debug, build, and manage Power Automate cloud flows with AI agents
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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