Skip to content

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

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


Tool Reference

Generated from the released server's own tool definitions.

get_version_info

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

Returns: service_name, service_version (PyPI), spec_version (omiss.net layout), contract_version.

No parameters.

omiss_award_recipients

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

Parameter Type Required Default Description
award_id string Yes The award's ID, from omiss_awards (e.g. ALPHABETSOUP).
callsign string No "" Only this station's certificates.
om_number integer No null Only this member's certificates.
limit integer No 100 At most this many (default 100).

omiss_award_rules

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

Parameter Type Required Default Description
award_id string No "" The award's ID, from omiss_awards or this tool (e.g. ALPHABETSOUP).

omiss_awards

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

Returns: awards with award_id and name.

No parameters.

omiss_checkin_history

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.

Parameter Type Required Default Description
callsign string No "" Only nets this station checked in to (e.g. KI7MT).
om_number integer No null Only nets this OMISS member checked in to (e.g. 7212).
band string No "" Only nets on this band: 10m, 12m, 15m, 17m, 20m, 40m, 80m or 160m.
date string No "" Only nets on this date: YYYY, YYYY-MM or YYYY-MM-DD (UTC).
net_control string No "" Only nets this station ran as net control.

omiss_eligibility

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.

Parameter Type Required Default Description
callsigns list of string Yes Up to 200 callsigns (e.g. ["KI7MT", "W4DWS"]).

omiss_member_lookup

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

Parameter Type Required Default Description
callsign string No "" The member's callsign (e.g. KI7MT).
om_number integer No null The member's OMISS number (e.g. 7212).

omiss_net_checkins

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

Parameter Type Required Default Description
net_id integer Yes The net's ID, from omiss_checkin_history.

omiss_net_schedule

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.

Returns: as_of_utc; nets with weekdays_utc, seasonal_utc, next_utc (or next_utc_note when it can't be worked out, e.g. winter-only nets); footnotes; notes; holidays.

No parameters.

omiss_net_statistics

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).

Parameter Type Required Default Description
state string No "" Also give this state's last check-in on each band (2 letters, e.g. ID).
top integer No 10 How many leaderboard entries (default 10, at most 50).

omiss_nets_on_air

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.

Returns: as_of_utc, and nets with server, name, frequency, band, mode, net control, when opened, how many are monitoring, matched_by (schedule, name) and omiss_net (the scheduled net: band, time, frequency, coordinator). servers counts every net NetLogger listed on each server, before the OMISS filter.

No parameters.

omiss_officers

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

Returns: sections, each with people (role, callsign, name, OM number).

No parameters.

omiss_set_callsign

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.

Parameter Type Required Default Description
callsign string Yes The user's callsign (e.g. KI7MT).

omiss_statehood_schedule

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

Returns: next, and schedule with date and free_call_states.

No parameters.