Mellow Tapir Radio Spectrum Guide について
Mellow Tapir Radio Spectrum Guideは、SQLiteの読み取り専用データを使い、無線の周波数帯、チャンネル、電波形式をMCP経由で提供します。周波数割り当ての確認やサービス検索、データ分析に利用でき、ローカルのOllamaモデルに問い合わせるツールもあります。
主な機能
- 01周波数を分類しチャンネルを照合
- 02周波数範囲でチャンネルを検索
- 03テキストでサービスを検索
- 04制限付き読み取り専用SQLの実行
- 05ローカルOllamaモデルへの問い合わせ
活用シーン
- 01周波数に対応するサービスやチャンネルの特定
- 02範囲内の既知チャンネルの検索
- 03SQLによるカタログデータの分析
MCP 対応
MCPサーバーは、周波数分類、チャンネル検索、サービス検索、読み取り専用SQL、ローカルOllamaモデル問い合わせのツールを提供します。stdioまたはstreamable HTTPで、メタデータとソースデータのリソースも公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/guycole/mellow-tapir-mcp:1.0.2ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/guycole/mellow-tapir-mcp:1.0.2Streamable HTTPツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Tapir MCP Server
このディレクトリには、stdio とストリーミング可能な HTTP トランスポートの両方に対応した MCP サーバーが含まれています。
このサーバーは src/tapir_schema/seed.json のデータと
src/tapir_schema/schema.sql のスキーマソーステキストを使用し、読み取り専用の SQLite カタログを提供します。
Python 環境
既存のローカル仮想環境を使用します。
cd src/tapir_mcp_server
./venv/bin/python -m pip install -r requirements.txt
SQLite データベースのビルド
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
./venv/bin/python -m mcp_server.build_db \
--db-path data/tapir.sqlite \
--seed-path ../tapir_schema/seed.json \
--schema-path ../tapir_schema/schema.sql
stdio モードで実行
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
TAPIR_DB_PATH=data/tapir.sqlite \
TAPIR_SEED_PATH=../tapir_schema/seed.json \
TAPIR_SCHEMA_PATH=../tapir_schema/schema.sql \
./venv/bin/python -m mcp_server --transport stdio
HTTP モードで実行
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
TAPIR_DB_PATH=data/tapir.sqlite \
TAPIR_SEED_PATH=../tapir_schema/seed.json \
TAPIR_SCHEMA_PATH=../tapir_schema/schema.sql \
REFERENCE_LLM_MODEL=gpt-oss:20b \
OLLAMA_BASE_URL=http://127.0.0.1:11434 \
./venv/bin/python -m mcp_server \
--transport http --host 0.0.0.0 --port 8000 --path /mcp
Ollama gpt-oss:20b を使ったローカルテスト
Ollama を起動し、参照モデルを利用できることを確認します。
ollama serve
別のターミナルで実行します。
ollama pull gpt-oss:20b
ollama run gpt-oss:20b "Summarize the purpose of this MCP server in one sentence."
同じローカル Ollama エンドポイントを使って MCP サーバーを実行します。
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
TAPIR_DB_PATH=data/tapir.sqlite \
TAPIR_SEED_PATH=../tapir_schema/seed.json \
TAPIR_SCHEMA_PATH=../tapir_schema/schema.sql \
REFERENCE_LLM_MODEL=gpt-oss:20b \
OLLAMA_BASE_URL=http://127.0.0.1:11434 \
./venv/bin/python -m mcp_server --transport http --host 127.0.0.1 --port 8000 --path /mcp
MCP クライアントで接続し、テスト用のプロンプトを指定して ask_reference_model を呼び出します。
Ollama に接続でき、モデルが存在する場合、このツールはレスポンス本文と、モデルや完了状態を含むメタデータを返します。
ローカル MCP セッションの例(Ollama を使用)
このセッション例では、エンドツーエンドの動作を確認します。
- SQLite カタログをビルドまたは更新します。
- Ollama を起動し、
gpt-oss:20bを取得します。 - MCP サーバーを HTTP 経由で起動します。
- クライアントで接続し、ツールを呼び出します。
ターミナル 1:Ollama を起動
ollama serve
ターミナル 2:モデルを取得し、任意で簡単なプロンプトを実行
ollama pull gpt-oss:20b
ollama run gpt-oss:20b "Reply with: Ollama ready"
ターミナル 3:Tapir MCP サーバーを起動
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
./venv/bin/python -m mcp_server.build_db \
--db-path data/tapir.sqlite \
--seed-path ../tapir_schema/seed.json \
--schema-path ../tapir_schema/schema.sql
TAPIR_DB_PATH=data/tapir.sqlite \
TAPIR_SEED_PATH=../tapir_schema/seed.json \
TAPIR_SCHEMA_PATH=../tapir_schema/schema.sql \
REFERENCE_LLM_MODEL=gpt-oss:20b \
OLLAMA_BASE_URL=http://127.0.0.1:11434 \
./venv/bin/python -m mcp_server --transport http --host 127.0.0.1 --port 8000 --path /mcp
ターミナル 4:クライアントリクエストの例
cd /Users/gsc/github/mellow-tapir
/Users/gsc/github/mellow-tapir/src/tapir_mcp_server/venv/bin/python - <<'PY'
import anyio
from mcp.client.session import ClientSession
from mcp.client.streamable_http import streamable_http_client
async def main() -> None:
async with streamable_http_client("http://127.0.0.1:8000/mcp") as (
read_stream,
write_stream,
):
session = ClientSession(read_stream, write_stream)
async with session:
await session.initialize()
classify = await session.call_tool(
"classify_frequency", {"frequency": "121.5"}
)
print("classify_frequency:")
print(classify.content[0].text)
llm = await session.call_tool(
"ask_reference_model",
{
"prompt": "Explain 121.5 MHz in one sentence.",
"temperature": 0.1,
},
)
print("ask_reference_model:")
print(llm.content[0].text)
anyio.run(main)
PY
期待される結果:
classify_frequencyは、121.5 MHz付近の航空緊急周波数のデータを返します。ask_reference_modelは、ローカル Ollama モデルgpt-oss:20bによる補完結果を返します。
利用可能なツール
classify_frequency- 目的:単一の周波数を、一致する帯域および正確に一致する既知のチャンネルに分類します。
- 入力:数値の Hz、MHz 文字列(
121.5)、または単位を明示した値(121.5MHz)としてのfrequency。 - 出力:周波数のメタデータ、チャンネルの一致結果、電波型式を含む帯域の一致結果。
query_channels- 目的:周波数範囲内の既知のチャンネルを一覧表示します。
- 入力:
lower_hz、upper_hz、任意のlimit。 - 出力:ラベル、サービス、電波型式を含む、順序付けられたチャンネル行。
search_services- 目的:サービス名と用途名をテキスト検索します。
- 入力:
service_query、任意のlimit。 - 出力:範囲の概要を含む、一致したサービスと用途の組み合わせ。
execute_readonly_sql- 目的:SQLite カタログに対して、その場で読み取り専用の分析を実行します。
- 入力:SQL の
SELECTまたはWITHクエリと、任意のlimit。 - 出力:列の一覧、行の一覧、行数。
- ガードレール:書き込み操作は拒否されます。
ask_reference_model- 目的:Ollama 経由でローカル参照 LLM に問い合わせます。
- 入力:
prompt、任意のsystem_prompt、任意のtemperature。 - 出力:モデルの応答テキストと完了メタデータ。
- デフォルトのモデル:
gpt-oss:20b(REFERENCE_LLM_MODELで変更できます)。
利用可能なリソース
tapir://metadatatapir://sources/seed-jsontapir://sources/schema-sql
Docker
ローカルでビルド:
cd /Users/gsc/github/mellow-tapir
docker build -f src/tapir_mcp_server/Dockerfile -t tapir-mcp:local .
実行:
docker run --rm -p 8080:8080 \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
tapir-mcp:local
.github/workflows/tapir-mcp-server-image.yml の GitHub Actions ワークフローは、GitHub Container Registry にイメージを公開します。
SQLite のデータリネージュと更新
data/tapir.sqlite の SQLite データベースは、次の 2 つのソースファイルから生成されます。
src/tapir_schema/seed.json:バンド、排出量、チャンネルの編集可能な正式カタログです。src/tapir_schema/schema.sql:来歴と整合性チェックのために保持される、ソース PostgreSQL スキーマです。
生成は mcp_server.build_db によって行われ、次の処理が実行されます。
- SQLite テーブル(
band、band_emission、channel、dataset_metadata)を作成します。 seed.jsonからレコードを再読み込みします。- ソースのパスやスキーマ SQL テキストなど、ソースの来歴メタデータを保存します。
- MCP サーバーが読み取り専用モードで使用する、読み取り可能なファイルを生成します。
今後データセットを更新する場合は、次の手順を実行してください。
src/tapir_schema/seed.jsonを編集します。- ソーススキーマの意図に変更があった場合は、必要に応じて
src/tapir_schema/schema.sqlも更新します。 - SQLite を再構築します。
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
./venv/bin/python -m mcp_server.build_db \
--db-path data/tapir.sqlite \
--seed-path ../tapir_schema/seed.json \
--schema-path ../tapir_schema/schema.sql
- MCP サーバーを再起動し、更新された SQLite ファイルを使用するようにします。
コンテナーイメージのビルド時にも、docker build 中に同じビルド手順が実行されます。そのため、イメージの内容はチェックイン済みの最新の seed.json および schema.sql と一致します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。