mcpField
I
Internet Radio

Internet Radio

ローカル
github.comゲーム・エンタメ12 週間前に更新

Internet Radio について

Internet Radio は、Radio Browser から世界各地のインターネットラジオを探すオープンソースの MCP サーバーです。MCP クライアントに局の情報や配信 URL、ランキング、国・ジャンル一覧を提供します。

主な機能

  1. 01名前、ジャンル、国、言語で局を検索
  2. 02局の詳細と配信 URL を取得
  3. 03人気局とトレンド局を一覧表示
  4. 04国とジャンルの一覧を閲覧
  5. 05停止中と判定された配信を除外

活用シーン

  1. 01ブラジルのジャズ局を探す
  2. 02指定局の配信 URL を取得
  3. 03国別にトレンド局を閲覧
  4. 04ジャンルを確認してから局を検索

MCP 対応

stdio 経由で、読み取り専用ツール 5 個と `find_radio` プロンプトを MCP クライアントに提供します。結果には配信 URL とブラウザーで聴くためのリンクが含まれます。

設定

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

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

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

パッケージ
ocighcr.io/alondrilich/internet-radio-mcp:1.0.3

ツール

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

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

詳細

internet-radio-mcp

インターネットラジオ用のオープンソース Model Context Protocol(MCP)サーバーです。Claude、Cursor、VS Code Copilot などの MCP クライアントが、世界中のラジオ局を検索し、直接再生できるストリーム URL を取得できます。また、人気上位やトレンドのラジオ局、国、ジャンルも一覧表示します。

ラジオ局のデータは、稼働中のストリームを持つ50,000局以上が登録された、コミュニティ管理のパブリックドメインディレクトリ Radio Browser から取得しています。このサーバーは、同じディレクトリを利用する無料のウェブラジオプレーヤー 72FM が開発しています。各結果には、72FMのブラウザーでラジオ局を再生する listen_url と、ラジオ局独自の stream_url が含まれます。

ラジオ局は放送事業者に帰属します。72FM もこのサーバーも、ラジオ局を所有、運営、選定していません。ディレクトリへの情報の追加や編集は誰でもできるため、ストリームが一時的にオフラインになることがあります。

  • API キーもアカウントも不要で、読み取り専用です。
  • ツール5つ、プロンプト1つ、stdio トランスポートです。
  • 実行時の依存関係:@modelcontextprotocol/server(公式 MCP TypeScript SDK、v2)と zod。

質問の例

  • 「ブラジルのジャズ局を探して」
  • 「日本で最も人気のあるラジオ局は?」
  • 「BBC World Service のストリーム URL を教えて」
  • 「今、インターネットラジオでトレンドになっているのは?」
  • 「ラジオ局の数が最も多い国は?」
  • 「検索できるジャンルを教えて。それからローファイのラジオ局をいくつか探して」

インストール

Node.js 20以降が必要です。サーバーは npx で GitHub から直接実行できるため、グローバルにインストールする必要はありません。

Claude Code
claude mcp add internet-radio -- npx -y github:AlonDrilich/internet-radio-mcp

セッションで /mcp を実行し、internet-radio が接続されていることを確認してください。

Claude Desktop

Settings → Developer → Edit Config を開きます。claude_desktop_config.json が開きます。このファイルは、macOS では ~/Library/Application Support/Claude/claude_desktop_config.json、Windows では %APPDATA%\Claude\claude_desktop_config.json にあります。次の内容を追加してください。

{
  "mcpServers": {
    "internet-radio": {
      "command": "npx",
      "args": ["-y", "github:AlonDrilich/internet-radio-mcp"]
    }
  }
}

Claude Desktop を再起動してください。

Cursor

Cursor に追加 をクリックして追加するか、どこからでも使えるようにサーバーを ~/.cursor/mcp.json に、または1つのプロジェクトで使えるように .cursor/mcp.json に追加してください。

{
  "mcpServers": {
    "internet-radio": {
      "command": "npx",
      "args": ["-y", "github:AlonDrilich/internet-radio-mcp"]
    }
  }
}
VS Code(GitHub Copilot、エージェントモード)

