mcpField
M
Mellow Tapir Radio Spectrum Guide

Mellow Tapir Radio Spectrum Guide

ローカル
github.com科学・教育05 週間前に更新

Mellow Tapir Radio Spectrum Guide について

Mellow Tapir Radio Spectrum Guideは、SQLiteの読み取り専用データを使い、無線の周波数帯、チャンネル、電波形式をMCP経由で提供します。周波数割り当ての確認やサービス検索、データ分析に利用でき、ローカルのOllamaモデルに問い合わせるツールもあります。

主な機能

  1. 01周波数を分類しチャンネルを照合
  2. 02周波数範囲でチャンネルを検索
  3. 03テキストでサービスを検索
  4. 04制限付き読み取り専用SQLの実行
  5. 05ローカルOllamaモデルへの問い合わせ

活用シーン

  1. 01周波数に対応するサービスやチャンネルの特定
  2. 02範囲内の既知チャンネルの検索
  3. 03SQLによるカタログデータの分析

MCP 対応

MCPサーバーは、周波数分類、チャンネル検索、サービス検索、読み取り専用SQL、ローカルOllamaモデル問い合わせのツールを提供します。stdioまたはstreamable HTTPで、メタデータとソースデータのリソースも公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"guycole-mellow-tapir": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/guycole/mellow-tapir-mcp:1.0.2"
]
}
}
}
起動コマンドdocker run -i --rm ghcr.io/guycole/mellow-tapir-mcp:1.0.2

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/guycole/mellow-tapir-mcp:1.0.2

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

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 を使用)

このセッション例では、エンドツーエンドの動作を確認します。

  1. SQLite カタログをビルドまたは更新します。
  2. Ollama を起動し、gpt-oss:20b を取得します。
  3. MCP サーバーを HTTP 経由で起動します。
  4. クライアントで接続し、ツールを呼び出します。

ターミナル 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://metadata
  • tapir://sources/seed-json
  • tapir://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 サーバーが読み取り専用モードで使用する、読み取り可能なファイルを生成します。

今後データセットを更新する場合は、次の手順を実行してください。

  1. src/tapir_schema/seed.json を編集します。
  2. ソーススキーマの意図に変更があった場合は、必要に応じて src/tapir_schema/schema.sql も更新します。
  3. 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
  1. MCP サーバーを再起動し、更新された SQLite ファイルを使用するようにします。

コンテナーイメージのビルド時にも、docker build 中に同じビルド手順が実行されます。そのため、イメージの内容はチェックイン済みの最新の seed.json および schema.sql と一致します。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。