Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

EmbeddedCI BenchPod

PYPI · EMBEDDEDCI-MCP · SCANNED SEP 23

Drive a BenchPod hardware-in-the-loop bench: power, flash, UART, I2C, CAN, analog and logic.

Available components

36 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
  • 1 of 31 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency32
Schema Quality & AI Usability0
  • Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.Unverified
Stability & Change Management0
  • Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.Unverified
Tool Coverage0
  • Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.Unverified
Tool Safety0
  • Tool safety not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.Unverified
Capabilities0
  • Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet.Unverified

Unverified: 5 categories

Categories scored 0 because our sandbox run of this package has not given us the schema these checks need to read. That is a gap on our side rather than a finding about the package, and we only credit what we can confirm, so the score stands at 0 until the capture succeeds. We are working through the fleet, so this normally clears without any action from you. How we score packages →

Install

How do I install the EmbeddedCI BenchPod MCP server?

EmbeddedCI BenchPod runs locally as a PyPI package, launched with uvx embeddedci-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · embeddedci-mcp

# add to Claude Code
claude mcp add embeddedci-com-embeddedci-mcp -- uvx embeddedci-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "embeddedci-com-embeddedci-mcp": {
      "command": "uvx",
      "args": [
        "embeddedci-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "embeddedci-com-embeddedci-mcp": {
      "command": "uvx",
      "args": [
        "embeddedci-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add embeddedci-com-embeddedci-mcp -- uvx embeddedci-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "embeddedci-com-embeddedci-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "embeddedci-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add embeddedci-com-embeddedci-mcp --command uvx --arg embeddedci-mcp
# ~/.hermes/config.yaml
mcp_servers:
  embeddedci-com-embeddedci-mcp:
    command: "uvx"
    args: ["embeddedci-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "embeddedci-com-embeddedci-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "embeddedci-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add embeddedci-com-embeddedci-mcp -t stdio -c uvx -a embeddedci-mcp
// mcp.json
{
  "mcpServers": {
    "embeddedci-com-embeddedci-mcp": {
      "command": "uvx",
      "args": [
        "embeddedci-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 23 Sept 26 −33
    • Stability: 0.03 → unverified security
    • Tool safety: pass → unverified security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: 100 → unverified functional
    • Package version: 2.1.0 → 2.1.1 functional
  • 22 Sept 26 0
    • Tool safety: pass → unverified security
    • Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • Schema quality: 100 → unverified functional
    • Stability: unverified → 0.03 functional
    • Package version: 2.0.0 → 2.1.0 functional
  • 21 Sept 26 69

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 23 Sept 2026 · Analysed pypi/embeddedci-mcp@2.1.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem pypi

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 31 packages
Packages resolved 31
Stale 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 61 exposed · ~6,278 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
replay ~205

Loop a waveform out of the DAC until dac_stop — agent-provided volts or the last ADC capture. More than 2048 samples need the deep_replay gateware image, switched to automatically.

NameTypeReqDescription
dac_pathstring
fault
from_last_capturebooleanReplay the last capture_adc instead of volts.
mappingstringfaithful = reproduce volts (clip); fit = auto-scale.
on_captureboolean
routebooleanRoute dac_path first (false = keep the current analog path).
sample_rate_hzReplay rate; defaults to the capture's own rate.
switch_imagebooleanIf the pod is on the other gateware image, switch it first (~3 s). The switch resets the FPGA, stopping any DAC output, UART session or I2C sensor emulation. false = fail instead.
voltsWaveform in volts, one value per sample.
NameTypeReqDescription
cotrigbooleanyes
dac_pathstringyes
deepbooleanyes
sample_rate_hznumberyes
samplesintegeryes
switched_imageThe gateware image this call switched the pod to; null when no switch was needed.

No examples provided.

replay_waveform ~222

Loop a cloud-library waveform out of the DAC until dac_stop (needs server access). A recording too long for a shallow replay switches the pod to the deep_replay gateware image (unless target_samples asks for a downsampled replay).

NameTypeReqDescription
dac_pathOutput path; default the waveform's own (else 5v).
fault
mappingstring
on_captureboolean
sample_rate_hzSample rate in Hz; omit for the device maximum.
switch_imagebooleanIf the pod is on the other gateware image, switch it first (~3 s). The switch resets the FPGA, stopping any DAC output, UART session or I2C sensor emulation. false = fail instead.
target_samplesintegerDownsample a shallow replay to this many samples.
waveform_idstringyes
window_lenintegerSamples to replay; 0 = to the end.
window_startintegerFirst recording sample to replay.
NameTypeReqDescription
cotrigbooleanyes
dac_pathstringyes
deepbooleanyes
sample_rate_hznumberyes
samplesintegeryes
switched_imageThe gateware image this call switched the pod to; null when no switch was needed.

No examples provided.

reset_target ~79

Drive the DUT's reset line from the pod's reset pin (rev3 pods, DUT header J1 pin 22).

NameTypeReqDescription
actionstringpulse = reset once; hold = keep the target in reset; release = let it run; status = read only.
pulsenumberPulse length in seconds (at most 1).
NameTypeReqDescription
assertedbooleanyes
supportedboolean

No examples provided.

save_capture_as_recording ~51

Save the last capture_adc to the cloud waveform library as a replayable recording.

NameTypeReqDescription
full_scale_vVolts the top code represents; default the peak.
namestringyes
NameTypeReqDescription
idstringyes
kindstringyes
namestringyes
sample_countintegeryes

No examples provided.

set_i2c_sensor ~36

Change what the emulated sensor reports (at least one value).

NameTypeReqDescription
pressure_pa
temperature_c
NameTypeReqDescription
replyobject

No examples provided.

set_la_voltage ~62

Select the LA I/O-bank voltage to match the DUT's I/O (1.8 V needs a rev3 pod). Required before flash, UART, LA capture, pull resistors or I2C-sensor emulation.

NameTypeReqDescription
voltagenumberyes
NameTypeReqDescription
readback
voltageyes

No examples provided.

set_pull ~87

Engage or release the fixed bias resistors: LA1-LA6 pull UP (I2C lines), LA7/LA8 pull DOWN. The resistors are 3V3-referenced, so the pod refuses to engage them with the LA bank at 1.8 V.

NameTypeReqDescription
enabledbooleanyes
lasarrayyesLA channels (1-8).
NameTypeReqDescription
channelsarrayyes

No examples provided.

set_wiring ~201

Replace the wiring profile this connection uses (and optionally store it on embeddedci.com). The profile is validated first: two roles or signals on one LA channel, an out-of-range pin or an unknown key are rejected with a message naming every problem.

NameTypeReqDescription
profileobjectyesThe profile as a JSON object (schema version 1): la_mv, efuse, uart_rx/uart_tx/uart_baud, i2c_sda/i2c_scl/i2c_addr, swd_swclk/swd_swdio/swd_nreset/swd_target, spi_*, and signals [{name, la, direction…
savebooleanAlso store the profile for this device on embeddedci.com (cloud devices only), so other runs and the web UI see it. false = use it for this connection only.
NameTypeReqDescription
efuseintegeryesTarget-power rail the tools default to.
i2c_addressintegeryesEmulated-sensor address as a 7-bit integer.
la_voltagenumberyesLA I/O-bank voltage the profile asks for, in volts.
pinsarrayyesLA1-LA14 with what is wired to each and its bias resistor.
profileobjectThe profile as its JSON object.
savedbooleanset_wiring stored this profile on embeddedci.com.
signalsarray
sourcestringyesWhere the profile came from: defaults, file, server or dict.
swd_nresetbooleanyes
swd_targetstringyes
uart_baudintegeryes
versioninteger
warningsarrayWiring that works but is risky (e.g. an I2C bus with no pull-up).

No examples provided.

status ~44

Connection, firmware, capabilities, selected LA voltage and open sessions — with warnings for anything that will block the next steps (e.g. no LA voltage). Works when not connected.

Input schema present but exposes no named parameters.

NameTypeReqDescription
capabilities
connectedbooleanyes
connection
firmwareobjectThe pod's raw status report.
kindtcp, serial, discover or embeddedci (cloud).
la_voltageSelected LA bank voltage; null = not set.
leasedboolean
session
warningsarray

No examples provided.

uart_close ~20

Stop the background UART session (safe when none is open).

Input schema present but exposes no named parameters.

NameTypeReqDescription
baud
openbooleanyes
rx
tx

No examples provided.

uart_open ~159

Start buffering the DUT's UART in the background (replacing any open session). Open it BEFORE an action whose output matters (power_on, reset_target), then uart_read; use uart_write to type into the DUT's console. The channels and baud come from the wiring profile when omitted; the result says which were used. A channel used as GPIO must be released first (gpio_release).

NameTypeReqDescription
baudUART baud rate; omit for the wiring profile's uart_baud.
rxLA channel (or wiring name) wired to the DUT's TX; omit for the profile's uart_rx.
txLA channel (or wiring name) wired to the DUT's RX; omit for the profile's uart_tx.
NameTypeReqDescription
baud
openbooleanyes
rx
tx

No examples provided.

uart_read ~64

Return the UART output received since the previous uart_read, optionally waiting for a match.

NameTypeReqDescription
timeoutnumberSeconds to wait for until_regex (or, without one, for any new output).
until_regexPython regular expression; stop as soon as it matches.
NameTypeReqDescription
closedbooleanyes
matchedWhether until_regex matched (null without one).
overflowedbooleanyes
textstringyesEverything received since the previous uart_read.
truncatedbooleanyes

No examples provided.

uart_write ~41

Send text to the DUT's RX through the open UART session.

NameTypeReqDescription
line_endingstringAppended after text.
textstringyes
NameTypeReqDescription
writtenintegeryes

No examples provided.

wiring ~104

Which DUT signal is on which LA channel — call this first, before any channel argument. Returns the bench's effective profile: a 14-row pin table (what is wired to each channel and its bias resistor), the named signals, the target-power rail, the UART baud and the SWD target, plus warnings about risky wiring. Every tool whose channel, baud, rail or SWD arguments are omitted takes them from this profile, and channel arguments accept these names.

Input schema present but exposes no named parameters.

NameTypeReqDescription
efuseintegeryesTarget-power rail the tools default to.
i2c_addressintegeryesEmulated-sensor address as a 7-bit integer.
la_voltagenumberyesLA I/O-bank voltage the profile asks for, in volts.
pinsarrayyesLA1-LA14 with what is wired to each and its bias resistor.
profileobjectThe profile as its JSON object.
savedbooleanset_wiring stored this profile on embeddedci.com.
signalsarray
sourcestringyesWhere the profile came from: defaults, file, server or dict.
swd_nresetbooleanyes
swd_targetstringyes
uart_baudintegeryes
versioninteger
warningsarrayWiring that works but is risky (e.g. an I2C bus with no pull-up).

No examples provided.

Common questions

What is the EmbeddedCI BenchPod MCP server?

EmbeddedCI BenchPod is an MCP server listed in the public MCP registry as io.github.embeddedci-com/embeddedci-mcp. Drive a BenchPod hardware-in-the-loop bench: power, flash, UART, I2C, CAN, analog and logic. This page covers its PyPI package (embeddedci-mcp).

Is the EmbeddedCI BenchPod MCP server safe to use?

EmbeddedCI BenchPod scores 36 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the EmbeddedCI BenchPod MCP server expose?

EmbeddedCI BenchPod exposes 61 tools: connect, disconnect, status, set_la_voltage, wiring, and 56 more. Their descriptions and schemas cost roughly 6,278 tokens of context every time the server is loaded.

Is the EmbeddedCI BenchPod MCP server still maintained?

EmbeddedCI BenchPod is still listed as active in the MCP registry. We last reached this channel on 23 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.