Build hardware workflows with Embroid.
Use MCP, CLI, REST API, and CI integrations to connect real devices to the tools your team already uses. One typed surface, every entry point.
One platform, eight ways to build on it
MCP tools
Expose typed, permissioned hardware tools to Claude Code, Cursor, and other MCP-compatible agents.
CLI
Scriptable commands with JSON output. Use locally or in CI with the same invocation.
REST API
Build custom dashboards, schedulers, and lab workflows against a typed HTTP surface.
GitHub Actions
Drop-in action to gate PRs on real-device behavior.
GitLab CI
Preset for adding hardware validation steps to GitLab pipelines.
Vendor tool adapters
Coordinate OpenOCD, pyOCD, esptool, dfu-util, and selected vendor CLIs through a unified interface.
Local development
Everything you ship to CI runs locally first — against a real device, without a cloud roundtrip.
Example workflows
Flash-and-serial, bring-up, smoke tests, power profiling, and agent-driven debug — as starting templates.
From zero to a real-device run in five commands.
Same verbs from the CLI, CI, REST API, and MCP. Learn them once — use them everywhere.
# 1. List devices embroid devices list # 2. Create a lease embroid lease create nrf52-04 --duration 10m # 3. Flash firmware embroid flash nrf52-04 ./build/firmware.bin # 4. Tail serial and assert on a boot marker embroid serial tail nrf52-04 --assert "boot_ok=1" # 5. Export the session as an evidence record embroid sessions export last --out evidence.json
Call Embroid as MCP tools.
Agents reach hardware through typed, permissioned tools. Capabilities are scoped per-device and time-bounded.
// Tool call from an MCP-compatible agent (Claude Code, Cursor, etc.)
{
"tool": "embroid.flash",
"arguments": {
"device": "nrf52-04",
"artifact": "./build/firmware.bin"
}
}Drive hardware from any backend.
A typed HTTP surface for custom dashboards, schedulers, and team tooling. Same verbs, JSON in and out.
POST /v1/devices/nrf52-04/flash
Content-Type: application/json
Authorization: Bearer ${EMBROID_TOKEN}
{
"artifact": "./build/firmware.bin",
"lease_id": "lease_123"
}Gate pull requests on real-device runs.
Drop the Embroid Actions into your workflow and every PR gets validated against the actual hardware.
# .github/workflows/hardware-ci.yml
name: Hardware validation
on: pull_request
jobs:
real-device:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: make firmware
- uses: embroid/actions/lease@v1
with:
device-tag: nrf52-ci
duration: 10m
- run: embroid flash $EMBROID_DEVICE ./build/firmware.bin
- run: embroid sequence run boot-smoke.yaml
- uses: embroid/actions/export-evidence@v1
with:
path: evidence/pr-${{ github.event.number }}.jsonExport a signed record of every run.
Attach an evidence pack to a PR, a release tag, or a customer ticket. Firmware hash, commands, logs, and assertions — all in one file.
# Export the most recent session as a signed evidence record embroid sessions export last --signed --out evidence.json # Or attach one to a specific release tag embroid sessions export --tag fw-1.4.2 --out release/fw-1.4.2.evidence.json
Start building against real hardware.
Install the Client, wire up the MCP server, and run your first flash-and-serial workflow from a script.