Observed since 20 Oct, 20:54 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
MCP server for Software Defined Radio — control RTL-SDR & HackRF from Claude
Control Software Defined Radios and decode radio protocols through an AI-friendly Model Context Protocol interface.
pip install aetherlink
aetherlink --setup
That's it. The --setup command auto-configures Claude Desktop -- it detects your OS, finds the config file, and adds AetherLink without touching your other MCP servers. Then restart Claude Desktop.
Or if you prefer uvx (no install needed):
uvx aetherlink --setup
Note: You still need RTL-SDR system drivers installed. See System Dependencies below.
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/N-Erickson/AetherLink-SDR-MCP/main/install.sh | bash
Windows (PowerShell):
irm https://raw.githubusercontent.com/N-Erickson/AetherLink-SDR-MCP/main/install.ps1 | iex
The installer handles everything: system drivers, Python package, optional decoders, and Claude Desktop configuration.
Windows users: You also need Zadig to replace the RTL-SDR USB driver with WinUSB. The installer will walk you through this.
AetherLink requires RTL-SDR drivers installed at the system level:
| Tool | macOS | Ubuntu/Debian | Purpose |
|---|---|---|---|
| RTL-SDR | brew install rtl-sdr | sudo apt install rtl-sdr librtlsdr-dev | Required - SDR drivers |
| dump1090 | brew install dump1090-fa | sudo apt install dump1090-fa | Optional - ADS-B aircraft tracking |
| rtl_433 | brew install rtl_433 | sudo apt install rtl-433 | Optional - ISM band devices |
| SatDump | brew install satdump | PPA instructions | Optional - satellite imaging |
| multimon-ng | Built from source by installer | sudo apt install multimon-ng | Optional - POCSAG pagers |
git clone https://github.com/N-Erickson/AetherLink-SDR-MCP
cd AetherLink-SDR-MCP
python3 -m venv venv
source venv/bin/activate
pip install -e ".[dev]"
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or equivalent:
{
"mcpServers": {
"aetherlink": {
"command": "/path/to/AetherLink-SDR-MCP/venv/bin/python",
"args": ["-m", "sdr_mcp.server"],
"cwd": "/path/to/AetherLink-SDR-MCP"
}
}
}
Important: Replace /path/to/ with your actual path. Run which python with your venv activated to find the correct Python path.
Quit completely (Cmd+Q) and restart Claude Desktop to load the MCP server.
In Claude Desktop:
Connect to my RTL-SDR
You should see: "Successfully connected to RTL-SDR"
~/Library/Logs/Claude/mcp-server-aetherlink.log/etc/udev/rules.d/20-rtlsdr.rules) and blacklist the dvb_usb_rtl28xxu kernel module.| Device | RX Frequency | TX Support | Status | Tested |
|---|---|---|---|---|
| RTL-SDR | 24 MHz - 1766 MHz | ❌ | ✅ Stable | ✅ Yes |
| HackRF One | 1 MHz - 6 GHz | ✅ | ✅ Working | ⚠️ Limited |
| Nooelec E4000 | 55 MHz - 2300 MHz | ❌ | ✅ Stable | ✅ Yes |
| Protocol | Description | Status |
|---|---|---|
| ADS-B | Aircraft tracking | ✅ Ready |
| POCSAG | Pager decoding | ✅ Ready |
| AIS | Ship tracking | ✅ Ready |
| Meteor-M LRPT | Weather satellites (M2-3, M2-4) | ✅ Ready |
| ISM Band | 433MHz/315MHz devices | ✅ Ready |
ADS-B (1090 MHz):
dump1090 subprocess for demodulation and raw TCP outputduration=0 to run until stoppedPOCSAG (152/454/929 MHz):
multimon-ng for professional decodingAIS (161.975/162.025 MHz):
Meteor-M LRPT (137 MHz):
satdump subprocess for OQPSK demodulationISM Band (433/315/868/915 MHz):
rtl_433 subprocess for decodingsdr_connect - Connect to RTL-SDR or HackRFsdr_disconnect - Disconnect from SDRsdr_set_frequency - Set center frequency in Hzsdr_set_gain - Set gain (dB or 'auto')sdr_get_status - Get hardware statusaviation_track_aircraft - Start ADS-B tracking on 1090 MHzaviation_stop_tracking - Stop trackingaviation_get_aircraft - Get list of tracked aircraftpager_start_decoding - Start POCSAG decoderpager_stop_decoding - Stop decodingpager_get_messages - Get decoded messagesmarine_track_vessels - Start AIS ship trackingmarine_stop_tracking - Stop trackingmarine_get_vessels - Get vessel listsatellite_decode_meteor - Decode Meteor-M2-3/M2-4 LRPT satellite passism_start_scanning - Start scanning ISM bands (433/315/868/915 MHz) with multi-frequency hoppingism_stop_scanning - Stop ISM band scanningism_get_devices - Get detected devices (weather stations, sensors, etc.)spectrum_analyze - Analyze RF spectrum (FFT, signal detection)spectrum_scan - Scan frequency rangerecording_start/recording_stop - Record raw IQ samples (saved to /tmp/sdr_recordings/)audio_record_start/audio_record_stop - Record demodulated audio as WAV (FM/AM)hackrf_set_tx_gain - Set transmit gainsignal_generator - Generate and transmit signalsTrack aircraft in my area
After 30-60 seconds:
Show me the aircraft
Set frequency to 152.240 MHz
Start paging decoder at 1200 baud
Wait a few minutes, then:
Get pager messages
Note: Check RadioReference.com for active pager frequencies in your area.
Set frequency to 100 MHz
Analyze the spectrum
Scan from 430 MHz to 440 MHz with 1 MHz steps
Set frequency to 103.7 MHz
Start audio recording with FM modulation and description "Local FM station"
Wait for desired duration (e.g., 30 seconds), then:
Stop audio recording
Files saved to: /tmp/sdr_recordings/audio_YYYYMMDD_HHMMSS_XXXMHz_FM.wav
Set frequency to 103.7 MHz
Start recording with description "Raw baseband data"
Wait for desired duration, then:
Stop recording
Files saved to: /tmp/sdr_recordings/recording_YYYYMMDD_HHMMSS_XXXMHz.iq
Use case: Advanced analysis, replay, or processing with GNU Radio/SDR#
Decode Meteor-M2-4 satellite for 600 seconds
Requirements:
brew install satdump)What you get:
/tmp/sdr_recordings/meteor_METEOR-M2-4_*/Tips:
Start ISM scanning on 433.92 MHz and 315 MHz with 30 second hop interval
Wait 1-2 minutes for devices to transmit, then:
Show me the ISM devices
Common devices detected:
Tips:
[433.92, 315] or [868, 915]AetherLink-SDR-MCP/
├── sdr_mcp/
│ ├── server.py # Main MCP server (26 tools)
│ ├── __main__.py # python -m sdr_mcp entry point
│ ├── hardware/
│ │ ├── base.py # Abstract SDR device base class
│ │ ├── rtlsdr.py # RTL-SDR interface
│ │ └── hackrf.py # HackRF interface
│ ├── decoders/
│ │ ├── pocsag.py # POCSAG pager decoder
│ │ ├── ais.py # AIS ship decoder
│ │ ├── rtl433.py # ISM band device decoder
│ │ └── meteor_lrpt.py # Meteor-M LRPT satellite decoder
│ ├── analysis/
│ │ └── spectrum.py # Spectrum analysis, signal detection
│ └── utils/
│ └── validators.py # Input validation and safety checks
├── tests/ # All test scripts
├── pyproject.toml # Package configuration
└── readme.md # This file
Device Management:
Decoders:
dump1090 subprocess + pyModeS + optional hexdb.io lookuprtl_433 subprocess with JSON output + multi-frequency hoppingrtl_fm + multimon-ng pipelineDownload counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.3 | 8 May 2026 | 16 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 20:54 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:b3881e7c17b56d7b70eee1780ca131f76f3772589ba8dbd28e33800412f83083