Skip to main content
Glama
ZMC1011

Keil5 MCP Server

by ZMC1011

Keil5 MCP Server

Python License: MIT MCP PyPI PRs Welcome

English | 中文

A Model Context Protocol (MCP) server that gives deepseek harness a edit code → flash → debug → read feedback → fix code closed loop for STM32 development with Keil MDK.

Instead of manually switching between the IDE, the programmer and the terminal, an agent can:

  1. Build a Keil project and watch real-time compile progress

  2. Get structured errors from UV4 logs (file / line / column / code / message)

  3. Explain error codes with causes and suggested fixes

  4. Edit source files safely (every edit is auto-backed up)

  5. Flash firmware via the official UV4 channel or pyOCD

  6. Debug on hardware through pyOCD: breakpoints, stepping, registers, memory, RTT logs

  7. Run the official Keil debug channel (UV4 -d + .ini scripts)


Table of Contents


Related MCP server: stm32-mcp

Features

  • 27 MCP tools registered as mcp__<serverName>__<tool> (e.g. mcp__keil__build_project)

  • Real-time build progress: tail-based monitor with percent / current file / phase, capped at 95% until link finishes

  • Structured UV4 log parsing: compile errors (main.c(25:1): error C2065: ...), link errors (L6218E), Program Size, build time

  • Error-code knowledge base: built-in explanations and fixes for common armcc/armclang codes (C2065, L6218E, L6406E, ...)

  • Safe source editing: automatic .keil-mcp-backups/ before every edit, line-range replace, regex search

  • Official flash path: UV4 -f uses the project's configured Flash algorithm; pyOCD fallback accepts .axf directly

  • Hardware debug: pyOCD probe control (connect / halt / resume / step / breakpoint / registers / memory / RTT)

  • Probe lease: per-probe exclusive access (asyncio lock + file lock) so UV4 and pyOCD never fight over the debug port

  • Execution boundary: read-only tools run concurrently; mutating tools serialize on a session lock; cancellation-safe via asyncio.shield

  • Works without Keil installed: keil_doctor reports missing components clearly; the server still starts

Requirements

Component

Version / Notes

Python

3.10+ (tested on 3.12)

Keil MDK

UV4.exe

pyOCD

installed automatically via pip; needs a probe driver (ST-Link / J-Link / CMSIS-DAP)

Probe

ST-Link V2/V3, J-Link, CMSIS-DAP, Keil ULINKplus

Target pack

e.g. pyocd pack install stm32f103c8 or reuse the Keil DFP

Installation

From PyPI

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

Package is PyPI-ready (pyproject.toml + LICENSE + server.json included). If the package is not yet published, use the source install below.

From source (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]"

Verify the install

# 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

Quick Start

# 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 Configuration

DeepSeek Harness (DSH)

Per the official DSH MCP docs: one plugin instance = one MCP server, wired through the official bridge plugin @deepseek-ai/dsh-mcp-client. Add this to your profile's cordis.patch.yml (or 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

Verify with:

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

Note: serverName must match [A-Za-z0-9_-]{1,32} and be unique among live instances.

Claude Desktop / other stdio MCP clients

Most MCP clients use the mcpServers JSON convention:

{
  "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"
      }
    }
  }
}

For a source checkout without a venv, uv also works:

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

Tools

All 27 tools return structured JSON. Destructive operations (flash / erase) require confirm=True.

Build & Errors

Tool

Description

Key params → Result

build_project

Compile with UV4 -b (or -r rebuild / -c clean), realtime progress

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

build_progress_status

Query in-flight build progress

build_id{status, percent, current_file, phase}

build_cancel

Request build cancellation

build_id{success}

parse_build_errors

Parse UV4 log into structured errors

log_path? or log_content?{errors[], warnings[], summary}

explain_build_error

Error code → explanation + causes + fixes

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

Source Editing

Tool

Description

Key params → Result

source_read

Read source with line numbers

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

source_edit

Replace a line range; auto-backup first

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

source_search

Search source files (text or regex)

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

Official Debug Channel

Tool

Description

Key params → Result

uv4_debug_session

Run UV4 -d + generated .ini debug script (headless breakpoint/go/step)

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

uv4_debug_dde

Read session output by id

session_id{output}

Project & Environment

Tool

Description

Key params → Result

keil_doctor

Environment check: UV4.exe, pyocd, packs, connected probes

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

discover_keil_projects

Find *.uvprojx under a directory

directory?, recursive?{projects[]}

configure_keil_project

Parse project: targets, device, pack, groups, source files

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

Flash

Tool

Description

Key params → Result

flash_firmware

Flash via UV4 -f (preferred) or pyOCD

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

erase_flash

Erase chip flash (pyOCD erase -c)

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

verify_flash

Verify chip against image (pyOCD verify)

image, probe_id?{success, output}

Probe Debugging

Tool

Description

probe_connect / probe_disconnect

Connect / release a pyOCD probe (disconnect frees the port for UV4 -f)

probe_halt / probe_resume / probe_step

Core control

set_breakpoint / continue_target

Breakpoint by symbol or address, continue

probe_read_registers

Read r0-r15, sp, lr, pc, xpsr

probe_read_memory

Read memory at address (hex bytes)

read_rtt_log

Read SEGGER RTT output (if running)

Architecture

┌──────────────────────────────────────────────────────────────┐
│  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  │
      └───────────────────┘          └───────────────────┘

Dependency direction: MCP layer → tools → core → Keil MDK / pyOCD → target chip.

