pico-mcp
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., "@pico-mcpRun a frequency sweep on channels A and B to measure the transformer's response"
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.
pico-mcp
A lean MCP (Model Context Protocol) server for PicoScope 5000A USB oscilloscopes (developed and verified on a 5442B). It lets an LLM/agent drive the scope: discover the device, configure channels, run the built-in signal generator, capture blocks, take measurements, and sweep a frequency response.
Built because the existing third-party server was too buggy (a find_all_units() discovery
that crashes the process on the ps6000a driver, ctypes.byref errors on GetUnitInfo, a
device-handle leak, and an is_connected check on a field that is never set). This server
talks to the ps5000a driver directly; every code path was verified against real hardware.
macOS Apple Silicon note (important)
Changed 2026-08-01 — no Rosetta needed any more. PicoScope 7 T&M 7.2.24 ships arm64 libraries. Earlier versions were x86_64, which is why this project used to require a Rosetta venv. If you followed the old instructions, see Migrating from the Rosetta setup below — it fails in a confusing way, because the old x86 venv keeps working right up until the app is updated.
There is still one thing to do: PicoScope no longer installs a separate
PicoSDK.framework, so ctypes.util.find_library("ps5000a") finds nothing. Link the
libraries from inside the app into ~/lib, which is on Python's default macOS library
search path (DEFAULT_LIBRARY_FALLBACK in ctypes.macholib.dyld) — no sudo, and no
DYLD_LIBRARY_PATH in your MCP config, which matters because the app path contains both
a space and an &.
On Windows/Linux with a natively installed PicoSDK, none of this applies.
Related MCP server: keyscope-mcp
Setup
git clone https://github.com/Schimmilab/pico-mcp.git
cd pico-mcp
python3 -m venv .venv
.venv/bin/pip install -e .macOS only — make the driver discoverable (symlinks, so a PicoScope update carries over):
SRC="/Applications/PicoScope 7 T&M.app/Contents/MonoBundle"
mkdir -p ~/lib
ln -sfn "$SRC/libps5000a.dylib" ~/lib/libps5000a.dylib
ln -sfn "$SRC/libps5000a.2.dylib" ~/lib/libps5000a.2.dylib # libps5000a.dylib links against this
python3 -c "import ctypes.util; print(ctypes.util.find_library('ps5000a'))"
# -> /Users/<you>/lib/libps5000a.dylibQuick hardware test (close the PicoScope desktop app first — a scope can only be opened by one program at a time):
.venv/bin/python -c "from pico_mcp.scope import probe_devices; print(probe_devices())"
# -> [{'model': 'PS5000A', 'variant': '5442B', 'serial': '...'}]Verify against a connected scope, not just an import. import pico_mcp.server
succeeds even when no driver can be loaded — it says nothing about whether the thing works.
Migrating from the Rosetta setup
rm -rf .venv-x86 # x86 Python cannot load the new arm64 libraries
python3 -m venv .venv
.venv/bin/pip install -e .
# then the ~/lib symlinks above, then re-register (note: no --env any more)
claude mcp remove pico
claude mcp add pico --scope user -- /ABSOLUTE/PATH/TO/pico-mcp/.venv/bin/pico-mcpRegister in Claude Code
claude mcp add pico --scope user -- /ABSOLUTE/PATH/TO/pico-mcp/.venv/bin/pico-mcp(Replace /ABSOLUTE/PATH/TO/ with your clone location.) A newly registered server is only
picked up by a new Claude Code session — the MCP connections are fixed at session start.
Tools
Tool | Purpose |
| Find connected scopes (model / variant / serial) |
| Open (resolution 8/12/14/15/16 bit) / release the device |
| Model, variant, serial, resolution, configured channels |
| Channel A–D: enable, DC/AC, range (0.01–20 V), analog offset |
| Built-in AWG: sine/square/triangle/ramp, frequency, amplitude |
| Block capture of all enabled channels → Vpp/min/max/mean/rms, estimated frequency, downsampled waveform (≤240 points) |
| Frequency response: log-spaced AWG sweep, gain |
Example: measuring a transformer
Connect AWG/GEN → channel A (input) → device-under-test → channel B (output), enable both
channels, then ask the agent to run a frequency_sweep. The server drives each frequency,
captures both channels and reports the gain B/A — yielding the −3 dB bandwidth, pass-band
flatness and any resonances. (This was the first real use: characterising a 1:1 audio
isolation transformer — flat 17 Hz–1.4 MHz, one mild resonance at 380 kHz.)
Notes
Close the PicoScope desktop app before connecting — exclusive device access.
capture_blockreturns a downsampled waveform (no megasample dumps); measurements are computed from the full-resolution data.Code changes take effect after the MCP host reloads the server (e.g. restart the session). The driver layer can be tested without a reload by running it directly in the venv.
License
MIT
Maintainer
Schimmi — https://schimmilab.de Issues und Pull Requests willkommen.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables LLMs like Claude to interact with PicoScope oscilloscopes for signal acquisition, measurement, and analysis. Supports device management, data capture, triggering, and signal generation through natural language commands.Last updated245
- Alicense-qualityCmaintenanceAI-native oscilloscope control. A pure-Python MCP service that lets LLM agents control Keysight EDUX1052G oscilloscopes via a compact DSL.Last updatedMIT
- Alicense-qualityCmaintenanceAI-driven USB oscilloscope control via FastMCP, enabling waveform capture, CSV export, and frequency measurements on PicoScope, Hantek, or a built-in simulator.Last updated1MIT
- Alicense-qualityBmaintenanceEnables AI assistants to directly control NI oscilloscopes (e.g., PXIe-5160/5164/5110) through the Model Context Protocol, including waveform acquisition, measurement, and configuration.Last updatedMIT
Related MCP Connectors
Persistent memory and knowledge management for AI agents with semantic search and 50+ tools.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Build, validate, and deploy multi-agent AI solutions from any AI environment.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Schimmilab/pico-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server