Skip to main content
Glama
omiss-mcp

omiss-mcp

by qso-graph

omiss-mcp

PyPI MCP Registry

MCP server for OMISS, the Old Man International Sideband Society: the net schedule, OMISS nets on the air now, member lookup, past nets and who checked in, the Statehood schedule, officers, awards and net statistics, through any MCP-compatible AI assistant.

Data from omiss.net's public pages; nets on the air from NetLogger. Part of the qso-graph project. No login or API key needed.

Install

uvx omiss-mcp            # run it; nothing to install

Related MCP server: iota-mcp

Tools

Tool

Description

Key Parameters

omiss_net_schedule

Every net's band, UTC time, frequency, days, band coordinator and next run; holiday dates

—

omiss_nets_on_air

OMISS nets on the air now, from NetLogger, each matched to the net schedule

—

omiss_member_lookup

One member: OM number, call, name, status, grid, state, county, last check-in

callsign or om_number

omiss_checkin_history

Past nets, newest first, optionally only a member's, a band's or a date's

callsign, om_number, band, date, net_control

omiss_net_checkins

One past net: net control, relays, notes, and the check-in list

net_id

omiss_statehood_schedule

40m net dates and their free-call states, and the next one

—

omiss_officers

Officers, band coordinators, committees, appointees, past presidents

—

omiss_awards

The awards, with the IDs the other award tools take

—

omiss_award_rules

An award's rules, or every award's summary

award_id

omiss_award_recipients

Who holds an award, newest first, or check one member

award_id, callsign, om_number

omiss_net_statistics

Nets per band, last net per band, top check-ins and net controls, last check-in by state

state, top

omiss_eligibility

For a list of callsigns (a net's check-ins): member or not, OM number, silent key, and the military, first responder and state capital rosters

callsigns

omiss_set_callsign

Save your callsign, for omiss_nets_on_air (asked once)

callsign

get_version_info

Service version + upstream spec version (fleet identity attestation)

—

What is OMISS?

OMISS is an amateur-radio society that runs SSB nets on HF, from 10 to 160 meters, every day of the week. Members exchange OM numbers on the nets and work toward the society's awards. Its website publishes the net schedule, the member roster, check-in history for every net, and the award rules and recipients.

Nets Open Early

Net control often opens a net in NetLogger for check-ins well before its listed time (the 40m net has opened 35 minutes early). omiss_net_schedule gives the listed times; omiss_nets_on_air shows whether a net is open now.

Your Callsign

Only omiss_nets_on_air needs it: it asks NetLogger, which is told which station is asking. On first use the assistant asks for your callsign and saves it. You're asked once. The other tools don't need it.

Good Neighbour Policy

omiss.net is a volunteer-run club website, not an API. We read it gently:

Measure

Detail

One request at a time

At most one request every 2 seconds, shared by every copy you run (Claude Desktop, Claude Code, a script) through a locked file in your settings folder.

Response caching

Schedule, officers, Statehood, members and award recipients 24 hours; awards and rules 7 days; history and statistics 1 hour.

Stale answers over errors

When the site is down or busy, the last answer comes back with its age rather than an error.

Back-off

A "too many requests" or "unavailable" answer stops all requests for at least a minute, longer if the site asks.

Request timeout

20-second timeout.

User-Agent header

Every request names this project, so the site's operators can see who is asking.

NetLogger

omiss_nets_on_air keeps to NetLogger's call limits, shared with netlogger-mcp if you run it too.

Security and Privacy

  • Every value is checked before it is sent: callsigns, OM numbers, bands from a fixed list, YYYY, YYYY-MM or YYYY-MM-DD dates, numeric net IDs, and award IDs from the site's own list. Free text is never sent to omiss.net.

  • No postal addresses or email addresses are ever returned, even where a page prints one.

  • Members are looked up one at a time, by callsign or OM number. There's no search by state, county or grid, and no roster download.

Quick Start

Configure your MCP client

omiss-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": {
    "omiss": {
      "command": "uvx",
      "args": ["omiss-mcp"]
    }
  }
}

Claude Code

Add to .claude/settings.json:

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

ChatGPT Desktop

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