Key design points:

  • Execution boundary (inspired by McuBuddy): read-only tools run concurrently; everything else serializes on a per-session asyncio.Lock, runs in a worker thread (asyncio.to_thread) and is cancellation-protected (asyncio.shield).

  • Probe lease: UV4 -f and pyOCD cannot share the debug port. ProbeLease (asyncio lock + filelock) serializes access; the flash flow disconnects pyOCD before UV4 takes over.

  • Realtime progress: a daemon thread tails the UV4 log, counting compiling lines against the source-file count parsed from .uvprojx (percent capped at 95% until the Build Time Elapsed marker).

  • Malformed-XML tolerance: older Keil projects contain mismatched tags (e.g. <b498tele498>...</bUseTDR>); the project parser repairs them before parsing.

Configuration

config.yaml (bundled) + environment variable overrides:

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 Workflow Example

A typical agent session (tool names shown with DSH prefix 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

Safety Rules

Level

Operations

Default

Read-only

chip match, register/memory/symbol reads, logs

no confirmation

Execute

halt / resume / step / reset

prompt

State write

memory/register writes, breakpoints, watchpoints

confirm

Persistent destructive

flash erase / programming

explicit confirm + recovery plan

Host process

Keil build, GDB server

prompt

Principles: gather evidence before acting; identify the target chip first; confirm target / range / image / recovery before flashing.

Testing

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

Manual 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 SDK

Troubleshooting

Symptom

Cause / Fix

Target DLL has been cancelled on flash

pyOCD still owns the probe. Call probe_disconnect (or let the probe lease handle it) before flash_firmware with the UV4 backend.

UV4.exe not found

Set KEIL_UV4_PATH or keil.uv4_path in config; run keil_doctor to confirm.

No module named keil_mcp_server

The venv's editable install points at an old path — reinstall from the current checkout: pip install -e .

No target connected

Check probe wiring / driver; keil_doctor lists detected probes.

pyocd pack install needed

e.g. pyocd pack install stm32f103c8 or point pyOCD at the Keil DFP folder.

Roadmap

  • Publish to PyPI and register in the MCP registry

  • MCUBUDDY_TOOLSETS-style domain toggles

  • ELF symbol resolution for set_breakpoint by name

  • RTOS task awareness (FreeRTOS)

  • GitHub Actions CI for unit tests

  • Linux/macOS support notes (Keil is Windows-only; pyOCD parts are cross-platform)

Contributing

Contributions are welcome! Please open an issue first to discuss changes, then submit a PR.

License

MIT — free to use, modify and distribute with attribution.

Available Tools

27 tools
build_cancelC

Request cancellation of a running build.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, but it only says 'Request cancellation'. It does not disclose whether cancellation is asynchronous, whether it is idempotent, what happens if the build already finished, or whether the operation is reversible. The word 'request' adds slight nuance but leaves major behavior unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is an efficient single sentence with no filler; the core action and target are front-loaded. It loses a point only because it is so terse that it omits useful context, though brevity itself is a strength.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-changing tool with no output schema and no annotations, the description is too sparse. It identifies the action and target but omits return behavior, error conditions, and side effects, leaving an agent to call it without knowing what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does not explain build_id's format, origin, or how it relates to build_project, aside from the implicit link to a 'running build'. The parameter name is self-descriptive, but the description adds little over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Request cancellation') and a clearly distinguished resource ('a running build'). This differentiates it from siblings like build_project and build_progress_status, which start or monitor builds rather than cancel them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when cancellation is appropriate, when it is not (e.g., completed or failed builds), or what alternative should be used. It only implies the target must be a running build.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_progress_statusB

Query the live progress of a running build.

ParametersJSON Schema
NameRequiredDescriptionDefault
build_idYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description is the only source of behavioral information. It conveys a read/query intent, but it does not disclose poll/stream behavior, whether it errors for a non-running build, whether it is idempotent, or anything about the returned progress payload. This is minimal disclosure beyond the tool's name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short, front-loaded sentence with no filler or redundancy. Every word contributes to the meaning, which is appropriate for a single-purpose status-query tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one required parameter, no output schema), so the description provides the essential selection cue. However, it leaves out behavioral and return-value details that the absence of annotations and output schema would normally require, making it adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only a string field named 'Build Id' with no description, and the tool description does not explain build_id's format, provenance, or validity conditions. The only semantic contribution is inferring that the build_id must reference a running build, which is insufficient to fully compensate for 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the action ('Query') and the exact resource ('the live progress of a running build'), which cleanly identifies it as a status-read tool. This distinguishes it from sibling actions such as build_project, build_cancel, parse_build_errors, and explain_build_error without needing to inspect the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'of a running build' implies it is meant for checking an active build, but there is no explicit when-to-use instruction or any mention of alternatives. An agent must infer that it should not be used for completed builds, canceled builds, or build diagnostics.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_projectA

Build a Keil project with UV4 -b (or -r rebuild / -c clean).

Args: project: path to .uvprojx (absolute or relative to default_project_dir) target: target name (default: first target in project) timeout_seconds: build timeout (default 120) stream_progress: tail the log for realtime progress (percent/phase) clean: run UV4 -c instead of -b rebuild: run UV4 -r (full rebuild) instead of -b Returns: {status: ok|error|canceled|not_found, returncode, build_log, errors[], summary, progress?}

