Skip to main content
Glama

adif-mcp

PyPI MCP Registry

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

uvx adif-mcp            # run it; nothing to install

Related MCP server: qrz-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": "uvx",
      "args": ["adif-mcp"]
    }
  }
}

Claude Code

Add to .claude/settings.json:

{
  "mcpServers": {
    "adif": {
      "command": "uvx",
      "args": ["adif-mcp"]
    }
  }
}

ChatGPT Desktop

Configure via Settings > Apps & Connectors, or in your agent definition:

{
  "mcpServers": {
    "adif": {
      "command": "uvx",
      "args": ["adif-mcp"]
    }
  }
}

Cursor

Add to .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):

{
  "mcpServers": {
    "adif": {
      "command": "uvx",
      "args": ["adif-mcp"]
    }
  }
}

VS Code / GitHub Copilot

Add to .vscode/mcp.json in your workspace:

{
  "servers": {
    "adif": {
      "command": "uvx",
      "args": ["adif-mcp"]
    }
  }
}

Gemini CLI

Add to ~/.gemini/settings.json (global) or .gemini/settings.json (project):

{
  "mcpServers": {
    "adif": {
      "command": "uvx",
      "args": ["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?"

What the validator checks

adif-mcp ships ADIF 3.1.7 as ADIF publishes it: 186 fields, 25 enumerations and 28 data types. validate_adif_record checks each field against its ADIF data type and, for enumerated fields, against the enumeration:

  • Enumeration values match regardless of case, so LoTW's BAND=15M is accepted as 15m.

  • Import-only values (42 of the Mode enumeration's 91 entries, for example) give a warning, not an error: ADIF allows them on import but not in new records.

  • Compound values such as CREDIT_SUBMITTED (a list of Credit or Credit:Medium entries) are checked entry by entry.

  • SUBMODE must be a valid Submode; one that belongs to a different MODE gives a warning. FT4, for example, is MODE=MFSK with SUBMODE=FT4.

  • Structured types are checked against the grammar ADIF states for them: grid squares (2, 4, 6 or 8 characters, any case) and their extensions and lists (VUCC needs two or four, each four or six characters), Location (XDDD MM.MMM), Boolean (Y or N), and IOTA, WWFF, POTA and SOTA references. What the grammar allows but cannot be right, such as a latitude over 90 degrees or N/S on a longitude, is a warning, never an error.

The server also publishes the MCP resource adif://system/version: the service version and the ADIF specification version it serves.

MCP Inspector

adif-mcp --transport streamable-http --port 8003

Then open the MCP Inspector at http://localhost:8003.

Development

git clone https://github.com/qso-graph/adif-mcp.git
cd adif-mcp
uv sync --group dev
uv run 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 ADIF's published files for two versions, the previous and the current (3.1.6 and 3.1.7 today), unmodified: every file in ADIF's resource zip except its test material, in every format ADIF publishes (JSON, XML with all.xml and the XSD, CSV, TSV, XLSX, ODS), with a MANIFEST.json of their SHA-256s per version, 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 each version's MANIFEST.json. See NOTICE.

Available Tools

8 tools
calculate_distanceCalculate DistanceB
Read-onlyIdempotent

Calculates distance (km) between Maidenhead locators.

NameRequiredDescriptionDefault
endYes
startYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this read-only, idempotent, non-destructive and closed-world, so the safety profile is fully covered by structured data. The description contributes one real fact beyond that – the result unit is kilometres – but says nothing about invalid-locator handling or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the unit is stated inline rather than tacked on. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety and idempotency, the remaining burden is small: the description need only characterize the inputs. It does that at a high level but omits locator format and error behavior, the two things an agent is most likely to get wrong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameters. 'Maidenhead locators' does establish the expected value type for both start and end, but it gives no format example (e.g. 'IO91wm'), no case or precision rules, and no way to tell which endpoint is which.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (calculates) and resource (distance between two points) plus the unit (km). It implicitly separates itself from calculate_heading by naming 'distance', but never mentions that sibling explicitly, so an agent must infer the split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no 'use this when...' guidance, no exclusion of alternatives such as calculate_heading, and no statement of prerequisites. The only usable signal is the word 'distance', which requires inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calculate_headingCalculate HeadingB
Read-onlyIdempotent

Calculates heading (azimuth) between Maidenhead locators.

NameRequiredDescriptionDefault
endYes
startYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safe, read-only, idempotent, non-destructive behavior. The description adds domain context about azimuth and Maidenhead locators, but does not explain direction convention, units, or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; appropriately sized for a simple calculation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and annotations plus output schema cover much of the context. However, the description leaves meaningful gaps around parameter format and start-to-end direction semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It indicates both inputs are Maidenhead locators, but does not specify locator format or clarify that heading is computed from start to end.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: calculates heading/azimuth between Maidenhead locators. It is clearly distinct from calculate_distance by output type, though it does not explicitly reference that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the tool is for heading calculation between locators, but gives no explicit when-to-use guidance, prerequisites, or comparison to calculate_distance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_version_infoGet Version InfoA
Read-onlyIdempotent

Returns the version of the ADIF-MCP server and spec.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds only that both the server version and the spec version are returned, which is mildly useful context but nothing beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero waste, front-loaded on what is returned. Nothing could be cut without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description need not enumerate return fields, and the scope (server version + spec version) is stated. For a trivial zero-arg metadata tool this is complete; only minor informational gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so baseline is 4. The description does not need to explain any inputs, and correctly says nothing about them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Returns') and resource ('version of the ADIF-MCP server and spec'). None of the siblings deal with versioning, so it is trivially distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the tool's scope — call it to learn server/spec versions — but there is no explicit when-to-use or when-not-to-use guidance. For a zero-arg, read-only metadata tool this is largely self-evident, so implied usage is adequate rather than exemplary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_enumerationsList EnumerationsA
Read-onlyIdempotent

Lists the 26 enumerations: ADIF 3.1.7's 25 plus Country (derived).

Each entry's source says whether it is ADIF's own export or derived by adif-mcp, so a consumer loading reference tables can tell them apart.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, closed-world, non-destructive, so safety is covered. The description adds genuine value beyond that by explaining the semantics of the `source` field (ADIF's own export vs. derived by adif-mcp), which affects how a consumer should interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste, with the core fact (26 enumerations, 25 + 1 derived) front-loaded before the interpretive note about `source`.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out here, and the description still clarifies the one field whose meaning is non-obvious (`source`). For a trivial no-arg list tool this is essentially complete; only the sibling contrast is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists the 26 enumerations') and even quantifies the payload, noting 25 ADIF 3.1.7 enumerations plus a derived Country one. It does not explicitly contrast with the sibling `search_enumerations`, so an agent must infer that this is the exhaustive listing versus a filtered lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'so a consumer loading reference tables can tell them apart' implies the load-everything use case, which softly distinguishes it from `search_enumerations`. However, there is no explicit when-to-use/when-not statement or pointer to the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

parse_adifParse AdifC
Read-onlyIdempotent

Streaming parser for large ADIF files with record seeking.

SECURITY NOTE: This tool reads files from the local filesystem using the provided path. Only pass paths to ADIF log files you own.

NameRequiredDescriptionDefault
limitNo
start_atNo
file_pathYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The security note about reading local filesystem paths adds real context beyond the annotations, but behavior remains vague on what streaming means practically and what a parse result contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is front-loaded and the security note is short enough to earn its place. Slightly more space is spent on the filesystem caveat than on the parameters an agent actually has to fill in.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and 0% parameter coverage, the definition never explains what the parser returns (records, counts, boundaries) or how limit/start_at combine. For a paginated streaming parser, the agent lacks the information needed to call it correctly on the first try.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden for limit, start_at, and file_path. "record seeking" loosely gestures at start_at and "large files" at limit, but neither the 1-based indexing, the default window size, nor the meaning of the path beyond the security caveat is explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Streaming parser ... ADIF files") plus a distinguishing trait (streaming, record seeking) that signals handling of large inputs. It does not differentiate from the sibling validate_adif_record, so an agent must infer parse vs. validate on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"for large ADIF files" is the only hint about when this tool is appropriate; there is no explicit when-to-use/when-not statement and no guidance on choosing between this and validate_adif_record or any other sibling. The choice is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_specification_resourceRead Specification ResourceA
Read-onlyIdempotent

Reads an ADIF 3.1.7 specification resource (e.g., 'mode', 'fields', 'all').

An unknown or unreadable name is a tool execution error, so the model can see it failed and correct the name rather than being handed an error document that looks like a successful result.

NameRequiredDescriptionDefault
resource_nameYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior. The description adds genuinely useful context beyond that: unknown or unreadable names produce a tool execution error rather than a misleading error document, which tells the agent how failures surface.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, purpose front-loaded, no filler. The second sentence is slightly elaborate in explaining the error-vs-error-document rationale, but it earns its keep by documenting a non-obvious failure mode.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety and an output schema covering return values, the description only needs to establish scope and failure behavior, which it does. The remaining gap is not pointing the agent to list_enumerations for discovering valid resource names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single parameter, so the description must carry the load. It supplies examples ('mode', 'fields', 'all') that add meaning beyond the bare string type, but it does not enumerate the valid set, leaving the agent to discover names elsewhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: reads an ADIF 3.1.7 specification resource, with concrete examples ('mode', 'fields', 'all'). It does not explicitly distinguish itself from siblings like list_enumerations or search_enumerations, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the examples of resource names, but there is no explicit guidance on when to use this versus list_enumerations or search_enumerations. An agent must infer the boundary from the names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_enumerationsSearch EnumerationsC
Read-onlyIdempotent

Searches ADIF 3.1.7 enumerations. Optionally filter by enumeration name.

NameRequiredDescriptionDefault
enumerationNo
search_termYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so safety is covered. The description adds nothing about search semantics (substring vs exact, case sensitivity, which fields are searched) or the shape/nature of results despite having a search-based behavior worth disclosing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the verb and resource, with no filler. Brevity is fine; the problem is missing content rather than excess.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation isn't required, but for a search tool with an undocumented required parameter and 0% schema coverage, the description leaves an agent unable to construct a correct query or distinguish it from a sibling listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and it largely does not. It loosely explains that 'enumeration' acts as an optional name filter, but the required 'search_term' parameter — the core of the tool — is never described at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Searches ADIF 3.1.7 enumerations') and adds the version, but it never clarifies what is actually being matched or how it differs from the sibling list_enumerations, so an agent cannot confidently pick between the two.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use / when-not-to-use guidance and no mention of list_enumerations, the obvious alternative for enumeration browsing. The only hint is the word 'Optionally filter', which implies a search-first workflow but doesn't state it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_adif_recordValidate Adif RecordB
Read-onlyIdempotent

Validates an ADIF record against 3.1.7 rules including enum membership.

NameRequiredDescriptionDefault
adif_stringYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real context by naming the spec version 3.1.7 and that enum membership is part of the check, but it says nothing about what an invalid record yields (error vs. a result object) or whether validation is strict/lenient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or repetition. It is efficient, though borderline under-specified rather than maximally informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. However, for a validation tool the agent still needs to know the input shape it will accept and what a failed validation looks like; both are absent, leaving a gap for a single-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One parameter with 0% schema description coverage, so the description carries the burden. It only implies the parameter is an ADIF record string by naming it 'an ADIF record'; it does not clarify whether a header is required, whether multiple records are accepted, or expected formatting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (validates) plus resource (ADIF record) plus the rule set version (3.1.7) and the enum-membership scope. This distinguishes it reasonably from parse_adif, though it does not explicitly state the relationship to that sibling or to list_enumerations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No statement of when to use this versus parse_adif, read_specification_resource, or list_enumerations. The agent must infer that this is the check-after-parse / pre-parse gate, with nothing in the text to confirm it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv1.1.4
    • First observedcalculate_distance
    • First observedcalculate_heading
    • First observedget_version_info
    • First observedlist_enumerations
    • First observedparse_adif
    • First observedread_specification_resource
    • First observedsearch_enumerations
    • First observedvalidate_adif_record

TDQS

B3.4/5.0

Scored across 8 tools

Disambiguation4/5

Most tools target distinct actions (parsing, validation, spec reading, geo math), and the list vs search enumeration pair is clarified by descriptions. The calculate_distance vs calculate_heading pair and read_specification_resource vs list_enumerations overlap slightly, but outputs are well differentiated.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (get_version_info, calculate_distance, parse_adif, list_enumerations, search_enumerations, validate_adif_record). No mixed conventions.

Tool Count5/5

Eight tools is well-scoped for an ADIF reference/validation server, with each tool covering a distinct capability (version, geo, parsing, spec, enumerations, validation). Nothing feels padded or missing for the stated purpose.

Completeness4/5

The read/validate/spec-reference surface is solid, covering parsing, validation, enumerations, and spec lookup. However, there is no write/export or record-modification tool, which is a noticeable but workable gap for an ADIF-focused server.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for HamQTH.com — callsign lookup, DX cluster spots, Reverse Beacon Network, DXCC resolution, and more through any MCP-compatible AI assistant.
    8
    586 PyPI
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for QRZ.com — callsign lookups, DXCC entity resolution, and logbook queries through any MCP-compatible AI assistant.
    6
    575 PyPI
    4
    GPL 3.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables read-only access to Turbo HAMLOG amateur radio logs, allowing natural-language search and aggregation of contacts, station history, award progress, and statistics by importing logs from ADIF/CSV or HAMLOG.HDB via the DLL.
    9
    1
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables read-only querying of live and past amateur-radio nets and check-ins from NetLogger, with caching, rate limiting, and a consistent contract for future sources.
    6
    1,080 PyPI
    GPL 3.0