stm32cubemx-mcp
This server provides MCP tools for AI agents to inspect, plan, validate, create, and modify STM32CubeMX .ioc configuration files and generate STM32CubeIDE projects, with safety through hashes, backups, and validation.
Discover environment: Locate STM32CubeMX, STM32CubeIDE, Python, CMake, Ninja paths, versions, and allowed project roots.
List IOC files: Search for
.iocfiles within allowed directories.Inspect IOC files: Read MCU, board, project, peripheral, pin, clock, and version details, plus a SHA-256 hash.
Plan changes: Preview proposed pin, peripheral, parameter, project name, and toolchain modifications as a unified diff and change list without writing files.
Apply changes: Apply an approved plan atomically, with source-hash protection, backup, and optional CubeMX validation.
Validate IOC: Round-trip validate a copy of an
.iocfile through CubeMX without modifying the original.Create IOC: Generate and validate a new
.iocfile for a board or MCU in a new directory.Generate projects: Create a complete STM32CubeIDE project from an IOC file, verifying output artifacts.
Plan regeneration: Preview file additions, modifications, and deletions for regenerating an existing project without altering it.
Safety: All operations are confined to allowed roots, use SHA-256 hashes for integrity, and support bypass only under explicit configuration.
Provides CMake support by discovering local CMake installations, allowing CMake as a toolchain option for IOC creation and planning, with CMake project generation planned.
Integrates with STMicroelectronics' STM32CubeMX to inspect, validate, create, and edit IOC files, and to generate STM32CubeIDE projects from those configurations.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@stm32cubemx-mcpplan changes to enable SPI1 on my current .ioc file"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
STM32CubeMX MCP
stm32cubemx-mcp is a local Model Context Protocol (MCP) server. It helps
artificial intelligence (AI) agents turn structured embedded-system
requirements into safe, testable STM32CubeMX workflows.
Project documentation and user-facing text use ASD-STE100 Technical English.
The agent analyzes microcontroller unit (MCU) datasheets, schematics, board photos, and user requirements. The server supplies the deterministic execution layer. It inspects the local toolchain and STM32CubeMX IOC files. It validates paths and configuration state. It also controls CubeMX validation and project generation.
The project is in early development. It can create and edit IOC files. It can generate a new STM32CubeIDE project. It can preview regeneration of an existing STM32CubeIDE project. CMake project generation is planned. Build, flash, and debug tools are also planned.
What you can do now
Use the Codex plugin to complete these workflows:
Use case | Current support | Safety behavior |
Create a new IOC file | Select a board or microcontroller unit (MCU), project name, and toolchain. | Uses a new directory and validates the IOC file with CubeMX. |
Edit an existing IOC file | Change pins, signals, labels, peripherals, known parameters, project name, or toolchain. | Shows a plan and source hash before it changes the file. It creates a backup before replacement. |
Generate a new project | Generate a complete STM32CubeIDE project from an IOC file. | Uses a temporary directory. It publishes the output only after validation. |
Preview existing-project regeneration | Compare a regenerated copy with the source STM32CubeIDE project. | Reports file differences. It does not change the source project. |
The server does not edit arbitrary C or C++ application code. It does not compile, flash, or debug a project.
Related MCP server: agentic-hil
Quick start with Codex
Install the server and plugin. Then start a new Codex task from the embedded project directory. Give Codex the applicable datasheet, schematic, board image, IOC file, and requirements.
Create a new IOC file and STM32CubeIDE project
Use the installed STM32CubeMX plugin. Create an IOC file for NUCLEO-F401RE.
Configure USART2 on PA2 and PA3 for 115200 bit/s. Preserve the Serial Wire
Debug pins. Show the planned configuration before you apply it. After approval,
generate a new STM32CubeIDE project in a new output directory. Do not compile
or flash the project.Edit an existing IOC file
Use the installed STM32CubeMX plugin. Inspect board.ioc. Plan a change that
configures PA5 as a labeled GPIO output and preserves PA13 and PA14 for Serial
Wire Debug. Show the changed IOC keys, text difference, diagnostics, and source
SHA-256 hash. Do not apply the plan until I approve it.Generate from an existing IOC file
Use the installed STM32CubeMX plugin. Validate board.ioc. Generate a new
STM32CubeIDE project in generated/board-app. Report output_directory,
project_path, the source hash, generated-file count, and diagnostics. Do not
modify board.ioc. Do not compile the project.The agent uses this safe sequence for an IOC edit:
inspect -> plan -> show difference and source hash -> get approval
-> validate staged IOC -> create backup -> replace IOC
-> generate a new project when requestedPlanned capabilities
Generate a CMake project from an IOC file.
Configure and build a generated CMake project.
Build an STM32CubeIDE project with the headless interface.
List debug probes and plan a flash operation with STM32CubeProgrammer.
Flash only after a separate explicit approval.
Current MCP tools
Tool | Purpose | File effect |
| Find CubeMX, CubeIDE, Python, CMake, and Ninja. | Read-only |
| Find IOC files below an allowed directory. | Read-only |
| Read MCU, project, peripheral, pin, clock, and version data. | Read-only |
| Preview pin, peripheral, parameter, and project changes. | Read-only |
| Validate and apply an approved IOC plan. | Creates a backup and replaces one IOC file |
| Load and save a staged IOC copy with CubeMX. | Source file remains unchanged |
| Create and validate one IOC file for a board or MCU. | Creates one new directory |
| Generate one new STM32CubeIDE project. | Creates one new output container |
| Regenerate a temporary copy of an existing CubeIDE project. | Source project remains unchanged |
Intended workflow
flowchart LR
A["User inputs: requirements, datasheets, schematics"] --> B["AI agent: hardware intent"]
B --> C["MCP: inspect and resolve constraints"]
C --> D["MCP: plan and preview IOC changes"]
D --> E["MCP: transactional apply"]
E --> F["CubeMX CLI: validate and generate"]
F --> G["New STM32CubeIDE project"]
G --> H["Structured diagnostics for the agent"]
H -.-> I["Planned: CubeIDE or CMake build"]The supported CubeMX command-line interface (CLI) loads MCUs, boards, and IOC configurations. CubeMX can generate STM32CubeIDE or CMake projects. The current MCP generation tool supports STM32CubeIDE only. It does not expose the complete pin and peripheral editor as a command API. For that reason, this project treats IOC changes as version-aware transactions and uses CubeMX as the validation and generation authority.
See Architecture for the safety model and planned tool contract. See the first-principles study guide to rebuild the main MCP layers in a separate learning project.
Codex plugin
This repository is an unofficial Codex plugin marketplace. The plugin contains the Codex workflow guidance and the MCP server configuration. The Python package contains the executable MCP server.
Install on Windows
Install the Codex CLI if codex.cmd --version does not work:
npm.cmd install --global @openai/codexInstall pipx if py -m pipx --version does not work:
py -m pip install --user pipx
py -m pipx ensurepathInstall the Python MCP server:
py -m pipx install git+https://github.com/Wafleem/stm32cubemx_mcp.gitThe Windows plugin first searches the Codex process PATH. If the command is not
on that PATH, the plugin uses the default pipx application path at
%USERPROFILE%\.local\bin\stm32cubemx-mcp.exe. This fallback lets the Codex
desktop app start the server after pipx changes the user PATH.
Add the marketplace and install the plugin:
codex.cmd plugin marketplace add Wafleem/stm32cubemx_mcp
codex.cmd plugin add stm32cubemx-mcp@wafleem-stm32Close Codex after the installation. Open Codex again and start a new task. Use
/mcp to confirm that the stm32cubemx server is connected. The plugin source
is in plugins/stm32cubemx-mcp.
Verify the installation
Run these checks in a new PowerShell window:
Get-Command stm32cubemx-mcp
py -m pipx list
codex.cmd --version
codex.cmd plugin listThe stm32cubemx-mcp command starts a standard-input MCP server. It waits for
MCP messages. This wait is correct. Press Ctrl+C if you start the server
manually. Do not use a manual server start as the connection test.
Use this prompt in a new Codex task for a read-only connection test:
Use the installed STM32CubeMX plugin. Call cubemx_environment. Do not modify
files. Report the CubeMX path, Java path, operating system, allowed roots, and
diagnostics.Install on macOS
Install uv and the Python MCP server:
brew install uv
uv tool install git+https://github.com/Wafleem/stm32cubemx_mcp.gitUse an absolute server path. Set the allowed root to the STM32 project directory:
server_path="$(uv tool dir --bin)/stm32cubemx-mcp"
project_root="/absolute/path/to/stm32-project"
codex mcp add stm32cubemx \
--env "CUBEMX_MCP_ALLOWED_ROOTS=${project_root}" \
--env "CUBEMX_MCP_CUBEMX_TIMEOUT_SECONDS=240" \
-- "${server_path}"
codex mcp get stm32cubemxThe server discovers native Apple silicon STM32CubeMX applications in the
standard /Applications/STMicroelectronics and /Applications locations.
Set CUBEMX_MCP_CUBEMX_PATH in the MCP configuration when the application is
in a different location.
Close Codex after the installation. Open Codex again and start a new task. Use
/mcp to confirm that the stm32cubemx server is connected.
macOS discovery implementation
The macOS discovery layer resolves the native executable inside each
STM32CubeMX.app bundle. It does not start the Windows executable or pass the
macOS application bundle to Java.
Discovery uses this order:
Read the launcher set by
CUBEMX_MCP_CUBEMX_PATH.Check the STMicroelectronics application directories below
/Applications.Check
/Applications/STM32CubeMX.appand~/Applications/STM32CubeMX.app.Check the process
PATHforSTM32CubeMXorstm32cubemx.
For an application bundle, the server invokes
Contents/MacOS/STM32CubeMX. It reads Contents/Info.plist to report the
installed CubeMX version. It resolves candidate paths before it removes
duplicates. This behavior prevents one installation from appearing more than
once when an explicit path and a standard application path refer to the same
launcher.
Use this read-only prompt after a Codex restart:
Use the installed STM32CubeMX plugin. Call cubemx_environment. Do not modify
files. Report the CubeMX launcher path, version, invocation prefix, operating
system, architecture, allowed roots, and diagnostics.For the standard ST installer layout, the reported launcher is:
/Applications/STMicroelectronics/STM32CubeMX.app/Contents/MacOS/STM32CubeMXThe automated discovery tests cover the ST application path, native launcher selection, bundle version extraction, explicit-path precedence, and canonical path deduplication. The current macOS test run passes 57 tests.
Update the installation
Update the Python server when a runtime release is available:
py -m pipx upgrade stm32cubemx-mcpRefresh the marketplace and reinstall the current plugin version:
codex.cmd plugin marketplace upgrade wafleem-stm32
codex.cmd plugin add stm32cubemx-mcp@wafleem-stm32Close Codex and start a new task after the update.
Usage guide
1. Give the technical evidence to the agent
Attach the datasheet, schematic, board image, IOC file, and project files to the Codex task as applicable. State the MCU part number and package. State the required peripheral, signal, data rate, clock, and pin restrictions.
Codex analyzes this evidence. The MCP server does not read or interpret the datasheet or schematic by itself. Codex converts the result of its analysis into structured MCP tool calls.
Example request:
This project uses an STM32F401RE on a NUCLEO-F401RE. Configure USART2 for
115200 bit/s on PA2 and PA3. Preserve the Serial Wire Debug (SWD) pins. Inspect
and plan the change. Do not modify the IOC file until I approve the plan.2. Create or inspect the IOC file
Codex first calls cubemx_environment. It confirms the CubeMX path and the
allowed roots.
For a new project, Codex can call cubemx_create_ioc. The call selects one
known board or microcontroller unit (MCU). It selects the project name,
toolchain, and a new output directory. The server uses typed CubeMX commands.
It validates the new IOC file before it makes the output directory available.
For an existing project, Codex can call cubemx_list_ioc if the IOC path is
not known. It then calls cubemx_inspect_ioc to read the current project
state.
The inspection result includes the source SHA-256 hash. This hash identifies the exact IOC content that Codex inspected.
3. Create and review a change plan
Codex calls cubemx_plan_ioc_changes. This tool returns:
a plan identifier;
the source and planned SHA-256 hashes;
a list of changed IOC keys;
a unified text difference;
diagnostics.
This call does not write the IOC file. Review the pin assignments, peripheral names, parameter values, project name, and toolchain. Give approval only for the displayed plan.
4. Apply an approved IOC plan
After approval, Codex calls cubemx_apply_ioc_changes with the same plan
request and the approved source hash. The server creates the plan again. It
stops if the source hash changed.
By default, the server validates the planned IOC content with CubeMX before it writes the source file. It then creates a hash-named backup and uses one atomic replacement operation. It restores the backup if the applied hash is not equal to the approved planned hash.
Do not disable CubeMX validation for normal use. The validation bypass requires
both an explicit request value and the
CUBEMX_MCP_ALLOW_UNVALIDATED_APPLY=true server setting.
5. Generate or preview a project
Use cubemx_generate_project for a new STM32CubeIDE project. The output
directory must not exist. The tool validates the IOC file, generates into a
temporary directory, and then checks the complete CubeIDE output. The check
resolves each linked resource in the Eclipse .project file. It also requires
main.c, main.h, a CMSIS core header, and a Hardware Abstraction Layer (HAL)
source file. The tool moves the complete output container to the requested
path only after these checks pass.
The tool sets the staged IOC project name and filename to the requested project name. It selects the current CubeMX toolchain key when that key is available. It also requests a project below one root directory. These staged changes do not change the source IOC file.
CubeMX can change the internal project name and filename when validation saves
a temporary roundtrip.ioc file. The round-trip check permits these two
temporary identity changes. The generated-project check still requires the
requested IOC filename and internal project identity.
The output_directory result identifies the complete generated container. The
project_path result identifies the Eclipse project root. These paths are
usually equal. They can be different when CubeMX creates nested Eclipse
metadata.
Use cubemx_plan_regeneration for an existing STM32CubeIDE project. This tool
copies the project before validation. It validates the IOC file in an isolated
temporary directory. It then regenerates the copy and reports added, modified,
and deleted files. It checks the source project after each phase. It does not
change the source project.
The preview stages the project below a temporary generation parent. It passes that parent to CubeMX. This layout prevents CubeMX from creating a second nested copy of the project.
The current server does not apply an existing-project regeneration plan. It also does not compile a project. Treat IOC validation, project generation, and compilation as different results.
6. Use allowed roots
All input and output paths must be below an allowed root. If
CUBEMX_MCP_ALLOWED_ROOTS is not set, the server permits only its current
working directory. On Windows, separate multiple roots with a semicolon.
Example:
$env:CUBEMX_MCP_ALLOWED_ROOTS = "C:\work\board-a;D:\shared\firmware"This command applies to Codex processes that start from the same PowerShell
session. For the desktop app, set the variable in the Windows user environment
and then restart the app. Use cubemx_environment to confirm the effective
roots.
MCP API and tool-call overview
The server uses MCP over standard input and standard output. It does not expose an HTTP API. Codex and other MCP clients create the JSON-RPC messages. Most users must use natural-language prompts instead of writing JSON-RPC messages.
All tool results use structured JSON. Diagnostics contain severity, code,
message, and an optional IOC line number.
CubeMX process results contain the exit code, duration, timeout state, and
captured output. Successful results contain only a short output tail. Failed
results keep a larger bounded output for diagnosis. Nonfatal Java preferences
output uses the cubemx.java_preferences_warning diagnostic code.
Read-only calls
cubemx_environment
Arguments:
{}Main result fields: operating_system, architecture, python_version,
python_executable, cubemx, cubeide, cmake, ninja, allowed_roots, and
diagnostics.
cubemx_list_ioc
Arguments:
{
"root": ".",
"recursive": true,
"limit": 100
}root defaults to the current directory. recursive defaults to true.
limit defaults to 100. The result contains root, files, and
truncated.
cubemx_inspect_ioc
Arguments:
{
"path": "board.ioc"
}The result contains summary and diagnostics. The summary contains MCU,
board, project, toolchain, CubeMX version, peripheral, pin, clock, file size,
and source-hash data.
cubemx_validate_ioc
Arguments:
{
"path": "board.ioc"
}The result contains valid, source and round-trip hashes, the CubeMX process
result, and diagnostics. The source IOC file remains unchanged.
IOC creation, plan, and apply calls
cubemx_create_ioc
The tool has one request argument:
{
"request": {
"target_kind": "board",
"target": "NUCLEO-F401RE",
"output_directory": "projects/f401-base",
"project_name": "f401_base",
"board_mode": "allmodes",
"toolchain": "STM32CubeIDE"
}
}Set target_kind to board or mcu. Use the exact CubeMX board or MCU
identifier in target. board_mode can be allmodes or nomode. The
toolchain can be STM32CubeIDE or CMake. The output directory must not
exist.
The result contains the IOC path, project path, target, toolchain, source hash, validation result, CubeMX process result, and diagnostics. The server removes the staged directory if creation or validation fails.
cubemx_plan_ioc_changes
The tool has one request argument:
{
"request": {
"path": "board.ioc",
"pin_assignments": [
{
"pin": "PA2",
"signal": "USART2_TX",
"label": "DEBUG_TX",
"locked": true
},
{
"pin": "PA3",
"signal": "USART2_RX",
"label": "DEBUG_RX",
"locked": true
}
],
"enabled_peripherals": ["USART2"],
"parameter_updates": {},
"project_name": null,
"toolchain": "STM32CubeIDE",
"allow_debug_pin_change": false
}
}Use exact CubeMX IOC keys in parameter_updates. Do not guess these keys. Use
pin_assignments for pin signals, labels, and lock states. The server rejects
these pin properties in parameter_updates. toolchain can be
STM32CubeIDE, CMake, or null. Debug-pin changes are blocked unless
allow_debug_pin_change is true.
The result contains plan_id, source_sha256, planned_sha256, changes,
unified_diff, validation_status, and diagnostics.
cubemx_apply_ioc_changes
The tool has one request argument. plan_request must be equal to the
approved planning request:
{
"request": {
"plan_request": {
"path": "board.ioc",
"pin_assignments": [
{
"pin": "PA2",
"signal": "USART2_TX",
"label": "DEBUG_TX",
"locked": true
},
{
"pin": "PA3",
"signal": "USART2_RX",
"label": "DEBUG_RX",
"locked": true
}
],
"enabled_peripherals": ["USART2"],
"parameter_updates": {},
"project_name": null,
"toolchain": "STM32CubeIDE",
"allow_debug_pin_change": false
},
"expected_source_sha256": "<64-character hash from the approved plan>",
"skip_cubemx_validation": false
}
}The result contains the plan identifier, source and applied hashes, backup path, change state, CubeMX validation state, and changed IOC keys.
Project calls
cubemx_generate_project
The tool has one request argument:
{
"request": {
"ioc_path": "board.ioc",
"output_directory": "generated/blinky",
"project_name": "blinky",
"toolchain": "STM32CubeIDE"
}
}The current generation tool supports only STM32CubeIDE. The project name can
contain letters, numbers, _, ., and -. It can contain 1 to 80 characters.
The source IOC file remains unchanged. The result contains succeeded,
output_directory, project_path, project_name, toolchain,
source_sha256, the validation result, the CubeMX process result, the
generated-file list, and diagnostics. output_directory identifies the
complete output container. project_path identifies the Eclipse project root.
cubemx_plan_regeneration
The tool has one request argument:
{
"request": {
"project_directory": "existing-project",
"ioc_path": null
}
}Set ioc_path when the project contains more than one IOC file. A relative IOC
path is relative to project_directory. The result contains source and planned
project-manifest hashes, file changes, IOC validation, the CubeMX process
result, and diagnostics. Check succeeded before you use plan_id or
planned_manifest_sha256. These fields can be null when a safe preview does
not complete. A source-change diagnostic identifies each detected path.
JSON-RPC call form
An MCP client sends a tool call in this form:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cubemx_inspect_ioc",
"arguments": {
"path": "board.ioc"
}
}
}The MCP client performs protocol initialization before it sends this call. Application code should use an MCP SDK instead of writing protocol messages directly.
Requirements
Python 3.11 or newer
STM32CubeMX for generation and validation features
STM32CubeIDE for current project-generation workflows
A CMake Arm toolchain when planned CMake generation and build support is available
Windows and macOS on Apple silicon are represented in the platform abstraction and continuous integration matrix. The Codex marketplace launcher supports Windows. macOS uses a direct Codex MCP configuration with an absolute server path.
Development setup
py -3.11 -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install -e ".[dev]"
pytestOn macOS:
python3.11 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
pytestRun the stdio server with:
stm32cubemx-mcpMCP hosts should launch the server using an absolute Python or executable path. Nothing except MCP protocol messages may be written to stdout; application logs go to stderr.
Configuration
Environment variable | Purpose |
| Explicit CubeMX launcher path |
| OS-path-separated project roots the MCP may read or change |
| Maximum |
| Maximum project file count; defaults to 20,000 |
| Maximum project size; defaults to 500 MiB |
| Maximum CubeMX operation time; defaults to 120 seconds |
| Permit an explicit validation bypass; defaults to false |
When CUBEMX_MCP_ALLOWED_ROOTS is unset, access is restricted to the process's
current working directory. This default is deliberately narrow.
References
License
MIT
Available Tools
9 toolscubemx_apply_ioc_changesB
Apply an approved IOC plan. Create a backup and replace the source file.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| changed | Yes | |
| plan_id | Yes | |
| backup_path | No | |
| changed_keys | No | |
| source_sha256 | Yes | |
| applied_sha256 | Yes | |
| cubemx_validated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing side effects. It mentions creating a backup and replacing the source file, which are key behavioral details. However, it does not elaborate on permanence, reversibility, or any validation behavior, so it is present but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences that each add value: the first states the action, the second describes the mechanism. It is appropriately sized for the limited content, though it could be expanded with more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested input schema, backup process, source file replacement) and the presence of an output schema, the description is incomplete. It does not explain success/failure behavior, backup location, or what 'approved' entails, leaving significant context missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the top-level parameter, and the description does not compensate by explaining any parameters. The nested schema fields have some descriptions, but the description itself adds no meaning to the 'request' parameter or its contents. This is a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Apply an approved IOC plan' and describes its primary action of creating a backup and replacing the source file. This provides a specific verb and resource, though it does not explicitly distinguish itself from sibling tools like cubemx_plan_ioc_changes or cubemx_validate_ioc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool should be used to apply an approved plan, implying it follows the planning step. It provides clear context for when to use it (with an approved plan) but does not explicitly state when not to use it or mention alternatives, fitting the 'clear context, no exclusions' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cubemx_create_iocB
Create and validate one IOC file for a board or microcontroller in a new directory.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cubemx | Yes | |
| target | Yes | |
| ioc_path | Yes | |
| succeeded | Yes | |
| toolchain | Yes | |
| board_mode | No | |
| validation | No | |
| diagnostics | No | |
| target_kind | Yes | |
| project_name | Yes | |
| project_path | Yes | |
| source_sha256 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It mentions 'create and validate' and 'new directory', but gives no detail on validation semantics, side effects (e.g., overwriting, directory creation behavior), error handling, or required environment setup. The description provides minimal insight beyond the tool's name, leaving significant behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the action ('Create and validate') and follows with the resource and location. Every word adds meaning, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with no annotations, the description is too brief to be complete. It does not mention dependencies (e.g., cubemx_environment), validation behavior, potential errors, or idempotency. Although an output schema exists, it is not shown here, and the description still lacks the behavioral context needed to use the tool confidently. The tool has multiple parameters and side effects, but the description covers only a fraction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It does add some meaning by indicating 'board or microcontroller' (relevant to target_kind and target) and 'in a new directory' (relevant to output_directory), but it leaves out project_name, toolchain, and board_mode. These parameters are not explained in the description or fully in the schema, leaving gaps in how to correctly populate the request.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: create and validate one IOC file for a board or microcontroller, placed in a new directory. This differentiates it from sibling tools like cubemx_list_ioc, cubemx_inspect_ioc, and cubemx_apply_ioc_changes, which handle different actions. The verb+resource+scope is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for creating a new IOC file, but it doesn't explicitly state when to use this tool versus alternatives, nor does it mention when not to use it. There is no mention of prerequisites or exclusion criteria. The context of sibling tools provides some guidance, but the description itself lacks explicit usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cubemx_environmentA
Discover local STM32CubeMX, STM32CubeIDE, CMake, and related runtime state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| cmake | Yes | |
| ninja | Yes | |
| cubemx | Yes | |
| cubeide | Yes | |
| diagnostics | No | |
| architecture | Yes | |
| allowed_roots | Yes | |
| python_version | Yes | |
| operating_system | Yes | |
| python_executable | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it only says 'Discover...' which implies a non-destructive read operation. It does not specify what exact runtime state is checked, whether it validates versions/paths, or what the output contains. The phrase 'related runtime state' is vague and doesn't clarify side effects or assumptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no redundant or vague filler. Every word contributes to the meaning, and it is appropriately sized for a zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple discovery tool with no parameters and an output schema, the description is mostly sufficient but leaves 'related runtime state' ambiguous. It could be clearer about whether it checks versions, installation paths, environment variables, or toolchain dependencies. The output schema may compensate, but it's not visible here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty and the baseline is 4. The description adds useful tool-level context by naming the discovery targets (STM32CubeMX, STM32CubeIDE, CMake), which helps the agent understand the tool's scope even though no parameters exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Discover' with a clear resource (local STM32CubeMX, STM32CubeIDE, CMake, and related runtime state). It clearly distinguishes itself from sibling tools that create, inspect, plan, or apply changes to .ioc files and generated projects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any context about prerequisites or whether to run it before other actions. There is no mention of when-not-to-use or recommended workflow placement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cubemx_generate_projectC
Generate one new STM32CubeIDE project in a new output directory.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cubemx | No | |
| succeeded | Yes | |
| toolchain | Yes | |
| validation | Yes | |
| diagnostics | No | |
| project_name | Yes | |
| project_path | Yes | |
| source_sha256 | Yes | |
| generated_files | No | |
| output_directory | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing side effects. It only mentions 'new output directory' but does not state whether existing contents are overwritten, whether the .ioc file is modified, or what happens if the project already exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, directly stateful and free of fluff. It is appropriately brief, though it could add a little more context without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is under-described for its role in a generation workflow. It lacks mention of required inputs (ioc_path), dependencies on prior steps, behavior with existing output directories, and any side effects on the .ioc file. The output schema exists but the description does not integrate it into the overall process.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It gives a hint that output_directory should be a new directory, but ioc_path and project_name are not explained beyond the schema's basic type/constraint information. The nested request object is not clarified either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (generate a project) and the target (STM32CubeIDE), with a qualifier about the output directory. However, it does not mention that it operates on an existing .ioc file, so it could be conflated with creating a .ioc from scratch (cubemx_create_ioc).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus siblings like cubemx_create_ioc, cubemx_apply_ioc_changes, or cubemx_plan_regeneration. It does not state prerequisite steps such as having an .ioc file already prepared.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cubemx_inspect_iocA
Inspect one IOC file and return project, microcontroller, pin, and clock data.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| diagnostics | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. The verb 'inspect' implies read-only operation, but the description does not explicitly state that the file is not modified, nor does it mention behavior on invalid paths or permission requirements. It focuses on return data rather than the operational semantics, which is a significant gap given the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately states the verb and object. It is free of filler and communicates the core purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one parameter and an output schema, so the description does not need to detail return values. However, without annotations and explicit usage guidance, the description is only partially complete for an agent deciding between this and sibling tools. It provides basic purpose but lacks behavioral and selection context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has only one parameter 'path' with no description (0% coverage). The description's 'Inspect one IOC file' implies that 'path' identifies the file to inspect, adding some meaning. However, it does not explicitly describe the parameter's format, requirements (e.g., absolute vs. relative path), or constraints, leaving the agent to infer the connection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Inspect' with a specific resource 'one IOC file' and lists the data categories returned (project, microcontroller, pin, clock). This clearly distinguishes it from sibling tools like 'list' (enumerates files) and 'validate' (checks correctness).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through the phrase 'Inspect one IOC file', but there is no explicit guidance on when to use this tool versus alternatives such as 'list' or 'validate'. No exclusions or alternative mentions are provided, so the agent must infer usage from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cubemx_list_iocA
List IOC files below an allowed project directory without modifying them.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | . | |
| limit | No | ||
| recursive | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| root | Yes | |
| files | Yes | |
| truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It explicitly states 'without modifying them', which reveals the non-destructive safety profile—a critical behavioral trait. It also hints at an access boundary ('allowed project directory'), adding context beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence conveys the core purpose and a safety qualifier with zero redundant wording. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple list operation, especially with an output schema present, but it lacks critical parameter semantics and usage guidelines. The claimed output schema means return values need not be described, yet the missing context on limit/recursive and sibling differentiation leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It only implies the 'root' parameter via 'below an allowed project directory'. The 'limit' and 'recursive' parameters are entirely unexplained in both schema and description, leaving their semantics unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the target ('IOC files'), the scope ('below an allowed project directory'), and a key behavioral constraint ('without modifying them'). This strongly distinguishes it from sibling tools like create, inspect, or apply, which imply different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: it lists IOC files before other operations. However, there is no explicit guidance on when to choose this over siblings like cubemx_inspect_ioc or cubemx_plan_ioc_changes, nor any mention of exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cubemx_plan_ioc_changesA
Plan pin, peripheral, parameter, and project changes. Do not write a file.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| changes | Yes | |
| plan_id | Yes | |
| diagnostics | No | |
| unified_diff | Yes | |
| source_sha256 | Yes | |
| planned_sha256 | Yes | |
| validation_status | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden of behavioral disclosure. It clearly states 'Do not write a file,' which is a key non-mutating behavior that an agent must know. However, it does not mention other behaviors such as whether an existing .ioc file is required or the nature of the plan output, so it is not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the verb and resource scope, followed by the crucial safety note. Every word contributes meaning, with no superfluous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose and non-writing behavior, and an output schema exists to document return values. However, it does not differentiate from the sibling cubemx_plan_regeneration tool or mention prerequisites like an existing .ioc file, leaving gaps for a tool with such a rich request schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description lists the categories of changes ('pin, peripheral, parameter, and project changes'), which map meaningfully to the request fields (pin_assignments, parameter_updates, enabled_peripherals, project_name/toolchain). This adds value beyond the schema, which lacks descriptions for the top-level request property. However, it does not detail individual parameters, and the schema's nested descriptions are sparse.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Plan') and names the resources ('pin, peripheral, parameter, and project changes'). The explicit note 'Do not write a file' distinguishes it from sibling tools that create, apply, or generate, making the purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Do not write a file' implies usage for planning before applying changes, but it does not explicitly state when to use this tool over alternatives like cubemx_apply_ioc_changes or cubemx_plan_regeneration. There is no direct mention of alternatives, making the guidance only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cubemx_plan_regenerationA
Regenerate a temporary project copy. Return a read-only file change plan.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| cubemx | No | |
| changes | Yes | |
| plan_id | No | |
| ioc_path | Yes | |
| succeeded | Yes | |
| validation | No | |
| diagnostics | No | |
| project_path | Yes | |
| source_manifest_sha256 | Yes | |
| planned_manifest_sha256 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the operation creates a temporary copy (implying the original is untouched) and that the returned plan is read-only. This gives essential safety context beyond a bare 'plan regeneration' statement, though it does not mention cleanup or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The key actions—regenerating a temporary copy and returning a read-only plan—are front-loaded and every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so return value details are covered elsewhere. However, the lack of parameter semantics and weak usage guidance leave noticeable gaps for a tool with one required parameter and an optional one. It is minimally complete but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions no parameters at all. It fails to explain that project_directory is required or what ioc_path is for. The description adds no meaning beyond the raw schema fields, leaving the agent to guess parameter purposes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool regenerates a temporary project copy and returns a read-only file change plan. This specific verb+resource pairing distinguishes it from siblings like cubemx_apply_ioc_changes (which applies changes) and cubemx_generate_project (which generates the project outright).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a planning/preview use case (temporary copy, read-only plan) but does not explicitly mention when to use it versus alternatives like cubemx_plan_ioc_changes or cubemx_generate_project. No exclusions or alternative tool names are given, leaving the choice somewhat implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cubemx_validate_iocC
Load and save an IOC copy with STM32CubeMX. Do not change the source file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| valid | Yes | |
| cubemx | Yes | |
| diagnostics | No | |
| source_sha256 | Yes | |
| roundtrip_sha256 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral disclosure. It does state 'Do not change the source file,' which is useful, but it omits other important behaviors such as whether temporary files are created, whether CubeMX must be installed, and what the output represents. The safety profile is only partially disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with only two short sentences and no filler. However, the extreme brevity contributes to ambiguity; it earns points for being front-loaded and efficient but loses some for sacrificing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although the tool has a simple schema and an output schema exists, the description does not provide enough context for an agent to know when to use it or what to expect. The purpose is vague ('load and save'), usage guidance is absent, and parameter semantics are unclear, making it incomplete for confident tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one 'path' parameter with no description, and schema coverage is 0%. The description mentions 'an IOC copy' but does not clarify whether 'path' refers to the source file to copy or to an existing copy. This ambiguity leaves the parameter's meaning inadequately explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (load and save an IOC copy) and adds a safety constraint ('Do not change the source file'). It distinguishes from siblings by focusing on a copy, but it does not explicitly mention validation, which is the tool's apparent purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus the sibling tools (e.g., inspect, plan changes, apply changes). The only usage hint is the safety constraint about not modifying the source file, but no context or alternative comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.3.0- First observed
cubemx_apply_ioc_changes - First observed
cubemx_create_ioc - First observed
cubemx_environment - First observed
cubemx_generate_project - First observed
cubemx_inspect_ioc - First observed
cubemx_list_ioc - First observed
cubemx_plan_ioc_changes - First observed
cubemx_plan_regeneration - First observed
cubemx_validate_ioc
TDQS
Scored across 9 tools
Each tool targets a distinct resource and action: creating, listing, inspecting, planning, applying, validating, and generating. The plan/apply split is clear, and inspection vs. validation are unambiguous. No two tools appear to do the same thing.
All tools share the cubemx_ prefix and use snake_case. Most follow a verb_noun pattern (create_ioc, list_ioc, plan_ioc_changes), with only 'environment' deviating as a pure noun. This is a minor inconsistency in an otherwise predictable scheme.
With 9 tools, the set is well-scoped for managing STM32CubeMX projects and IOC files. Each tool covers a distinct step in the workflow without redundancy or bloat. The count is appropriate for the domain.
The set covers discovery, creation, inspection, validation, change planning/application, and project generation. However, plan_regeneration has no corresponding apply tool, leaving a dead end for regenerating existing projects. Missing delete/remove functionality is a minor gap, but the lack of regeneration application is more significant.
Maintenance
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that extends AI coding assistants with deterministic, algorithmic capabilities such as code analysis, fault localization, and formal verification, enabling an autonomous engineering team within the IDE.MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for Agentic Hardware-in-the-Loop testing, enabling AI agents to probe, flash, reset, and validate embedded firmware on real hardware via bounded MCP tools.13Apache 2.0
- AlicenseCqualityAmaintenanceMCP server for AI-assisted MCU and embedded firmware debugging. It connects to real hardware via debug probes, inspects CPU/memory/peripherals, manages Keil builds, and provides structured evidence for fault diagnosis.196MIT
- AlicenseAqualityBmaintenanceMCP server that wraps STM32CubeMX CLI to let AI load .ioc projects, modify pin/peripheral configurations, generate HAL code, and export pinout tables.53MIT