
Mellow Tapir Radio Spectrum Guide
io.github.guycolePublished by GitHub account guycolev1.0.2Updated Nov 3, 2026
Explore likely radio services, channels, and emissions from 108 MHz to 1 GHz.
The publisher's own server: Mellow Hub
Overview
Read-only radio spectrum catalog server that lets an assistant classify frequencies, list channels and search services from 108 MHz to 1 GHz.
- What you can do
- Classify a single frequency into matching bands and known channels, accepting Hz, MHz strings or explicit units
- List known channels within a frequency range, with labels, services and emissions
- Search service and use names by text and get range summaries
- Run ad hoc read-only SQL (SELECT or WITH) over the SQLite catalog, with write operations rejected
- Query a local Ollama reference model with a prompt, optional system prompt and temperature
- Read resources exposing catalog metadata and the seed and schema source files
- When to use it
- Useful when you need to interpret a radio frequency, look up which service or channel occupies a band, or browse the catalog of bands, emissions and channels between 108 MHz and 1 GHz. It suits spectrum planning, monitoring or hobbyist radio questions rather than general web or data work.
- Requirements
- Runs as a local process (stdio) or as a Docker image with streamable HTTP. Needs a built SQLite catalog generated from the seed JSON and schema SQL, plus the TAPIR_DB_PATH, TAPIR_SEED_PATH and TAPIR_SCHEMA_PATH environment variables. The reference-model tool needs a reachable Ollama endpoint via OLLAMA_BASE_URL and the model named by REFERENCE_LLM_MODEL (default gpt-oss:20b).
Installation
In SourceWeft
- Open Mellow Tapir Radio Spectrum Guide in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Tapir MCP Server
This directory contains an MCP server with both stdio and streamable HTTP transports.
The server uses data from src/tapir_schema/seed.json and source schema text from
src/tapir_schema/schema.sql, then serves a read-only SQLite catalog.
Python environment
Use the existing local virtual environment:
Build the SQLite database
Run in stdio mode
Run in HTTP mode
Local testing with Ollama gpt-oss:20b
Start Ollama and ensure the reference model is available:
In another terminal:
Run the MCP server with the same local Ollama endpoint:
When connected with an MCP client, call ask_reference_model with a test prompt.
If Ollama is reachable and the model is present, the tool returns a response body
and metadata including model and done status.
Sample local MCP session (with Ollama)
This sample session verifies end-to-end behavior:
- Build or refresh the SQLite catalog.
- Start Ollama and pull
gpt-oss:20b. - Start the MCP server over HTTP.
- Connect with a client and call tools.
Terminal 1: start Ollama
Terminal 2: pull model and optional sanity prompt
Terminal 3: start Tapir MCP server
Terminal 4: sample client requests
Expected outcome:
classify_frequencyreturns aviation emergency channel data around121.5 MHz.ask_reference_modelreturns a completion from local Ollama modelgpt-oss:20b.
Available tools
classify_frequency- Purpose: classify a single frequency into matching bands and exact known channels.
- Input:
frequencyas numeric Hz, MHz string (121.5), or explicit unit (121.5MHz). - Output: frequency metadata, channel matches, and band matches with emissions.
query_channels- Purpose: list known channels in a frequency range.
- Input:
lower_hz,upper_hz, optionallimit. - Output: ordered channel rows with labels, services, and emissions.
search_services- Purpose: text search across service names and use names.
- Input:
service_query, optionallimit. - Output: matching service/use combinations with range summaries.
execute_readonly_sql- Purpose: ad hoc read-only analysis over the SQLite catalog.
- Input: SQL
SELECTorWITHquery and optionallimit. - Output: column list, row list, and row count.
- Guardrails: write operations are rejected.
ask_reference_model- Purpose: query local reference LLM through Ollama.
- Input:
prompt, optionalsystem_prompt, optionaltemperature. - Output: model response text and completion metadata.
- Default model:
gpt-oss:20b(override withREFERENCE_LLM_MODEL).
Available resources
tapir://metadatatapir://sources/seed-jsontapir://sources/schema-sql
Docker
Build locally:
Run:
The GitHub Actions workflow in .github/workflows/tapir-mcp-server-image.yml publishes
images to GitHub Container Registry.
SQLite data lineage and refresh
The SQLite database in data/tapir.sqlite is generated from two source files:
src/tapir_schema/seed.json: canonical editable catalog of bands, emissions, and channels.src/tapir_schema/schema.sql: source PostgreSQL schema retained for provenance and parity checks.
Generation is handled by mcp_server.build_db, which:
- creates SQLite tables (
band,band_emission,channel,dataset_metadata), - reloads records from
seed.json, - stores source provenance metadata (including source paths and schema SQL text),
- produces a read-ready file used in read-only mode by the MCP server.
When updating the dataset in the future:
- Edit
src/tapir_schema/seed.json. - Optionally update
src/tapir_schema/schema.sqlif source-schema intent changed. - Rebuild SQLite:
- Restart the MCP server so it uses the refreshed SQLite file.
The container image build also runs this same build step during docker build,
so image contents stay aligned with the latest checked-in seed.json and schema.sql.
Source: src/tapir_mcp_server/README.md at commit 629c3be
Tools
0Version history
1- v1.0.2LatestSep 22, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