Cursor

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

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

VS Code / GitHub Copilot

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

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

Gemini CLI

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

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

Ask questions

"When is the OMISS 40m net, and on what frequency?"

"Is KI7MT an OMISS member? What's their OM number?"

"Which OMISS nets are on the air right now?"

"Which nets did OM 7212 check in to this year?"

"Who checked in to last night's 80m net?"

"What are the free-call states on the next 40m Statehood net?"

"What does the Alphabet Soup award require, and have I earned it?"

"Who ran the most OMISS nets as net control in the last 90 days?"

As a Python Library

The same code works without an AI, with the same spacing and cache:

from omiss_mcp.omiss import OmissSource

om = OmissSource()
me = om.member_lookup(callsign="KI7MT")["members"][0]
for net in om.checkin_history(om_number_=me["om_number"], date_="2026")["nets"]:
    print(net["time"], net["name"], net["checkin_count"])

Apps can name themselves, using ADIF's PROGRAMID and PROGRAMVERSION: OmissSource(program_id="MyLogger", program_version="1.0").

Testing Without Network

OMISS_MCP_MOCK=1 omiss-mcp

MCP Inspector

omiss-mcp --transport streamable-http --port 8015

Development

git clone https://github.com/qso-graph/omiss-mcp.git
cd omiss-mcp
uv sync --group dev
uv run pytest

License

GPL-3.0-or-later

Available Tools

14 tools
get_version_infoGet Version InfoA
Read-onlyIdempotent

Get omiss-mcp's version, the omiss.net layout it reads, and the version of the records it returns.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, closed-world, non-destructive, so the safety profile is fully covered. The description adds only the substance of what is reported (binary version, layout version, record version) — useful context, but no auth, rate-limit, or output-shape detail beyond that.

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?

One sentence, front-loaded with the verb and the three values returned, with zero filler. 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?

An output schema exists, so return values need not be enumerated in prose, and the annotations fully cover behavior for a zero-param read. The description is adequate for this simple tool; only the lack of stated use case keeps it from a 5.

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, which sets the baseline at 4. There is no parameter semantics to add, and the description correctly does not invent any.

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 ('Get') with three explicitly named resources: the server's version, the omiss.net layout version it reads, and the record version it returns. This is clearly distinguishable in kind from every sibling, which are all domain-data lookups, though the description never says so explicitly.

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?

No explicit when-to-use or when-not-to-use guidance. Usage is only implied by content — an agent can infer this is for version/compatibility introspection, but nothing states prerequisites, caching advice, or that no other tool needs to be called first.

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

omiss_award_recipientsOmiss Award RecipientsA
Read-onlyIdempotent

List who holds an OMISS award, newest certificates first, or check one member.

NameRequiredDescriptionDefault
limitNoAt most this many (default 100).
award_idYesThe award's ID, from omiss_awards (e.g. ALPHABETSOUP).
callsignNoOnly this station's certificates.
om_numberNoOnly this member's certificates.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already establish read-only, idempotent, non-destructive behavior, so the description does not need to repeat safety properties. It adds useful context about certificate ordering and member filtering, but says nothing about pagination or the default limit 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 efficient sentence with no wasted words. The primary listing purpose is front-loaded, and the alternate 'check one member' mode follows naturally.

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, a 100% documented schema, and an output schema, the description is nearly sufficient for correct invocation. The only minor gap is that it does not mention the limit/pagination aspect, though the schema does document that parameter.

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 100%, so all four parameters are already documented in the schema. The description slightly reinforces award and member filtering but adds no new syntax, default, or constraint details beyond the schema.

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 ('List') and resource ('who holds an OMISS award'), plus an alternate mode ('check one member'). It is clearly distinct from the sibling omiss_awards, which appears to list the awards themselves, but it does not explicitly name 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 Guidelines3/5

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

The phrase 'or check one member' implies that callsign/om_number filters can narrow results, and 'newest certificates first' gives ordering context. However, it does not explicitly say when to use this tool versus omiss_awards, omiss_member_lookup, or omiss_award_rules.

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

omiss_award_rulesOmiss Award RulesA
Read-onlyIdempotent