ParametersJSON Schema
NameRequiredDescriptionDefault
cleanNo
targetNo
projectYes
rebuildNo
stream_progressNo
timeout_secondsNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the transparency burden. It discloses the exact command and flags, the timeout behavior, the progress streaming behavior, and the full return status vocabulary including ok, error, canceled, and not_found. It does not spell out side effects like artifact deletion on clean, but the core execution behavior is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core command, followed by a well-organized Args section and a Returns section. Every sentence adds value, and there is no redundant restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has six parameters and no annotations or output schema, the description is notably complete: it documents all parameters, return values, and key behaviors. It still leaves some context implicit, such as when to use sibling status/cancel/error-parsing tools and detailed error array semantics, but it covers the essential invocation surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does thoroughly. Every parameter is explained: project path resolution, target default, timeout default, stream_progress behavior, and the UV4 flag mappings for clean and rebuild.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Build a Keil project with UV4 -b', making the core action unmistakable. It also distinguishes itself from sibling tools like build_progress_status, build_cancel, and parse_build_errors by focusing on the build action itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied: use this when you want to build, rebuild, or clean a Keil project. However, it does not explicitly state when to prefer build_project over related siblings such as configure_keil_project or discover_keil_projects, nor does it provide any 'when not to use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

configure_keil_projectA

Parse a Keil project: targets, device, pack, groups, source files.

Use before building to pick the right target / confirm the device.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
projectYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing side effects. Despite the tool name 'configure', the description only says 'parse' and does not clarify whether the tool modifies the project, selects an active target, or only reads information. The optional target parameter makes this ambiguity material.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences with no filler. The first sentence front-loads the action and deliverables, and the second gives workflow context, making it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and no parameter documentation, the description is too thin for an agent to invoke the tool confidently. It lists what is parsed but omits the optional target parameter's semantics, possible side effects, and any return-shape guidance beyond a noun list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema description coverage is 0%, and the description does not explain the `project` path format or, more importantly, the meaning and effect of the optional `target` parameter. The phrase 'pick the right target' is an indirect clue but not enough to know whether to pass target, what values are valid, or what behavior it triggers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a concrete action, 'Parse a Keil project', and lists the principal outputs: targets, device, pack, groups, and source files. 'Use before building' positions it against sibling build/discover tools, so an agent can distinguish it from build_project or discover_keil_projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent when to use it: before building, to pick the right target or confirm the device. However, it does not state when not to use it or point to any sibling alternative, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

continue_targetB

Continue the target until the next breakpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
probe_idNodefault

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does convey the core behavior—execution continues and stops at the next breakpoint—but it does not state what happens if no breakpoint is encountered, whether a debug session must already be active, or what side effects occur on target state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, directly relevant sentence with no filler. It is front-loaded with the action and outcome, making it easy to scan and parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the description captures the essential purpose, but it leaves out useful context for an agent navigating a large sibling set: whether a prior connection/halt is required, behavior when no breakpoint is set, and how this differs from probe_resume. These gaps are meaningful given no annotations or output schema are provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 for the undocumented probe_id parameter. It does not mention probe_id at all, though the parameter's name and default value in the schema offer some minimal semantic signal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Continue the target') and the expected outcome ('until the next breakpoint'). It is specific about the affected resource and behavior, though it does not explicitly distinguish itself from the sibling probe_resume beyond the breakpoint qualifier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives like probe_resume or probe_step. The description implies a debugging scenario but provides no exclusions, prerequisites, or conditions for choosing this tool over similar siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_keil_projectsB

Discover *.uvprojx Keil projects under a directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
directoryNo
recursiveNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of behavioral disclosure. It does indicate that this is a non-mutating discovery operation and identifies the file pattern, but it does not clarify key behaviors such as whether recursion is used by default, whether hidden directories are searched, or what a returned result looks like. This is a meaningful gap for a bare tool definition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler, making it easy to scan. It is slightly under-specified relative to the tool's complexity, but as a standalone line it is compact and direct.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and zero parameter descriptions, the description leaves too much important context unstated. An agent calling this tool would not know that the recursive parameter defaults to true, whether results are full paths or relative names, or how failures are reported. For a tool intended to discover projects on disk, more context is needed to invoke it correctly and interpret its output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only vaguely communicates that 'directory' is the search root. It provides no meaningful detail about the 'recursive' parameter, which has an important default of true and directly changes tool behavior. The description adds only minimal semantic value beyond the parameter names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Discover'), a concrete resource pattern ('*.uvprojx Keil projects'), and a clear scope ('under a directory'). This cleanly distinguishes it from sibling tools like build_project, configure_keil_project, and source_search, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when the agent needs to locate Keil project files within a directory, and because the siblings are mostly build/configure/debug operations, the intended context is reasonably inferable. However, it never explicitly says when to choose this over alternatives or when not to use it, so the guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

erase_flashA

Erase the target chip flash (pyocd erase -c). Requires confirm=True.

ParametersJSON Schema
NameRequiredDescriptionDefault
chipNo
confirmNo
probe_idNo
timeout_secondsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral disclosure burden. It clearly discloses that the operation erases chip flash and requires confirmation, which is valuable. It stops short of mentioning irreversibility, impact on existing firmware, or what happens if confirm is false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with the core operation first and the critical confirmation requirement second. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no annotations and no output schema, this is thin. It explains what the tool does but does not cover parameter semantics, operational prerequisites like an active probe connection, or expected outcomes/errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter meaning. It only adds meaning for confirm by stating it must be true; chip, probe_id, and timeout_seconds are left entirely to the schema's defaults and names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Erase'), a clear resource ('target chip flash'), and an exact command equivalence ('pyocd erase -c'). It is immediately distinguishable from sibling tools like flash_firmware and verify_flash.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an important precondition ('Requires confirm=True') and implies this is the erase step in a flashing workflow. However, it does not explicitly say when to use this tool versus flash_firmware, verify_flash, or other sibling operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_build_errorB

