PPK2 MCP Server logo

PPK2 MCP Server

zhixuan2333/PPK2-MCP
0 starsUpdated 2026-06-23Community

Is this your server?

Add your score badge to your README and get your server in front of 45k+ builders a month.

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

Enables MCP clients to control a Nordic PPK2 for power profiling: configure source/measurement modes, set voltage, power DUT, measure current/power/energy, and capture logic channels.

README.md

PPK2 MCP server

A Model Context Protocol (stdio) server that lets an MCP client — Claude Code, Claude Desktop, Cursor — drive a Nordic Power Profiler Kit II (PPK2) over its USB serial port: set mode/voltage, power a device-under-test (DUT), measure current/power/energy, and capture the 8 digital channels as a logic analyser.

The server holds the serial port open for its whole lifetime and serialises every tool call behind one lock, so it is the single owner of the PPK2 — the client talks to the device only through these tools.

Requirements

  • A PPK2 connected over USB
  • uv (the installer below will fetch it if missing)
  • Python ≥ 3.10 (uv will fetch one if needed)
  • Claude Code CLI (optional, for auto-registration)

One-shot install

git clone https://github.com/zhixuan2333/PPK2-MCP && cd PPK2-MCP
./install.sh          # installs uv, syncs deps, registers the MCP server
./install.sh --run    # ...and immediately launches Claude with a test prompt

install.sh registers the ppk2 server with the Claude Code CLI (claude mcp add, user scope). The serial port is autodetected — no path to configure. Then in Claude:

Use the ppk2 MCP tools to check the PPK2: call ppk2_status, then configure source mode at 3.3V, power the DUT on, measure current for 2 seconds, capture the logic channels for 1 second, and finally power off and disconnect.

Manual setup

uv sync     # create .venv and install dependencies from uv.lock

Run the server standalone (speaks MCP over stdio, so this is mostly a smoke test — Ctrl-C to exit). The PPK2 port is autodetected; override with PPK2_PORT if needed:

uv run ppk2_mcp_server.py
# or pin a port:  PPK2_PORT=/dev/cu.usbmodemXXXX uv run ppk2_mcp_server.py

.mcp.json in this repo also registers the server for any Claude Code session opened in this directory (autodetected port, no edits needed). Approve the project server (or run /mcp) and confirm it shows connected.

Tools

| Tool | What it does | |------|--------------| | ppk2_status | Connection state, mode, voltage, DUT power, available ports. Never opens the port. | | ppk2_configure | Open the port, read calibration, set meter mode (ampere/source) + voltage. | | ppk2_power | Turn DUT power output ON/OFF. | | ppk2_measure | Sample current for N seconds → summary stats (current/power/charge/energy). | | ppk2_logic | Capture the 8 digital channels (D0–D7) → per-channel duty, edges, activity. | | ppk2_disconnect | Release the serial port. |

Modes

  • ampere — the PPK2 measures current drawn from an external supply (it does

not power the DUT). voltage_mv is still used for the gain/offset calibration, so set it to your external rail voltage.

  • source — the PPK2 sources voltage_mv to the DUT and measures the

current it draws. Use ppk2_power("ON") to enable the output rail.

Serial port resolution

First match wins: a tool's explicit port arg → PPK2_PORT env var → autodetection via ppk2_api.list_devices().

Notes

  • A serial line has a single owner — only one process can hold the PPK2 at a

time. Stop other PPK2 tools (e.g. nRF Connect Power Profiler) before using this.

  • Unconnected digital pins float and read a constant/noisy level; drive them from

your DUT to see real logic activity.

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use Other servers.