WSJT-X MCP服务器

WSJT-X MCP服务器是一款将AI代理与WSJT-X软件连接的中间件,通过MCP协议实现业余无线电电台的远程监控、信号分析以及FT8/FT4等模式的自动QSO操作。

  • by SensorsIot
  • C++
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 SensorsIot/wsjt-x-MCP

使用说明

WSJT-X MCP Server

Control your Amateur Radio station with AI.

The WSJT-X MCP Server bridges the gap between modern AI agents (like Claude, ChatGPT, or Gemini) and the popular WSJT-X software. It enables your AI assistant to monitor radio traffic, analyze signals, and autonomously conduct QSOs on modes like FT8 and FT4.


Features

  • AI-Driven Control: Exposes WSJT-X functionality via the Model Context Protocol (MCP).
  • Multi-Instance Support: Control multiple radios/bands simultaneously from a single AI session.
  • Autonomous QSOs: "Fire-and-forget" QSO automation—tell the AI to "work that station," and the server handles the complete exchange sequence.
  • Windows Native: Designed primarily for Windows, with optional support for Raspberry Pi.
  • Dual Operation Modes:
    • FlexRadio Mode: Auto-launch WSJT-X instances for each slice with built-in CAT server (no external SmartCAT needed).
    • Standard Mode: Direct control for standard rigs (default: IC-7300).
  • Web Dashboard: Real-time monitoring and manual control interface on port 3000.
  • Live Monitoring: Stream decoded messages and signal reports directly to the AI context.

Architecture

The MCP Server runs locally on the same machine as your WSJT-X instances (PC or Raspberry Pi). It acts as a middleware, translating MCP requests from the AI Agent into UDP commands for WSJT-X.

Standard Mode

AI Agent <--MCP/stdio--> MCP Server <--UDP 2237--> WSJT-X <--CAT--> Radio (IC-7300)

FlexRadio Mode

AI Agent <--MCP/stdio--> MCP Server
                              |
              +---------------+---------------+
              |               |               |
         FlexClient    FlexRadio       HrdCatServer
         (VITA 49)      Manager        (HRD Protocol)
              |               |               |
              +-------+-------+-------+-------+
                      |               |
                  SmartSDR        WSJT-X
                      |          Instances
                  FlexRadio     (per slice)

FlexRadio Features:

  • Auto-discovery of FlexRadio on the network
  • Auto-launch WSJT-X instance for each slice
  • Built-in HRD CAT server (ports 7809-7812)
  • Bidirectional control: WSJT-X frequency/mode/PTT changes sync to FlexRadio
  • Auto-configuration of WSJT-X INI files (audio, rig, wide graph)

Capabilities

Category Functionality
Management Start/Stop instances, List active radios
Monitoring Live decodes, Frequency/Mode status, Signal reports
Control Set Frequency, Change Mode, PTT control
Automation Call CQ, Reply to Station, Execute Full QSO
Visualization Web Dashboard (port 3000), Action Logs

Installation

Prerequisites

  • Node.js (v18+)
  • WSJT-X installed (default: C:\WSJT\wsjtx\bin\wsjtx.exe)
  • For FlexRadio mode: SmartSDR running

Quick Start

# Clone the repository
git clone https://github.com/SensorsIot/wsjt-x-MCP.git
cd wsjt-x-MCP

# Install dependencies
npm install

# Build TypeScript
npx tsc

# Run the server
npm start

Web Dashboard

cd frontend
npm install
npm run dev    # Development with hot reload
# or
npm run build  # Production build

Access the dashboard at: http://localhost:3000

Configuration

Configuration is stored in config.json:

Standard Mode (default)

{
  "mode": "STANDARD",
  "wsjtx": {
    "path": "C:\\WSJT\\wsjtx\\bin\\wsjtx.exe"
  },
  "station": {
    "callsign": "YOUR_CALL",
    "grid": "YOUR_GRID"
  },
  "standard": {
    "rigName": "IC-7300"
  }
}

FlexRadio Mode

{
  "mode": "FLEX",
  "wsjtx": {
    "path": "C:\\WSJT\\wsjtx\\bin\\wsjtx.exe"
  },
  "station": {
    "callsign": "YOUR_CALL",
    "grid": "YOUR_GRID"
  },
  "flex": {
    "host": "auto",
    "catBasePort": 7831
  }
}

Environment Variables

  • WSJTX_MODE: Set to FLEX for FlexRadio mode (default: STANDARD)
  • FLEX_HOST: FlexRadio IP address (default: auto-discovery)
  • RIG_NAME: Rig name for Standard mode (default: IC-7300)

MCP Tools

The server exposes these tools to AI agents:

Tool Description
start_instance Launch a new WSJT-X instance
stop_instance Stop a running instance
execute_qso Autonomously complete a QSO with a target station

Project Structure

wsjt-x-MCP/
├── src/
│   ├── index.ts               # Entry point
│   ├── SettingsManager.ts     # Configuration management
│   │
│   ├── wsjtx/                 # WSJT-X management
│   │   ├── WsjtxManager.ts        # Main orchestrator
│   │   ├── ProcessManager.ts      # WSJT-X process lifecycle
│   │   ├── FlexRadioManager.ts    # FlexRadio slice management
│   │   ├── UdpListener.ts         # UDP message receiver
│   │   ├── UdpSender.ts           # UDP message sender
│   │   ├── QsoStateMachine.ts     # Autonomous QSO handler
│   │   ├── WindowManager.ts       # WSJT-X window positioning
│   │   └── WsjtxConfig.ts         # INI file auto-configuration
│   │
│   ├── state/                 # MCP state management
│   │   ├── StateManager.ts        # Aggregate MCP state
│   │   ├── ChannelUdpManager.ts   # Per-channel UDP
│   │   └── types.ts
│   │
│   ├── logbook/               # Logbook operations
│   │   └── LogbookManager.ts      # ADIF, WorkedIndex, HRD server
│   │
│   ├── dashboard/             # Web dashboard state
│   │   └── DashboardManager.ts    # Station tracking
│   │
│   ├── cat/                   # CAT control
│   │   └── HrdCatServer.ts        # HRD protocol server
│   │
│   ├── flex/                  # FlexRadio backend
│   │   ├── FlexClient.ts          # FlexRadio connection
│   │   ├── Vita49Client.ts        # VITA 49 protocol
│   │   └── FlexDiscovery.ts       # Auto-discovery
│   │
│   ├── mcp/                   # MCP protocol
│   │   └── McpServer.ts           # MCP stdio transport
│   │
│   └── web/                   # Web interface
│       └── server.ts              # Express + WebSocket
│
├── frontend/                  # React web dashboard
├── dist/                      # Compiled JavaScript
└── config.json                # Runtime configuration

Documentation

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.