adif-mcp
MCP server for the ADIF 3.1.7 specification: validate and parse ADIF records, search the spec's fields, enumerations and data types, and compute distance and heading between Maidenhead locators, through any MCP-compatible AI assistant.
Part of the qso-graph project. No authentication required — the ADIF specification is bundled, so it works offline.
Install
pip install adif-mcp
Tools
| Tool | Description | Key Parameters |
|---|---|---|
validate_adif_record |
Validate a raw ADIF record against the 3.1.7 spec | adif_string |
parse_adif |
Streaming parser for large ADIF files, with pagination | file_path, start_at, limit |
read_specification_resource |
Raw JSON for any spec module (band, mode, fields, ...) | resource_name |
list_enumerations |
All ADIF enumerations with entry counts | — |
search_enumerations |
Search enumeration records by keyword | search_term, enumeration |
calculate_distance |
Great-circle distance (km) between two Maidenhead locators | start, end |
calculate_heading |
Initial beam heading (azimuth) between two locators | start, end |
get_version_info |
Service version + upstream spec version (fleet identity attestation) | — |
What is ADIF?
ADIF (Amateur Data Interchange Format) is the standard file format amateur radio logging programs use to exchange QSO records. adif-mcp is the specification package of qso-graph: it validates, parses and searches ADIF so an assistant can work with logs safely and accurately. Credentials are handled separately by qso-graph-auth, and each logging service has its own MCP server (see qso-graph.io).
Quick Start
No credentials needed — just install and configure your MCP client.
Configure your MCP client
adif-mcp works with any MCP-compatible client. Add the server config and restart. The tools appear automatically.
Claude Desktop
Add to claude_desktop_config.json (~/Library/Application Support/Claude/ on macOS, %APPDATA%\Claude\ on Windows):
{
"mcpServers": {
"adif": {
"command": "adif-mcp"
}
}
}
Claude Code
Add to .claude/settings.json:
{
"mcpServers": {
"adif": {
"command": "adif-mcp"
}
}
}
ChatGPT Desktop
Configure via Settings > Apps & Connectors, or in your agent definition:
{
"mcpServers": {
"adif": {
"command": "adif-mcp"
}
}
}
Cursor
Add to .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"adif": {
"command": "adif-mcp"
}
}
}
VS Code / GitHub Copilot
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"adif": {
"command": "adif-mcp"
}
}
}
Gemini CLI
Add to ~/.gemini/settings.json (global) or .gemini/settings.json (project):
{
"mcpServers": {
"adif": {
"command": "adif-mcp"
}
}
}
Ask questions
"Is this ADIF record valid? CALL:5KI7MT<QSO_DATE:8>20260928BAND:320mMODE:3SSB"
"What values does the ADIF MODE enumeration allow for digital modes?"
"Parse my log file and show me the first 50 QSOs."
"How far is it from DN13 to JN48, and what heading should I point the beam?"
Compliance & Provenance
adif-mcp follows the ADIF Specification (currently 3.1.7) and uses registered Program IDs to identify all exports:
ADIF-MCP-- Core engineADIF-MCP-LOTW-- LoTW serverADIF-MCP-EQSL-- eQSL serverADIF-MCP-QRZ-- QRZ server
The project uses APP_ fields for provenance when augmenting records:
APP_ADIF-MCP_OP-- operation performed (normalize,validate,merge)APP_ADIF-MCP-LOTW_ACTION-- LoTW server operationAPP_ADIF-MCP-EQSL_TIME-- timestamp of eQSL merge
Development
git clone https://github.com/qso-graph/adif-mcp.git
cd adif-mcp
pip install -e ".[test]"
pytest
License
adif-mcp's own code is GPL-3.0-or-later. See LICENSE for details.
The ADIF specification files are not ours. The package includes the ADIF 3.1.6 and 3.1.7 specification exports, unmodified, from the ADIF Developers Group. They are ADIF's work, and our licence doesn't cover them. The only files in that folder that are ours are the derived Country enumeration and two small catalog files. See NOTICE.
Metadata
Release files for adif-mcp 1.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| adif_mcp-1.1.4.tar.gz | 461.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| adif_mcp-1.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 941.3 kB
Release files / adif_mcp-1.1.4.tar.gz
| Download URL | adif_mcp-1.1.4.tar.gz |
|---|---|
| Size | 461.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
00fe5c0a2dadde063d01a124c10ba4d488a2cf47359cb6759e4c935e1690f69a
|
|
BLAKE2b-256 checksum How to use checksums |
042320cdd6e5abc2c2013e5f68120f430e7873ae1a2e5dc8524cb2afdea2afde
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.
Transparency logRelease files / adif_mcp-1.1.4-py3-none-any.whl
| Download URL | adif_mcp-1.1.4-py3-none-any.whl |
|---|---|
| Size | 479.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5eb44458ae36d66d5ee42b622d794b4e8af61ba5d72cfb6550529ebb03c3b520
|
|
BLAKE2b-256 checksum How to use checksums |
5a4d0ca7a824338f89535f8ca9983f8f1e1228330b13784c917fe4800be478d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.
Transparency log