Skip to main content
Glama
CrossPad

crosspad-mcp-server

Official
by CrossPad

crosspad-mcp

npm M8ven Live Monitored CI node license: MIT

Talk to your CrossPad. Let Claude do the toolchain.

crosspad-mcp is an MCP server that teaches Claude Code (or any MCP client) how to develop for the CrossPad pad controller. You say "flash the new build and check that it boots"; it runs the ESP-IDF build, asks you to confirm the flash, opens the console, runs the smoke scenario and tells you what happened — with the hardware traps already built in, so you don't have to remember which serial port reboots the board when you open it.

What you can do with it

Every card is a real prompt. The tools named underneath are what runs — you never have to call them yourself.

Say this…

…and this happens

"Build the firmware and flash it over OTA."

crosspad_build platform=idf streams the build, crosspad_flash transport=ota asks for confirmation, then streams the upload. New app directories are detected and the fullclean is done for you.

"Show me what's on the simulator screen."

crosspad_run launches the PC sim, crosspad_screenshot returns the LCD as an image Claude can actually look at. Then "press pad 5", "turn the encoder left twice"crosspad_input.

"Play a drum pattern on the pads and record what comes out."

crosspad_stimulus hits the pads with real timings, crosspad_capture records the board through its own USB-audio endpoint, crosspad_analyze gives a verdict (onsets, clicks, silence, velocity curve).

"Why did it crash?"

crosspad_diagnose_crash — reset reason, registers, backtrace decoded against the ELF that is actually flashed, heap after restart. One call.

"Watch the battery charger state machine while I plug the cable in."

crosspad_trace polls STM32 variables live over ST-Link without halting the core, and plots them.

"Install the sampler app and rebuild."

crosspad_apps_install app_name=sampler adds the submodule from the crosspad-apps registry, then a clean build.

"Where is IPadLogicHandler implemented?"

crosspad_interface_implementations across every repo of the ecosystem, or crosspad_symbol for clangd-precise definitions and call hierarchies.

"Is my board even connected?"

crosspad_devices and crosspad_doctor — which USB mode it is in, which ports belong to it, what is missing on the host, and how to fix each thing.

Related MCP server: devctl-mcp

Quick start

claude mcp add crosspad -- npx -y crosspad-mcp-server

Restart Claude Code, then ask:

is my CrossPad connected, and is the toolchain set up?

That runs crosspad_doctor. Every failed check comes with a fix. The server assumes your repos live side by side under ~/GIT/ — if they don't, set the paths once.

Installing the bundled crosspad skill gives Claude the ecosystem map, the per-role guides and the hardware traps up front:

/plugin marketplace add CrossPad/crosspad-mcp
/plugin install crosspad@crosspad

How it is organised

Only the core toolset is visible when the server starts, so the tool list stays small. Claude enables the others as the conversation needs them — or you start the server with --toolsets device,sim.

flowchart LR
    core["core · always on<br/>devices · doctor · snapshot<br/>build · flash · repo status · tasks"]
    sim["sim<br/>PC simulator: run, screenshot,<br/>input, MIDI, settings, tests"]
    device["device<br/>the board over USB: console,<br/>CDC verbs, UI driving, USB mode"]
    hil["hil<br/>scenarios, pad stimulus,<br/>audio capture + analysis, BLE"]
    code["code<br/>symbols, interfaces,<br/>docs search"]
    git["git<br/>submodule drift,<br/>update, commit"]
    apps["apps<br/>crosspad-apps registry"]
    trace["trace<br/>SWD live variables"]
    core --> sim & device & code & git & apps
    device --> hil
    core --> trace

Anything that writes to a device or your host is tiered. Flashing, DFU and SWD writes come back as confirmation required first; --read-only removes every writing tool from the list entirely. Long operations (builds, flashes, scenarios) run as tasks you can check on, wait for or cancel.

Who is it for

Going deeper

  • Usage reference — every install path, every tool and toolset, resources and prompts, configuration, HTTP transport, the v10 migration table.

  • FAQ — the questions that cost people an afternoon.

  • CHANGELOG

