Your AI assistant, plugged into the board.
Gekko runs on your own computer and gives your assistant hands on the microcontrollers plugged in over USB. It finds the board, talks to it, builds and flashes the firmware, and checks the wiring before anything is powered.
A small local server that gives the assistant hands.
Gekko is a Model Context Protocol (MCP) server. Your assistant talks to it, and it talks to the boards on your USB ports: Raspberry Pi Pico and Pico W, ESP32, ESP32-S3, Arduino Uno and Nano.
Before anything is powered, it checks pins and wiring against a database of boards and components.
It never changes a board without your OK.
Flashing, resetting, entering the bootloader and writing files all wait for you to say yes.
Features
- Finds boards by USB id
- Reads and writes the serial port
- Runs MicroPython through the raw REPL
- Builds with arduino-cli, PlatformIO or MicroPython, and flashes with one call
- Decodes ESP32 crashes into function names and lines
- Checks pins and wiring against a board and component database
- Shows every call as it runs in Gekko Live
- Never changes a board without your OK
A restart loop, diagnosed from one sentence.
A real exchange. The assistant doesn’t guess: it asks Gekko to read the boot log on the board’s port, then explains what it found in plain words.
-
you
my esp32 keeps restarting when the servo moves
-
tool
detect_reset_reasonport COM5, capture 5 s -
result
- reason
- brownout
- evidence
- “Brownout detector was triggered”
- restarts
- 3 in 5.0 s
- rst
- 0xf RTCWDT_BROWN_OUT_RESET
-
assistant
The board isn’t crashing, it’s losing power. Each time the servo starts it pulls a current spike that drags the 3.3 V rail under the brownout limit. Give the servo its own 5 V supply, join the grounds, and put a 470 µF capacitor across the servo rail.
Twenty-four tools, one job each.
Gekko is one server with 24 tools in six groups. Each does a single thing and hands back a result the assistant can act on. Twenty-four is also exactly a DIP-24, so here they are as a package.
| Pin | Name | Function | Your OK |
|---|---|---|---|
| Device I/O 10 · pins 1–10 | |||
| 1 | list_devices | Finds boards by USB id. | |
| 2 | serial_open | Opens a serial session and buffers everything the board sends. | |
| 3 | serial_read | Reads buffered output, optionally waiting for a text or regex match. | |
| 4 | serial_write | Sends text to an open serial session. | |
| 5 | serial_close | Closes the session and frees the port. | |
| 6 | serial_capture | Records N seconds of output and summarises the numbers. | |
| 7 | repl_exec | Runs MicroPython through the raw REPL. | |
| 8 | device_fs | ls, get, put and rm on the board’s files. | put, rm |
| 9 | device_reset | Hardware reset through DTR/RTS, or a MicroPython soft/hard reset. | required |
| 10 | enter_bootloader | ESP32 download mode or Pico BOOTSEL, without pressing buttons. | required |
| Build and flash 6 · pins 11–16 | |||
| 11 | build | arduino-cli, PlatformIO or MicroPython; errors come back as file, line, message. | |
| 12 | flash | esptool, UF2 copy, picotool and avrdude behind one call. | required |
| 13 | resolve_board | Turns a board name or alias into its exact id, toolchain settings and flashing method. | |
| 14 | lib_search | Searches the Arduino library index or MicroPython packages, for example for a missing header. | |
| 15 | lib_install | Installs a library found with lib_search. | MicroPython |
| 16 | lib_check | Works out the library every part needs and installs what is missing. | install |
| Debug 2 · pins 17–18 | |||
| 17 | decode_backtrace | Turns an ESP32 panic into function names and lines. | |
| 18 | detect_reset_reason | Reads brownout, watchdog or panic from the boot log. | |
| Hardware checks 2 · pins 19–20 | |||
| 19 | pin_check | Strapping pins, input-only pins, ADC2 with Wi-Fi. | |
| 20 | wiring_validate | 5 V into 3.3 V, missing pull-ups, supply and current budgets. | |
| Live and control 3 · pins 21–23 | |||
| 21 | live_view | Opens Gekko Live. | |
| 22 | panel | Puts controls and readouts on a grid. | |
| 23 | iot | Sets a board up on the Gekko IoT hub and sends it commands. | provision |
| Setup 1 · pin 24 | |||
| 24 | doctor | Shows which toolchains are installed and how to add the missing ones. | |
It checks the wiring before you power on.
An HC-SR04 runs on 5 V, so its ECHO pin answers with 5 V. An ESP32 GPIO is a 3.3 V pin and not 5 V tolerant. Wire one straight to the other and that is exactly the mismatch wiring_validate catches, on paper, before anything is powered.
wiring_validateok: false · 1 error- board
- esp32_devkit
- part
- U1 hc-sr04
- VCC
- → VIN
- GND
- → GND
- TRIG
- → GPIO25
- ECHO
- → GPIO18
- ECHO
- → 1k/2k divider → GPIO18
- error
- level_mismatch
ECHO drives GPIO18 to 5 V; the ESP32’s GPIOs are 3.3 V and not 5 V tolerant - fix
- 1k/2k divider on ECHO → 3.33 V
or a BSS138 level shifter - info
- level_divider
GPIO18 gets 3.33 V through the divider: within the 3.3 V logic level - rail
- 5V 20 mA of 500 mA
- ok
- false, 1 error
- ok
- true, 0 errors
The checks come from a database of boards and components, not from a guess, so the same wiring always gets the same answer. pin_check does the same for single pins: strapping pins, input-only pins, ADC2 while Wi-Fi is on.
Watch it work.
Gekko Live is a local page at 127.0.0.1 that follows every tool call as it runs. Nothing the assistant does to your board happens out of sight.
What it shows
| Board | Drawn with its state: flashing, running code, in the bootloader |
|---|---|
| Progress | The steps of the call and a progress bar |
| Serial | The bytes going to and from the board |
| Result | The exact raw result the AI received |
The Panel tab
A dotted grid where the assistant places controls wired to the board. Drag them to rearrange. Every number the board prints shows up under Readings.
| Controls 7 | colour picker, slider, toggle, button, number field, option picker, XY pad |
|---|---|
| Readouts 5 | value, gauge, graph, LED, log |
Beyond the cable.
The iot tool sets a Wi-Fi board, a Pico W for example, up on the Gekko IoT hub over the USB cable. After that, the assistant and a web dashboard control it over the internet.
The dashboard shows
- Which boards are online
- Readings, with history charts
- Editable controls
- Every command, with how long it took to arrive
| Parameter | Conditions | Value |
|---|---|---|
| Setup link | first time, by the iot tool | USB cable |
| Control link | afterwards, assistant and dashboard | internet |
| Transport | connection to the board | verified TLS |
| Command delivery | to the board | ≈ 0.1 s |
Six boards, two logic levels.
Gekko knows each of these boards: the chip on it, the voltage on its pins and how to get firmware onto it.
| Board | MCU | Logic level | Flashing | Frameworks |
|---|---|---|---|---|
| Raspberry Pi Pico | RP2040 | 3.3 V | UF2, picotool | MicroPython, Arduino |
| Raspberry Pi Pico W | RP2040 + CYW43 | 3.3 V | UF2, picotool | MicroPython, Arduino |
| ESP32 DevKit V1 | ESP32-WROOM-32 | 3.3 V | esptool | MicroPython, Arduino, PlatformIO |
| ESP32-S3-DevKitC-1 | ESP32-S3 | 3.3 V | esptool | MicroPython, Arduino, PlatformIO |
| Arduino Uno R3 | ATmega328P | 5 V | avrdude | Arduino, PlatformIO |
| Arduino Nano | ATmega328P | 5 V | avrdude | Arduino, PlatformIO |
Mixing the two levels is where boards get hurt: a 5 V signal on a 3.3 V pin is exactly what wiring_validate flags (section 4).
Three steps, then ask what’s connected.
Gekko v1 is in development. It installs from source today; the PyPI package, which makes step 02 a one-liner, is planned.
-
01
Get uv
uv runs Gekko and its Python dependencies.
winget install astral-sh.uvcurl -LsSf https://astral.sh/uv/install.sh | sh -
02
Add Gekko to your assistant
From source, today:
claude mcp add gekko -- uv --directory /path/to/gekko-mcp run gekko-mcpOnce it is on PyPI:
claude mcp add gekko -- uvx gekko-mcpThat command is for Claude Code. Claude Desktop, Cursor, VS Code and other MCP clients take the part after
--as a server entry in their JSON settings:"command"isuv(oruvx), and the rest goes in"args". Claude Desktop also needsGEKKO_WORKSPACEset to your project folder. -
03
Plug in a board and ask
“what’s connected?”
Gekko finds it by USB id and Gekko Live opens at the first hardware call.