Map a Keil/armclang error code to explanation, causes and fixes.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNo
lineNo
messageNo
error_codeYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. 'Map ... to explanation, causes and fixes' conveys a read-only lookup behavior and indicates the output shape, but it does not state how unknown error codes are handled, whether file/line/message affect the result, or what exact response format is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words; it names the input, resource, and output in one pass.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the tool is conceptually simple, the lack of any parameter details beyond error_code, no output schema, and no annotation safety information leaves the agent without enough context to use the optional parameters or know what response to expect. The description is complete only for the minimal error_code-only call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies that error_code is the code to map, but it says nothing about the optional file, line, and message parameters, leaving their role in the mapping unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description has a specific verb ('Map') and resource ('a Keil/armclang error code'), and states the output categories ('explanation, causes and fixes'). It is clearly a lookup/explanation tool rather than a build or debug action, though it does not explicitly name or contrast with the similar-sounding parse_build_errors sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied: when you have a Keil/armclang error code and want an explanation. There is no explicit guidance about when to use this tool instead of parse_build_errors or build tools, and no exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

flash_firmwareA

Flash firmware to the target chip.

Preferred path: UV4 -f (Keil official flash download, uses the project's configured Flash algorithm). Fallback: pyocd load . Requires confirm=True (persistent destructive operation).

Args: project: .uvprojx path (for UV4 -f) — required unless image is given target: target name for UV4 -f image: firmware image (axf/hex/bin) for the pyocd path backend: "uv4" | "pyocd" | "auto" probe_id: pyOCD probe unique id (optional) confirm: MUST be True to actually flash

ParametersJSON Schema
NameRequiredDescriptionDefault
imageNo
targetNo
backendNoauto
confirmNo
projectYes
probe_idNo
timeout_secondsNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral disclosure. It explicitly warns that flashing is a 'persistent destructive operation' and that confirm must be True for the operation to actually occur. This is critical safety information beyond what the schema conveys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the core purpose, and uses a clearly labeled Args section. Every sentence earns its place, and the confirm warning is appropriately emphasized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex with 7 parameters, multiple backends, no annotations, and no output schema. The description covers many important aspects but leaves backend auto selection unspecified, does not explain timeout_seconds, and contains the project-required contradiction. An agent would still need to resolve ambiguities before reliably invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful semantics to most parameters, including project path, target, image formats, backend options, probe_id, and confirm. However, it omits timeout_seconds entirely and, more seriously, claims project is 'required unless image is given,' which contradicts the input schema where project is unconditionally required. This could mislead an agent into an invalid invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'Flash firmware to the target chip.' It distinguishes the tool from siblings like build_project, erase_flash, and verify_flash by focusing on the actual flashing operation. The additional detail about UV4 and pyocd paths reinforces a concrete, unambiguous purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for how to flash: a preferred UV4 path and a pyocd fallback, along with the confirm=True requirement. It does not explicitly mention when to prefer this tool over sibling tools such as erase_flash or verify_flash, but its purpose is self-evident and the internal path guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keil_doctorB

Check the Keil environment: UV4.exe, pyocd, packs, config.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. 'Check' implies a read-only diagnostic action and the listed components make the scope clear, but it does not disclose whether the tool can modify configuration, what output it returns, or what constitutes a healthy environment.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every word adds value: the action, the target, and the specific environment components are all included without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-argument diagnostic tool, the description adequately names the scope of the check. However, with no output schema and no annotations, it omits what the agent should expect as a result or how to interpret the findings, leaving a moderate gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no parameter documentation burden on the description. The schema itself fully covers the empty input contract, and the description correctly focuses on what the tool checks rather than parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Check') and resource ('the Keil environment') and names concrete components: UV4.exe, pyocd, packs, and config. This is clear and distinguishes the tool from build/probe/flash siblings, though it does not explicitly name an alternative tool it differs from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to use this tool versus siblings like keil_version, discover_keil_projects, or build_project. Usage is only implied by the word 'Check', leaving the agent to infer that this is a diagnostic step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

keil_versionA

Return the keil5-mcp server version and available tool count.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the burden of explaining behavior. It explicitly says the tool only returns values, implying a read-only, non-destructive operation. Given the tool has zero parameters and no side effects, the description is sufficiently transparent for what the tool actually does.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that immediately states what the tool returns. There is no filler, and the most important information is front-loaded. It earns its place without any wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter version query with no output schema, the description is complete: it tells the agent exactly what the tool returns. There are no prerequisites, inputs, or complex behaviors to document. Nothing meaningful is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there are no parameter semantics to explain. The input schema is empty and the description correctly does not attempt to describe nonexistent parameters. Baseline 4 applies here because there is nothing for the description to add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: returning the keil5-mcp server version and available tool count. It uses a specific verb and resource, so it is not tautological and is easy to understand. However, it does not explicitly contrast itself with sibling tools, though no sibling tool appears to overlap with this version-info purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is provided for when to use this tool versus alternatives. The intended use is implied by the description—checking the server version and available tool count—but there is no stated context or exclusions. This is adequate for a trivial info-retrieval tool, but not exemplary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_build_errorsA

Parse a UV4 build log into structured errors/warnings (blueprint §7.2).

Args: log_path: path to build log file, OR log_content: raw log text Returns: {errors[], warnings[], summary{success, errors, warnings, code_size, ...}}

ParametersJSON Schema
NameRequiredDescriptionDefault
log_pathNo
log_contentNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral disclosure burden. It signals a read-only transformation by saying 'Parse', and it discloses both supported input modes and the shape of the returned object. It does not cover edge cases like both arguments being supplied or neither being supplied, but these are parameter-level concerns rather than hidden behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-organized: a one-line purpose statement followed by Args and Returns sections. Every sentence adds value, and there is no redundant restatement of the input schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity parser with no output schema and no annotations, the description is largely complete: it specifies the two input modes, the overall return structure, and the key summary fields. The trailing '...' leaves some return details unspecified, but this does not prevent an agent from selecting or invoking the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 explains that log_path is a file path and log_content is raw log text, and it uses 'OR' to indicate that they are alternative sources. This is meaningful semantic guidance beyond the bare schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Parse a UV4 build log'. It clearly states the output is 'structured errors/warnings', and the included return shape distinguishes this from sibling tools like build_project or explain_build_error. The blueprint reference adds useful specification context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage context: invoke this when a UV4 build log needs to be turned into structured error/warning data. It does not explicitly name alternatives or exclusions, but the unique parsing role among the siblings makes the intended usage reasonably unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probe_connectC

Connect to a debug probe via pyOCD (auto-detect or by unique id).

ParametersJSON Schema
NameRequiredDescriptionDefault
chipNo
probe_idNodefault

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of explaining behavioral side effects. It reveals that connection can be auto-detected or selected by ID, but it does not disclose whether an existing connection is replaced, whether a debug session is established, how failures are handled, or what state changes persist after the call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It is concise and easy to parse, though the brevity contributes to missing parameter and lifecycle details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no annotations, no output schema, and incomplete parameter documentation. The description is enough to understand the basic action, but it does not explain the role of chip, the expected probe connection lifecycle, or what happens after a successful connect, leaving too much for the agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only clarifies probe_id in spirit ('auto-detect or by unique id'), but it gives no meaning for the 'chip' parameter, which is undocumented and has a confusing default of an empty string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Connect to a debug probe') and method ('via pyOCD'), and it adds selection modes ('auto-detect or by unique id'). It is clearly distinguishable from sibling tools like probe_disconnect, though it does not explicitly state its relationship to the chip parameter or describe what 'connected' means for downstream probe operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool should be used before other probe operations, but it does not explicitly say when to use it, when not to use it, or how it relates to alternatives like probe_disconnect or flash_firmware. An agent must infer the usage order from the tool name and sibling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probe_disconnectA

Disconnect the probe (releases it for UV4 -f flash path).

ParametersJSON Schema
NameRequiredDescriptionDefault
probe_idNodefault

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It does reveal a key trait beyond the name: the disconnect frees the probe for flashing. But it does not disclose side effects, whether an active debug session is terminated, or whether reconnection is required afterward.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence front-loads the action and immediately adds the key purpose in parentheses. There is no filler, no repetition of schema details, and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description is adequately sized, but it leaves gaps: probe_id is undocumented, prerequisites and consequences of disconnecting are not stated, and alternative tool routing is not provided. It is minimally complete for a simple tool, but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions probe_id, so it adds no meaning beyond the parameter name and its default value. The single optional parameter is simple, but the description does not compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource, 'Disconnect the probe', and adds a concrete purpose: 'releases it for UV4 -f flash path'. It clearly distinguishes this tool from siblings like probe_connect, probe_halt, and probe_resume.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical gives useful context that the tool is used to free the probe for the UV4 -f flash path, implying a before-flash use case. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention prerequisites such as the probe being connected or halted.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probe_haltC

Halt the target.

ParametersJSON Schema
NameRequiredDescriptionDefault
probe_idNodefault

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It states the halting action but does not disclose prerequisites, side effects such as pausing program execution, whether the halt is reversible, or any interaction with an active debug session.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short with no filler, and the core action is front-loaded. However, it is so terse that it verges on under-specification, leaving context and parameter semantics absent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a debug control tool with no annotations, no output schema, and a parameter that is not explained, the description is incomplete. An agent does not know prerequisites, what state change occurs, or how this relates to sibling tools like probe_connect, probe_resume, and continue_target.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, and the description does not mention the probe_id parameter at all. The parameter is optional and has a default value, and its name is self-explanatory, so the gap is not severe, but the description still fails to clarify how or when probe_id should be set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear imperative verb and object: 'Halt the target.' This is a specific action and can be distinguished from siblings like probe_resume and probe_step. However, 'target' is somewhat vague and the description does not explicitly identify it as the debug target or connected probe.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use probe_halt versus alternative tools. The description does not mention that the target must be connected, that this is typically used during a debug session, or that probe_resume/continue_target represent the inverse operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probe_read_memoryC

Read memory at address (bytes).

ParametersJSON Schema
NameRequiredDescriptionDefault
lengthNo
addressYes
probe_idNodefault

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. It only states that memory is read, but does not disclose whether the probe must be connected or halted, what happens on an invalid address, or what the response looks like. The read-only nature is implied but richer behavioral context is absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short and front-loaded, with no wasted words. However, the phrase 'at address (bytes)' is slightly ambiguous and the brevity omits important context that is penalized in other dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three parameters, no output schema, and no annotations, this description is not complete enough for an agent to invoke it correctly in all situations. The agent may guess that address is required, but length and probe_id semantics, probe session requirements, and return behavior remain unclear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only clarifies the address concept. The 'bytes' hint weakly covers the length parameter's unit, but probe_id is entirely unexplained, and there is no guidance on address format or length limits. The description does not compensate for the schema's lack of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Read memory at address'. It is immediately distinct from sibling tools like probe_read_registers, which read registers rather than memory. The parenthetical '(bytes)' also conveys the unit context, making the tool's core action unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as probe_read_registers, source_read, or read_rtt_log. It does not state prerequisites like needing an active probe connection or halted target, nor does it mention any exclusions or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probe_read_registersB

Read core registers (r0-r15, xpsr, sp, lr, pc).

ParametersJSON Schema
NameRequiredDescriptionDefault
probe_idNodefault

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description bears the full behavioral burden. It clearly signals a read-only operation and enumerates the registers, but it does not disclose whether the target must be halted/connected or what output format is returned. This is acceptable 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the action and followed by a compact register list. No filler or repeated schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the register list is complete, but with no output schema and no annotations, the description omits return format and preconditions (probe connection, target state). It is adequate for choosing the tool but not fully complete for invoking it in a debugger workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description adds no meaning for the lone probe_id parameter. The parameter name and default are self-explanatory to a degree, but the description should have clarified which probe is used and what the 'default' value means; it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a concrete verb ('Read') and resource ('core registers') and enumerates the exact register set, making the tool's purpose immediately specific. This differentiates it from sibling tools like probe_read_memory, which target memory rather than registers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to choose this tool over alternatives, nor does it mention preconditions such as an active probe connection or halted core. The only usage signal is the verb 'Read', which is implied by the purpose rather than explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probe_resumeC

Resume the target.

ParametersJSON Schema
NameRequiredDescriptionDefault
probe_idNodefault

TDQS

C2.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries full responsibility for behavioral disclosure. It only names the action without explaining effects on the target, prerequisites such as an established probe connection, or whether execution resumes from the current program counter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is undeniably short, but it is under-specified rather than usefully concise. Three words provide almost no information beyond the tool name and leave important operational context absent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a debugger control operation with no output schema and no annotations, the description is incomplete. It does not clarify the expected state before resuming, what the return value is, or when this should be preferred over related sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 0%, and the description does not mention probe_id at all. The single parameter's meaning, optionality, and default behavior are left completely unexplained, so an agent gets no helpful semantic information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a verb and an object ('Resume the target'), so it conveys the basic operation. However, 'the target' is undefined, and the sibling tool 'continue_target' appears to describe the same action, so the description does not distinguish this tool from a likely synonym.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool, whether it should follow a halt, or how it relates to alternatives like continue_target or probe_step. An agent must infer usage entirely from the tool's name and sibling context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

probe_stepC

Single-step the target.

ParametersJSON Schema
NameRequiredDescriptionDefault
probe_idNodefault

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden, but it only names the core action. It does not state preconditions (target should be halted, probe must be connected), side effects (program counter advances by one instruction), or failure behavior. The description does not contradict any annotations because none exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three words with no fluff, front-loaded and easy to parse. However, the brevity borders on under-specification: it omits behavioral context an agent needs, so it reads more like a truncated label than a deliberately sufficient description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a state-mutating debug operation with no annotations and no output schema, this is incomplete. Missing pieces include whether the target must be halted before stepping, whether the probe must already be connected, and what the call returns or how it fails. Given the sibling set (probe_halt, probe_resume, continue_target), sequencing guidance would materially improve correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions probe_id, so an agent cannot tell what the parameter selects or when overriding the default 'default' would be appropriate. The single optional parameter is simple, lowering the burden, but zero semantic information is contributed by the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('single-step') and a resource ('the target'), making the operation clear: advance execution by one instruction. It is conceptually distinguishable from siblings like continue_target and probe_resume by the granularity of the operation, though it never names or contrasts them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. There is nothing about requiring a connected probe or a halted target first, no mention that continue_target would be the choice for free-running execution, and no sequencing advice relative to probe_halt. Usage is only weakly implied by the operation name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_rtt_logA

Read recent SEGGER RTT log output from the target (if RTT is running).

ParametersJSON Schema
NameRequiredDescriptionDefault
probe_idNodefault
timeout_secondsNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the behavioral disclosure burden. It does note that only 'recent' log output is returned and that the tool depends on RTT running, which is useful. However, it does not explain what happens when RTT is not running, whether it blocks until output is available, how timeout_seconds affects behavior, or what the output looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no unnecessary words. It communicates the core action, the target resource, and an important precondition without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two optional parameters, the description covers the basic purpose and condition, but gaps remain: no output format, no behavior when RTT is unavailable, and no parameter semantics. Since there are no annotations or output schema, the description should provide a bit more context to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no guidance about probe_id or timeout_seconds. The parameter names and defaults are self-explanatory to some degree, but the description does not compensate for the lack of schema descriptions or clarify units, semantics, or edge cases.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read'), a specific resource ('SEGGER RTT log output from the target'), and a scope condition ('if RTT is running'). This clearly distinguishes it from sibling tools such as source_read, probe_read_memory, and probe_read_registers, which read different kinds of data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear applicability condition: use this when you need recent SEGGER RTT log output and RTT is running. It does not explicitly discuss alternatives or when not to use it, but the condition and resource make the intended context reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_breakpointC

Set a hardware breakpoint by symbol name or address.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolNo
addressNo
probe_idNodefault

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states that a hardware breakpoint is set, but it doesn't disclose whether the target must be halted, whether the breakpoint replaces an existing one, how many can be set, whether probe_id affects the target, or what happens on invalid symbols/addresses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with no filler. It front-loads the action and then specifies the targeting mechanisms. However, brevity comes at the cost of omitting useful behavioral and usage context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, no annotations, and three parameters with 0% schema coverage, the description is too thin. It does not mention prerequisites, return/confirmation behavior, error conditions, or how this interacts with sibling debug control tools, leaving an agent under-informed for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description must compensate. It does clarify that 'symbol' and 'address' are alternative ways to specify the breakpoint location, but it leaves 'probe_id' unexplained and doesn't specify whether symbol and address are mutually exclusive or how defaults behave.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Set') with a clear resource ('hardware breakpoint') and states the two selection mechanisms ('by symbol name or address'). It is immediately understandable and clearly distinct from the listed siblings, none of which manage breakpoints, though it doesn't explicitly differentiate itself from any alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus stepping, resuming, or other debug control tools. The description implies the breakpoint is set before continuing execution, but it never states this or mentions that a debug session/probe must be active.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

source_editA

Edit a source file; original is automatically backed up to .keil-mcp-backups/.

Args: file: path to source file start_line / end_line: 1-based inclusive line range to replace new_content: replacement text (can be multi-line)

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
end_lineYes
start_lineYes
new_contentYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses an important behavioral trait: the original file is automatically backed up to .keil-mcp-backups/. This provides useful safety context for a mutating operation. However, with no annotations present, it does not cover other behaviors such as whether the file must already exist, what happens with invalid line ranges, or what the tool returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose and backup behavior, followed by a clear parameter list. Every sentence provides useful information with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple four-parameter edit tool, the description covers purpose, backup safety, and parameter semantics adequately. It lacks explicit mention of return values, error cases, or prerequisites, but the tool is straightforward enough that these are not critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully compensates by explaining every parameter: file path, 1-based inclusive line range for start and end lines, and multi-line replacement text. This adds essential meaning beyond the bare schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Edit a source file') and the target resource, making it obvious this tool modifies files rather than reading or searching them. It distinguishes itself from sibling tools like source_read and source_search by the verb and the implied write operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied by the description: when a source file needs modification, this tool is appropriate. However, there is no explicit guidance about when not to use it, nor are alternatives such as source_read or source_search mentioned for comparison.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

source_readA

Read a source file with line numbers (auto backup not needed; read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
end_lineNo
start_lineNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden and does disclose key behavioral traits: it is read-only and does not require an auto backup. This gives the agent important safety context beyond a mere action. It does not mention error handling or return format, but for a read tool these are minor gaps, so a 4 is warranted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one compact sentence with a parenthetical behavioral note. Every word adds value: the verb/resource pair is front-loaded, and the read-only/backup note provides essential safety information without clutter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This tool has no output schema, no annotations, and 0% parameter schema coverage, so the description must carry more weight. It omits behavior for start_line/end_line (inclusive bounds, default end behavior, interaction with null), error conditions for missing files, and the exact return format beyond 'line numbers.' These are notable gaps for an agent to invoke the tool correctly across use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the three parameters. While 'source file' maps to the file parameter, the description does not explicitly explain start_line and end_line semantics at all; 'with line numbers' only hints at output formatting, not range selection. The agent must rely on naming conventions, which is insufficient for this coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Read a source file with line numbers.' The verb 'Read' clearly distinguishes it from sibling tools like source_edit and source_search, and the mention of line numbers adds specificity without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical 'auto backup not needed; read-only' provides clear context for when to use this tool over a mutating sibling like source_edit, implying safe, non-destructive reading. However, it does not explicitly name alternatives or stipulate when not to use them, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uv4_debug_ddeC

Read the output of a UV4 -d debug session (session output channel).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description has full responsibility for behavioral disclosure. 'Read' implies a safe read operation, but the description does not explain what happens when the session does not exist, whether the tool returns or streams output, how the session output channel is scoped, or whether any side effects occur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentenced with no wasted words and front-loads the primary action 'Read'. However, it is too terse to be fully useful, trading necessary operational context for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations, no output schema, and only 0% schema coverage of its single parameter, the description is undersized. It leaves key questions about session lifecycle, output format, and relationship to sibling debug tools unanswered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no detail beyond the schema's 'session_id' property name. The description does not explain what session_id refers to, how to obtain it, or what format it should take, so an agent cannot reliably construct a correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verband resource: it reads the output of a UV4 -d debug session via the session output channel. This is reasonably distinct from the sibling tools, especially read_rtt_log, but it does not explicitly differentiate itself from uv4_debug_session or clarify what 'UV4 -d' means.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage context is given. The description does not state when to use this tool instead of uv4_debug_session, read_rtt_log, or probe read operations, nor does it mention prerequisites such as needing an active debug session.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

uv4_debug_sessionA

Run an official Keil debug session via UV4 -d + a generated .ini script.

The debugger runs headless: sets a breakpoint, resets, runs, optionally steps, and prints variable values. Output is captured from the session log.

Args: project: path to .uvprojx target: target name (default first target) ini_path: custom .ini script path (overrides generated script) reset: reset target before running breakpoint: symbol/line to break at ("" = none) steps: extra single-step count after hitting the breakpoint dump_vars: variable names to print (e.g. ["i", "adc_value"]) timeout_seconds: session timeout

ParametersJSON Schema
NameRequiredDescriptionDefault
resetNo
stepsNo
targetNo
projectYes
ini_pathNo
dump_varsNo
breakpointNomain
timeout_secondsNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations available, the description carries the full transparency burden and does a solid job: it discloses headless execution, the breakpoint/reset/run/step sequence, variable dumping, log capture, and timeout behavior. It does not mention prerequisites such as a connected probe or an initialized debug session, nor does it describe side effects on target state, which prevents a perfect score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and economical: a one-sentence high-level purpose, a brief behavior summary, then a scannable args list. Every line earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with no output schema and no annotations, the description covers the workflow, parameters, and key behaviors thoroughly. The main gap is the lack of detail about the return value or output format beyond saying output is captured from the session log, plus missing prerequisites and failure behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does thoroughly: all eight parameters are individually documented with defaults, override behavior, and examples. The parameter explanations add substantial meaning beyond the bare JSON schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: run an official Keil debug session headlessly via UV4 -d with a generated .ini script, and it outlines the debug sequence. However, it does not explicitly differentiate itself from sibling tools like uv4_debug_dde or the individual probe/debug commands, so the distinction is mostly carried by the tool name rather than the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how the tool behaves but provides no explicit guidance about when to choose it over uv4_debug_dde, set_breakpoint, probe_step, or other debug-related siblings. There are no stated conditions, exclusions, or alternatives, so an agent must infer usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_flashB

Verify firmware on chip against an image (pyocd verify).

ParametersJSON Schema
NameRequiredDescriptionDefault
imageYes
probe_idNo
timeout_secondsNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of explaining behavior. It only restates that the tool verifies firmware against an image; it does not disclose whether the operation is read-only, whether a probe connection is required, how mismatches are reported, or what side effects might occur.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. The core purpose is stated first, and the 'pyocd verify' reference adds useful context without bloating the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With three parameters, no output schema, and no annotations, the description is too thin. It does not explain return values, failure behavior, timeout semantics, prerequisites like probe connection, or how the image file should be referenced, leaving critical details to the agent's assumptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description only adds minimal meaning to the 'image' parameter by saying verification is done against it. It provides no clarification for 'probe_id' or 'timeout_seconds', such as how probe selection works or what the timeout controls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb, 'Verify', names the resource ('firmware on chip'), and specifies the comparison target ('an image'). It clearly separates this tool from siblings like flash_firmware and erase_flash, and the parenthetical 'pyocd verify' reinforces the exact operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The tool is clearly meant to confirm that flashed firmware matches an image, so usage is implied, but there is no explicit statement about when to use it versus alternatives like flash_firmware or when not to use it. The description leaves the agent to infer the appropriate workflow context.

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.

  1. 27 tool updatesv0.1.0
    • First observedbuild_cancel
    • First observedbuild_progress_status
    • First observedbuild_project
    • First observedconfigure_keil_project
    • First observedcontinue_target
    • First observeddiscover_keil_projects
    • First observederase_flash
    • First observedexplain_build_error
    • First observedflash_firmware
    • First observedkeil_doctor
    • First observedkeil_version
    • First observedparse_build_errors
    • First observedprobe_connect
    • First observedprobe_disconnect
    • First observedprobe_halt
    • First observedprobe_read_memory
    • First observedprobe_read_registers
    • First observedprobe_resume
    • First observedprobe_step
    • First observedread_rtt_log
    • First observedset_breakpoint
    • First observedsource_edit
    • First observedsource_read
    • First observedsource_search
    • First observeduv4_debug_dde
    • First observeduv4_debug_session
    • First observedverify_flash

TDQS

C2.9/5.0

Scored across 27 tools

Disambiguation4/5

Most tools target clearly distinct operations (build, source, flash, probe control), and the descriptions help separate them. Minor ambiguity exists between 'probe_resume' and 'continue_target' and between 'parse_build_errors' and 'explain_build_error', but these are usable with the provided docs.

Naming Consistency3/5

The majority follow a verb_noun pattern like 'build_project', 'source_edit', and 'probe_halt', but there are notable deviations such as 'uv4_debug_dde', 'keil_doctor', and 'build_progress_status'. Names are generally readable but the mixed styles prevent a higher score.

Tool Count2/5

With 27 tools, the server exceeds the 25+ threshold where tool count becomes heavy for an agent to navigate. The tools cover many subdomains, but several low-level probe primitives and debug-session helpers could be consolidated or omitted.

Completeness3/5

The server covers build, source editing, flashing, and basic debugging well. However, obvious lifecycle gaps exist: breakpoints can be set but not listed/deleted, memory/registers are read-only, and there is no standalone reset target operation or project creation/configuration update capability.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables AI assistants to interact with STM32 development boards via J-Link debugger using RTT communication, supporting connection, logging, memory operations, and firmware flashing through natural language.
    12
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude Code to build, flash, and communicate with STM32 hardware over SWD and serial, including multi-board management, live memory monitoring, and hardware sequences.
    25
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to flash firmware, program memory, modify option bytes, erase chips, reset boards, and capture SWO printf traces for STM32 microcontrollers via STM32CubeCLT.
    12
    -