rtl-sdr-mcp
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
rtl-sdr-mcp
Give your LLM agent a real radio. An MCP server that turns a $30 RTL-SDR dongle into tools an AI agent can use on its own: sweep the spectrum, look at waterfalls, demodulate and transcribe audio, watch for intermittent transmitters and decode ISM devices.

Most SDR + AI projects pipe recordings into an LLM after the fact. Here the model drives the receiver. It picks frequencies, chooses what to look at, forms hypotheses about unknown signals and tests them. Spectra, waterfalls and audio spectrograms come back as images, so a multimodal model reasons about signal shape the way a human operator does.
A real session
Prompt: "There is an intermittent transmitter near 434.55 MHz. Figure out what it is." (Claude, 10 tool calls, ~11 minutes. Translated and condensed from the original run.)
π‘ waterfall(434.55 MHz, Β±200 kHz, 20 s) β nothing in 20 s: rare transmitter, watch longer
π‘ activity_monitor(433.9β435.2 MHz, 5 min) β faint bursts at 434.55; repeating mark at 434.25 every ~55 s;
steady unmodulated line at 434.60 = tuner spur
π‘ decode_devices(434.55 MHz, 120 s) β rtl_433 decodes nothing: not a standard sensor/remote
π‘ waterfall(434.25 MHz, Β±50 kHz, 20 s) β 2.5 s burst, 5 narrow lines spaced 6 kHz (β12β¦+12 kHz):
carrier with sidebands
π‘ listen(434.25 MHz, nfm, 60 s) β noise + short ~6 kHz tone at 22β24 s, matches the burst
π¬ Hypotheses: (1) standard ISM sensor: rejected, rtl_433 is silent. (2) tuner spur: true for 434.60 only,
434.25 varies in time. (3) non-standard periodic transmitter (DIY / alarm): plausible, unproven.
Next step: catch a burst at 434.55 with a longer narrow waterfall.In the same run it scanned the FM band, found the one station with speech rather than music (from the audio spectrogram) and summarized the interview that was on air.
Related MCP server: gnuradio-mcp-server
Tools
Tool | What it does | Returns |
| Detects tuner, frequency range, gain | JSON |
| Sweeps a range, finds signals above the noise floor and tags each with its likely band allocation | JSON + spectrum image |
| Captures IQ around a frequency: occupied bandwidth, duty cycle, bursts, SNR | JSON + waterfall image |
| Demodulates WFM / NFM / AM / USB / LSB, saves WAV, transcribes speech with whisper.cpp | JSON + audio spectrogram |
| Repeated sweeps for minutes, finds transmitters that are only on now and then | JSON + frequency Γ time map |
| Decodes 200+ ISM protocols with rtl_433: weather stations, TPMS, doorbells, meters | JSON |
| Upcoming Meteor-M (LRPT 137.9 MHz) and ISS (145.800 MHz) passes | JSON |
The radio is a single shared resource, so calls are serialized with a lock.
Quick start
1. Hardware. Any RTL2832U dongle (RTL-SDR Blog V3/V4, NooElec, a generic DVB-T stick). The stock whip antenna works for FM, 433 MHz and cellular. Put it near a window.
2. System tools
# macOS
brew install librtlsdr rtl_433 whisper-cpp
# Debian / Ubuntu
sudo apt install rtl-sdr rtl-433 # whisper.cpp: build from https://github.com/ggml-org/whisper.cppSpeech-to-text is optional. To enable it, download a model:
mkdir -p ~/.cache/whisper && curl -L -o ~/.cache/whisper/ggml-small.bin \
https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-small.bin3. Install the server
uv tool install git+https://github.com/kiritomp3/rtl-sdr-mcp
# or: pipx install git+https://github.com/kiritomp3/rtl-sdr-mcp4. Connect it to your agent
Claude Code:
claude mcp add sdr -e SDR_LAT=52.52 -e SDR_LON=13.40 -- sdr-mcpClaude Desktop, Cursor and other MCP clients:
{
"mcpServers": {
"sdr": { "command": "sdr-mcp", "env": { "SDR_LAT": "52.52", "SDR_LON": "13.40" } }
}
}Then just ask:
"What's on the air around me? Survey 24β1100 MHz and explain the strongest signals."
"Find an FM station where people are talking right now and summarize it."
"Watch 433β435 MHz for 5 minutes and identify every device you catch."
"Is that narrow peak at 115 MHz a real transmitter or a spur? Prove it."
"When is the next good ISS pass? Listen to 145.800 during it."
Prefer fully autonomous runs? examples/agent.sh runs Claude Code headless and streams the agent's reasoning and tool calls to your terminal.
Configuration
Env var | Default | Meaning |
|
| rtl-sdr device index |
| tuner max | Gain in dB |
| unset | Your location, for satellite passes |
|
| Where WAV recordings and TLE cache go |
|
| whisper.cpp model |
Supported tuners (auto-detected): R820T/T2, R828D, R860 (V4), E4000, FC0012, FC0013, FC2580.
How it works
flowchart LR
A[LLM agent] -- MCP tool call --> S[sdr-mcp]
S -- rtl_power --> P[spectrum / activity]
S -- rtl_sdr IQ --> W[waterfall + stats]
S -- rtl_fm --> L[audio] --> T[whisper.cpp]
S -- rtl_433 --> D[device packets]
P & W & L --> I[PNG images]
I & T & D -- JSON + images --> AThe signal-processing helpers (peak finding, IQ spectrogram and burst statistics, activity detection) are plain NumPy and covered by hardware-free tests (pytest).
Roadmap
Ideas and PRs welcome:
capture_on_trigger: wait for a burst on a frequency and record it (IQ + waterfall)Meteor-M LRPT image capture via SatDump, with the agent describing the weather it sees
Radiosonde tracking (400β406 MHz) and landing prediction
ADS-B (
dump1090) aircraft toolSoapySDR backend for HackRF / Airspy / SDRplay
Long-running "radio memory": continuous logging plus a semantic search tool
Legal
Receive-only. Rules on listening to and especially disclosing the content of non-broadcast transmissions differ by country. Know yours before you ask an agent to summarize what it hears.
License
MIT
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogβ¦
This server cannot be deployed
Maintenance
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
Real-time planetary signal engine and Model Context Protocol (MCP) server for autonomous AI agents.
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Related MCP Servers
- AlicenseBqualityBmaintenanceEnables control of Software Defined Radios and decoding of radio protocols through an AI-friendly Model Context Protocol interface, supporting RTL-SDR and HackRF hardware for signal analysis and protocol decoding.3482 PyPI31MIT
- AlicenseNot gradedqualityDmaintenanceEnables natural language control of a live GNU Radio SDR flowgraph, allowing users to tune frequencies, adjust gain, capture IQ samples, analyze spectra, and detect signals through an MCP-compatible client.2MIT
- AlicenseBqualityBmaintenanceEnables AI agents to process RF signals, perform spectral analysis, and execute radar DSP primitives such as Range-Doppler processing and CFAR detection, supporting both file-based and live SDR capture.14MIT
- AlicenseBqualityAmaintenanceExposes spectral analysis and radar DSP primitives (FFTs, STFT spectrograms, 2D Range-Doppler processing, CA-CFAR detection, MVDR beamforming, Kalman tracking) as callable MCP tools for AI agents, running hardware-free on signal files.3MIT