docs · quick start · mcp tools · cli · platform · discord
nff is an MCP server that gives coding agents direct control over physical hardware — on the bench during development, and in the field for maintenance and diagnosis.
Connect your board over USB and Claude writes, compiles, flashes, and reads serial output autonomously. Deploy devices with the nff-sdk-c library and Claude can reach them remotely: capture crash state, diagnose failures, and push fixes — without physical access.
nff is the open-source bench CLI of the nff platform — an end-to-end, agent-driven system for developing, shipping, and operating ESP32-class firmware (bench → OTA → fleet diagnosis). This repo and the device library (
nff-sdk-c) are the two MIT-licensed pieces that run on your laptop and hardware; the hosted backend is proprietary.
you: "Run the sensor init sequence and assert the calibration values over serial"
LLM: [writes firmware] → [compiles] → [flashes ESP32] → [reads serial] → returns structured output
you: "Why did the unit in the field just hard-fault?"
LLM: [captures panic over OTA] → [reads registers + backtrace] → "Stack overflow in your sensor ISR at line 47"
nff ota deploy turns the binary you just built into a staged, ECDSA-signed rollout with per-device tracking and automatic rollback; nff fleet --watch shows it land. ota →repair, and agent require a sign-in.macOS / Linux:
curl -fsSL https://nanoforgeflow.com/install.sh | sh
Windows (PowerShell):
irm https://nanoforgeflow.com/install.ps1 | iex
Then plug in your board and run:
nff init # detects the board, writes config, registers + starts the MCP server
nff doctor # verify
Restart Claude Code so it picks up the MCP server, then just describe what you want:
you: "Flash sketches/blink_esp32 and confirm the LED is toggling over serial"
LLM: [compiles] → [flashes ESP32] → [reads serial] → "LED toggling at 1 Hz, confirmed"
Full install options, --cloud sign-in, and first-run detail: quick start →
34 tools over streamable HTTP on 127.0.0.1:3010/mcp, started in the background by nff init.
| Group | Tools | Covers |
|---|---|---|
| Bench | 7 | list_devices, compile, flash, serial_read/write, reset_device, get_device_info |
| Debug | 14 | breakpoints, call stack, variables, registers, memory, stepping, raw GDB |
| Field | 8 | diagnose (local, no login), repair (cloud, ELF-symbolized) + auth lifecycle |
| Fleet & OTA | 5 | ota_deploy, ota_status, ota_deployments, ota_devices, fleet_status |
Full signatures and return shapes: mcp tools →
everything lives at nanoforgeflow.com/docs: quick start · cli reference · configuration · mcp tools · using claude code · device sdk · provisioning · ota deploys · git-push deploys · fleet status · crash diagnosis · on-chip debug · power · security
In-repo reference (docs/): boards & USB ids · self-update & config · roadmap · architecture
Bugs and feature requests go to GitHub Issues; read CONTRIBUTING.md before opening a PR — adding a board is usually a two-line change. Please follow the Code of Conduct, and report vulnerabilities via SECURITY.md. Questions and ideas are welcome on Discord.
MIT — see LICENSE.
Copyright (c) 2026 Gauthier Lechevalier
244 commits
33 commits
Rust
52.3%
Python
45.5%
docs · quick start · mcp tools · cli · platform · discord
nff is an MCP server that gives coding agents direct control over physical hardware — on the bench during development, and in the field for maintenance and diagnosis.
Connect your board over USB and Claude writes, compiles, flashes, and reads serial output autonomously. Deploy devices with the nff-sdk-c library and Claude can reach them remotely: capture crash state, diagnose failures, and push fixes — without physical access.
nff is the open-source bench CLI of the nff platform — an end-to-end, agent-driven system for developing, shipping, and operating ESP32-class firmware (bench → OTA → fleet diagnosis). This repo and the device library (
nff-sdk-c) are the two MIT-licensed pieces that run on your laptop and hardware; the hosted backend is proprietary.
you: "Run the sensor init sequence and assert the calibration values over serial"
LLM: [writes firmware] → [compiles] → [flashes ESP32] → [reads serial] → returns structured output
you: "Why did the unit in the field just hard-fault?"
LLM: [captures panic over OTA] → [reads registers + backtrace] → "Stack overflow in your sensor ISR at line 47"
nff ota deploy turns the binary you just built into a staged, ECDSA-signed rollout with per-device tracking and automatic rollback; nff fleet --watch shows it land. ota →repair, and agent require a sign-in.macOS / Linux:
curl -fsSL https://nanoforgeflow.com/install.sh | sh
Windows (PowerShell):
irm https://nanoforgeflow.com/install.ps1 | iex
Then plug in your board and run:
nff init # detects the board, writes config, registers + starts the MCP server
nff doctor # verify
Restart Claude Code so it picks up the MCP server, then just describe what you want:
you: "Flash sketches/blink_esp32 and confirm the LED is toggling over serial"
LLM: [compiles] → [flashes ESP32] → [reads serial] → "LED toggling at 1 Hz, confirmed"
Full install options, --cloud sign-in, and first-run detail: quick start →
34 tools over streamable HTTP on 127.0.0.1:3010/mcp, started in the background by nff init.
| Group | Tools | Covers |
|---|---|---|
| Bench | 7 | list_devices, compile, flash, serial_read/write, reset_device, get_device_info |
| Debug | 14 | breakpoints, call stack, variables, registers, memory, stepping, raw GDB |
| Field | 8 | diagnose (local, no login), repair (cloud, ELF-symbolized) + auth lifecycle |
| Fleet & OTA | 5 | ota_deploy, ota_status, ota_deployments, ota_devices, fleet_status |
Full signatures and return shapes: mcp tools →
everything lives at nanoforgeflow.com/docs: quick start · cli reference · configuration · mcp tools · using claude code · device sdk · provisioning · ota deploys · git-push deploys · fleet status · crash diagnosis · on-chip debug · power · security
In-repo reference (docs/): boards & USB ids · self-update & config · roadmap · architecture
Bugs and feature requests go to GitHub Issues; read CONTRIBUTING.md before opening a PR — adding a board is usually a two-line change. Please follow the Code of Conduct, and report vulnerabilities via SECURITY.md. Questions and ideas are welcome on Discord.
MIT — see LICENSE.
Copyright (c) 2026 Gauthier Lechevalier
244 commits
33 commits
Rust
52.3%
Python
45.5%