License

MIT — part of the CrossPad project.

Available Tools

8 tools
crosspad_buildA
Destructive

[PC | ESP | STM HW] Build CrossPad for the given platform. • platform='pc' → CMake + Ninja host simulator. PREFER THIS over cmake --build build (picks right MSVC env on Windows, parses errors/warnings, streams progress). • platform='idf' → idf.py build for ESP32-S3 firmware. PREFER THIS over raw idf.py build (sources IDF env, auto-fullcleans when new apps detected, parses errors/warnings). • platform='stm' → CMake + Ninja + arm-none-eabi for STM32G0 firmware (CrossPad r20). Uses CMakePresets (Debug/Release); output is build//CrossPad_STM32_r20.elf. Mode×platform compatibility: • incremental → all (default) • clean → all (wipes build dir, then builds) • reconfigure → PC & STM (re-runs cmake without wiping cache) • fullclean → IDF only (runs idf.py fullclean, then builds)

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoBuild mode. Compatibility: incremental & clean = all platforms; reconfigure = PC & STM; fullclean = IDF only. Pick incremental for normal iteration; clean if you suspect stale artifacts; fullclean (IDF) after adding new apps; reconfigure (PC/STM) after editing CMakeLists/presets.incremental
platformYesTarget platform: 'pc' = host simulator, 'idf' = ESP32-S3 firmware, 'stm' = STM32G0 firmware (CrossPad r20).
build_typeNoCMake build type — PC & STM (ignored for IDF; ESP32 build type comes from sdkconfig). STM maps to the Debug/Release preset (RelWithDebInfo→Release). Only honored on mode=clean|reconfigure (incremental keeps existing cache).Debug

Output Schema

ParametersJSON Schema
NameRequiredDescription
tailNo
errorNo
errorsNo
successYes
warningsNo
output_pathNo
warnings_countNo
duration_secondsNo
auto_reconfiguredNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations declare destructiveHint=true, and the description reinforces this with specific behavior: clean 'wipes build dir', fullclean 'runs idf.py fullclean', and notes auto-fullcleans when new apps detected. It discloses build-type restrictions (build_type ignored for IDF, only honored on clean|reconfigure). The description goes beyond annotations by explaining exactly what gets destroyed and when, though it doesn't mention whether the destructive behavior is reversible or if there are additional side effects.

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

Conciseness5/5

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

The description is well-structured with platform bullets, a clear mode×platform compatibility matrix, and front-loaded purpose in the opening line. Every sentence earns its place — platform mappings, preference rationale, mode compatibility, and output conventions are all packed efficiently without padding. Uses bold for emphasis on precedence ('PREFFER THIS') and clear visual structure with bullets.

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?

This is a complex tool (3 platforms × 4 modes × build_type interactions) with an output schema. The description fully covers platform behavior, mode compatibility, the tricky build_type/IDF/sdkconfig nuance, CMakePresets for STM, and output artifact locations. With the output schema providing return structure and annotations covering destructiveness, the description is complete for agent decision-making and invocation.

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?

Schema coverage is 100%, but the description still adds meaningful value. It explains the mode compatibility matrix in the body, provides the output artifact path for STM, documents that build_type maps RelWithDebInfo→Release for STM, and explains IDF ignores build_type (comes from sdkconfig). The description supplements rather than duplicates the schema's parameter descriptions.

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 tool builds CrossPad for a given platform with specific verbs per platform ('CMake + Ninja host simulator', 'idf.py build for ESP32-S3', 'CMake + Ninja + arm-none-eabi for STM32G0'). It specifies the exact output artifact (build/<preset>/CrossPad_STM32_r20.elf), and the platform×mode compatibility matrix distinguishes it from siblings like crosspad_flash, crosspad_run, and crosspad_check.

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

Usage Guidelines5/5

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

