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
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
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: no license is declared. See how to fix → Fail
- Actively maintained (last published 0 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
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 →
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
claude mcp add embeddedci-com-embeddedci-mcp -- uvx embeddedci-mcp
{
"mcpServers": {
"embeddedci-com-embeddedci-mcp": {
"command": "uvx",
"args": [
"embeddedci-mcp"
]
}
}
} {
"servers": {
"embeddedci-com-embeddedci-mcp": {
"command": "uvx",
"args": [
"embeddedci-mcp"
]
}
}
} codex mcp add embeddedci-com-embeddedci-mcp -- uvx embeddedci-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"embeddedci-com-embeddedci-mcp": {
"type": "local",
"command": [
"uvx",
"embeddedci-mcp"
],
"enabled": true
}
}
} openclaw mcp add embeddedci-com-embeddedci-mcp --command uvx --arg embeddedci-mcp
mcp_servers:
embeddedci-com-embeddedci-mcp:
command: "uvx"
args: ["embeddedci-mcp"] {
"McpServers": {
"embeddedci-com-embeddedci-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"embeddedci-mcp"
]
}
}
} assistant mcp add embeddedci-com-embeddedci-mcp -t stdio -c uvx -a embeddedci-mcp
{
"mcpServers": {
"embeddedci-com-embeddedci-mcp": {
"command": "uvx",
"args": [
"embeddedci-mcp"
]
}
}
} 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.
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 →
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 →
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.
| Name | Type | Req | Description |
|---|---|---|---|
| dac_path | string | – | – |
| fault | – | – | – |
| from_last_capture | boolean | – | Replay the last capture_adc instead of volts. |
| mapping | string | – | faithful = reproduce volts (clip); fit = auto-scale. |
| on_capture | boolean | – | – |
| route | boolean | – | Route dac_path first (false = keep the current analog path). |
| sample_rate_hz | – | – | Replay rate; defaults to the capture's own rate. |
| switch_image | boolean | – | If 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. |
| volts | – | – | Waveform in volts, one value per sample. |
| Name | Type | Req | Description |
|---|---|---|---|
| cotrig | boolean | yes | – |
| dac_path | string | yes | – |
| deep | boolean | yes | – |
| sample_rate_hz | number | yes | – |
| samples | integer | yes | – |
| switched_image | – | – | The 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).
| Name | Type | Req | Description |
|---|---|---|---|
| dac_path | – | – | Output path; default the waveform's own (else 5v). |
| fault | – | – | – |
| mapping | string | – | – |
| on_capture | boolean | – | – |
| sample_rate_hz | – | – | Sample rate in Hz; omit for the device maximum. |
| switch_image | boolean | – | If 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_samples | integer | – | Downsample a shallow replay to this many samples. |
| waveform_id | string | yes | – |
| window_len | integer | – | Samples to replay; 0 = to the end. |
| window_start | integer | – | First recording sample to replay. |
| Name | Type | Req | Description |
|---|---|---|---|
| cotrig | boolean | yes | – |
| dac_path | string | yes | – |
| deep | boolean | yes | – |
| sample_rate_hz | number | yes | – |
| samples | integer | yes | – |
| switched_image | – | – | The 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).
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | – | pulse = reset once; hold = keep the target in reset; release = let it run; status = read only. |
| pulse | number | – | Pulse length in seconds (at most 1). |
| Name | Type | Req | Description |
|---|---|---|---|
| asserted | boolean | yes | – |
| supported | boolean | – | – |
No examples provided.
save_capture_as_recording ~51
Save the last capture_adc to the cloud waveform library as a replayable recording.
| Name | Type | Req | Description |
|---|---|---|---|
| full_scale_v | – | – | Volts the top code represents; default the peak. |
| name | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| kind | string | yes | – |
| name | string | yes | – |
| sample_count | integer | yes | – |
No examples provided.
set_i2c_sensor ~36
Change what the emulated sensor reports (at least one value).
| Name | Type | Req | Description |
|---|---|---|---|
| pressure_pa | – | – | – |
| temperature_c | – | – | – |
| Name | Type | Req | Description |
|---|---|---|---|
| reply | object | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| voltage | number | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| readback | – | – | – |
| voltage | – | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| enabled | boolean | yes | – |
| las | array | yes | LA channels (1-8). |
| Name | Type | Req | Description |
|---|---|---|---|
| channels | array | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| profile | object | yes | The 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… |
| save | boolean | – | Also 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| efuse | integer | yes | Target-power rail the tools default to. |
| i2c_address | integer | yes | Emulated-sensor address as a 7-bit integer. |
| la_voltage | number | yes | LA I/O-bank voltage the profile asks for, in volts. |
| pins | array | yes | LA1-LA14 with what is wired to each and its bias resistor. |
| profile | object | – | The profile as its JSON object. |
| saved | boolean | – | set_wiring stored this profile on embeddedci.com. |
| signals | array | – | – |
| source | string | yes | Where the profile came from: defaults, file, server or dict. |
| swd_nreset | boolean | yes | – |
| swd_target | string | yes | – |
| uart_baud | integer | yes | – |
| version | integer | – | – |
| warnings | array | – | Wiring 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.
| Name | Type | Req | Description |
|---|---|---|---|
| capabilities | – | – | – |
| connected | boolean | yes | – |
| connection | – | – | – |
| firmware | object | – | The pod's raw status report. |
| kind | – | – | tcp, serial, discover or embeddedci (cloud). |
| la_voltage | – | – | Selected LA bank voltage; null = not set. |
| leased | boolean | – | – |
| session | – | – | – |
| warnings | array | – | – |
No examples provided.
uart_close ~20
Stop the background UART session (safe when none is open).
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| baud | – | – | – |
| open | boolean | yes | – |
| 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).
| Name | Type | Req | Description |
|---|---|---|---|
| baud | – | – | UART baud rate; omit for the wiring profile's uart_baud. |
| rx | – | – | LA channel (or wiring name) wired to the DUT's TX; omit for the profile's uart_rx. |
| tx | – | – | LA channel (or wiring name) wired to the DUT's RX; omit for the profile's uart_tx. |
| Name | Type | Req | Description |
|---|---|---|---|
| baud | – | – | – |
| open | boolean | yes | – |
| rx | – | – | – |
| tx | – | – | – |
No examples provided.
uart_read ~64
Return the UART output received since the previous uart_read, optionally waiting for a match.
| Name | Type | Req | Description |
|---|---|---|---|
| timeout | number | – | Seconds to wait for until_regex (or, without one, for any new output). |
| until_regex | – | – | Python regular expression; stop as soon as it matches. |
| Name | Type | Req | Description |
|---|---|---|---|
| closed | boolean | yes | – |
| matched | – | – | Whether until_regex matched (null without one). |
| overflowed | boolean | yes | – |
| text | string | yes | Everything received since the previous uart_read. |
| truncated | boolean | yes | – |
No examples provided.
uart_write ~41
Send text to the DUT's RX through the open UART session.
| Name | Type | Req | Description |
|---|---|---|---|
| line_ending | string | – | Appended after text. |
| text | string | yes | – |
| Name | Type | Req | Description |
|---|---|---|---|
| written | integer | yes | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| efuse | integer | yes | Target-power rail the tools default to. |
| i2c_address | integer | yes | Emulated-sensor address as a 7-bit integer. |
| la_voltage | number | yes | LA I/O-bank voltage the profile asks for, in volts. |
| pins | array | yes | LA1-LA14 with what is wired to each and its bias resistor. |
| profile | object | – | The profile as its JSON object. |
| saved | boolean | – | set_wiring stored this profile on embeddedci.com. |
| signals | array | – | – |
| source | string | yes | Where the profile came from: defaults, file, server or dict. |
| swd_nreset | boolean | yes | – |
| swd_target | string | yes | – |
| uart_baud | integer | yes | – |
| version | integer | – | – |
| warnings | array | – | Wiring that works but is risky (e.g. an I2C bus with no pull-up). |
No examples provided.
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.