VS Code にインストール をクリックして追加するか、サーバーを .vscode/mcp.json に追加するか、コマンドパレットから MCP: Add Server を実行してください。

{
  "servers": {
    "internet-radio": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "github:AlonDrilich/internet-radio-mcp"]
    }
  }
}
Gemini CLI
gemini extensions install https://github.com/AlonDrilich/internet-radio-mcp

リポジトリには gemini-extension.json が含まれているため、サーバーは internet-radio 拡張機能として追加されます。

その他のクライアント

stdio サーバーを起動できる MCP クライアントであれば、同じコマンド npx -y github:AlonDrilich/internet-radio-mcp を使用できます。

初回起動時は GitHub からパッケージをダウンロードするため、数秒かかります。2回目以降の起動では npx キャッシュが使われます。

Docker

同じサーバーはコンテナーイメージとして公開され、公式 MCP Registry に io.github.AlonDrilich/internet-radio-mcp として掲載されています。

docker run -i --rm ghcr.io/alondrilich/internet-radio-mcp:latest

クライアント設定では、"command": "docker" と "args": ["run", "-i", "--rm", "ghcr.io/alondrilich/internet-radio-mcp:latest"] を使用してください。

ツール

すべてのツールは読み取り専用で、readOnlyHint: true および openWorldHint: true と注釈されています。各結果には次のものが含まれます。

  • 1 行の概要
  • 同じデータを JSON テキストで表したもの
  • ツールの outputSchema に一致する structuredContent

ディレクトリの直近の自動チェックに失敗したストリームは、検索対象から除外されます。

