Embedded/IoT mentor: picks the board and toolchain, estimates cost and battery life.
This MCP server exposes an “Embedded / IoT Mentor” Claude Skill that helps with embedded/IoT projects by picking a board and toolchain, and by estimating cost and battery life. The repo is focused on embedded and microcontroller workflows, with REST API topics listed in metadata.
🛠️ Key Features
Board selection
Toolchain selection
Cost estimation
Battery life estimation
🚀 Use Cases
Planning embedded/IoT builds using ESP32/microcontrollers
Choosing an appropriate toolchain for development
Estimating project cost and expected battery life
⚡ Developer Benefits
Metadata indicates REST API usage (“api”, “rest-api”)
Topic alignment for developers working with Arduino and ESP32
⚠️ Limitations
Server details are limited to the provided description, topics, and truncated README excerpt; specific tool or method coverage is not included in the source data.
A skill for Claude that acts as an experienced embedded-systems mentor:
it picks the microcontroller, board, and toolchain for your project, estimates what it will
cost and how long it will take, and hands you a build plan that stops at a working
breadboard instead of a production line you didn't ask for.
Most embedded advice fails in one of two directions — a parts list with no plan, or a
production roadmap for someone who hasn't blinked an LED yet. This skill asks what you've
actually built before, then answers at that level.
Try it
Where
One click
Your browser
iotmentor.dev — a web app by the same author, built on the same principles but with its own code. Nothing to install
Everything below is the longer way round: build it yourself, change it, or read why it
answers the way it does.
Demo
A farmer asks for soil moisture and nitrogen across a meadow; the skill declines the nitrogen half, asks two questions, and returns a six-node LoRa plan with no code in it
A sheep farmer in Devon, with no coding experience, requests six sensing points, and the furthest sensing point is around 400 m away from the house. All of those are below the minimum cost for such a project.
Worth watching for what the skill doesn't suggest: It opens by refusing half the request - no cheap probe measures soil nitrogen honestly - then lets three constraints do the choosing. The 400 meters away from home picks radio over Wi-Fi, "I don't write code" picks ready-made firmware over a toolchain, and a wet meadow picks the enclosure. The board is the last thing decided, not the first. The full transcript is
Scenario D.
What it does
Picks a platform — ESP32, Pico, STM32, nRF52 — and says plainly why that one, plus one
or two alternatives and when each would win instead.
Separates the hardware path from the firmware path, so you know what to buy and what to
install without conflating them.
Checks whether you need to write firmware at all. If ESPHome, Meshtastic or Tasmota
already does the job, that's the answer — writing code is a cost, not a deliverable.
Takes the reading all the way to a person — Home Assistant, a page the device serves
itself, a hosted dashboard, or just an alert. "On my phone" in the kitchen and "on my
phone" from work are two different builds, and it says so before you pick one.
Estimates time and cost as ranges, and flags what actually drives them — including
what the thing costs to run, once it's six nodes eating batteries in a field.
Says what a sensor really measures. Cheap "NPK" probes read conductivity and guess;
you get told that before you buy six of them, not after.
Plans to MVP and stops there. Engineering prototype, pre-production, and production
phases exist, but you only get them when you ask.
Names the risks — power budget, part availability, no debug path, certification, the
learning curve on whatever it just recommended.
Rejects its own suggestions against a fixed bar: no maintained library, single-supplier
part, a package you can't solder, no serial console — it drops the candidate and picks again.
Why it exists
The failure modes it's built to catch:
A beginner pointed at an STM32 with an ST-Link because a forum said it was "more
professional" — three evenings lost to toolchain setup before the first LED.
A battery project designed around a dev board whose regulator idles at 20 mA, so the
"two month" runtime is really four days. The board was never the problem; nobody costed the
sleep current.
A first PCB ordered with 0402 passives and a QFN, hand-assembled with a soldering iron,
and dead on arrival with no test points to find out why.
Six sensors deployed in a field in indoor boxes, sealed with tape instead of cable
glands, condensing on their own PCBs by the second week.
# Windows: Expand-Archive refuses any extension but .zip, so rename a copy first
New-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null
Copy-Item embedded-iot-mentor.skill "$env:TEMP\embedded-iot-mentor.zip"
Expand-Archive "$env:TEMP\embedded-iot-mentor.zip" -DestinationPath "$HOME\.claude\skills" -Force
Claude Code picks it up on the next session — /skills lists it, and Claude also loads it on
its own when a conversation matches the description.
Use it
Just describe the project. For example:
I want to log soil moisture in a greenhouse and see it on my phone. I've done a couple of
Arduino sketches. Budget maybe €100, and I'd like it running in a month.
or
Which board for a battery sensor that has to last a year on a coin cell? I've shipped
firmware before, so don't dumb it down.
or
I have an ESP32 and a BME280 sitting in a drawer. What's worth building with them?
or, the one in the demo above:
I am a farmer and want to measure soil moisture and nitrogen in different parts of my
meadow to make sure my sheep are well fed.
It will ask a couple of short questions if the goal, experience level, power source,
environment, or timeline are still unclear — then answer in tables rather than essays. A
whole project plan is meant to fit on one screen; if you want the reasoning behind a pick,
ask for it.
Elsewhere: VS Code and the REST API
The mentor is judgement written down, not a Claude feature, so it ports. Every port keeps
the behaviour that matters — MVP first, hardware and firmware kept apart, ready-made
firmware ahead of code to be written, the reject bar, and the hand-off on safety-critical,
vehicle, and privacy questions.
The caller is a script or a service, not a person in a chat window
What the two carry differs. The Copilot port is judgement only — no reference files, no
scripts, so a real battery runtime or a BOM total is still the skill's job. The REST API
reads both straight out of the skill folder, so it can never fall behind a change made
here.
Good to know
Prices and stock go stale. Estimates are ranges, not quotes. Check LCSC, Digi-Key, or
your local supplier before ordering.
It cannot verify part availability in your country, and that is the most common reason
a good plan stalls.
It stops at MVP by design. Ask explicitly for the later phases.
Not for safety-critical work. It will help you to a prototype for medical, automotive,
or safety systems, then tell you plainly where hobbyist advice ends.
Layout
The skill itself lives in embedded-iot-mentor/. Everything at the repository root is
packaging and project metadata that the skill never reads.
Path
What it is
embedded-iot-mentor/SKILL.md
The instructions Claude follows. Most changes go here.
embedded-iot-mentor/references/
Detail read on a trigger: MCU selection, connectivity, where the data is seen, cost estimation, PCB checklist, power/battery, field deployment, OTA, EMC, safety boundary, learning resources.
embedded-iot-mentor/scripts/
Small deterministic helpers, run only when a concrete number is asked for.
embedded-iot-mentor/examples/
Worked scenarios showing the shape a reply should take when a request doesn't fit the standard mould.
embedded-iot-mentor.skill
Generated. A zip of the folder above — don't edit by hand.
package_skill.py
Builds, verifies, and installs the bundle.
embedded-iot-mentor-demo.gif
The recording shown at the top. Not bundled — the packer only takes the skill folder.
universal-prompt.md
The same mentor as a copy-paste prompt, for any AI chat that isn't Claude.
assets/install-steps/
Screenshots for the Claude Skill upload walkthrough in Install, above.
docs/index.html
Static landing page for GitHub Pages — the "Try it" links and the demo, no chat needed.
create_skill_demo_gif.py
Generates a mock-up demo GIF (assets/skill-demo-mockup.gif) from a scripted scenario, for when a real recording isn't available.
scripts/check_links.py
Checks that every README, landing-page, CONTRIBUTING.md, and distribution link still resolves. Run by check-links.yml on push, PR, and weekly.
vscode-copilot/
The Copilot port — the paste-in prompt and example queries.
api/
The REST API — reads the reference library from the skill folder and shells out to its scripts.
api/instructions.md
The mentor's rules condensed to a self-contained prompt, for POST /chat and GET /instructions. Mirror a behaviour change here if you make one in SKILL.md.
render.yaml
Blueprint behind the one-click deploy of the API. Has to sit at the root for Render to find it.
.github/DISTRIBUTION.md
Where the project is listed and how to list it — the steps that need a login rather than a workflow.
Keeping the skill in its own folder matters: the spec requires a skill's name to match its
folder name, so building it straight from the repository root would break the moment someone
downloaded the repo as a ZIP and got embedded-iot-mentor-main/.
A .skill file is a zip archive holding the skill folder — the format is defined by the
Agent Skills specification. The packer bundles
everything under embedded-iot-mentor/, so a new reference file is picked up automatically
with no build-script edit. Text files are stored with LF and zip timestamps are pinned, so
the bundle is byte-identical whoever builds it.
--check is the gate, and CI runs it on every push and pull request. It fails when:
the frontmatter breaks a spec constraint (name pattern/length, folder match, description length);
SKILL.md points at a references/… or scripts/… file that doesn't exist;
the committed .skill doesn't match the source folder.
That last one matters because the bundle is committed: edit the skill, forget to rebuild, and
the download would ship a different version than the source folder.
sleep_budget.py takes duty-cycle inputs rather than an average current, because the
average is the number nobody knows up front. Same firmware, same battery, sleep current
changed from 15 µA to a dev board's 8 mA regulator: 3.8 years becomes 8.3 days.
More skills like this
Project Planning & Journaling —
scopes a project before any code is written, then keeps a living, resumable
documentation journal with a weekly routine review.
Business Name Fit —
picks or checks a business/brand name that's authentic to your origin and lands well
in the markets you're selling into.
Contributing
Improvements are welcome — especially hands-on knowledge about parts, suppliers, and what
actually goes wrong on a bench. See CONTRIBUTING.md.
License
Released under the MIT License — free to use, share, and build on.
Install
Configuration
Environment variables
HOSTdefault 0.0.0.0
Interface to bind. The image sets 0.0.0.0; the bare server defaults to loopback only.
PORTdefault 8000
Port to serve on. Hosts that assign a port set this.