n1mm-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@n1mm-mcpwhat's my contest score and rate right now?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
n1mm-mcp
MCP server for N1MM Logger+: live contest state — station, QSOs, bandmap, score and rate, multipliers, and contest clock — through any MCP-compatible AI assistant.
Data from N1MM Logger+'s UDP broadcasts on your local network. Part of the qso-graph project. No authentication required.
Install
pip install n1mm-mcpRelated MCP server: hamqth-mcp
Tools
Tool | Description | Key Parameters |
| Station snapshot: connection, contest, operator, radios | station_name |
| The callsign being entered (pre-log) plus current band and mode | station_name |
| QSO log: recent contacts, edits and deletes | count, since, band, mode, call_pattern |
| Live spots, multiplier targets, band activity | band, mode, callsign, mults_only |
| Score, rate, bands, run/S&P, hourly timeline | band, mode |
| Multiplier grid, needs, value analysis | band |
| Contest timing, off-time, pacing | duration_hours, target_score, target_qsos, min_gap_minutes |
| Server health, parse errors, memory | station_name |
| Service version + upstream spec version (fleet identity attestation) | — |
Every tool takes an optional station_name for multi-station setups (SO2R, multi-op).
What is N1MM Logger+?
N1MM Logger+ is a Windows contest logger. It can broadcast its state over UDP: contacts, spots, radio info and score. n1mm-mcp listens to those broadcasts and keeps the contest state in memory, so an assistant can answer questions about it. N1MM doesn't know it's there.
N1MM Logger+ (Windows)
│ UDP broadcast (port 12060, XML)
▼
n1mm-mcp (Python, any OS on the same LAN)
├── UDP listener (background)
├── State engine (in memory, per StationName)
│ MCP protocol (stdio)
▼
AI assistantQuick Start
Turn on N1MM's broadcasts
In N1MM: Config → Configure Ports → Broadcast Data, and enable all message types.
N1MM broadcasts to
255.255.255.255:12060by default.
Configure your MCP client
n1mm-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": {
"n1mm": {
"command": "n1mm-mcp"
}
}
}Claude Code
Add to .claude/settings.json:
{
"mcpServers": {
"n1mm": {
"command": "n1mm-mcp"
}
}
}ChatGPT Desktop
{
"mcpServers": {
"n1mm": {
"command": "n1mm-mcp"
}
}
}Cursor
Add to .cursor/mcp.json (project-level) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"n1mm": {
"command": "n1mm-mcp"
}
}
}VS Code / GitHub Copilot
Add to .vscode/mcp.json in your workspace:
{
"servers": {
"n1mm": {
"command": "n1mm-mcp"
}
}
}Gemini CLI
Add to ~/.gemini/settings.json (global) or .gemini/settings.json (project):
{
"mcpServers": {
"n1mm": {
"command": "n1mm-mcp"
}
}
}Ask questions
"What's my rate over the last hour?"
"Which multipliers do I still need on 20m?"
"Is the station on the bandmap a new multiplier?"
"How much off-time have I used, and am I on pace for my target?"
"Show me the last 10 QSOs."
CLI Options
Option | Default | Description |
|
| UDP listen port |
|
| Bind address |
|
| MCP transport ( |
|
| Seconds before the connection goes stale |
|
| Seconds before the connection goes disconnected |
|
| Maximum spots in the bandmap buffer |
|
| Spot time-to-live in minutes |
Testing Without N1MM
N1MM_MCP_MOCK=1 n1mm-mcpMCP Inspector
n1mm-mcp --transport streamable-httpThen open the MCP Inspector at http://localhost:8008.
Development
git clone https://github.com/qso-graph/n1mm-mcp.git
cd n1mm-mcp
pip install -e .License
GPL-3.0-or-later
Available Tools
9 toolsget_version_infoGet Version InfoA
Get n1mm-mcp service version and upstream UDP contract version.
Returns the running PyPI version of n1mm-mcp and the N1MM Logger+ UDP broadcast contract revision in use. Use this to confirm fleet alignment across MCP deployments — agents can compare service_version and spec_version across servers to detect drift without going outside the MCP protocol.
Note: n1mm_diagnostics remains the canonical health probe (heartbeat, parse errors, memory). get_version_info is a lighter-weight identity attestation that succeeds even when N1MM isn't broadcasting.
Returns: service_name, service_version (PyPI), and spec_version (UDP contract).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does reasonably well: it discloses that this is a lightweight, non-health-probe identity read that succeeds even when N1MM isn't broadcasting, implying no dependency on upstream state. It does not explicitly state read-only/no-side-effect behavior, but 'Get' plus 'identity attestation' make a write highly implausible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose in the first sentence, then usage, then the sibling distinction. The 'Returns:' block slightly duplicates the existing output schema, but the content is dense and each section adds value; only minor redundancy keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter identity tool with an output schema present, the description covers purpose, when-to-use, sibling differentiation, and upstream-independence semantics. Nothing an agent needs in order to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so per the rubric the baseline is 4; the description goes beyond by naming the returned fields (service_name, service_version, spec_version), which adds useful meaning despite the empty input schema. This exceeds the zero-parameter baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get n1mm-mcp service version and upstream UDP contract version') and explicitly distinguishes itself from the sibling n1mm_diagnostics by calling itself a 'lighter-weight identity attestation.' An agent can tell exactly what this returns and how it differs from the health probe without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case ('confirm fleet alignment across MCP deployments — compare service_version and spec_version across servers to detect drift') and names the alternative ('n1mm_diagnostics remains the canonical health probe'), including the condition that selects this tool instead: it 'succeeds even when N1MM isn't broadcasting.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
n1mm_bandmapN1Mm BandmapA
Live bandmap — spots, mult targets, and activity summary.
Returns active spots (with TTL eviction), unworked multipliers, and per-band spot activity counts in one snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Filter by band (e.g., "20m"). | |
| mode | No | Filter by mode. | |
| callsign | No | Search by callsign prefix. | |
| mults_only | No | If true, only return spots flagged as multipliers. | |
| station_name | No | Station to query. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does add genuine value by disclosing TTL eviction on spots and the single-snapshot semantics, but it never states that this is a read-only query, whether it requires a running N1MM instance, or any refresh/latency characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the resource and payload front-loaded; nothing is buried. There is mild redundancy between the headline list in sentence one and the re-enumeration in sentence two, which keeps it just short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, and the description adequately covers what the snapshot contains for a parameterized read tool. It falls short only on the missing read-only/safety framing that would normally be supplied by annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters are documented in the schema at 100% coverage, so the schema already does the heavy lifting and a baseline of 3 applies. The description only indirectly touches parameters — 'mult targets' gestures at mults_only, 'per-band' at band — without adding format, matching semantics, or interaction rules between filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete resource (live bandmap) and enumerates its contents — active spots, unworked multipliers, per-band activity counts — so the agent knows exactly what this returns. It does not, however, differentiate itself from close siblings like n1mm_multipliers or n1mm_current_state, which overlap in the multiplier/state space.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'Live' implies a real-time contesting snapshot, which hints at when to reach for it, but there is no explicit when-to-use, when-not-to-use, or alternative routing. Given the sibling n1mm_multipliers covers similar multiplier territory, the absence of any disambiguation is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
n1mm_clockN1Mm ClockC
Contest clock — timing, off-time, and pacing in one view.
| Name | Required | Description | Default |
|---|---|---|---|
| target_qsos | No | Target QSO count for pacing. | |
| station_name | No | Station to query. | |
| target_score | No | Target score for pacing. | |
| duration_hours | No | Contest length (e.g., 48 for CQ WW, 24 for ARRL DX). | |
| min_gap_minutes | No | Minimum gap to count as off-time (default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses nothing behavioral: no hint that it is a read-only view, no mention of what pacing assumes, no note on how off-time is computed from min_gap_minutes. An output schema exists, which relieves some return-value burden, but the behavioral profile is essentially absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short clause with no wasted words and the core resource front-loaded. It is arguably too terse to be useful rather than padded, so it sits at 4 rather than 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters, an output schema, and eight siblings, one sentence is not enough. The description never says the tool works with zero arguments (all params optional), nor distinguishes the pacing view from other state-reporting tools, leaving the agent to guess when to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the five optional parameters is documented in the schema itself, so the baseline of 3 applies. The description adds no extra meaning about how target_qsos/target_score/duration_hours interact or what happens when they are omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the resource (contest clock) and three facets it covers: timing, off-time, pacing. But it uses no verb (get/return) and 'in one view' is filler that doesn't tell the agent what it actually receives. It is distinguishable from n1mm_performance or n1mm_current_state only by inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus the other eight N1MM siblings, several of which (n1mm_current_state, n1mm_performance) plausibly overlap with timing/pacing. No prerequisites, exclusions, or contest-session context stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
n1mm_contactsN1Mm ContactsB
QSO log — recent contacts, edits, and deletes.
Returns the last QSO, filtered recent QSOs, recent edits, and recent deletes in one coherent snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Filter by band (e.g., "20m"). | |
| mode | No | Filter by mode (e.g., "CW"). | |
| count | No | Number of recent QSOs to return (default 10, max 100). | |
| since | No | ISO timestamp — return only QSOs after this time. | |
| call_pattern | No | Filter by callsign prefix. | |
| station_name | No | Station to query (auto-detected if only one). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a real behavioral trait: the response bundles the last QSO plus recent edits and deletes into one snapshot. It is silent on safety profile, read-only nature, and any volume/rate limits, but the return-value behavior is partially conveyed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource identity and then the return content; no filler or repetition. Slightly terse, but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 explain return values, and all six parameters are schema-documented. For a read-only, zero-required-parameter query tool the description is nearly complete; only explicit usage routing is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six optional filters (band, mode, count, since, call_pattern, station_name) are already fully documented in the schema. The description only gestures at 'filtered recent QSOs' without adding syntax, defaults, or interactions, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('QSO log — recent contacts, edits, and deletes') and enumerates exactly what the snapshot contains (last QSO, filtered recent QSOs, edits, deletes). It is clearly distinguishable from siblings like n1mm_lookup and n1mm_current_state by being the log/history view, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use statement, no prerequisite, and no alternative tool named. An agent can loosely infer it is for inspecting recent QSO activity, but the description gives no explicit routing guidance against the eight sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
n1mm_current_stateN1Mm Current StateB
Complete station snapshot — connection, contest, operator, radios.
Returns connection status, contest info, operator callsign, and full radio state for Radio 1 (and Radio 2 if SO2R). This is the first tool any AI session should call.
| Name | Required | Description | Default |
|---|---|---|---|
| station_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It implies a read-only snapshot through wording ('Complete station snapshot', 'Returns ...') and lists the categories of state returned, but never explicitly declares it side-effect-free, nor mentions permissions, rate limits, or behavior when no station is connected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening snapshot line is well front-loaded, but the second sentence largely restates the same contents ('connection, contest, operator, radios' vs 'connection status, contest info, operator callsign, and full radio state'), which is redundant given an output schema already exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 re-explained, and the description's restatement of them is wasted space. What is missing is any meaning for the station_name parameter and any behavioral framing (read-only, no-station case) for a tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole parameter, station_name, is never mentioned in the description. With one optional parameter and no schema documentation, the description should explain what station_name selects and what the null default means; it does none of that, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete resource and scope: 'Complete station snapshot — connection, contest, operator, radios,' and enumerates the returned components. This clearly separates it from narrower siblings like n1mm_contacts, n1mm_bandmap, and n1mm_performance, though no sibling is named explicitly, keeping it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'This is the first tool any AI session should call' is explicit when-to-use guidance that tells the agent to invoke it at session start. It stops short of naming alternatives or stating when NOT to use it, so it does not reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
n1mm_diagnosticsN1Mm DiagnosticsB
Server health and diagnostics — connection, parse errors, memory.
Essential for production debugging. First tool to call when something goes wrong during a contest.
| Name | Required | Description | Default |
|---|---|---|---|
| station_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the diagnostic domains it inspects (connection, parse errors, memory), which is useful context, but never states that it is a non-mutating/read-only operation or whether it incurs load on the server. For a no-annotation tool this leaves a notable gap, though 'diagnostics' strongly implies a safe read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the tool's function and facets before the usage advice. Slightly redundant — 'Essential for production debugging' and 'First tool to call when something goes wrong' make the same point — so it is efficient but not maximally tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 detail is correctly omitted, and the purpose/usage coverage is adequate. The gap is the undocumented optional station_name parameter, which is the one piece of invocation information an agent needs and cannot get from either the schema or the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter station_name has 0% schema description coverage and is never mentioned in the description. The description does not explain what the parameter scopes, nor what happens when it is omitted (the default is null), so an agent must guess whether a missing value means 'all stations' or 'current station'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb/resource ('Server health and diagnostics') and enumerates the facets covered — connection, parse errors, memory — which clearly separates it from the data-retrieval siblings like n1mm_contacts and n1mm_bandmap. It stops short of naming any sibling explicitly, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition ('First tool to call when something goes wrong during a contest') plus a context ('essential for production debugging'), which is genuine when-to-use guidance. It does not state when NOT to use it or point to an alternative diagnostic/fallback tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
n1mm_lookupN1Mm LookupB
Pre-log callsign lookup — THE Contest-Copilot trigger.
Fires when operator types a callsign and presses spacebar in N1MM. Returns the lookup data plus current band/mode from RadioInfo. Check lookup_age_ms — if >30000, the advice window has closed.
| Name | Required | Description | Default |
|---|---|---|---|
| station_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does substantive work: it discloses the trigger condition, the payload contents, and a freshness guard (lookup_age_ms > 30000 means the advice window has closed). It does not cover permissions, latency, or error behavior, but the freshness disclosure is genuinely non-obvious context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the trigger and return contents front-loaded. The only slightly wasteful element is the promotional 'THE Contest-Copilot trigger' phrase, which adds tone rather than information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return fields need not be enumerated and the age-window hint is a bonus. The gap is on the input side: the single parameter is undocumented in both schema and description, so an agent has no guidance on what to supply for station_name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (station_name, nullable with default null) and schema description coverage is 0%, so the description must compensate — and it never mentions station_name at all. It also names a return field (lookup_age_ms) rather than clarifying the input, leaving the agent to infer why a station name would be passed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('pre-log callsign lookup') and specifies what comes back (lookup data plus current band/mode from RadioInfo). It is distinguishable from siblings like n1mm_contacts or n1mm_current_state, though the 'THE Contest-Copilot trigger' framing is editorial rather than informative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the triggering event in N1MM (operator types a callsign and presses spacebar), which implies when the lookup is relevant. However, it never says when an agent should call this versus n1mm_current_state, n1mm_contacts, or the other siblings, and no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
n1mm_multipliersN1Mm MultipliersB
Multiplier status — worked mults, mult map, and available needs.
Returns total mults worked, per-band mult grid, unworked mults currently spotted, and mult value analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Filter to specific band. | |
| station_name | No | Station to query. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only restates return contents that the output schema already defines. It says nothing about read-only nature, data freshness, auth, or rate limits — no behavioral traits beyond structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the summary line followed by an enumeration of outputs. Efficient, with only mild redundancy against the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read query with an output schema and fully documented optional params, the description is largely sufficient. The gap is the absence of any behavioral or safety context, which matters because there are no annotations to cover it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with two optional, well-described filters (band, station_name), so the schema does the heavy lifting. The description adds no semantics about these filters, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (contest multipliers) and enumerates what it surfaces — total mults worked, per-band mult grid, spotted unworked mults, value analysis. It is clearly distinguishable from siblings like n1mm_contacts or n1mm_bandmap by resource, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys what the tool reports but gives no conditions, prerequisites, or alternatives — no hint about when to prefer it over n1mm_bandmap or n1mm_performance. Usage is only implied by the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
n1mm_performanceN1Mm PerformanceB
Complete performance snapshot — score, rate, bands, run/S&P, timeline.
Returns score, rolling rates (10m/30m/60m), rate derivative for band exhaustion detection, per-band breakdown, per-mode breakdown, hourly summary, and run vs S&P stats in one coherent view.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Filter rate/breakdown to specific band. | |
| mode | No | Filter to specific mode. | |
| station_name | No | Station to query. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose return content plus a useful interpretive note ('rate derivative for band exhaustion detection'). However, it never states that this is a read-only operation, whether the band/mode filters narrow only the rate/breakdown sections or the whole snapshot, or any cost/latency characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The headline sentence front-loads the scope, and the second paragraph enumerates contents efficiently. There is mild redundancy ('score' and 'bands' appear in both sentences), but overall it is tight and well-ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the detailed return-value enumeration is largely duplicative; the description's marginal value is the snapshot framing and the band-exhaustion hint. What is missing is the decision context — when an agent should prefer this consolidated view over n1mm_current_state or n1mm_contacts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents band, mode, and station_name. The description adds nothing about parameter behavior, including the important question of how filtering interacts with the reported aggregates; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource clearly ('complete performance snapshot') and enumerates the dimensions it covers (score, rate, bands, run/S&P, timeline), so an agent knows what it retrieves. It does not, however, differentiate itself from siblings like n1mm_current_state or n1mm_multipliers, which could plausibly overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no statement of prerequisites, and no reference to an alternative tool. The intended context ('use this when you want a consolidated performance view rather than individual stat tools') 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.6- First observed
get_version_info - First observed
n1mm_bandmap - First observed
n1mm_clock - First observed
n1mm_contacts - First observed
n1mm_current_state - First observed
n1mm_diagnostics - First observed
n1mm_lookup - First observed
n1mm_multipliers - First observed
n1mm_performance
TDQS
Scored across 9 tools
Most tools target distinct resources (contacts, bandmap, clock, lookup), but multiplier data bleeds across three tools: n1mm_bandmap (unworked mults), n1mm_performance (per-band breakdown), and n1mm_multipliers. The status trio of get_version_info, n1mm_current_state, and n1mm_diagnostics also overlap somewhat, though descriptions explicitly differentiate version attestation vs health probe vs full snapshot.
Eight tools share an n1mm_ prefix but are bare noun phrases (n1mm_clock, n1mm_bandmap), while get_version_info drops the prefix entirely and is the only verb_noun name. Readable, but the convention is noticeably mixed across the set.
Nine tools is well-scoped for a contest-station monitoring server, and each tool maps to a coherent domain area (state, contacts, bandmap, performance, multipliers, clock, health, identity). No tool appears redundant enough to remove.
The monitoring surface is comprehensive — live state, log, spots, rates, mults, clock, and diagnostics all covered. It is essentially read-only, with no control/write operations (e.g. logging a QSO, tuning radio, posting a spot), which is a modest gap if agents are meant to act rather than observe.
Maintenance
Related MCP Connectors
QuLab MCP remote server (Streamable HTTP) for computational science and lab tools.
Syslog receiver and MCP server for homelab log intelligence.
Syslog receiver and MCP server for homelab log intelligence.
Public MCP server for summaries, DNS lookup, catalog, replies, and JSON checks.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server for agents to control MultiViewer, the best way to watch motorsports. Works locally or remotely.19MIT
- AlicenseAqualityDmaintenanceMCP server for HamQTH.com — callsign lookup, DX cluster spots, Reverse Beacon Network, DXCC resolution, and more through any MCP-compatible AI assistant.825 PyPIGPL 3.0
- AlicenseAqualityDmaintenanceMCP server for QRZ.com — callsign lookups, DXCC entity resolution, and logbook queries through any MCP-compatible AI assistant.63GPL 3.0
- AlicenseAqualityAmaintenanceEnables logging amateur-radio QSOs to N3FJP logging software via MCP tools, including automatic logging, dupe checking, and band/mode management.10140 PyPIMIT