GNU Radio MCP服务器

一个MCP(模型上下文协议)服务器,将LLM连接到实时GNU Radio SDR流程图,通过自然语言控制软件定义无线电。

  • by Pranav-d33
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 Pranav-d33/gnuradio-mcp-server

使用说明

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传输端口

边缘案例和已知限制

  1. 采样率重启:一些SDR硬件(特别是RTL-SDR)在更改采样率后需要重新启动流程图。这 gnuradio_set_sample_rate 该工具包含有关此问题的警告。

  2. ZMQ数据类型要求:流程图中的ZMQ PUB水槽 必须 输出 complex64 (每个样本8个字节)。数据错位将引发 GRHardwareError.

  3. 频率箝位:配置之外的频率 [freq_min_hz, freq_max_hz] 范围在发送到硬件之前被拒绝。根据您的特定硬件调整环境变量。

  4. 上下文溢出警告:捕获超过65536个IQ样本会触发警告,因为响应摘要可能仍然很大。使用 gnuradio_get_spectrum_snapshot 取而代之的是分析结果。

  5. XML-RPC不是线程安全的:一个新的 ServerProxy 为避免异步上下文中的共享状态错误,每次RPC调用都会创建。

  6. 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

许可证

麻省理工学院