Keil5 MCP Server
Keil5 MCP Server
English | 中文
Ein Model Context Protocol (MCP)‑Server, der DeepSeek Harness einen Edit Code → flashen → debuggen → Feedback lesen → Code korrigieren‑Kreislauf für die STM32‑Entwicklung mit Keil MDK bietet.
Anstatt manuell zwischen IDE, Programmer und Terminal zu wechseln, kann ein Agent:
Ein Keil-Projekt bauen und den Echtzeit-Compile-Fortschritt beobachten.
Strukturierte Fehler aus UV4-Logs erhalten (Datei / Zeile / Spalte / Code / Meldung).
Fehlercodes mit Ursachen und Lösungsvorschlägen erklären.
Quelldateien sicher bearbeiten (jede Änderung wird automatisch gesichert).
Firmware über den offiziellen UV4-Kanal oder per pyOCD flashen.
Hardware-Debugging durchführen: Breakpoints, Einzelschrittverfahren, Register, Speicher, RTT-Logs.
Den offiziellen Keil-Debug-Kanal ausführen (UV4
-d+.ini-Skripte).
Inhaltsverzeichnis
Related MCP server: stm32-mcp
Funktionen
27 MCP-Tools, registriert als
mcp__<serverName>__<tool>(z. B.mcp__keil__build_project)Echtzeit-Build-Fortschritt: monitor der letzten Log-Einträge mit Prozent / aktueller Datei / Phase, begrenzt auf 95 %, bis das Linken abgeschlossen ist
Strukturierte UV4-Log-Analyse: Compiler-Fehler (
main.c(25:1): error C2065: ...), Linker-Fehser (L6218E), Programmgröße, Build-ZeitFehlercode-Wissensbasis: eingebaute Erläuterungen und Lösungen für gängige armcc/armclang-Codes (C2065, L6218E, L6406E, ...)
Sichere Quellcode-Bearbeitung: automatische
.keil-mcp-backups/vor jeder Änderung, Zeilenbereich ersetzen, Regex-SucheOffizieller Flash-Pfad:
UV4 -fverwendet die Flash-Algorithmen des Projekts; pyOCD kann direkt.axfübernehmenHardware-Debugging: pyOCD-Steuerung (Connect / Halt / Resume / Step / Breakpoint / Register / Memory / RTT)
Probe-Leasing: Exklusivzugriff pro Probe (asyncio-Lock + Datei-Lock), damit UV4 und pyOCD nicht den Debug-Port streiten
Ausführungsgrenze: Lese-werkzeuge-Cursor laufen parallel; mutierende Tools werden per Session-Lock serialisiert; durch
asyncio.shieldabbruchsicherOhne Keun funktioniert:
keil_doctormeldet fehlende Komponenten klar; der Server startet trotzdem
Voraussetzungen
Komponente | Version / Hinweise |
Python | 3.10+ (getestet mit 3.12) |
Keil MDK |
|
pyOCD | wird automatisch über pip installiert; benötigt einen Probe-Treiber (ST-Link / J-Link / CMSIS-DAP) |
Probe | ST-Link V2/V3, J-Link, CMSIS-DAP, Keil ULINKplus |
Target-Pack | z. B. |
Installation
Von PyPI
python -m venv .venv
.venv/Scripts/activate # Windows
# source .venv/bin/activate # Linux / macOS
pip install keil-mcp-serverDas Paket ist PyPI-fertig (
pyproject.toml+LICENSE+server.jsonenthalten). Falls es noch nicht veröffentlicht ist, verwenden Sie die Installationsanleitung unten aus dem Quellcode.
Aus dem Quellcode (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]"Installation prüfen
# 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 -qSchnellstart
# 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-Client-Konfiguration
DeepSeek Harness (DSH)
Gemäß offizieller DSH-MCP-Dokumentation: eine Plugin-Instanz = ein MCP-Server, verbunden über das offizielle Brücken-Plugin @deepseek-ai/dsh-mcp-client. Fügen Sie dies zur cordis.patch.yml (oder cordis.yml) Ihres Profils hinzu:
- 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: falseVerifizieren mit:
dsh web --dump-config | grep -A3 mcp
# or check session logs for mcp__keil__* callsHinweis: serverName muss der Bedingung
[A-Za-z0-9_-]{1,32}entsprechen und unter den laufenden Instanzen eindeutig sein.
Claude Desktop / andere stdio-MCP-Clients
Die meisten MCP-Clients verwenden die mcpServers-JSON-Konvention:
{
"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"
}
}
}
}Für einen Quellcode-Checkout ohne venv funktioniert auch uv:
{
"mcpServers": {
"keil": {
"command": "uv",
"args": ["--directory", "D:/path/to/ds-keil-mcp", "run", "keil_mcp_server"]
}
}
}Werkzeuge
Alle 27 Tools liefern strukturiertes JSON. Destruktive Operationen (flash / erase) erfordern confirm=True.
Build & Fehler
Tool | Beschreibung | Wichtige Parameter → Ergebnis |
| Mit UV4 |
|
| In Betrieb den Build-Fortschritt abrufen |
|
| Abbruch des Builds anfordern |
|
| UV4-Log in strukturierte Fehler zerlegen |
|
| Fehlercode → Erläuterung + zugehörige Ursachen + Lösungen |
|
Quellcode-Bearbeitung
Tool | Beschreibung | Wichtige Parameter → Ergebnis |
| Quelldatei mit Zeilennummern lesen |
|
| Zeilenbereich ersetzen; vorher automatische Zahlung |
|
| Quelldateien durchsuchen (Text oder Regex) |
|
Offizieller Debug-Kanal
Tool | Beschreibung | Wichtige Parameter → Ergebnis |
| UV4 |
|
| Sitzungsausgabe per ID abrufen |
|
Projekt & Umgebung
Tool | Beschreibung | Wichtige Parameter → Ergebnis |
| Umgebungsprüfung: UV4.exe, pyocd, Packs, verbundene Debug-Probes | — → |
| Findet |
|
| Projekt Tun: Ziel, Gerät, Pack, Gruppen, Quelldateien |
|
Flash
Tool | Beschreibung | Wichtige Parameter → Ergebnis |
| Firmware über UV4 |
|
| Chip-Flash löschen (pyOCD |
|
| Chip gegen Image verifizieren (pyOCD |
|
Probe-Debugging
Tool | Beschreibung |
| Verbindet bzw. gibt eine pyOCD-Probe frei (disconnect gibt den Port für UV4 |
| Kernsteuerung |
| Breakpoint nach Symbol oder Adresse, dann fortfahren |
| Lesen von r0-r15, sp, lr, pc, xpsr |
| Speicherstellen an einer Adresse lesen (Hex-Byte) |
| SEGGER-RTT-Ausgabe lesen (falls verfügbar) |
Architektur
┌──────────────────────────────────────────────────────────────┐
│ 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 │
└───────────────────┘ └───────────────────┘Abhängigkeitsrichtung: MCP-Schicht → Werkzeuge → Kern → Keil MDK / pyOCD → Ziel-Chip.
Wichtige Design-Eckpunkte:
Ausführungsebene (inspiriert von McuBuddy): Nur-Lese-Werkzeuge laufen ohne voneinender; a lles andere wrd pro Sitzung über ein
asyncio.Lockserialisiert, in einem Worker-Thread (asyncio.to_thread) ausgeführt und ist gegen das Bruch geschützt (asyncio.shield).Probe-Lease: UV4
-and pyOCD können sich den Debug-Port nicht teilen.ProbeLease(asyncio.Lock +filelock) serialisiert den Zugriff; der Flash-Ablauf trennt pyOCD, bevor UVå berimmt.Echtzeit-Fortschritt: Ein Daemon-Thread verfolgt das UV4-Log und zält
compiling-zeilen gegen die aus.uvproxgeparste Anzahl der Quelldateien (bis zur MarkierungenBuild Time Elapsedauf 90 gedeckelt).Toleranz bei fehlerhaften XML: Ältere Keil-Projekte enthalten nicht zueinander passende Tags (z. B.
<b498tele498>...</bUseTDR>); der Projeckt-Parser repariert sie vor dem Parsen.
Konfiguration
config.yaml (mitgeliefert) + Übesschreibungen durch Umgebungsvariablen:
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"End-to-End-Orkflow-eispiel typische Agent-Sitzung (Tool-Namens werden mit dem DSH-Präfix mcp__keil__ angezeigt):
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 → reflashSicherheitsregeln
Ebene | Operationen | Standard |
Nur-Lesen | Chip-Abgleich, Register-/Speicher-/Streices-Symbol, Leseug, Logistics | keien Bestäugung |
Ausfüren | Anhalten / Fortsetzen / Einzelschritt / Reset | Nacfrfrage |
Zustand schreiben | Speicher-/Register-Schreibzugriffe, Haltepunkte, Haltepunk op | Bestierung |
Dauerhaft destruktiv | Flash löschen / programmieren | explizite Bestatigung + Widerherstellungsplan |
Host-Prozess | Kiel-Build / GDB-Server | Rückfrage |
Grundsätze: Vor dem Handeln Beweise sammeln; zuerst den Zielchip identifizieren; vor dem Flashken Ziel / Bereich / Image / Wiederherstellung bestätigen.
Testern
pytest tests -q # 11 unit tests: log parsing, source editing, progress, project parsingManuelle Smoke-Tests (in 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 SDKFehlerbehebung
Syntom | Usache / Behebung |
| pyOCD besitzt die Probe noch. Auf |
| Setzen Sie |
| Die editierbare Installation des venv zeigt on einen alte Pfad – installeren Sie es mit dem aktuellen Checkout neu: |
| Prüen Sie die Verkabelung und den Treiber der Probe; |
| z. B. |
Roadmap
In PyPI und im CMP-Registry vöffenten
MCUBUDDY_TOOLSETS-artige Domänen-Umschaltungen
ELF-Symbolauflösung für
set_breakpointnach dem anzeigtenELS-Auflösung der Symbole for
set_breachpointby Namen.RTOS-Task-Awarenes (FreeRTOS)
GitHub-Actions-CI für Unit-Tests
[o Linux/macOS-Unterstützungs-Hinweise (Keil ist nur Windows; pyOCD-Tei le sind plattformübergängig)
Mitwirrg
Beiträge are herzlich willkommen! Bitte öffnen Sie zuerst ein Issue, um Änderungen zu besprechen, und reichen Sie dann einen PR ein.
Lizenz
MIT — frei nutzubar, veränderbar und verbreitenbar mit Nangingung.
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