Get an OMISS award's rules, or (no award_id) every award's name, ID and summary.

NameRequiredDescriptionDefault
award_idNoThe award's ID, from omiss_awards or this tool (e.g. ALPHABETSOUP).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare this as read-only, idempotent, open-world and non-destructive, so the safety profile is covered. The description adds mode-dependent behavior, but it does not add much beyond that, and output-schema details are already available separately.

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?

The description is a single compact sentence with no wasted words. The primary behavior and the omitted-award_id fallback are front-loaded and easy to parse.

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?

For a simple one-parameter read tool with an output schema and rich annotations, the description covers the key calling modes and parameter omission behavior. The main remaining gap is the lack of explicit sibling differentiation from omiss_awards.

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?

Schema coverage is 100%, so the award_id parameter is already documented in the schema. The description adds useful meaning by explaining what happens when award_id is omitted: the tool returns a summary listing rather than rules.

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: get an OMISS award's rules. It also explains the overloaded mode when award_id is omitted, but it does not explicitly distinguish this tool from the sibling omiss_awards tool.

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

Usage Guidelines4/5

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

It clearly explains the two usage modes: provide award_id to get one award's rules, or omit it to list every award's name, ID and summary. It does not name alternatives or exclusions, such as when to use omiss_awards instead.

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

omiss_awardsOmiss AwardsA
Read-onlyIdempotent

List the OMISS awards that have recipients, with the award IDs the other award tools take.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, openWorld, so the safety profile is covered. The description adds one real behavioral fact — that only awards with recipients are returned — but says nothing about size, ordering, or how IDs should be reused; return shape is covered by the output schema.

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?

One sentence, front-loaded with the verb and resource, and the qualifying/secondary clauses each carry distinct information. No filler.

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

Completeness5/5

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

A zero-parameter, read-only listing tool with full annotations and an output schema needs only to say what it lists and what the entries are for; the description does both.

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 the baseline is 4; schema coverage is also 100% on an empty object. Nothing in the parameter space needs describing.

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 ('List') and resource ('OMISS awards') with an explicit scope qualifier: only awards that have recipients. The second clause ('award IDs the other award tools take') identifies the payload and how it differs from the related rules/recipients tools.

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

Usage Guidelines4/5

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

Clearly implies this is the discovery/prerequisite call whose output IDs feed 'the other award tools', which tells the agent where it sits in a call chain. It stops short of naming the specific siblings (omiss_award_rules vs. omiss_award_recipients) or stating when not to use it.

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

omiss_checkin_historyOmiss Checkin HistoryA
Read-onlyIdempotent

List past OMISS nets, newest first: all of them, or only those a member checked in to, on a band, on a date, or run by a net control. omiss.net shows the latest 100 matches.

NameRequiredDescriptionDefault
bandNoOnly nets on this band: 10m, 12m, 15m, 17m, 20m, 40m, 80m or 160m.
dateNoOnly nets on this date: YYYY, YYYY-MM or YYYY-MM-DD (UTC).
callsignNoOnly nets this station checked in to (e.g. KI7MT).
om_numberNoOnly nets this OMISS member checked in to (e.g. 7212).
net_controlNoOnly nets this station ran as net control.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld, so the description correctly focuses on non-obvious behavior: results are ordered newest first, and the upstream site caps results at the latest 100 matches. That result-cap disclosure is genuinely valuable context an agent cannot get from annotations or schema. It stops short of describing what an empty result or a truncated page looks like.

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, front-loaded with the core action and ordering, with the filter list and the 100-result caveat following logically. No filler, though the mid-sentence filter enumeration ('on a band, on a date, or run by a net control') reads slightly list-like rather than prose.

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, the description needn't explain return shape, and it covers the pieces that matter for correct invocation: ordering, the optional-filter model, and the upstream result cap. A note on whether omitted filters mean 'all' vs 'most recent' would close the remaining gap.

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 100%, so every parameter (band, date, callsign, om_number, net_control) is already documented with formats and examples. The description only restates the filter concepts at a higher level and adds no format, precedence, or combination rules beyond the schema, so baseline 3 applies.

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?

