July 10, 2026 Hunter McGuire

Provision an IoT device from a browser tab, no CLI required

From a fresh ESP32 to a bound entity in one form, in Chrome. No Python on your host, no mpremote, no AI assistant in the loop.

Getting a MicroPython board connected to a cloud IoT platform has always meant a certain amount of laptop wrangling. Install Python. Install esptool. Install mpremote or Thonny. Figure out which serial port your board is on. Copy an API key from a dashboard into a text file. Push that text file to the board. Reboot. Debug why it didn't connect.

Even with good CLI tools, that's a lot of steps for something a non-developer might reasonably want to do: hand a technician a box of sensors and ask them to bring them online.

The Tendrl Device Console is our take on removing that friction. It's a browser-based UI, served by the existing tendrl-dev-mcp binary, that talks to your board directly using WebSerial. There's a live REPL terminal, a tree-view file browser with a real code editor, and a one-form provisioning flow. No Python on the host. No mpremote. No AI required (though it composes with our MCP surface if you want it).

What it looks like

Three panels on one page:

Requirements

Two-minute walkthrough

  1. Run the binary in web mode:
    Terminal (one time)
    ./tendrl-dev-mcp web
    # → opens http://127.0.0.1:8811 in your default browser
  2. Plug in your board and click Connect Device. The browser shows a native picker with your USB serial devices; pick the one that matches your board.
  3. The Connection card fills in: Board, Platform, MicroPython version, Free heap, and a recommended install tier badge.
  4. Grab your API key from app.tendrl.com (Entities → your entity → API Key), paste it into the Provision form, add Wi-Fi if the board needs it, and click Start provisioning. Progress renders as a checklist with a collapsible log.
  5. Once the device reboots, watch it show up in the Contact dashboard within a few seconds.

Three concrete use cases

1. SMB or field-tech fleet deployment

A small business receives ten sensors that need to go on ten walls. Their operator doesn't know Python and shouldn't have to. With the Console, the steps are: run the binary once, then for each sensor: plug in, click Connect, paste API key, hit Start. Two minutes per device. No terminal. No copy-paste of Python one-liners. No "what's a mip?" conversations.

2. Rapid device debugging without the mpremote dance

You've got a device that isn't sending data. Instead of firing up mpremote, opening a REPL, running os.listdir(), then cat-ing config.json, then reading serial output for boot messages, you open the Console tab, connect, expand /flash, click config.json to read it (with syntax highlighting), then click Terminal to see live logs. Every operation the CLI can do, the Console does with fewer keystrokes and better feedback.

3. Classroom, workshop, and demo scenarios

A workshop instructor with 20 attendees can't ask everyone to install Python 3, pip install esptool, and configure their PATH. The Console works on any modern browser on any OS. Attendees run one binary, open a page, and they're online in the same 60 seconds. Same for showing a customer, an investor, or a coworker how something works: a real interactive session, not a screenshare of your terminal.

Everything is local

Worth calling out: the Console runs entirely on your machine. The HTML/JS is served from localhost. WebSerial opens the port directly in the browser, so the Tendrl backend never sees your device. The only outbound traffic is what you'd expect: the device fetching the SDK from your Tendrl server during the network install, and (after reboot) the device sending its own MQTT publishes to app.tendrl.com with your API key.

Also built in: the Device tab in Contact

The same UI now lives in the Contact dashboard itself, as a Device tab on the entity detail page, for when you're already looking at an entity and want to bind hardware to it in place. Same WebSerial layer, but with a few things the standalone tool can't do because it doesn't have your Contact session:

If you're using MicroPython entities today, open one in the dashboard and look for the Device tab.

Try it

Grab the binary and run ./tendrl-dev-mcp web for the standalone console, or open an entity in Contact and switch to the Device tab. The MCP-server mode is unchanged: the same binary still exposes all its tools over stdio for Claude, Cursor, and any MCP client.