Skip to main 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
pip install omiss-mcp    # or install it into your own environment

Tools

Tool Description Key Parameters
omiss_net_schedule Every net's band, UTC time, frequency, days and band coordinator; holiday dates —
omiss_nets_on_air OMISS nets on the air now, from NetLogger —
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_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.

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"]
    }
  }
}

Installed with pip instead? Use "command": "omiss-mcp" in any config above.

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

Release files for omiss-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for omiss-mcp 0.1.0
File Size Uploaded
omiss_mcp-0.1.0.tar.gz 155.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for omiss-mcp 0.1.0
File Interpreter ABI Platform
omiss_mcp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 197.1 kB

Release files / omiss_mcp-0.1.0.tar.gz

Download URL omiss_mcp-0.1.0.tar.gz
Size 155.1 kB
Tags Source
SHA-256 checksum
How to use checksums
cb110cf7dd5043251444c054d4850d63fa7987cfe2a1ee64d6cad8a0c7663e38
BLAKE2b-256 checksum
How to use checksums
323783d4024db789955cce53ca028de810f3dcbf3f498cc431bbb43a352632b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / omiss_mcp-0.1.0-py3-none-any.whl

Download URL omiss_mcp-0.1.0-py3-none-any.whl
Size 42.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fcbdd388bd83a2a4858255ab213af7d23c277af5319c5a1bc524ef182caabbb1
BLAKE2b-256 checksum
How to use checksums
946be13b7e174a3c0596e26d8acc783aa1b2b47ebba0999026a445c38041ada5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release history Release notifications | RSS feed

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page