使用说明
GNU无线电MCP服务器
一种MCP(模型上下文协议)服务器,将LLM连接到实时GNU无线电SDR流图。通过任何兼容MCP的客户端,通过自然语言控制软件定义的无线电——调谐频率、调整增益、捕获IQ样本、分析频谱和扫描信号。
建筑
┌─────────────┐ 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) │
└────────────────────┘
快速入门(模拟——无硬件)
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-mcp
快速入门(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-mcp
Claude桌面集成
将以下内容添加到您的 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"
}
}
}
}
对于HTTP传输:
{
"mcpServers": {
"gnuradio_mcp": {
"url": "http://127.0.0.1:8000/mcp",
"transport": "streamable-http"
}
}
}
工具参考
| # | 工具名称 | 描述 | 只读 |
|---|---|---|---|
| 1 | gnuradio_flowgraph_start |
启动GNU无线电流程图 | 否 |
| 2 | gnuradio_flowgraph_stop |
停止GNU无线电流程图 | 否 |
| 3 | gnuradio_flowgraph_status |
获取流程图状态和当前参数 | 是 |
| 4 | gnuradio_set_center_frequency |
设置SDR中心频率 | 否 |
| 5 | gnuradio_set_sample_rate |
设置SDR采样率 | 否 |
| 6 | gnuradio_set_gain |
设置SDR增益(IF/RF/BB级) | 否 |
| 7 | gnuradio_set_variable |
设置任意流程图变量 | 否 |
| 8 | gnuradio_get_variable |
读取任意流程图变量 | 是 |
| 9 | gnuradio_list_variables |
列出所有流程图变量 | 是 |
| 10 | gnuradio_capture_samples |
采集IQ样本并返回功率摘要 | 是 |
| 11 | gnuradio_get_spectrum_snapshot |
带峰值检测的FFT/PSD分析 | 是 |
| 12 | gnuradio_detect_signals |
扫描频率范围并检测活动信号 | 是 |
| 13 | gnuradio_ping |
健康检查(XML-RPC+ZMQ连接) | 是 |
环境变量
所有变量都使用 GNURADIO_ 前缀:
| 变量 | 默认值 | 描述 |
|---|---|---|
GNURADIO_GR_HOST |
127.0.0.1 |
GNU无线电主机地址 |
GNURADIO_GR_XMLRPC_PORT |
8080 |
XML-RPC服务器端口 |
GNURADIO_GR_ZMQ_PORT |
5555 |
ZMQ PUB接收端口 |
GNURADIO_GR_XMLRPC_TIMEOUT |
5 |
XML-RPC超时(秒) |
GNURADIO_GR_ZMQ_TIMEOUT_MS |
3000 |
ZMQ接收超时(毫秒) |
GNURADIO_HARDWARE |
hackrf |
硬件类型:hackrf/rtlsdr/usrp/模拟 |
GNURADIO_FREQ_MIN_HZ |
1000000 |
最小可调频率(Hz) |
GNURADIO_FREQ_MAX_HZ |
6000000000 |
最大可调频率(Hz) |
GNURADIO_GAIN_MIN_DB |
0 |
最小增益(dB) |
GNURADIO_GAIN_MAX_DB |
62 |
最大增益(dB) |
GNURADIO_SAMP_RATE_MIN |
100000 |
最小采样率(sps) |
GNURADIO_SAMP_RATE_MAX |
20000000 |
最大采样率(sps) |
GNURADIO_DEFAULT_SAMP_RATE |
2000000 |
DSP的默认采样率 |
GNURADIO_TRANSPORT |
stdio |
传输:stdio/streamable_http |
GNURADIO_HTTP_PORT |
8000 |
HTTP传输端口 |
边缘案例和已知限制
-
采样率重启:一些SDR硬件(特别是RTL-SDR)在更改采样率后需要重新启动流程图。这
gnuradio_set_sample_rate该工具包含有关此问题的警告。 -
ZMQ数据类型要求:流程图中的ZMQ PUB水槽 必须 输出
complex64(每个样本8个字节)。数据错位将引发GRHardwareError. -
频率箝位:配置之外的频率
[freq_min_hz, freq_max_hz]范围在发送到硬件之前被拒绝。根据您的特定硬件调整环境变量。 -
上下文溢出警告:捕获超过65536个IQ样本会触发警告,因为响应摘要可能仍然很大。使用
gnuradio_get_spectrum_snapshot取而代之的是分析结果。 -
XML-RPC不是线程安全的:一个新的
ServerProxy为避免异步上下文中的共享状态错误,每次RPC调用都会创建。 -
ZMQ插座生命周期:每个
recv_samples调用打开和关闭其自己的ZMQ SUB套接字。这是有意的——轻微的开销避免了共享套接字状态问题。
发展
# 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.server
许可证
麻省理工学院