Keil5 MCP Server
Keil5 MCP Server
Español | 中文
Un servidor de Model Context Protocol (MCP) que le proporciona a deepseek harness un bucle cerrado de editar código → flashear → depurar → leer la retroalimentación → corregir código para el desarrollo de STM32 con Keil MDK.
En lugar de cambiar manualmente entre el IDE, el programador y la terminal, un agente puede:
Compilar un proyecto de Keil y observar el progreso de compilación en tiempo real
Obtener errores estructurados de los registros de UV4 (archivo / línea / columna / código / mensaje)
Explicar los códigos de error con causas y soluciones sugeridas
Editar los archivos de código fuente de forma segura (cada edición se respaldada automáticamente)
Flashear firmware a través del canal oficial de UV4 o de pyOCD
Depurar en hardware mediante pyOCD: puntos de interrupción, ejecución paso a paso, registros, memoria, registros RTT
Ejecutar el canal de depuración oficial de Keil (UV4
-d+ scripts.ini)
Tabla de contenido
Related MCP server: stm32-mcp
Características
27 herramientas MCP registradas como
mcp__<serverName>__<tool>(p. ej.,mcp__keil__build_project)Progreso de compilación en tiempo real: monitor basado en tail con porcentaje / archivo actual / fase, limitado al 95 % hasta que finalice el enlazado
Análisis estructurado de registros de UV4: errores de compilación (
main.c(25:1): error C2065: ...), errores de enlazado (L6218E), tamaño del programa, tiempo de compilaciónBase de conocimiento de códigos de error: explicaciones y correcciones integradas para códigos comunes de error de armcc/armclang (C2065, L6218E, L6406E, ...)
Edición segura del código fuente: copia de respaldo automática en
.keil-mcp-backups/antes de cada edición, reemplazo por rango de líneas, búsqueda con regexVía de flasheo oficial:
UV4 -fusa el algoritmo de Flash configurado del proyecto; pyOCD como respaldo acepta.axfdirectamenteDepuración en hardware: control de la sonda pyOCD (conectar / detener / reanudar / paso / punto de interrupción / registros / memoria / RTT)
Permiso de sonda: acceso exclusivo por sonda (block de asyncio + bloqueo de archivo) para que UV4 y pyOCD no se peleen por el puerto de depuración
Frontera de ejecución: las herramientas de solo lectura se ejecutan cláusulas, las herramientas de mutación se serializan con un bloqueo de sesión; seguro frente a la cancelación mediante
asyncio.shieldFunciona sin Keil instalado:
keil_doctorinforma claramente de los componentes que faltan; el servidor de serie
Requisitos
Componente | Versión / Notas |
Python | 3.10+ (probado en 3.12) |
Keil MDK |
|
pyOCD | se instala automáticamente mediante pip; requiere un controlador para la sonda (ST-Link / J-Link / CMSIS-DAP) |
Sonda | ST-Link V2/V3, J-Link, CMSIS-DAP, Keil ULINKplus |
Paquete de destino | p. ej., |
Instalación
Desde PyPI
python -m venv .venv
.venv/Scripts/activate # Windows
# source .venv/bin/activate # Linux / macOS
pip install keil-mcp-serverEl paquete está listo para PyPI (incluye
pyproject.toml+LICENSE+server.json). Si el paquete aún no se ha publicado, instala desde el código fuente que aparece a continuación.
Desde el código fuente (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]"Verificar la instalación
# 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 -qInicio rápido
# 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 }Configuración del cliente MCP
DeepSeek Harness (DSH)
Según la documentación oficial de DSH para MCP: una instancia del plugin = un servidor MCP, se conecta a través del plugin puente oficial @deepseek-ai/dsh-mcp-client. Añade esto al cordis.patch.yml de tu perfil (o a 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: falseVerífcalo con:
dsh web --dump-config | grep -A3 mcp
# or check session logs for mcp__keil__* callsNota: serverName debe cumplir con
[A-Za-z0-9_-]{1,32}y ser único entre las instancias activas.
Claude Desktop / otros clientes MCP stdio
La mayoría de los clientes MCP usan la convención JSON mcpServers:
{
"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"
}
}
}
}Para una copia del código fuente sin venv, uv también funciona:
{
"mcpServers": {
"keil": {
"command": "uv",
"args": ["--directory", "D:/path/to/ds-keil-mcp", "run", "keil_mcp_server"]
}
}
}Herramientas
Las 27 herramientas devuelven JSON estructurado. Las operaciones destructivas (flasheo / borrado) requieren confirm=True.
Compilar y errores
Herramienta | Descripción | Parámetros clave → Resultado |
| Compila con UV4 |
|
| Consulta el progreso de una compilación en curso |
|
| Solicita la cancelación de la compilación |
|
| Analiza el registro de UV4 en errores estructurados |
|
| Código de error → explicación + causas + soluciones |
|
Edición de código fuente
Herramienta | Descripción | Parámetros clave → resultado |
| Lee el código fuente con números de línea |
|
| Reemplaza un rango de líneas; primero hace una copia de respaldo automática |
|
| Busca en archivos de código fuente (texto o regex) |
|
Canal de depuración oficial
Herramienta | Descripción | Parámetros clave → resultado |
| Ejecuta UV4 |
|
| Lee la salida de la sesión por su id |
|
Proyecto y entorno
Herramienta | Cantidad | Parámetros clave → deja |
| Presentación del arg. Realtà UV4 pro versiones | Ver → |
| Busca |
|
| Analiza el proyecto: targets, device, pack, groups, source files |
|
Flasheo
Herramienta | Descripción | Parámetros clave → resultado |
| Fyoung vía UV4 |
|
| Borrar el flasheo del chip (pyOCD |
|
| Verificar el chip contra una imagen (pyOCD |
|
Depuración con sonda
Herramienta | Descripción |
| Conecta / libera una sonda de pyOCD; al desconectar se libera el puerto para UV4 |
| Control del núcleo |
| Establece un punto de interrupción por símbolo o dirección, y continúa |
| Lee r0-r15, sp, lr, pc, xpsr |
| Lee memoria en una dirección (resultado bytes hexadecimales) |
| Lee la salida de SEGGER RTT (si está en ejecución) |
Arquitectura
┌──────────────────────────────────────────────────────────────┐
│ 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 │
└───────────────────┘ └───────────────────┘Dirección de la dependencia: capa MCP → herramientas → núcleo → Keil MDK / pyOCD → chip de destino.
Puntos de diseño clave:
Límite de ejecución (inspirado en McuBuddy): las herramientas de solo lectura se ejecutan de forma concurrente; todo lo demás se serializa con un
asyncio.Lockpor sesión, Mesh se ejecuta en un hilo de trabajo (asyncio.to_thread) y está protegido contra cancelaciones (asyncio.shield).Concesión de la sonda: UV4
-fy pyOCD no pueden compartir el puerto de depuración.ProbeLease(bloqueo asyncio +filelock) serializa el acceso; el flujo de grabación se desconecta de pyOCD antes de que UV4 tome el control.Progreso en tiempo real: un hilo daemon rastrea el registro de UV4, contando las líneas
compilingcontra el conteo de archivos fuente analizados desde.uvprojx(porcentaje limitado al 95 % hasta el marcadorBuild Time Elapsed).Tolerancia a XML malformado: los proyectos antiguos de Keil contienen etiquetas no coincidentes (p. ej.
<b498tele498>...</bUseTDR>); el analizador del proyecto las repara antes de analizar.
Configuración
config.yaml (incluido) + anulaciones por variables de entorno:
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"Ejemplo de flujo de trabajo de extremo a extremo
Una sesión típica de agente (nombres de herramientas mostrados con el prefijo 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 → reflashReglas de seguridad
Nivel | Operaciones | Predeterminado |
Solo lectura | coincidencia de chip, lecturas de registros/memoria/símbolos, logs | sin confirmación |
Ejecutar | detener / reanudar / paso / reiniciar | preguntar |
Escritura de estado | escrituras de memoria/registros, puntos de interrupción, puntos de observación | confirmación |
Destructiva persistente | borrado / programación de flash | confirmación explícita + plan de recuperación |
Proceso del host | compilación de Keil, servidor GDB | preguntar |
Principios: reunir evidencia antes de actuar; identificar primero el componente objetivo; confirmar objetivo / rango / imagen / recuperación antes de grabar.
Pruebas
pytest tests -q # 11 unit tests: log parsing, source editing, progress, project parsingPruebas de humo manuales (en 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 SDKSolución de problemas
Síntoma | Causa / Solución |
| pyOCD todavía es el dueño de la sonda. Llama a |
| Configura |
| El instalado editable del venv apunta a una ruta antigua (instálalo de nuevo desde el repositorio actual): |
| Comprueba el cableado / controlador de la sonda; |
Se necesita | p. ej. |
Hoja de ruta
Publicar en PyPI y registrarse en el registro de MCP
Conmutadores de dominio estilo MCUBUDDY_TOOLSETS
Resolución de símbolos ELF para
set_breakpointpor nombreConocimiento de tareas RTOS (FreeRTOS)
CI de GitHub Actions para pruebas unitarias
Notas de soporte para Linux/macOS (Keil es solo para Windows; las partes de pyOCD son multiplataforma)
Contribuciones
¡Las contribuciones son bienvenidas! Abre primero una incidencia para discutir los cambios y, luego, envía un PR.
Licencia
MIT — libre de usar, modificar y distribuir con atribución.
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