The description gives explicit PREFER THIS guidance over raw commands (cmake --build, idf.py build) with justification (picks MSVC env, sources IDF env, parses errors). The mode×platform compatibility matrix explicitly states which modes work on which platforms, and mode usage rationale is given ('fullclean after adding new apps, reconfigure after editing CMakeLists/presets'). This is exemplary usage guidance.

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

crosspad_devicesA
Read-onlyIdempotent

[ESP HW] List connected CrossPads as seen by the crosspad-hil daemon: id (dev_xxxx, stable per USB serial), usb_mode (default|audio|bootloader|unknown), and every port role (cdc, console=STM VCP, esp_midi, stm_midi, uac2, bootloader). kind keeps the v9 meaning: 'esp-native' (rev <2.0) or 'stm-bridge' (rev 2.0, STM32 composite CDC+MIDI). selected is set when exactly one device would be chosen implicitly by every other tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
tsNo
errorNo
detailsNo
devicesNo
successYes
selectedNo
crosspad_countNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description agrees with all of them. It adds meaningful behavioral context beyond annotations: data source (crosspad-hil daemon), stable ID semantics, usb_mode values, port role meanings, the v9 `kind` compatibility meaning, and the implicit device selection rule. There is no contradiction.

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 dense but every sentence adds value: it states the purpose, defines the output fields, explains value ranges, and clarifies the special `selected` and `kind` semantics. There is no filler or repetition of schema contents.

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?

Given that an output schema exists and there are no parameters, the description sufficiently covers invocation semantics, output field interpretation, and device-selection behavior. It provides all context an agent needs to use this tool correctly and interpret its results.

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 and the input schema is empty, so there is no parameter burden for the description to carry. The baseline for a zero-parameter tool is 4, and the description correctly focuses on output semantics rather than inventing parameter information.

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: 'List connected CrossPads as seen by the crosspad-hil daemon.' It enumerates the returned fields and possible values, making the tool's function unmistakable. This clearly distinguishes it from sibling build/flash/repo tools that perform actions rather than listing devices.

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 explains that `selected` is set when exactly one device would be chosen implicitly by every other tool, which tells the agent this tool is the way to discover which device other crosspad commands will target. It does not explicitly say 'use this before crosspad_flash' or name alternatives, but the guidance is clear enough for device-selection decisions.

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

crosspad_doctorA
Read-onlyIdempotent

Environment doctor. Host checks: hil_python interpreter, crosspad-hil version vs the one this server needs, platform-idf root, ESP-IDF env, crosspad-pc root, per-rev build dirs and firmware age, simulator binary staleness. Daemon checks merged in: udev/dialout, port locks (holder PID + purpose), rtmidi/ALSA/sounddevice visibility. Also reports the daemon as a process: uptime, ops served, open handles and the OS resources it holds (ALSA sequencer clients, fds). Each check is {name, ok, detail, fix}; ok is false when any check fails. Run this first when a device tool errors. action=restart_daemon restarts the crosspad-hil daemon — how a newly installed crosspad-hil or a new scenario becomes visible without restarting this server.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNocheck: run every check; restart_daemon: stop and start the crosspad-hil daemon again — the way to pick up a newly installed crosspad-hil or a new scenario, and the repair when it has accumulated OS resources. Open console/cdc handles do not survive itcheck
confirm_tokenNoEcho the token from a confirmation_required reply to proceed

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNo
hintNo
toolNo
errorNo
actionNo
checksNo
daemonNo
detailsNo
successYes
resultTypeNo
confirmationNo
dropped_handlesNo

TDQS

A3.6/5.0
Behavior1/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, but the description discloses `action=restart_daemon` that stops and starts the daemon and, per the schema, drops open console/cdc handles. That is state-changing and handle-destroying behavior, directly contradicting the read-only/destructive-free annotations. Per the rubric an annotation contradiction scores 1.

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 dense but purposeful: it leads with the role, organizes host vs daemon checks, specifies output shape, and ends with actionable usage guidance. It could be better structured with bullets, but every sentence carries useful information with no filler.

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 tool this complex, the description covers the check categories, the `{name, ok, detail, fix}` result shape, the all-or-nothing ok semantics, the trigger for using the tool, and the restart action's consequences. The rich output schema and 100% parameter scchema coverage fill any remaining need.

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?

