Skip to main content

MCP server exposing the EmbeddedCI BenchPod SDK as tools for AI agents

Project description

embeddedci-mcp

An MCP server that exposes the embeddedci BenchPod SDK as tools, so an AI agent can drive a real hardware-in-the-loop bench: power a target board, flash it over SWD, capture its UART, and emulate/decode an I2C sensor.

It's a thin consumer of the SDK — every tool maps directly to a embeddedci.benchpod.BenchPod method.

Install

pip install embeddedci-mcp        # pulls embeddedci from PyPI
# or run without installing:
uvx embeddedci-mcp --help

For local development from this repo, see the workspace README.

Run

# stdio (launched by an MCP client as a subprocess — the usual case):
embeddedci-mcp --transport stdio

# streamable HTTP (for a remote bench):
embeddedci-mcp --transport http --host 0.0.0.0 --port 8000

# preset a default connection so the `connect` tool needs no argument:
embeddedci-mcp --connection /dev/tty.usbserial-0001
embeddedci-mcp --connection 192.168.1.213        # wifi/TCP, default port 8080

The connection can also come from the BENCHPOD_CONNECTION environment variable.

Client configuration

Claude Desktop / Cursor (mcp.json / claude_desktop_config.json)

{
  "mcpServers": {
    "benchpod": {
      "command": "uvx",
      "args": ["embeddedci-mcp"],
      "env": { "BENCHPOD_CONNECTION": "192.168.1.213" }
    }
  }
}

Use "command": "embeddedci-mcp" instead if it's installed on PATH.

Claude Code

claude mcp add benchpod -- uvx embeddedci-mcp

Tools

Group Tools
Lifecycle / status connect, disconnect, ping, status
Power power_on, power_off, target_power, target_status
Flash flash
UART capture_uart, power_cycle_and_capture
I2C sensor enable_i2c_sensor, set_i2c_sensor, disable_i2c_sensor, i2c_sensor_status, i2c_sensor_regs, i2c_sensor_la_decoded, i2c_read_register
Pull-ups enable_pullup, disable_pullup, pullup_status
Low-level command, gpio_set, capture_adc, signal_generate, measure

Device/firmware failures come back as {"ok": false, "error": ..., "error_type": ...} rather than raising, so the agent can reason about them.

Resources

  • benchpod://wiring — the default LA channel → DUT signal pin map and eFuse table.
  • benchpod://help — the canonical HIL workflow order.

Example agent flow

  1. connect("192.168.1.213")
  2. flash(swclk=11, swdio=12, nreset=3, target="target/stm32f4x.cfg", file="app.elf", target_power=1)
  3. enable_pullup([1, 2]) then enable_i2c_sensor(sda=2, scl=1, temperature_c=22.5, pressure_pa=101000)
  4. power_cycle_and_capture(rx=5, tx=4, delay=1.5, duration=6.0, until_regex="APP_OK")
  5. i2c_sensor_status() / i2c_read_register(address=0x76, register=0xD0) to confirm the DUT probed the sensor.

Publishing to the MCP Registry

server.json is starter metadata for the Official MCP Registry (currently in preview). Ship the package to PyPI first (that's what makes uvx embeddedci-mcp work), then publish the registry entry once the name is stable:

mcp-publisher publish      # GitHub-authenticated; reads server.json

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

embeddedci_mcp-0.1.0.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

embeddedci_mcp-0.1.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file embeddedci_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: embeddedci_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for embeddedci_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 6653c70373e9d126489f709148a9f54118d097467771e7d574c96ebe9ce6052f
MD5 1dc0629a8932d21dff162ae109d0d039
BLAKE2b-256 095f044210eed0aa623819934eb3f18363312d847b9918e6689d3abf0f3d089b

See more details on using hashes here.

Provenance

The following attestation bundles were made for embeddedci_mcp-0.1.0.tar.gz:

Publisher: publish.yml on embeddedci-com/embeddedci-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file embeddedci_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: embeddedci_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for embeddedci_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f41c69a76c29f28eed76c9228d51e3464c5972e90933405e4d2925890a431ff3
MD5 3fb25af314e5d1794a9163b44949376a
BLAKE2b-256 da7d842bdfb5e5d0ffbdd8864992b5cb1b8ef2f0dd0529d022a805c59a2ac5e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for embeddedci_mcp-0.1.0-py3-none-any.whl:

Publisher: publish.yml on embeddedci-com/embeddedci-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page