Opens with a specific verb and resource ('List past OMISS nets') plus ordering ('newest first'), and enumerates the filter dimensions, which separates it from omiss_net_checkins (check-ins for a single net) and omiss_net_schedule (upcoming nets). It never names those siblings, so the differentiation is implicit rather than explicit.

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 'all of them, or only those...' makes clear that filters are optional and combinable, which is useful usage context. However there is no guidance on when to prefer this over omiss_net_checkins or omiss_net_statistics, and no mention of what happens with zero filters beyond the default listing.

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

omiss_eligibilityOmiss EligibilityA
Read-onlyIdempotent

For stations on a net: is each an OMISS member, and which award categories does it count for? From omiss.net's own rosters.

Use it with a net's check-ins (netlogger-mcp's netlogger_checkins for a live net, or omiss_net_checkins for a past one) to see who you still need. Only the callsigns asked about are answered.

NameRequiredDescriptionDefault
callsignsYesUp to 200 callsigns (e.g. ["KI7MT", "W4DWS"]).

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, non-destructive, and open-world, so the safety profile is covered. The description still adds real value beyond them by naming the data source (omiss.net's own rosters, i.e. externally-maintained truth) and clarifying that only the queried callsigns are answered, which bounds the response scope.

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 is front-loaded in the opening sentence, and the second and third sentences add usage routing and response scope with no filler. Slightly awkward phrasing ('For stations on a net:') and gratuitous line breaks keep it from a 5.

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, the description needn't explain return values, and it covers the source of truth, the intended pairing with check-in tools, and the response boundary. It could be more complete by clarifying the batch-vs-single-lookup split against omiss_member_lookup.

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 coverage is 100% and the single array parameter already documents its item format and the 200-callsign cap. The description adds only the semantic that results are limited to callsigns asked about; it contributes little parameter meaning beyond the schema, so baseline 3 applies.

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+resource: for a set of stations, report OMISS membership and which award categories each counts for, sourced from omiss.net rosters. Clear enough to act on, though it never distinguishes itself from the sibling omiss_member_lookup, so an agent may hesitate between the single-lookup and batch variants.

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

Usage Guidelines4/5

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

Gives concrete usage context: pair it with a net's check-ins, naming netlogger_checkins for a live net and omiss_net_checkins for a past one, to identify who is still needed. It stops short of explicit exclusions or saying when to prefer omiss_member_lookup over this batch tool.

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

omiss_member_lookupOmiss Member LookupA
Read-onlyIdempotent

Look up one OMISS member by callsign or by OM number (give one).

NameRequiredDescriptionDefault
callsignNoThe member's callsign (e.g. KI7MT).
om_numberNoThe member's OMISS number (e.g. 7212).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered structurally. The description adds only the single-identifier constraint and nothing about failure modes (unknown callsign, ambiguous match) or lookup 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 short sentence with the resource and the identifying constraint front-loaded; nothing is redundant or padded.

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 needn't be described, and annotations cover safety and idempotency. For a two-parameter lookup the description is nearly sufficient, with only not-found behavior left unstated.

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?

Schema description coverage is 100%, so the baseline would be 3. The description earns the step up by stating 'give one,' a mutual-exclusivity rule the schema does not enforce (both params are optional and allow null), which meaningfully constrains invocation.

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: look up a single OMISS member, with the two lookup keys named. That clearly separates it from list-oriented siblings like omiss_net_checkins or omiss_award_recipients, 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.

Usage Guidelines3/5

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

The parenthetical '(give one)' implies the two identifiers are mutually exclusive and that one is required, which is real guidance. But there is no statement of when to prefer callsign over OM number, no handling of a not-found result, and no mention of siblings.

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

omiss_net_checkinsOmiss Net CheckinsA
Read-onlyIdempotent

Get one past OMISS net: its net control, relays, frequency, net control's notes, and the check-in list.

NameRequiredDescriptionDefault
net_idYesThe net's ID, from omiss_checkin_history.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds that the payload includes net control notes and a full check-in list, which hints at response size, but says nothing about pagination, permissions, or what happens if the net_id is unknown.

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?

One sentence, front-loaded with the verb and subject, and the returned-field list is deferred to the end where it does not obstruct the core action. No filler.

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 and annotations cover the safety profile, so the description only needs to identify the resource and its scope — which it does. The remaining gap is not naming which sibling to use for live versus historical net data.

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?

Single parameter with 100% schema description coverage, which already tells the agent the net_id comes from omiss_checkin_history. The description only reinforces that this is a single-net lookup and adds no syntax, range, or lookup-path detail beyond the schema.

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 plus resource: retrieves a single *past* OMISS net with an enumerated content list (net control, relays, frequency, notes, check-in list). The word 'past' implicitly separates it from omiss_nets_on_air, but no sibling is named explicitly, so differentiation is inferential rather than stated.

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 singular 'one past OMISS net' plus the schema note that net_id comes from omiss_checkin_history implies the lookup workflow, but the description itself never states when to pick this over omiss_net_schedule, omiss_nets_on_air, or omiss_net_statistics.

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

omiss_net_scheduleOmiss Net ScheduleA
Read-onlyIdempotent

Get the OMISS net schedule: every net's band, UTC time, frequency and window, days, holiday time and band coordinator, and the next time it runs; the schedule's footnotes (holidays, winter schedule); and the federal holiday dates the holiday schedule follows. Days and times are UTC, so an evening net in the Americas falls on the previous local day; use next_utc and as_of_utc to work out "today" in the user's time zone. next_utc is the listed start: nets often open early for check-ins, and a net on the air now shows next_utc as its next run, so ask omiss_nets_on_air whether one is open.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so safety is covered by structured data. The description adds non-obvious behavior the annotations cannot: next_utc is the listed start rather than actual open time, nets often open early for check-ins, and an in-progress net still reports next_utc as its next run. That is high-value operational context.

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?

Content is front-loaded: the resource and return payload come first, then timezone caveats, then the sibling routing. The first sentence is long and clause-dense, but nearly every clause carries information that changes how an agent uses the result.

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

Completeness5/5

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

With an output schema present, the description need not describe return values, and it doesn't waste words doing so. For a parameterless, read-only tool it covers the remaining risks — UTC versus local day boundaries and the sibling that answers on-air status — so an agent can call it and interpret results correctly.

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 the baseline is 4 and there is nothing for the description to disambiguate. It still usefully explains how to interpret the returned time fields (next_utc, as_of_utc) for local-date reasoning, which is field semantics rather than parameter semantics.

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?

A specific verb and resource ('Get the OMISS net schedule') followed by an inventory of exactly what is returned: band, UTC time, frequency, window, days, holiday time, coordinator, next run, footnotes, and federal holidays. This is distinguishable at a glance from siblings like omiss_nets_on_air or omiss_net_statistics.

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

Usage Guidelines5/5

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

Explicitly routes the agent to the alternative: 'ask omiss_nets_on_air whether one is open' when the question is about whether a net is currently on the air. It also names the condition that selects the alternative (a net on air now shows next_utc as its next run), which is exactly the routing detail an agent needs.

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

omiss_nets_on_airOmiss Nets On AirA
Read-onlyIdempotent

List OMISS nets on the air now, from NetLogger, each matched to OMISS's own net schedule.

A net on NetLogger is an OMISS net when it matches a scheduled one (its frequency is in that net's window, on a day it runs, near its start time) or its name says OMISS. Each says which scheduled net it is.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, open-world, non-destructive behavior, so the description is free to add value elsewhere — which it does by disclosing the data source (NetLogger) and the exact matching heuristic (frequency within window, correct day, near start time, or OMISS in the name). It does not mention refresh cadence or how stale the 'now' snapshot can be.

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?

Three short sentences, with the core purpose front-loaded before the matching explanation. The closing sentence ('Each says which scheduled net it is') is slightly redundant with the opening clause about matching to the schedule but does clarify the output shape.

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, return values need no explanation, and the description supplies source and matching logic. For a live-data tool it would be stronger with a note on snapshot freshness or the fact that results can be empty between nets.

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 there is nothing for the description to clarify and the baseline of 4 applies. The description correctly avoids inventing filter parameters that the empty schema does not support.

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: list OMISS nets currently on the air, sourced from NetLogger and cross-matched to the OMISS schedule. This implicitly separates it from the static omiss_net_schedule and from checkin-oriented siblings, though it never names those siblings explicitly.

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 'on the air now' implies a real-time use case versus the static schedule, but there is no explicit when-to-use guidance, no statement of when to prefer omiss_net_schedule or omiss_net_checkins, and no exclusions or prerequisites.

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

omiss_net_statisticsOmiss Net StatisticsA
Read-onlyIdempotent

Get OMISS net statistics for the last 52 weeks: nets per band, the last net on each band, and the leaderboards (most check-ins, most nets as net control).

NameRequiredDescriptionDefault
topNoHow many leaderboard entries (default 10, at most 50).
stateNoAlso give this state's last check-in on each band (2 letters, e.g. ID).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context with the fixed 52-week window and what statistics are computed, but it does not discuss freshness, rate limits, or aggregation constraints.

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 efficient sentence that is front-loaded with the action and scope, followed by the returned categories. Every clause contributes useful information.

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

Completeness5/5

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

The tool is simple, has full schema coverage, has an output schema, and has annotations covering its safety profile. The description is complete enough for an agent to understand what it returns and when to call it.

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 100%, so both parameters are already documented in the schema. The description does not add meaning for 'top' or 'state' beyond what the schema provides, so the baseline of 3 is appropriate.

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 and resource ('Get OMISS net statistics') plus the exact scope ('last 52 weeks') and the categories returned: nets per band, last net per band, and leaderboards. This clearly distinguishes aggregate statistics from sibling tools like omiss_checkin_history and omiss_member_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 52-week window and leaderboard contents imply when to use it for aggregate statistics, but there is no explicit when-not guidance or named alternative among the many OMISS siblings. Usage is inferable but not fully routed.

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

omiss_officersOmiss OfficersA
Read-onlyIdempotent

List OMISS's officers, directors, band coordinators, committees, appointees, past presidents and other VIPs.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety and repeatability are covered elsewhere. The description adds content scope (which role categories appear) but says nothing about freshness, pagination, or whether the list is a fixed snapshot — modest added value 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 front-loaded sentence with no filler; every listed term adds informational content about the result set. Nothing is repeated from the name or schema.

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, the description need not explain return values, and the no-parameter signature keeps the surface small. It covers what an agent needs to select the tool; only the freshness/snapshot question remains implicit.

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 the baseline of 4 applies; there is nothing for the description to clarify on the input side. The role enumeration mildly helps an agent predict result shape but is not a parameter concern.

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 ('List') plus a concrete resource enumeration of the organizational roles it returns (officers, directors, band coordinators, committees, past presidents). It is clearly distinguishable from siblings like omiss_member_lookup or omiss_checkin_history, which serve member-level and activity data rather than leadership rosters.

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 only implied: an agent can infer this is the tool for leadership/contact-role questions, but the description never states when to prefer it over omiss_member_lookup or what it excludes. No prerequisites or exclusions are given.

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

omiss_set_callsignOmiss Set CallsignA
Idempotent

Save the user's amateur radio callsign, for omiss_nets_on_air. Needed once.

NetLogger is told which station is asking. The callsign is shared with netlogger-mcp, if it's installed. Ask the user for their own callsign; don't guess it.

NameRequiredDescriptionDefault
callsignYesThe user's callsign (e.g. KI7MT).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly=false, idempotent=true, destructive=false), so the description adds genuinely new context: NetLogger is informed which station is asking, and the value is shared with netlogger-mcp if installed. It also implies persistence rather than a per-call parameter. Return behavior is covered by the output schema.

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?

Three short sentences, front-loaded with the core action and the prerequisite. The NetLogger/mcp-sharing detail is secondary but earns its place by explaining a side effect.

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?

For a one-parameter idempotent setter with full schema coverage, an output schema, and annotations, the description supplies the prerequisite, the side effect, and the sourcing rule for the value. Only an explicit statement of change/reset semantics or permissions is absent.

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?

Schema coverage is 100% and the schema even supplies an example (KI7MT), so the baseline is 3. The description adds meaning beyond that by stressing the callsign must be the user's own and must not be guessed, which is a real correctness constraint on the value.

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+resource ("Save the user's amateur radio callsign") and scopes it to the target tool (omiss_nets_on_air). No sibling among the omiss_* lookup/report tools performs a write, so the distinction is unambiguous.

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

Usage Guidelines4/5

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

"Needed once" plus the tie to omiss_nets_on_air establishes a prerequisite and frequency, and "Ask the user for their own callsign; don't guess it" is an explicit behavioral instruction. It lacks a stated when-not-to-use case, 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.

omiss_statehood_scheduleOmiss Statehood ScheduleA
Read-onlyIdempotent

Get the 40m Statehood schedule: each 40m net date and its free-call states, and the next one.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare this a read-only, idempotent, open-world fetch, so the safety profile is covered. The description adds a little domain framing about what the schedule contains, but with an output schema present it does not need to itemize return fields, and it says nothing about caching, freshness, or why it is open-world.

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?

One sentence, front-loaded with the verb and resource, with zero filler. The clause describing the returned contents is the only elaboration and it earns its place.

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?

For a no-parameter read tool with a full annotation profile and an output schema, the description covers purpose and return shape adequately. The remaining gap is that domain terms like 'free-call states' and 'Statehood' are left unglossed and no routing to the general net schedule is offered.

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 are no semantics to clarify; the baseline of 4 applies. The description correctly presents this as a plain fetch with no filtering dimension.

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: retrieve the 40m Statehood net schedule, including each date, its free-call states, and the next occurrence. That wording separates it from generic siblings like omiss_net_schedule, though the distinction is implied by 'Statehood'/'40m' rather than called out explicitly.

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 when-to-use or when-not-to-use guidance, and no sibling is named as an alternative. An agent must infer from the label alone that this is the Statehood-specific schedule rather than the general one from omiss_net_schedule.

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. 1 tool updatev0.4.1
    • Addedomiss_eligibility
  2. 13 tool updatesv0.1.1
    • First observedget_version_info
    • First observedomiss_award_recipients
    • First observedomiss_award_rules
    • First observedomiss_awards
    • First observedomiss_checkin_history
    • First observedomiss_member_lookup
    • First observedomiss_net_checkins
    • First observedomiss_net_schedule
    • First observedomiss_net_statistics
    • First observedomiss_nets_on_air
    • First observedomiss_officers
    • First observedomiss_set_callsign
    • First observedomiss_statehood_schedule

TDQS

A3.9/5.0

Scored across 14 tools

Disambiguation4/5

Most tools target a distinct resource: member lookup, net schedule, live nets, past net details, officers, statistics, awards, and eligibility are clearly separated. Minor overlap exists between omiss_checkin_history (list/filter nets) and omiss_net_checkins (detail of one net), and between omiss_awards and omiss_award_rules with no award_id (both can list awards), but the descriptions give enough cues to pick correctly.

Naming Consistency4/5

Thirteen of fourteen tools use a consistent omiss_ snake_case prefix with noun or noun_verb forms (lookup, history, checkins, eligibility, awards), which reads predictably. The outlier is get_version_info, which drops the omiss_ prefix and uses a get_ verb style, a minor deviation.

Tool Count5/5

Fourteen tools is squarely within the well-scoped 3-15 range for an informational server covering members, nets, schedules, awards, and statistics. Each tool maps to a distinct query need with no obvious filler.

Completeness4/5

The surface covers the domain well: member lookup, full net schedule plus live nets, historical check-ins and per-net detail, eligibility, award rules/recipients, officers, statistics, and callsign setup. Gaps are minor, e.g. no aggregated per-member award progress or cross-member/net search beyond the existing filters, but these are workable around.

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
    770 PyPI
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Enables IOTA group lookup, island search, DXCC mapping, nearby groups, and programme statistics through any MCP-compatible AI assistant.
    7
    758 PyPI
    GPL 3.0
  • A
    license
    A
    quality
    A
    maintenance
    Enables querying WSPR beacon data including live spots, band activity, top beacons, propagation paths, and SNR trends through any MCP-compatible AI assistant.
    9
    265 PyPI
    GPL 3.0