AI-controllable Yaesu FT-991A transceiver interface with web GUI, CLI, and MCP server
Project description
FT-991A Control Package
AI-controllable Yaesu FT-991A transceiver interface with web GUI, command-line tools, and MCP server for AI integration.
๐ค AI Assistants: This package exposes FT-991A ham radio control via MCP (Model Context Protocol). Use
ft991a-mcpto launch the MCP server, then control frequency, mode, power, PTT, and monitor S-meter readings through standardized MCP tools.
Features
- ๐ Web GUI: Real-time web interface with WebSocket updates
- ๐ฅ๏ธ CLI Tools: Direct command-line control (
ft991a-cli) - ๐ค MCP Server: AI integration via Model Context Protocol (
ft991a-mcp) - ๐ก Full CAT Control: Frequency, mode, power, PTT, S-meter, band switching
- ๐ Safety Features: TX lockout, power limits, frequency validation
- ๐ Real-time Monitoring: Live status updates and S-meter readings
- ๐๏ธ Memory Management: Access programmed memory channels
- ๐ Hardware Interface: USB serial CAT control (38400 baud)
Quick Install
# Install from PyPI
pip install ft991a-control
# Launch web GUI
ft991a-web
# Launch MCP server for AI
ft991a-mcp
# Direct CLI control
ft991a-cli status
Quick Start Guide
1. Hardware Setup
- Connect FT-991A: USB-A to USB-B cable between radio and computer
- Enable CAT: Radio Menu โ 031 CAT RATE โ 38400 baud
- Check Device: Verify
/dev/ttyUSB0appears (Linux) - Permissions: Add user to
dialoutgroup:sudo usermod -a -G dialout $USER
2. Web GUI Mode
# Start web server
ft991a-web
# Open browser
firefox http://localhost:8000
Web Interface Features:
- Real-time frequency/mode display
- Click-to-tune frequency control
- S-meter visualization
- Mode buttons (LSB/USB/CW/FM/AM/FT8)
- Power control slider
- PTT button (with safety confirmation)
- Band switching buttons
3. Command Line Mode
# Get radio status
ft991a-cli status
# Set frequency (20m FT8)
ft991a-cli freq set 14074000
# Change mode to USB
ft991a-cli mode set DATA_USB
# Set power to 50W
ft991a-cli power set 50
# Switch to 40m band
ft991a-cli band 40M
# Get S-meter reading
ft991a-cli smeter
4. MCP Server Mode (AI Integration)
# Launch MCP server
ft991a-mcp --port /dev/ttyUSB0 --baud 38400
Available MCP Tools:
get_frequency/set_frequency- Tune the radioget_mode/set_mode- Change operating modesget_power/set_power- Control TX powerptt_on/ptt_off- Key/unkey transmitterget_smeter- Read signal strengthget_status- Complete radio statusset_band- Switch amateur bandsget_memories/recall_memory- Memory channels
Architecture
โโโโโโโโโโโโโโโโโโโ WebSocket โโโโโโโโโโโโโโโโโโโ
โ Web Browser โโโโโโโโโโโโโโโโโโโโค FastAPI โ
โ (ft991a-web) โ Real-time โ Web Server โ
โโโโโโโโโโโโโโโโโโโ Updates โโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโ โ
โ AI Assistant โโโโ MCP Protocol โโโโโโโโโค
โ (Claude, etc) โ โ
โโโโโโโโโโโโโโโโโโโ โ
โ
โโโโโโโโโโโโโโโโโโโ โ
โ CLI Tools โโโโ Direct Access โโโโโโโโค
โ (ft991a-cli) โ โ
โโโโโโโโโโโโโโโโโโโ โ
โ
โโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโ
โ FT991A CAT Library โ
โ (ft991a.cat) โ
โโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโ
โ USB Serial
โ 38400 baud
โ ASCII CAT
โผ
โโโโโโโโโโโโโโโโโโโ
โ Yaesu FT-991A โ
โ Transceiver โ
โโโโโโโโโโโโโโโโโโโ
Installation Options
From PyPI (Recommended)
pip install ft991a-control
Development Install
git clone https://github.com/heliosarchitect/lbf-ham-radio.git
cd lbf-ham-radio
pip install -e .
With Optional Dependencies
# Development tools
pip install ft991a-control[dev]
# Audio processing (future)
pip install ft991a-control[audio]
Configuration
Serial Port Settings
# Default settings
--port /dev/ttyUSB0
--baud 38400
# Custom settings
ft991a-cli --port /dev/ttyACM0 --baud 9600 status
ft991a-web --radio-port /dev/ttyUSB1 --radio-baud 19200
ft991a-mcp --port /dev/serial/by-id/usb-FTDI... --baud 38400
Radio Menu Settings
- Menu 031 (CAT RATE): Set to 38400 or match
--baudparameter - Menu 032 (CAT TOT): 10 min or longer for continuous operation
- Menu 033 (CAT RTS): Enable for hardware flow control
Safety & Best Practices
โ ๏ธ Important Safety Notes:
- RF Exposure: Observe FCC/IC RF exposure limits
- Antenna: Always verify proper antenna connection before PTT
- Power: Start with low power (5-10W) for testing
- Licensing: Ensure amateur radio license privileges for frequency/mode
- TX Lock: Use
toggle_tx_locktool to prevent accidental transmission
๐ Built-in Safety Features:
- Frequency range validation (30kHz - 56MHz)
- Power limits (5-100W)
- Mode validation per frequency
- TX lockout functionality
- Serial timeout protection
Troubleshooting
Connection Issues
# Check USB device
lsusb | grep -i ftdi
# Check serial ports
ls -la /dev/ttyUSB*
# Test permissions
groups $USER | grep dialout
# Manual connection test
ft991a-cli --port /dev/ttyUSB0 status
Common Problems
- Permission denied: Add user to
dialoutgroup, logout/login - Device not found: Check USB cable, try different port
- Radio not responding: Verify CAT enabled (Menu 031), correct baud rate
- Web GUI not accessible: Check firewall, try
--host 0.0.0.0
API Reference
Python Library
from ft991a import FT991A, Mode
# Connect to radio
radio = FT991A(port="/dev/ttyUSB0", baud=38400)
radio.connect()
# Basic operations
freq = radio.get_frequency()
radio.set_frequency(14074000) # 20m FT8
radio.set_mode(Mode.DATA_USB)
status = radio.get_status()
REST API (Web Server)
GET /api/status- Get radio statusPOST /api/frequency- Set frequencyPOST /api/mode- Set modePOST /api/power- Set TX powerWebSocket /ws- Real-time updates
Contributing
# Development setup
git clone https://github.com/heliosarchitect/lbf-ham-radio.git
cd lbf-ham-radio
pip install -e .[dev]
# Run tests (Note: tests need API signature updates)
pytest tests/
# Code formatting
black src/ tests/
isort src/ tests/
# Type checking
mypy src/
Note: Unit tests need to be updated to match the actual FT991A API signatures. Current tests use placeholder signatures and will be fixed in v0.3.1.
License
MIT License - see LICENSE file.
Hardware Support
Tested Hardware:
- Yaesu FT-991A (primary target)
- Linux (Ubuntu 22.04+, Debian 11+)
- USB-A to USB-B cables
Future Hardware:
- Other Yaesu radios with compatible CAT
- Windows/macOS support
- CI-V interface (Icom)
Screenshots
[Screenshots placeholder - will be added after web deployment]
Related Projects
- Hamlib: Cross-platform radio control library
- flrig: Rig control GUI by W1HKJ
- WSJT-X: Weak signal digital modes
- fldigi: Multi-mode digital modem
73! ๐ก Happy hamming with AI-controlled FT-991A
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ft991a_control-0.3.2.tar.gz.
File metadata
- Download URL: ft991a_control-0.3.2.tar.gz
- Upload date:
- Size: 32.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e663ba1e28ace29b5c9eacf09bf37732390f2422a6efec842f4e3edbcec8342b
|
|
| MD5 |
01d64ec75e125b4611036beb9d02310c
|
|
| BLAKE2b-256 |
e3866c0fbea07105e24bfc864787aacf62a1ba615159e51941e8e4abb0880dc1
|
File details
Details for the file ft991a_control-0.3.2-py3-none-any.whl.
File metadata
- Download URL: ft991a_control-0.3.2-py3-none-any.whl
- Upload date:
- Size: 28.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c81816d6e1ed2a21978b2cffee59ceda1dfff4b7b094b3da01c1986e22999b1
|
|
| MD5 |
7c63794c27e2a549f7ec5855a288b61e
|
|
| BLAKE2b-256 |
1a926e430fda35f12867a70b1b0b8dddc87cecff2ad64f7fe098076ed886aee6
|