rokhmanov/mcp-server-pskreporter
If you are the rightful owner of mcp-server-pskreporter and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The PSK Reporter MCP Server provides real-time amateur radio propagation data from PSKReporter via Claude Desktop.
get_spots
Collect real-time amateur radio propagation spots with filtering options.
PSK Reporter MCP Server
A Model Context Protocol (MCP) server that provides real-time amateur radio propagation data from PSKReporter via Claude Desktop.
Features
- Real-time Propagation Data: Collect live spots from amateur radio stations worldwide
- Advanced Filtering: Filter by band, mode, callsign, location, and country
- DXCC Entity Support: Full country/territory mapping with intelligent name variations
- MCP Resource: Discover available countries and their common variations
- Threaded Architecture: Non-blocking MQTT collection for responsive performance
Installation
Prerequisites
- Python 3.13 or higher
- uv package manager
- Claude Desktop application
Setup
-
Clone or download this repository
git clone <your-repo-url> cd mcp-server-pskreporter
-
Install dependencies with uv
uv sync
-
Choose your installation method:
Option A: Development Mode (For direct command usage)
uv pip install -e .
This installs the package in development mode in the local virtual environment, making the
pskreporter-mcp-server
command available within this project's environment. Use this if you want to run the command directly from the project directory.Option B: Project-based execution (For Claude Desktop - No installation needed)
uv run --project . pskreporter-mcp-server
This runs the server directly from the project directory without installation. This is what Claude Desktop uses by default.
-
Verify the server works
If you used Option A (development mode):
# Make sure you're in the project directory pskreporter-mcp-server
If you used Option B (project-based):
uv run --project . pskreporter-mcp-server
The server should start and be ready to accept MCP connections.
Adding to Claude Desktop
Method 1: Using Configuration File (Recommended)
-
Copy the configuration file to Claude Desktop's configuration directory:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Linux:
~/.config/Claude/claude_desktop_config.json
- Windows:
-
Update the path in
claude_desktop_config.json
to match your system:{ "mcpServers": { "pskreporter": { "command": "uv", "args": ["run", "--project", "C:\\Users\\rokhm\\git\\mcp-server-pskreporter", "pskreporter-mcp-server"], "env": {} } } }
-
Restart Claude Desktop
Note: The claude_desktop_config.json
file in this repository is pre-configured for the current path. If you move the project, update the path in the --project
argument accordingly.
Method 2: Using Claude Desktop UI
- Open Claude Desktop
- Go to Settings → MCP Servers
- Click Add Server
- Configure the server:
- Name:
pskreporter
- Command:
uv
- Arguments:
run --project C:\Users\rokhm\git\mcp-server-pskreporter pskreporter-mcp-server
- Working Directory:
C:\Users\rokhm\git\mcp-server-pskreporter
(your project folder)
- Name:
- Click Save
Method 3: Alternative Commands
You can also run the server using these alternative methods:
Direct Python execution:
python -m pskreporter_mcp_server
Using uv run:
uv run pskreporter-mcp-server
Development mode:
uv run mcp dev pskreporter_mcp_server.py
Usage
Once connected to Claude Desktop, you can use these tools and resources:
get_spots
Tool
Collect real-time amateur radio propagation spots with filtering options.
Parameters:
band
: Amateur radio band (e.g., "20m", "40m", "80m", "160m", "10m", "15m", "17m", "30m", "12m", "6m", "2m")mode
: Operating mode (e.g., "FT8", "FT4", "CW", "SSB", "PSK31", "RTTY")sendercall
: Specific station callsign (e.g., "W9KM", "JA1ABC")receivercall
: Callsign of receiving stationsenderlocator
: Maidenhead grid locator of sending station (e.g., "EN51", "JO20")receiverlocator
: Maidenhead grid locator of receiving stationsendercountry
: Country name for sender's country (e.g., "Japan", "USA", "Germany")receivercountry
: Country name for receiver's countryduration
: Collection time in seconds (5-30, default: 10)
Country Name Features:
- Case-insensitive: "japan", "JAPAN", "Japan" all work the same
- Partial matching: "swains" matches "Swains I.", "korea" matches "Republic of Korea"
- Common variations: "USA", "UK", "Germany" are automatically mapped to their full names
- 340+ entities: Full DXCC entity support for worldwide coverage
Examples:
- "Show me FT8 activity on 20m from Japan"
- "Find USA stations on 40m"
- "What bands is W9KM operating on?"
- "Show me stations from Germany on 80m"
dxcc_entities
Resource
Discover available countries and their variations for better filtering.
Resource Features:
- Complete Entity List: All 340 DXCC entities with official names
- Name Variations: Common variations for each country (e.g., "USA" for "United States of America")
- Usage Examples: Ready-to-use examples for the
get_spots
tool - Search Tips: Guidance for effective country name usage
How to Use:
- Browse all available countries and territories
- See common variations for each country
- Get exact names to use in
get_spots
parameters - Discover new DXCC entities you might not know about
Example Resource Data:
{
"code": "291",
"name": "United States of America",
"name_variations": ["United States", "USA", "US", "America"]
}
Country Name Discovery
The dxcc_entities
resource provides comprehensive country information:
- Official Names: Use exact DXCC entity names for best results
- Common Variations: Popular abbreviations and alternative names
- Case Flexibility: All names work regardless of capitalization
- Partial Matching: Find countries even with incomplete names
Popular Examples:
- United States: "USA", "US", "America", "United States of America"
- United Kingdom: "UK", "Great Britain", "Britain", "England"
- Germany: "Germany", "Deutschland", "DE"
- Japan: "Japan" (no common variations)
- Swains Island: "Swains", "Swains I.", "Swains Island"
Data Source
This server connects to the PSKReporter MQTT feed at mqtt.pskreporter.info
to retrieve live propagation data from amateur radio stations worldwide.
Troubleshooting
Common Issues
-
Server won't start
- Ensure Python 3.13+ is installed
- Ensure uv is installed:
curl -LsSf https://astral.sh/uv/install.sh | sh
- Check dependencies are installed:
uv sync
-
No spots collected
- Increase the
duration
parameter (up to 30 seconds) - Use broader filters (fewer parameters)
- Check your internet connection
- Increase the
-
Country name not found
- Use the
dxcc_entities
resource to find exact country names - Try common variations (e.g., "USA" instead of "United States of America")
- Check for typos and try partial matches
- Use the
-
Claude Desktop can't connect
- Verify the path in
claude_desktop_config.json
is correct - Ensure the server starts successfully when run manually:
uv run pskreporter-mcp-server
- Check Claude Desktop logs for error messages
- Verify the path in
-
"File not found" errors
- Make sure the working directory points to the folder containing
pskreporter_mcp_server.py
- Verify all project files are in the same directory
- Make sure the working directory points to the folder containing
-
"program not found" or "Failed to spawn" errors
- If you get "Failed to spawn 'pskreporter-mcp-server' caused by: program not found" when running the command directly, you need to install the package in development mode:
uv pip install -e .
- After installation, the
pskreporter-mcp-server
command will be available within the project's virtual environment - Note: Claude Desktop uses
uv run --project
which doesn't require installation - the providedclaude_desktop_config.json
works without any additional setup
- If you get "Failed to spawn 'pskreporter-mcp-server' caused by: program not found" when running the command directly, you need to install the package in development mode:
Debug Information
The server creates a debug log file mcp_server_debug.log
with detailed information about:
- MQTT connection status
- Spot collection progress
- Country name resolution
- Error messages and stack traces
Development
This project uses uv
for dependency management. Key commands:
uv sync
- Install dependenciesuv run pskreporter-mcp-server
- Run the serveruv run --project C:\Users\rokhm\git\mcp-server-pskreporter pskreporter-mcp-server
- Run from any directorypython -m pskreporter_mcp_server
- Run as Python module
Configuration
Claude Desktop Configuration
The claude_desktop_config.json
file is pre-configured to use uv run --project
:
{
"mcpServers": {
"pskreporter": {
"command": "uv",
"args": ["run", "--project", "C:\\Users\\rokhm\\git\\mcp-server-pskreporter", "pskreporter-mcp-server"],
"env": {}
}
}
}
Key points:
- Uses
uv run --project
command for direct project execution --project
argument points to the local project directory- No pre-installation required (uv handles dependencies automatically)
- The executable name is
pskreporter-mcp-server
(with hyphens)
DXCC Entities Configuration
The server uses a YAML-based configuration for DXCC entities (dxcc_entities.yaml
) that provides:
- Easy Maintenance: Country names and variations are stored in a human-readable YAML file
- Flexible Updates: Add or modify country variations without touching code
- Structured Data: Clear separation between canonical names and common variations
File Structure:
dxcc_entities:
"291":
canonical_name: "United States of America"
name_variations: ["USA", "US", "United States", "America"]
"339":
canonical_name: "Japan"
name_variations: []
Adding Country Variations:
To add variations for a country, simply edit the dxcc_entities.yaml
file:
- Find the country by its DXCC code
- Add variations to the
name_variations
array - Restart the server to apply changes
Example:
"339":
canonical_name: "Japan"
name_variations: ["Nippon", "Nihon"]
The server automatically loads these changes on startup, making it easy to maintain and extend country name support.
73! Andriy W9KM