fcc-broadband-mcp-server について
fcc-broadband-mcp-serverは、米国の地理単位を対象にFCCデータを提供し、ブロードバンドのカバー状況やデジタル格差の調査を支援します。Form 477、Broadband Data Collection、FCC Geo APIを用いたジオコーディングや地域比較に加え、分析プロンプトとリソースを備えています。
主な機能
- 01座標から国勢調査ブロックへの変換
- 02ブロック別プロバイダーと速度の検索
- 03地域カバー状況の集計と比較
- 04未提供人口による地域ランキング
- 05プロバイダーとカバープロファイルの検索
- 06提出期間とダウンロードファイルの一覧
活用シーン
- 01地点ごとのブロードバンド提供状況の評価
- 02州や郡などのカバー状況の比較
- 03未提供人口が多い地域の特定
- 04BEADや公平性の調査用データの整理
MCP 対応
MCP サーバーは、10個のツール、2つのリソース、デジタル格差分析プロンプトをクライアントに公開します。Form 477の検索に認証情報は不要ですが、BDCのダウンロード一覧ツールには認証情報の設定が必要です。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://fcc-broadband.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-fcc-broadband https://fcc-broadband.caseyjhand.com/mcp{"mcpServers":{"cyanheads-fcc-broadband":{"type":"http","url":"https://fcc-broadband.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-fcc-broadband":{"type":"http","url":"https://fcc-broadband.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-fcc-broadband":{"type":"http","url":"https://fcc-broadband.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-fcc-broadband":{"serverUrl":"https://fcc-broadband.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
9| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| latitude | number | はい | 地点の緯度(10 進度。例:シアトル(WA)の場合は 47.6062)。米国本土、アラスカ、ハワイ、または米国領土内である必要があります。 |
| longitude | number | はい | 地点の経度(10 進度。例:シアトル(WA)の場合は -122.3321)。西半球では負の値です。 |
詳細
@cyanheads/fcc-broadband-mcp-server
MCP を介して、米国の地理区域および国勢調査区画の FCC ブロードバンド利用可能状況、カバレッジ分析、デジタルデバイドのデータにアクセスできます。STDIO または Streamable HTTP に対応しています。
公開ホストサーバー: https://fcc-broadband.caseyjhand.com/mcp
概要
Form 477(2015年6月~2021年6月)およびブロードバンドデータ収集(2022年6月以降)の FCC ブロードバンドデータを利用できます。座標を国勢調査区画にジオコーディングし、区画内の ISP と公表速度を検索するほか、未サービス人口に基づいて地理区域を要約、比較、順位付けできます。BEAD および公平性の調査に役立ちます。
ツール
| ツール | 説明 |
|---|---|
fcc_geocode_block | 緯度・経度の座標を、郡および州の識別子を含む2010年版の国勢調査区画 FIPS コードに変換します |
fcc_search_availability | 技術と速度で絞り込み、国勢調査区画内のプロバイダーと公表速度を一覧表示します |
fcc_search_geographies | カバレッジ検索用に、名称から地域および CBSA の GEOID を検索します |
fcc_get_coverage_summary | 1つの地理区域について、プロバイダー数別の人口を、都市部/農村部および部族地域/非部族地域に分けて表示します |
fcc_compare_areas | 同じ種類の複数の地理区域のカバレッジを、カバレッジの低い順に順位付けします |
fcc_find_underserved | 州内または全国の、未サービス人口が最も多い地域を順位付けします |
fcc_search_providers | 名称、州、技術で持株会社を検索し、hoconum 識別子を返します |
fcc_get_provider | 1社の持株会社について、技術と速度階層別の人口を含む全国カバレッジプロファイルを表示します |
fcc_list_filing_periods | Form 477 の提出期間と BDC の基準日を含む、データの各時点を一覧表示します |
fcc_list_downloads | 指定した基準日の BDC 一括データファイルを一覧表示します |
リソース
| リソース | 説明 |
|---|---|
fcc-broadband://geography/{type}/{id}/summary | 25 Mbps における1つの地域のカバレッジ概要 |
fcc-broadband://providers/list/{offset} | Form 477 の持株会社ディレクトリの1ページ分。1ページあたり25件 |
リソースデータは、ツールからも取得できます。地域には fcc_get_coverage_summary、持株会社には fcc_search_providers を使用します。
プロンプト
| プロンプト | 説明 |
|---|---|
broadband_equity_analysis | FCC のカバレッジと国勢調査局および BLS のデータを連携させ、デジタルデバイド分析を構成します |
機能リファレンス
fcc_geocode_block ツール
latitudeとlongitudeは10進度で指定し、FCC Geo API を通じて2010年の国勢調査境界に照合されますblockFips(15桁。fcc_search_availabilityですぐに使用できます)、censusVintage、countyFips、countyName、stateFips、stateCode、stateNameを返します。水域上または米国のカバレッジ範囲外の座標はblock_not_foundとして失敗します。FCC バックエンドの構造化された障害はgeo_backend_unavailableとして失敗し、後で同じ座標を使って再試行するよう案内します
fcc_search_availability ツール
block_fips(2010年版、15桁)は必須です。tech_filter(Form 477 の技術コード)、min_speed_down(Mbps)、consumer(trueは消費者向け、falseは事業者向け)を指定して対象を絞り込めます- 提供内容ごとに1行を返します。各行には
hoconum、techCode/techLabel、maxDownloadMbps、maxUploadMbps、consumer、businessが含まれ、さらに異なる持株会社の数を示すtotalProvidersも含まれます。プロバイダーが存在しない未絞り込みのブロックはblock_not_foundとして失敗します。絞り込み条件に一致する結果がない場合は、notice付きの空リストを返します
fcc_search_geographies ツール
- 空白以外の値を含む
nameは必須で、大文字と小文字を区別しないリテラル部分文字列として照合されます。任意のgeography_typeはplaceまたはcbsaを指定します。limitの既定値は20(最大100)、offsetの開始値は0です { geography_type, geography_id, name }の重複しない一致を、名前、タイプ、GEOID の安定した順序で返します。さらにcount、offsetを返し、残りの一致がある場合に限りnextOffsetも返します。結果がないページや最終ページを超えたページには案内が含まれます。総件数は計算されません- ミラーが有効な場合でも、
year='2021'を指定して FCC のライブ検索を使用します。一致を絞り込むには、nameに場所を示す語句を含めてください。CBSA コードから州への所属は判断できません。選択したタイプと GEOID をfcc_get_coverage_summaryに渡してください
fcc_get_coverage_summary ツール
geography_typeにはnation、state、county、cd、place、cbsa、tribalのいずれかを指定します。nation以外のすべてのタイプでgeography_idが必須です。urban_rural_filter(all/R/U)とtribal_filter(all/T/N)で対象人口を絞り込めます- プロバイダー数別の人口を示す
population(noCoverage、oneProvider、twoProviders、threeOrMore、total)、coveragePct、unservedPct、competitivePct、セグメントごとのbreakdownを返します。geography_not_found、invalid_geography_combo、invalid_geography_id_shapeのいずれかとして失敗します - 全国のカバレッジはローカルでは
United Statesという名前で、geography.id: "0"を維持します。地域名の検索は不要です
fcc_compare_areas ツール
- 同じ
geography_type(nation以外のすべてのタイプ)のgeography_idsを2~50件指定するか、compare_all_states: trueを指定すると、50州と DC を比較します。sort_byにはunserved_pct(既定値)、unserved_pop、coverage_pct、competitive_pctのいずれかを指定します - どの並べ替え方法でも、最も状況が悪い地域が先頭になります。そのため
rankが1の地域が最も支援を必要としています。各行にはid、解決済みの場合はname、プロバイダー数別の人口、および3つすべての割合が含まれます。missing_geography_ids、invalid_all_states_combo、invalid_geography_id_shape、no_data_foundのいずれかとして失敗します
fcc_find_underserved tool
state(USPS の州または準州コード)を指定すると検索範囲が絞られ、指定しない場合は全国を検索します。geography_typeはcounty(デフォルト)、cd、place、cbsaのいずれかです。urban_rural_filterのデフォルトはR、min_unserved_popは 1、limitは 20(最大 100)ですnoCoverageの順にランク付けされた地域が返されます。各地域にはrank、id、name、oneProvider、total、unservedPct、coveragePctが含まれます。totalFoundは上限適用前の一致件数です。認識されないstateを指定するとunknown_stateエラーになり、一致するものがないフィルターではnoticeを含む空のランキングが返されます
fcc_search_providers tool
name_search(大文字と小文字を区別しない部分一致)、state、tech_filterはすべて省略可能で、同じ届出に一致する必要があります。limitのデフォルトは 50(最大 200)です- 重複を除いた持株会社が返されます。各社には
hoconum、holdingCompanyName、およびフィルターで絞り込まれない全国のstatesServed/techCodesが含まれます。一致するものがない場合はnoticeを含む空のリストが返されます。30 秒の制限時間内にライブ検索が完了しない場合はlive_search_timeoutエラーになります - ライブ API では、
scanTruncated: trueはリストがサンプルであることを示し、totalCountは省略されます。完全なコーパスのミラー(FCC_MIRROR_ENABLED=true)では、すべての一致が返されます
fcc_get_provider tool
fcc_search_providersまたはプロバイダーディレクトリーリソースから取得した、数字のみのhoconumtechCodes/techLabelsと、各人を一度だけ数え、空の階層を省略するspeedTierPopulationが返されます。法人向けのみの通信事業者では、両方のリストが空になります。provider_not_foundエラーになるか、30 秒の制限時間を超えるとlive_provider_timeoutエラーになります
fcc_list_filing_periods tool
- Form 477 の対象期間は常に返されます。認証情報が設定されている場合、
include_bdc: trueを指定すると BDC の基準日が追加されます periodsは新しい順で、各項目にasOfDateとsource(form477またはbdc)が含まれます。また、form477Count、bdcCount、hasBdcCredentialsも返されます。認証情報がない場合、エラーにはならず、bdcCountは 0 になります
fcc_list_downloads tool
as_of_date(YYYY-MM-DD)は必須です。data_type(availabilityがデフォルト、またはchallenge)、category(Summary、State、Provider)、technology_type(Fixed Broadband、Mobile Broadband、Mobile Voice)、state、provider_nameで絞り込めます。limitのデフォルトは 50(最大 200)で、offsetを使ってページ分割します- 各ファイルのメタデータと
downloadUrlが返されます。ファイルの内容は返されません。totalFilesはすべての一致件数で、最終ページではnextOffsetが省略されます。対応していない日付ではinvalid_as_of_dateエラーになります - 起動時に BDC 認証情報が両方設定されている場合に限り、MCP クライアントから利用できます。それ以外の場合、HTTP ランディングページには無効状態のカードとセットアップ手順が引き続き表示されます
fcc-broadband://geography/{type}/{id}/summary resource
typeにはfcc_get_coverage_summaryの7種類の地理タイプを指定します。idは桁数が検証される FIPS GEOID で、国全体には0を指定します- 25 Mbps および
acfoswに固定されており、application/json形式でpopulation、3種類の割合、segmentsが返されます。ほかのしきい値やフィルターを使う場合はfcc_get_coverage_summaryを使用してください
fcc-broadband://providers/list/{offset} resource
offsetを指定して、hoconum順のディレクトリーを一度に25件ずつページ分割します。0から始め、nextOffsetに従ってください- 各項目には
hoconumと、解決済みの場合はholdingCompanyNameが含まれます。各ページにはtotalとcountが表示されます。名前で会社を検索するにはfcc_search_providersを使用してください
broadband_equity_analysis prompt
- 引数は
region(自由記述)とfocus(underserved、rural、tribal、allのいずれか)で、どちらも必須です - 基本のカバレッジ、対象地域、人口統計との照合、プロバイダーの状況、BEAD の背景という5段階の分析を説明するユーザーメッセージが1件返されます
特長
@cyanheads/mcp-ts-core 上に構築されています。stdio および Streamable HTTP トランスポート、差し替え可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングに対応した構造化ログを提供します。
FCC 固有の機能:
- FCC の 3 つの情報源はすべて、米国政府のパブリックドメインデータです。FCC Open Data(Socrata)の Form 477、BDC Public Data API、FCC Geo API を利用します。
- すべての Form 477 ツールとリソースは認証情報なしで動作し、最後の提出分である 2021 年 6 月のデータを読み込みます。BDC データは一括ファイルのマニフェストとしてのみ公開されます。
FCC_BDC_USERNAMEとFCC_BDC_HASH_VALUEの両方が設定されている場合に限り、fcc_list_downloadsが MCP クライアントに公開されます。 - エリアツールでは共通の用語体系を使用します。
tech_filterの文字(すべての技術を表すacfoswがデフォルト、aは DSL、cはケーブル、fは光ファイバー、oはその他、sは衛星、wは固定無線)と、speed_downの段階(0.2、4、10、25、100、250、1000Mbps。デフォルトは25、100は BEAD のしきい値)です。 - カバレッジ分析では、ブロック単位の展開テーブルではなく、事前集計済みの Area Table(
xvwq-qtaj)を読み込むため、州や郡の規模のクエリも高速に処理できます。 - オプションのローカル Form 477 ミラー(
FCC_MIRROR_ENABLED=true)を使用すると、SQLite からクエリに応答し、取り込み済みでないデータについてはライブ API にフォールバックします。
エージェント向けの出力:
- フィルターのエコー:検索、要約、ランキングの各ツールは
appliedFiltersを返し、すべての Form 477 結果にはdataVintageが含まれます。 - 部分的な結果を明示:上流のスキャンに上限がある場合(
fcc_search_providers、fcc_find_underserved)、scanTruncatedとscanRowCapでその結果であることを示します。一致するデータがない場合はエラーではなくnoticeを返します。 - 型付きエラー:
block_not_found、invalid_geography_id_shape、credentials_requiredなどの理由と、復旧のヒントを示します。
はじめに
公開ホストインスタンス
公開インスタンス https://fcc-broadband.caseyjhand.com/mcp を利用できます。インストールは不要です。Streamable HTTP 経由で、任意の MCP クライアントから接続できます。
{
"mcpServers": {
"fcc-broadband-mcp-server": {
"type": "streamable-http",
"url": "https://fcc-broadband.caseyjhand.com/mcp"
}
}
}
セルフホスト/ローカル
以下を MCP クライアントの設定ファイルに追加してください。
{
"mcpServers": {
"fcc-broadband-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/fcc-broadband-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または npx を使用します(Bun は不要です)。
{
"mcpServers": {
"fcc-broadband-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/fcc-broadband-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
Streamable HTTP を使用する場合は、トランスポートを設定してサーバーを起動してください。
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以上(または Node.js v24 以降)。
- オプション:
fcc_list_downloadsと BDC の提出期間に必要な FCC BDC 認証情報。broadbandmap.fcc.gov の「Manage API Access」でトークンを生成してください。 - オプション:Form 477 のレート制限を緩和するには、Socrata アプリトークン(
FCC_OPENDATA_APP_TOKEN)を使用します。
インストール
- リポジトリをクローンします:
git clone https://github.com/cyanheads/fcc-broadband-mcp-server.git
- ディレクトリに移動します:
cd fcc-broadband-mcp-server
- 依存関係をインストールします:
bun install
- 環境を設定します:
cp .env.example .env
# edit .env and set FCC_BDC_USERNAME, FCC_BDC_HASH_VALUE, and FCC_OPENDATA_APP_TOKEN as needed
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
FCC_BDC_USERNAME | BDC API 用の FCC アカウントのメールアドレスです。fcc_list_downloads と、fcc_list_filing_periods の BDC の日付に必要です。 | なし |
FCC_BDC_HASH_VALUE | broadbandmap.fcc.gov の「Manage API Access」で取得する API トークンのハッシュです。FCC_BDC_USERNAME と組み合わせて使用します。 | なし |
FCC_OPENDATA_APP_TOKEN | Socrata アプリトークンです。FCC Open Data のレート制限を緩和します。 | なし |
FCC_MIRROR_ENABLED | カバレッジの範囲内で、Form 477 のクエリをローカルの SQLite ミラーから提供します。 | false |
FCC_MIRROR_PATH | ミラーの SQLite ファイルを格納するディレクトリです。 | data/fcc-mirror |
MCP_TRANSPORT_TYPE | トランスポートです。stdio または http を指定します。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_SESSION_MODE | HTTP セッションモードです。stateless、stateful、または auto を指定します。 | stateless |
MCP_AUTH_MODE | 認証方式です。none、jwt、または oauth を指定します。 | none |
MCP_LOG_LEVEL | ログレベルです(debug、info、warning、error など)。 | info |
LOGS_DIR | ログファイル用のディレクトリです(Node.js のみ)。 | <project-root>/logs |
STORAGE_PROVIDER_TYPE | ストレージバックエンドです。in-memory、filesystem、supabase、cloudflare-kv/r2/d1 を指定します。 | in-memory |
OTEL_ENABLED | OpenTelemetry を有効にします。 | false |
オプションの上書き設定の全一覧については、.env.example を参照してください。
BDC 認証情報は、プロセス環境または .env から取得できます。プロセス環境の値が優先されます。空の値、空白文字のみの値、置換されていないプレースホルダー値は、未設定として扱われます。両方の認証情報を設定した後に再起動すると、fcc_list_downloads が有効になります。Form 477 の申請期間は、認証情報がなくても利用できます。
サーバーの実行
ローカル開発
-
ビルドして実行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
チェックとテストを実行:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t fcc-broadband-mcp-server .
docker run --rm -p 3010:3010 fcc-broadband-mcp-server
Dockerfile は、HTTP トランスポートとステートレスセッションモードをデフォルトとし、/var/log/fcc-broadband-mcp-server にログを出力します。OpenTelemetry のピア依存関係はデフォルトでインストールされます。これらを省くには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。イメージにはミラースクリプトと書き込み可能な data/ ディレクトリも含まれています。
ローカル Form 477 ミラー
Form 477 は 2021 年 6 月の申請で凍結されているため、一度取り込んでローカルの SQLite インデックスにできます。ミラーはデフォルトで無効になっています。また、コーパス全体のソースデータは約 9 GB あり、取り込みに数時間かかるため、クエリ対象の州に絞って初期化できます。
bun run mirror:init -- --states 11,53 # specific states by 2-digit FIPS (11 = DC, 53 = WA)
bun run mirror:init -- --full # the whole corpus
bun run mirror:verify # coverage, row counts, SQLite integrity
次に、FCC_MIRROR_ENABLED=true を設定してください。Docker では、docker exec <container> bun run mirror:init -- --states 11,53 を使って同じスクリプトを実行します。スクリプトは @/ パスエイリアスを通じてインポートするため、npm install では解決されません。ソースコードのチェックアウトまたはイメージから実行してください。
- クエリ対象の州がすべて取り込まれていれば、ブロックと地理情報の検索はミラーから提供されます。それ以外はライブ API にフォールバックします。
fcc_search_geographiesは常にライブ検索を使用します。ミラーには年の列が保持されていません。fcc_search_providers、fcc_get_provider、および GEOID に州が含まれない地理情報(cbsa、tribal、nation)は、--fullを指定して取り込んだ場合にのみミラーから提供されます。- ミラーの名前検索では単語の先頭一致(
comcで「Comcast」が見つかります)が使われます。一方、ライブ API では部分文字列一致(mcast)が使われるため、単語の途中の文字列では結果が少なくなる場合があります。 - 取り込みは冪等で、処理が中断されても保存済みカーソルから再開します。全件を取り込む場合は、先に
FCC_OPENDATA_APP_TOKENを設定してください。Bun は組み込みのbun:sqliteを使用します。Node.js ではオプションのピア依存関係better-sqlite3が必要です。
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/index.ts | createApp() のエントリーポイントです。ツール、リソース、プロンプトを登録し、サービスを初期化します。 |
src/config | サーバー固有の環境変数を解析し、Zod で検証します。 |
src/mcp-server/tools | ツール定義(*.tool.ts)です。FCC Open Data、BDC API、Geo API にわたる 10 個のツールがあります。 |
src/mcp-server/resources | リソース定義(*.resource.ts)です。地理情報の概要とプロバイダーディレクトリが含まれます。 |
src/mcp-server/prompts | プロンプト定義(*.prompt.ts)です。ブロードバンドの公平性を分析するプロンプトが含まれます。 |
src/services/open-data | Form 477 の展開状況、地域、プロバイダーのテーブルを扱う FCC Open Data(Socrata)サービスです。mirror/ にはローカルの SQLite ミラーが格納されています。 |
src/services/bdc-api | BDC Public Data API サービスです。認証が必要な申告期間とダウンロードマニフェストを扱います。 |
src/services/geo-api | FCC Geo API サービスです。緯度・経度を国勢調査区画 FIPS に変換します。 |
scripts/ | ビルド、開発チェック、パッケージ作成用のスクリプトと、fcc-mirror-init.ts / fcc-mirror-verify.ts が含まれます。 |
tests/ | src/ に対応する単体テストと統合テストです。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジックに
try/catchを記述しないでください。 - リクエスト単位のログには
ctx.logを、テナント単位のストレージにはctx.stateを使用してください。 src/mcp-server/*/definitions/index.tsのバレルを通じて、新しいツールとリソースを登録してください。- 外部 API の呼び出しはラップしてください。未加工データを検証し、ドメイン型に正規化してから、出力スキーマを返してください。不足しているフィールドを捏造してはいけません。
- Socrata はすべてのフィールドを文字列として返すため、件数と速度(
has_0~has_3more、maxaddown、maxadup)を明示的に解析してください。
コントリビューション
Issue は歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。