pico-mcp

pico-mcp

Enables LLMs to control a PicoScope 5000A USB oscilloscope for signal generation, block capture, measurements, and frequency response sweeps.

Category
Visit Server

README

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)

The PicoSDK C libraries shipped inside PicoScope 7 T&M.app are x86_64. An arm64 Python cannot load them (dlopen … incompatible architecture). The fix: run the server in an x86_64 venv under Rosetta and point DYLD_LIBRARY_PATH at the app's libraries. On Windows/Linux with a natively installed PicoSDK this is not needed.

Setup

git clone https://github.com/Schimmilab/pico-mcp.git
cd pico-mcp

# macOS Apple Silicon (Rosetta x86_64 venv):
uv venv --python cpython-3.11-macos-x86_64 .venv-x86
uv pip install --python .venv-x86/bin/python -e .

# Other platforms: a normal venv is fine:
# uv venv && uv pip install -e .

Quick hardware test (close the PicoScope desktop app first — a scope can only be opened by one program at a time):

DYLD_LIBRARY_PATH="/Applications/PicoScope 7 T&M.app/Contents/Resources" \
  .venv-x86/bin/python -c "from pico_mcp.scope import probe_devices; print(probe_devices())"

Register in Claude Code

claude mcp add pico --scope user \
  --env DYLD_LIBRARY_PATH="/Applications/PicoScope 7 T&M.app/Contents/Resources" \
  -- /ABSOLUTE/PATH/TO/pico-mcp/.venv-x86/bin/pico-mcp

(Replace /ABSOLUTE/PATH/TO/ with your clone location. The DYLD_LIBRARY_PATH env is only needed on macOS Apple Silicon.)

Tools

Tool Purpose
list_devices Find connected scopes (model / variant / serial)
connect / disconnect Open (resolution 8/12/14/15/16 bit) / release the device
device_info Model, variant, serial, resolution, configured channels
set_channel Channel A–D: enable, DC/AC, range (0.01–20 V), analog offset
set_signal_generator / stop_signal_generator Built-in AWG: sine/square/triangle/ramp, frequency, amplitude
capture_block Block capture of all enabled channels → Vpp/min/max/mean/rms, estimated frequency, downsampled waveform (≤240 points)
frequency_sweep Frequency response: log-spaced AWG sweep, gain out/in per frequency (linear + dB), −3 dB band edges. Timebase chosen automatically per frequency

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_block returns 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

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured