Embroid
Developers

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.

Surfaces

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.

Quickstart

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
Agents

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"
  }
}
REST API

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"
}
CI

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 }}.json
Evidence

Export 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
Developers

Start building against real hardware.

Install the Client, wire up the MCP server, and run your first flash-and-serial workflow from a script.