Skip to main content

nff

nff — let coding agents iterate on hardware

docs · quick start · mcp tools · cli · platform · discord

PyPI License: MIT Built with Rust Boards MCP nff 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 holds the bench CLI (nff/, nff-rs/), the device library (sdk-c/), the fleet services (observability/) and the fleet dashboard (dashboard/, source only, not deployed), all MIT-licensed. The hosted fleet backend (app.nanoforgeflow.com) is offline, so nff auth, nff ota, nff fleet and nff provision have no server to talk to; the local bench commands are unaffected.

nff platform

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"

features

  • the bench loop, in one conversation — no switching between editor, terminal, and serial monitor. The agent iterates on firmware in response to serial output, catches exceptions, and reflashes.
  • field maintenance when the firmware is dead — a crashed bare-metal MCU has no shell, no SSH, no process table. nff captures registers, stack, memory, and backtrace and routes them to a cloud agent that explains the failure and drives recovery. This is the gap Mender, balena, and similar OTA tools cannot fill: they need a living network client inside the firmware.
  • ship it over the air — 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 →
  • board-universal — any of PlatformIO's ~1000+ boards across ~40 platforms (every ESP32 variant, RP2040/Pico, all STM32 families, AVR, SAMD, Teensy, nRF52, Uno R4, RISC-V…), toolchain auto-installed on first build. arduino-cli remains available as a second backend. boards →
  • live on-chip debugging — real breakpoints, call stacks, and variable inspection over JTAG/SWD (OpenOCD + GDB, driven by nff). debug →
  • local-first — compile, flash, monitor, debug, and the MCP tools need no account and never open a browser. Only OTA, repair, and agent require a sign-in.
  • one Rust binary — self-contained, no Python runtime, and it self-updates in the background like Claude Code does.

get started

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 →

mcp tools

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 →

demo

nff Demo

docs

Read the documentation

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

contributing

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.

license

MIT — see LICENSE.
Copyright (c) 2026 Gauthier Lechevalier

Metadata

Release files for nff 0.2.42

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for nff 0.2.42
File Actions
nff-0.2.42-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details for nff-0.2.42-py3-none-win_amd64.whl
nff-0.2.42-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details for nff-0.2.42-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
nff-0.2.42-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details for nff-0.2.42-py3-none-macosx_11_0_arm64.whl
nff-0.2.42-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details for nff-0.2.42-py3-none-macosx_10_12_x86_64.whl

Total release size: 20.1 MB

Release files / nff-0.2.42-py3-none-win_amd64.whl

Download URL nff-0.2.42-py3-none-win_amd64.whl
Size 4.9 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
fb7bce0e7ce00e7424c845d58fa8369e9325b5b8f689418835549a3d5231cd90
BLAKE2b-256 checksum
How to use checksums
5262c1776b1ea2dcca9cd368b6e4aceac65fdde602444620f72c9df4f09e2cda
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / nff-0.2.42-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL nff-0.2.42-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 5.6 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
6cd004e50b0f39a0bf37cef3f4b8053614e903020aaa73a077d5bbcd45a10c18
BLAKE2b-256 checksum
How to use checksums
a9a39924837965c78b5ac0b9c1b399a572933b681941397a205b7cd2f7d92fe1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / nff-0.2.42-py3-none-macosx_11_0_arm64.whl

Download URL nff-0.2.42-py3-none-macosx_11_0_arm64.whl
Size 4.8 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
09d33ab59b17a23fb227ce3da0603ef1ea42c33cd05f0e214ead8539b6f10732
BLAKE2b-256 checksum
How to use checksums
6ddd93cfe86d3c8cdf57c43acbfd35f7d55bba503537f7b43332048464b12f2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / nff-0.2.42-py3-none-macosx_10_12_x86_64.whl

Download URL nff-0.2.42-py3-none-macosx_10_12_x86_64.whl
Size 4.9 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
f16ceea2f151140e8c0457d0bdfa0c1f142bd1cd414234351f70a81a52bb6e1f
BLAKE2b-256 checksum
How to use checksums
8e081db84622886d84792ce8e4c9fef1afa4012dba5072f8f5fcd4ea53ca250f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Security for nff 0.2.42

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.42 This release

4 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page