PPK2 MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PPK2 MCP ServerSet PPK2 to source mode at 3.3V, power on, and measure current for 5 seconds."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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)
Related MCP server: dbgprobe-mcp-server
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 promptinstall.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.lockRun 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 |
| Connection state, mode, voltage, DUT power, available ports. Never opens the port. |
| Open the port, read calibration, set meter mode ( |
| Turn DUT power output |
| Sample current for N seconds → summary stats (current/power/charge/energy). |
| Capture the 8 digital channels (D0–D7) → per-channel duty, edges, activity. |
| Release the serial port. |
Modes
ampere — the PPK2 measures current drawn from an external supply (it does not power the DUT).
voltage_mvis still used for the gain/offset calibration, so set it to your external rail voltage.source — the PPK2 sources
voltage_mvto the DUT and measures the current it draws. Useppk2_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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zhixuan2333/PPK2-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server