Input schema covers both parameters 100%: `action` has an enum with detailed semantics and `confirm_token` is explained as echoing the token from a confirmation_required reply. The tool description reinforces `restart_daemon` but adds no parameter meaning beyond the schema, so baseline 3 is appropriate.

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 identifies crosspad_doctor as an environment diagnostic: it enumerates host checks (hil interpreter, versions, ESP-IDF, platform-idf root, build dirs, firmware age, simulator), daemon checks (udev/dialout, port locks, audio visibility), and daemon process reporting. 'Run this first when a device tool errors' also gives it a distinct role next to build/flash/devices siblings.

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 explicitly says to run this first when a device tool errors, and explains exactly when action=restart_dae `restart_daemon` is appropriate: after installing crosspad-hil or adding a scenario, or when the daemon accumulated OS resources. It lacks an explicit when-not or named alternatives, so not a 5.

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

crosspad_flashA
Destructive

[ESP HW | STM HW] Flash firmware. Danger tier: it always runs a preflight first, always returns that preflight (refusal included), and needs a confirmation before writing anything. Preflight reports: the device's USB mode, which role the target port plays (the STM32 bridge console is refused as a flash target), the binary's own version string, whether it is older than the newest file under main/ or components/, and whether the build's board revision matches the device's — a mismatch is a blocker, because the revisions differ in pinout and the wrong image looks like dead hardware. target='esp': transport='ota' streams over USB CDC with the device running (no bootloader mode); transport='uart' runs idf.py flash and needs download mode. wait_boot=true then opens the console and returns a BootResult. target='stm': method='swd' (ST-Link) or 'dfu' (system bootloader, hold pad 1 at boot). The flash runs as a job: wait_seconds=0 (default) returns a task handle for crosspad_task; wait_seconds>0 inlines the final status. dry_run=true stops after the preflight. force=true overrides every blocker except the port-role refusal.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoESP only. Serial port to flash. Omit to let the daemon choose. The STM32 bridge console port is refused — it carries logs, not the flash.
forceNoProceed despite preflight blockers (stale build, board-revision mismatch, missing device). The port-role refusal is never overridden.
deviceNoESP only. Device id (dev_xxxx) or one of its port paths; omit when exactly one CrossPad is connected.
methodNoSTM only. 'swd' = ST-Link; 'dfu' = the STM32 system bootloader (hold pad 1 at boot).
targetNo'esp' = ESP32-S3 application firmware (transport uart|ota); 'stm' = STM32G0 bridge firmware via STM32_Programmer_CLI (method swd|dfu).esp
dry_runNoRun the preflight and stop: no confirmation token is minted and nothing is written.
build_dirNoESP only. Build directory holding the binary and its sdkconfig (default '<idf-root>/build'; per-revision dirs are build_v1 / build_v2).
transportNoESP only. 'ota' streams the binary over USB CDC with the device running (no bootloader mode); 'uart' runs idf.py flash and needs download mode.
wait_bootNoESP only. After flashing, open the console and wait for the boot markers; the job result carries a BootResult {complete, missing, fatal, errors, bootloops, seconds}. Default false.
build_typeNoSTM only. Picks the build/<preset> dir for the default binary. Default Debug.
delta_baseNoESP OTA only. Previously flashed binary to diff against — sends a delta instead of the whole image.
wait_secondsNo0 (default) returns the task handle immediately — poll it with crosspad_task. >0 waits that long and inlines the task status; a timeout is not an error, the job keeps running.
confirm_tokenNoToken from a previous confirmation_required result. Re-issue the identical call with it to proceed.
firmware_pathNoCustom binary. ESP default '<build_dir>/CrossPad.bin'; STM default '<stm-root>/build/<preset>/CrossPad_STM32_r20.bin'.
boot_timeout_sNowait_boot: how long to wait for a complete boot (default 45, the firmware's own boot budget).

Output Schema

ParametersJSON Schema
NameRequiredDescription
tsNo
hintNo
taskNo
toolNo
errorNo
deviceNo
statusNo
targetNo
detailsNo
dry_runNo
successYes
preflightNo
transportNo
resultTypeNo
confirmationNo
firmware_pathNo

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses far beyond the annotations: a preflight always runs and is always returned (refusal included), confirmation is mandatory before any write, board-revision mismatch is a hard blocker because the wrong image 'looks like dead hardware', and the port-role refusal is never overridable. It also reveals job semantics (wait_seconds=0 returns a task handle; a timeout is not an error) and wait_boot returning a BootResult, none of which the annotations convey.

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 dense but logically ordered: danger tier first, then preflight details, then ESP specifics, then STM specifics, then job semantics — with the safety-critical 'needs a confirmation before writing anything' front-loaded. It runs long, but with 15 parameters and two hardware targets every sentence earns its place; light structural breaks would make it exemplary.

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 the most complex and dangerous tool in the set (15 params, destructiveHint=true, no required params), the description covers the complete lifecycle: preflight, confirmation, per-target transports and methods, blocker override semantics, async job polling, and boot verification. The presence of an output schema means return values need no further elaboration. Nothing an agent needs to safely invoke this tool 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?

Schema coverage is 100%, so the baseline is 3. The description genuinely adds cross-parameter meaning: it ties force, dry_run, and confirm_token into the preflight/confirmation lifecycle, scopes delta_base to ESP OTA-only, and explains the wait_seconds-to-crosspad_task coupling. The preflight paragraph gives force and dry_run behavioral weight the schema alone cannot.

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?

Opens with '[ESP HW | STM HW] Flash firmware' — a specific verb and resource that names both hardware targets. The scope is unambiguous and the sibling tools (build, repo_status, devices, doctor, snapshot, toolsets, task) are clearly distinct: this is the only one that writes firmware.

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 explains the full invocation lifecycle: a preflight always runs and returns a confirmation_required result, the identical call is re-issued with confirm_token to proceed, dry_run stops after preflight, and force overrides blockers. It also routes async polling to crosspad_task. What's absent is an explicit 'when not to use this tool' statement, though the siblings are different enough in purpose that this is a minor gap.

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

crosspad_repo_statusA
Read-only

Git status across ALL detected CrossPad repos in one call: branch, HEAD, dirty files, submodule sync state. PREFER THIS over running git status per repo — handles the 5-repo monorepo layout in one shot.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
reposNo
successYes

TDQS

A4.5/5.0
Behavior4/5

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

The readOnlyHint=true annotation already covers the safety profile. The description adds value by disclosing the scope (ALL detected repos), the monorepo layout detail (5-repo), and what the reported fields are. It correctly presents this as an aggregation tool without overclaiming write behavior.

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?

Two sentences, tightly packed. The key main-verb action and scope are front-loaded. Could arguably be a touch shorter but every sentence earns its place—the first establishes the action, the second gives the preference directive.

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 an output schema exists (which covers return values), zero params, and a readOnly annotation, the description covers what an agent needs: what it does, what it returns conceptually, and when to prefer it. The monorepo layout context is valuable. Minor gap is not describing submodule sync state semantics more precisely.

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's no parameter description to add. The baseline for 0 params is 4, and the description appropriately focuses on behavior since schema has nothing to document at 100% 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?

Clear specific verb+resource: reports git status across all CrossPad repos. Explicitly enumerates what's returned (branch, HEAD, dirty files, submodule sync state) and differentiates from alternatives by highlighting the 5-repo monorepo layout handling in one call.

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

Usage Guidelines5/5

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

Explicitly instructs to PREFER this tool over running `git status` per repo, providing an explicit when-to-use directive and naming the alternative it replaces. This is a clear usage guideline with a specific alternative context.

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

crosspad_snapshotA
Read-onlyIdempotent

[ESP HW | PC sim] One-call state snapshot (~300 tokens): apps {running, available}, ui {focus {ref,label}, group [{ref,label}], drawer, theme, app}, kit, leds, pads, mem, ble, console counters. Refs e<i> are ENC_GROUP indices for crosspad_ui focus — any UI action invalidates them and the next snapshot re-mints them. diff_from= adds changed. target=sim maps the simulator's stats onto the same shape (ui null).

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice id or port; omit when exactly one CrossPad is connected. Ignored for sim.
targetNoDefaults to the attached board — the common case, and a snapshot with no arguments should not be a validation error. device = a connected CrossPad via the daemon; sim = the running PC simulator (ui is null there)device
includeNoSections to fill (default all). Fewer sections = fewer CDC round-trips.
diff_fromNoEarlier snapshot_id; result.changed lists the top-level keys that differ. Unknown id → full snapshot.

Output Schema

ParametersJSON Schema
NameRequiredDescription
tsNo
uiNo
bleNo
kitNo
memNo
appsNo
ledsNo
padsNo
errorNo
deviceNo
changedNo
consoleNo
detailsNo
successYes
usb_modeNo
snapshot_idNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already establish readOnly/idempotent/non-destructive, and the description adds meaningful behavior: refs are ENC_GROUP indices invalidated by UI actions, next snapshot re-mints them, diff_from appends changed, unknown diff id falls back to full snapshot, and sim mode nulls ui. This goes well beyond the annotations.

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 dense but tightly organized: snapshot contents first, then the subtle ref invalidation warning, then the two optional modifiers. Every clause earns its place and important caveats are front-loaded before parameter details.

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 read-only snapshot tool with an output schema, the description is complete: it covers all parameters, edge cases (unknown diff_from, sim-specific ui null), device selection defaults, and behavioral invariants around refs. No meaningful gap remains for an agent to call it correctly.

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?

The schema covers 100% of parameters, and the description enriches each one: include sections map to 'fewer CDC round-trips', target=sim maps simulator stats and nulls ui, diff_from adds changed and handles unknown ids, and device omission is valid when only one CrossPad is connected.

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 'One-call state snapshot' and enumerates the exact sections returned (apps, ui, kit, leds, pads, mem, ble, console), making the tool's verb and resource unmistakable. It also distinguishes the hardware and simulator modes, so it is not confused with sibling build/flash/task tools.

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 strong usage context: device or sim selection, default behavior, optional include filtering, and diff_from semantics. It does not explicitly name sibling tools or state when not to use the snapshot, but the tool is clearly a read-only introspection utility and the guidance is otherwise concrete.

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

crosspad_taskA
Read-onlyIdempotent

Poll, wait on, cancel or list long-running crosspad tasks (build, flash, hil_run, capture, stimulus, submodule_update). Task handles are task_; results are kept 1 h after completion. Use this when your client does not support the MCP tasks capability.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskNoTask handle (task_<n>). Required for status, wait and cancel; ignored by list
actionYesstatus: one task; wait: block until it finishes; cancel: stop it; list: every task this session
timeout_msNowait only: how long to block before returning the current status (max 600000)

Output Schema

ParametersJSON Schema
NameRequiredDescription
taskNo
errorNo
tasksNo
successYes
cancelledNo

TDQS

A3.6/5.0
Behavior1/5

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

Annotations declare readOnlyHint=true and destructiveHint=false, yet the description documents a 'cancel' action that stops a running task — a state-changing operation. This is a direct contradiction between the description and annotations, so the transparency score must be very low.

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?

Two sentences, front-loaded with the action verbs and supported task types. Every sentence carries information, and there is no filler or repetition of the 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?

The description covers the full action surface, the task handle format, result retention, and the client-capability condition, while the output schema handles return shape. It is nearly complete, though the annotation contradiction undermines overall reliability.

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?

Schema coverage is 100%, so the baseline is 3. The description adds the task_<n> handle pattern and the 1 h retention window, but those facts already appear in the schema defail. No meaningful extra parameter semantics are provided beyond 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 opens with a specific verb set ('Poll, wait on, cancel or list') tied to a concrete resource ('long-running crosspad tasks') and enumerates the task types it manages. It is clearly distinct from sibling tools like crosspad_build or crosspad_flash, which create tasks rather than manage them.

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 explicitly states when to use the tool: when the client does not support the MCP tasks capability. It does not spell out exclusions or alternative sibling tools, but the clear context is enough for an agent to route correctly.

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

crosspad_toolsetsA
Read-onlyIdempotent

Manage which crosspad_* toolsets are visible. Only core is on at start. Toolsets: core, device, hil, sim, code, git, apps, trace. action=list shows all with enabled state; enable/disable take toolset= (core cannot be disabled); describe lists each tool with its safety tier. Enabling emits tools/list_changed — re-list tools afterwards. Tools hidden by a readonly policy never appear.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhat to do
toolsetNoToolset name for enable/disable/describe: core, device, hil, sim, code, git, apps, trace

Output Schema

ParametersJSON Schema
NameRequiredDescription
addedNo
errorNo
enabledYes
removedNo
successYes
toolsetNo
toolsetsNo
policy_modeYes
hidden_by_policyNo

TDQS

A3.9/5.0
Behavior1/5

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

The description discloses useful behavior such as emitting tools/list_changed and excluding tools hidden by a readonly policy, but it directly contradicts the readOnlyHint=true annotation by describing mutating enable/disable actions and a change event. Per the rubric, a description that contraindicates annotations earns a 1.

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 purpose in the first sentence and essential operational rules packed into two sentences. Every clause adds value, with no meaningless 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?

The description covers initial state, all actions, constraints, side-effect guidance, and the readonly policy, which is very complete for an agent invoking the tool. It loses a point because the readOnlyHint annotation conflict leaves the agent uncertain whether calling the tool is truly side-effect-free.

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?

Despite the schema describing both parameters, the description adds meaning well beyond the enum and names: list shows enabled state, enable/disable pair with toolset, core cannot be disabled, describe returns safety tiers, and the valid toolsets are enumerated. This gives the agent actionable semantics for both parameters.

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 ('Manage which crosspad_* toolsets are visible') and then lists the exact actions and toolsets, making its purpose unambiguous. It clearly distinguishes itself from the crosspad_* sibling tools, which are build, repo, device, doctor, and task operations rather than toolset visibility management.

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 states when to use each action (list, enable, disable, describe), the initial state (only core on), and the constraint that core cannot be disabled. It does not explicitly name alternatives or when-non to use this tool, but no sibling tool overlaps this toolset-visibility role, so the guidance is clear enough.

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

TDQS

A4.1/5.0
Disambiguation5/5

Each tool targets a distinct operation or resource: build, repo status, connected devices, environment health, runtime snapshot, flashing, toolset visibility, and task management. The descriptions are explicit about platform and scope, so an agent should rarely misselect.

Naming Consistency4/5

All tools share the crosspad_ prefix and use snake_case, making the family immediately recognizable. However, the second part mixes verbs like build and flash with noun-like resources like devices and repo_status, so it is not a strict verb_noun pattern.

Tool Count5/5

Eight tools is a well-scoped size for an embedded development server, covering the core workflows without redundancy. It sits comfortably within the ideal range and each tool earns its place.

Completeness4/5

The core build, flash, doctor, devices, and snapshot lifecycle is well covered, and task/toolset management handles operational concerns. Some higher-level workflows like hil_run or capture appear to be gated behind optional toolsets rather than being directly exposed in this core set.

Maintenance

ActivityMaintained
ResponsivenessSlow

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server that spawns autonomous Claude Code agents in GitHub repos, enabling task delegation with persistent state, multi-step workflows, and job monitoring.
    47
    94
    2
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that lets Claude manage long-running development processes across frameworks like Flutter, Next.js, Spring Boot, and Vite, with lifecycle control, log streaming, and hot reload support.
    1
  • A
    license
    A
    quality
    B
    maintenance
    Code intelligence MCP server for Claude Code providing multi-project code graph, semantic search, session history, knowledge base, and web search.
    15
    3
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CrossPad/crosspad-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server