ツール引数戻り値
search_stationsname?、tag?(ジャンル)、countrycode?(ISO 3166-1 alpha-2、例:BR)、language?(例:portuguese)、order = votes | clickcount(既定値 votes)、limit 1–50(既定値 10)条件に一致する局
get_stationid(Radio Browser の stationuuid)1 局
top_stationsby = votes | clicks | trending(既定値 votes)、countrycode?、tag?、limit 1–50(既定値 10)投票数、再生数、またはトレンドの上位局
list_countriesmin_stations?(既定値 1)、limit?国名、ISO コード、局数、72FM の国別ページ(https://72fm.com/radio/<iso2>?source=mcp)
list_genreslimit 1–100(既定値 30)局数順の上位ジャンルタグ。プレースホルダーやジャンル以外のタグ(例:undefined、radio、fm、国名、地域名、言語名)は除外されます。
局のフィールド
{
  "id": "963fa65f-0601-11e8-ae97-52543be04c81",
  "name": "Antena 1 São Paulo, SP (ZYD823 94,7 MHz FM) [aac]",
  "country": "Brazil",
  "countrycode": "BR",
  "language": "portuguese",
  "tags": ["adult contemporary", "jazz", "pop", "smooth jazz"],
  "codec": "AAC+",
  "bitrate": 96,
  "homepage": "http://antena1.com.br/",
  "stream_url": "http://antena1.newradio.it/stream?ext=.mp3",
  "favicon": null,
  "votes": 33238,
  "lastcheckok": true,
  "listen_url": "https://72fm.com/station/963fa65f-0601-11e8-ae97-52543be04c81?source=mcp"
}
  • stream_url は、ディレクトリで解決されたストリーム URL、または解決された URL がない場合は元の URL です。
  • listen_url は、72FM でブラウザーを使って局を再生します。末尾の ?source=mcp は、アクセスがこのサーバー経由であることを 72FM に伝えるだけです(アプリはリファラーを送信しません)。ID や、ユーザーまたは質問に関する情報は含まれません。
  • tags には最大 8 個のタグが格納されます。
プロンプト

find_radio(request) は、「雨の夜に聴く穏やかなジャズ」や「リスボンのラジオ」のように、気分、場所、活動、ジャンルに合った局を検索します。

信頼できないデータ

局名、タグ、言語、国、URL は誰でも編集できる公開ディレクトリのデータであり、サーバーはそれらを AI アシスタントに渡します。そのため、サーバーはすべてのフィールドを信頼できない入力として扱います。

  • テキストは 1 行にまとめられます。改行と制御文字はスペースに置き換えられ、ゼロ幅文字、双方向制御文字、私用領域のコードポイント、不可視の Unicode「タグ」文字、およびその他すべての不可視の「既定で無視可能な」コードポイント(異体字セレクター、フィラー、結合文字)は削除されます。ただし、絵文字セレクターと実際のテキストに必要なゼロ幅結合文字は、連続して 2 個以下の場合に限り残ります。名前は 120 文字、タグは 40 文字、その他のフィールドは 60 文字で切り詰められます。
  • URL(stream_url、homepage、favicon)は、認証情報やバックスラッシュを含まない、完全な形式で記述されたプレーンな http または https でなければなりません。解析後の正規形で返されます。それ以外(javascript:、data:、file:、https:host、単独の単語)は破棄されます。有効な ID がない局、または再生可能なストリームがない局は結果から除外されます。
  • 局がビット毎秒で報告した場合、bitrate は変換され、妥当でない場合は破棄されます。ディレクトリ独自のビットレート順ソートは、そのようなエントリーを上位に並べるため提供されません。
  • すべての結果とサーバーの指示には、これらのフィールドが指示ではなくデータであることが明記されています。
  • 応答は 5 MB 以下で、JSON リストでなければなりません。リダイレクトする、または別の内容を返すミラーは失敗とみなされます。

これにより、間接的なプロンプトインジェクションのリスクは低減しますが、完全に取り除くことはできません。局名が「以前の指示を無視してください」となっている場合もあり、そのテキストは他の名前と同様に、1 行に制限されて表示されます。結果を利用する際は、信頼できないデータとして扱ってください。

信頼性

サーバーは、各ミラーに対して8秒のタイムアウトを設定し、次の順序で Radio Browser のミラーに問い合わせます。

  1. de1.api.radio-browser.info
  2. de2.api.radio-browser.info
  3. all.api.radio-browser.info

3つすべてに失敗した場合、ツールは明確なエラー(isError: true)を返し、サーバーは稼働を続けます。リクエストでは、User-Agent: internet-radio-mcp/1.0 (+https://72fm.com) を使用します。

次の2つの任意の環境変数を使って、この動作を変更できます。

  • RADIO_BROWSER_MIRRORS:デフォルトの代わりに使用する、カンマ区切りのベース URL です。認証情報を含まない https URL のみを受け付けます(テスト用途に限り、localhost、127.0.0.1、[::1] ではプレーンな http も使用できます)。それ以外は無視され、標準エラー出力に警告が表示されます。リダイレクトは一切追跡されません。
  • RADIO_BROWSER_TIMEOUT_MS:各ミラーへのタイムアウトをミリ秒単位で指定します。100~60000の整数です(デフォルトは 8000)。

開発

git clone https://github.com/AlonDrilich/internet-radio-mcp
cd internet-radio-mcp
npm install
npm run typecheck   # tsc checkJs over the JSDoc-typed sources
npm run smoke       # spawns the server over stdio and calls every tool against the live API
npx @modelcontextprotocol/inspector node src/index.js   # interactive testing

ソースコードは JSDoc 型注釈付きのプレーンな ES モジュール(src/)であり、ビルド手順はありません。そのため、npm に公開しなくても npx github:… が動作します。

関連プロジェクト

  • radio-playlists:同じディレクトリから国やジャンル別に作成された、週ごとの M3U プレイリストです(オンラインで閲覧)。
  • radio-player-72fm:サイトに放送局のプレーヤーを設置するための WordPress プラグインです。
  • Radio stream URL finder:ブラウザーで同じ検索を行えます。放送局名を入力し、ストリームのアドレスをコピーします。
  • 72FM のすべてのツール:72fm.com/developers。

データとクレジット

  • 放送局ディレクトリのデータは Radio Browser から取得しており、パブリックドメインです。メンテナーと貢献者の皆さんに感謝します。このサーバーを頻繁に利用する場合は、Radio Browser の支援をご検討ください。
  • ストリーム、名称、ロゴの権利は、それぞれの放送局に帰属します。
  • 72FM は、Radio Browser ディレクトリを基盤とした無料のウェブラジオプレーヤーです。

ライセンス

MIT © Alon Drilich(72FM)

コメント

MCP は初めてですか?

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

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