gnuradio-mcp-server
Provides tools to control a GNU Radio flowgraph, enabling tuning of SDR frequencies, adjusting gain, capturing IQ samples, analyzing spectra, and sweeping for signals.
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., "@gnuradio-mcp-serverTune to 100 MHz and capture IQ samples"
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.
GNU Radio MCP Server
An MCP (Model Context Protocol) server that bridges an LLM to a live GNU Radio SDR flowgraph. Control your software-defined radio — tune frequencies, adjust gain, capture IQ samples, analyse spectra, and sweep for signals — all through natural language via any MCP-compatible client.
Architecture
┌─────────────┐ MCP (stdio / HTTP) ┌──────────────────┐
│ LLM / │◄──────────────────────────────►│ gnuradio_mcp │
│ Claude │ tool calls & │ MCP Server │
│ Desktop │ responses │ │
└─────────────┘ └──┬──────────┬───┘
│ │
XML-RPC │ │ ZMQ SUB
(control) │ │ (IQ data)
▼ ▼
┌────────────────────┐
│ GNU Radio │
│ Companion │
│ Flowgraph │
│ ┌──────────────┐ │
│ │ XMLRPC Server │ │
│ │ ZMQ PUB Sink │ │
│ └──────────────┘ │
└────────┬───────────┘
│
▼
┌────────────────────┐
│ SDR Hardware │
│ (HackRF / RTL-SDR │
│ / USRP / Sim) │
└────────────────────┘Related MCP server: GR-MCP
Quick Start (Simulation — No Hardware)
pip install gnuradio-mcp-server
# Open simulation_mcp.grc in GNU Radio Companion and click Run
# (provides two test tones at +10 kHz and +50 kHz from center)
gnuradio-mcpQuick Start (HackRF)
pip install gnuradio-mcp-server
# Open hackrf_mcp.grc in GNU Radio Companion and click Run & ensure HackRF is connected
GNURADIO_HARDWARE=hackrf gnuradio-mcpClaude Desktop Integration
Add the following to your claude_desktop_config.json:
{
"mcpServers": {
"gnuradio_mcp": {
"command": "gnuradio-mcp",
"args": [],
"env": {
"GNURADIO_HARDWARE": "hackrf",
"GNURADIO_GR_HOST": "127.0.0.1",
"GNURADIO_GR_XMLRPC_PORT": "8080",
"GNURADIO_GR_ZMQ_PORT": "5555"
}
}
}
}For HTTP transport:
{
"mcpServers": {
"gnuradio_mcp": {
"url": "http://127.0.0.1:8000/mcp",
"transport": "streamable-http"
}
}
}Tools Reference
# | Tool Name | Description | Read-Only |
1 |
| Start the GNU Radio flowgraph | No |
2 |
| Stop the GNU Radio flowgraph | No |
3 |
| Get flowgraph status and current parameters | Yes |
4 |
| Set the SDR center frequency | No |
5 |
| Set the SDR sample rate | No |
6 |
| Set the SDR gain (IF/RF/BB stages) | No |
7 |
| Set an arbitrary flowgraph variable | No |
8 |
| Read an arbitrary flowgraph variable | Yes |
9 |
| List all flowgraph variables | Yes |
10 |
| Capture IQ samples and return a power summary | Yes |
11 |
| FFT/PSD analysis with peak detection | Yes |
12 |
| Sweep a frequency range and detect active signals | Yes |
13 |
| Health check (XML-RPC + ZMQ connectivity) | Yes |
Environment Variables
All variables use the GNURADIO_ prefix:
Variable | Default | Description |
|
| GNU Radio host address |
|
| XML-RPC server port |
|
| ZMQ PUB sink port |
|
| XML-RPC timeout in seconds |
|
| ZMQ receive timeout in ms |
|
| Hardware type: hackrf/rtlsdr/usrp/simulation |
|
| Minimum tunable frequency (Hz) |
|
| Maximum tunable frequency (Hz) |
|
| Minimum gain (dB) |
|
| Maximum gain (dB) |
|
| Minimum sample rate (sps) |
|
| Maximum sample rate (sps) |
|
| Default sample rate for DSP |
|
| Transport: stdio / streamable_http |
|
| HTTP transport port |
Edge Cases & Known Limitations
Sample rate restart: Some SDR hardware (especially RTL-SDR) requires a flowgraph restart after changing the sample rate. The
gnuradio_set_sample_ratetool includes a warning about this.ZMQ dtype requirement: The ZMQ PUB Sink in your flowgraph must output
complex64(8 bytes per sample). Misaligned data will raise aGRHardwareError.Frequency clamping: Frequencies outside the configured
[freq_min_hz, freq_max_hz]range are rejected before being sent to hardware. Adjust the env vars for your specific hardware.Context overflow warning: Capturing more than 65,536 IQ samples triggers a warning, as the response summary may still be large. Use
gnuradio_get_spectrum_snapshotfor analysed results instead.XML-RPC not thread-safe: A new
ServerProxyis created per RPC call to avoid shared-state bugs in async contexts.ZMQ socket lifecycle: Each
recv_samplescall opens and closes its own ZMQ SUB socket. This is intentional — the slight overhead avoids shared-socket state issues.
Development
# Install in development mode
pip install -e ".[dev]"
# Run tests
pytest tests/ -v
# Run with HTTP transport
GNURADIO_TRANSPORT=streamable_http python -m gnuradio_mcp.serverLicense
MIT
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.
Latest Blog Posts
- 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/Pranav-d33/gnuradio-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server