fcc-spectrum-mcp-server

v0.1.1 pre-1.0

Search FCC radio licenses, find nearby transmitter sites, and see who is licensed on a frequency via MCP. STDIO or Streamable HTTP.

fcc-spectrum.caseyjhand.com/mcp
claude mcp add --transport http fcc-spectrum-mcp-server https://fcc-spectrum.caseyjhand.com/mcp
codex mcp add fcc-spectrum-mcp-server --url https://fcc-spectrum.caseyjhand.com/mcp
{
  "mcpServers": {
    "fcc-spectrum-mcp-server": {
      "url": "https://fcc-spectrum.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http fcc-spectrum-mcp-server https://fcc-spectrum.caseyjhand.com/mcp
{
  "mcpServers": {
    "fcc-spectrum-mcp-server": {
      "command": "bunx",
      "args": [
        "mcp-remote",
        "https://fcc-spectrum.caseyjhand.com/mcp"
      ]
    }
  }
}
{
  "mcpServers": {
    "fcc-spectrum-mcp-server": {
      "type": "http",
      "url": "https://fcc-spectrum.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://fcc-spectrum.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

5

fcc_spectrum_search_licenses

Search FCC ULS licenses and spectrum leases by callsign, licensee name, FCC Registration Number (FRN), radio service, status, and licensee state, returning one row per record with its unique system identifier (USI) for fcc_spectrum_get_license. At least one of callsign, licensee, frn, radio_service, or state is required; status only narrows. Defaults to active records; pass status "any" to include expired, cancelled, and terminated ones. Licensee name matching is word-based (every word must appear as a word prefix), not fuzzy.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_spectrum_search_licenses",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "callsign": {
      "description": "Exact callsign or lease ID, e.g. \"KNKA123\" or \"L000012345\". Case, spaces, and one trailing portable suffix (\"/4\") are normalized. ULS reuses callsigns, so several records can match.",
      "type": "string",
      "pattern": "^[A-Z0-9]{3,10}$"
    },
    "licensee": {
      "description": "Licensee name words, with at least one letter or digit; every word must match the start of a word in the name, in any order (e.g. \"verizon wireless\"). A word joined by - or & (\"T-Mobile\", \"AT&T\") matches its pieces side by side.",
      "type": "string",
      "maxLength": 200
    },
    "frn": {
      "description": "FCC Registration Number, up to 10 digits; spaces and hyphens are removed and it is left-padded with zeros.",
      "type": "string",
      "pattern": "^\\d{10}$"
    },
    "radio_service": {
      "description": "Two-character radio service code, e.g. \"CD\" (paging) or \"BR\" (BRS); see fcc_spectrum_list_reference topic \"radio_services\".",
      "type": "string",
      "pattern": "^[A-Z0-9]{2}$"
    },
    "status": {
      "description": "License status: A active, L pending legal, X term pending, E expired, C canceled, T terminated, P parent station canceled, or \"any\" for every status. Defaults to A.",
      "default": "A",
      "type": "string",
      "enum": [
        "A",
        "C",
        "E",
        "L",
        "P",
        "T",
        "X",
        "any"
      ]
    },
    "state": {
      "description": "Licensee mailing state: a two-letter USPS code (incl. DC, PR, VI, GU, AS, MP) or a full state name. This is the licensee's address, not the site location.",
      "type": "string",
      "enum": [
        "AL",
        "AK",
        "AZ",
        "AR",
        "CA",
        "CO",
        "CT",
        "DE",
        "DC",
        "FL",
        "GA",
        "HI",
        "ID",
        "IL",
        "IN",
        "IA",
        "KS",
        "KY",
        "LA",
        "ME",
        "MD",
        "MA",
        "MI",
        "MN",
        "MS",
        "MO",
        "MT",
        "NE",
        "NV",
        "NH",
        "NJ",
        "NM",
        "NY",
        "NC",
        "ND",
        "OH",
        "OK",
        "OR",
        "PA",
        "RI",
        "SC",
        "SD",
        "TN",
        "TX",
        "UT",
        "VT",
        "VA",
        "WA",
        "WV",
        "WI",
        "WY",
        "AS",
        "GU",
        "MP",
        "PR",
        "VI"
      ]
    },
    "limit": {
      "default": 25,
      "description": "Records per page (1–100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "nextCursor from the previous page of the same search; omit for the first page.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,200}$"
    }
  },
  "required": [
    "status",
    "limit"
  ],
  "additionalProperties": false
}
view source ↗

fcc_spectrum_get_license

Fetch one FCC ULS license or spectrum lease in full by callsign or unique system identifier (USI): licensee (the lessee on a lease), status and key dates, its locations with coordinates, elevation, structure height, and ASR number, each location's antennas, and each antenna's authorized frequencies with power, ERP/EIRP, station class, transmitter, and emission designators; geographic-area licenses list their market and spectrum blocks, and lease links are shown in both directions. Large records are paged: one call lists whole locations up to 50 sites and 100 antennas, up to max_frequencies frequency rows, and 100 leases, and names the location_offset or lease_offset that reads the rest. Technical detail is kept for active, pending-legal, and term-pending records only. A callsign shared by several records returns the active one, else the most recent.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_spectrum_get_license",
    "arguments": {}
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "callsign": {
      "description": "Callsign or lease ID, e.g. \"KNKA123\" or \"L000012345\". Case, spaces, and one trailing portable suffix (\"/4\") are normalized. Pass this or usi, not both.",
      "type": "string",
      "pattern": "^[A-Z0-9]{3,10}$"
    },
    "usi": {
      "description": "Unique system identifier, as digits: the usi field of fcc_spectrum_search_licenses, fcc_spectrum_find_transmitters, or fcc_spectrum_search_frequencies results. Pass this or callsign, not both.",
      "type": "string",
      "pattern": "^[1-9]\\d{0,9}$"
    },
    "max_frequencies": {
      "default": 100,
      "description": "Most frequency rows to return across the locations this call lists (1–1000); rows beyond it are dropped from the last locations first. Large microwave and land-mobile licenses exceed the default.",
      "type": "integer",
      "minimum": 1,
      "maximum": 1000
    },
    "location_offset": {
      "default": 0,
      "description": "Location to start at, counted from 0 in location-number order; pass nextLocationOffset from the previous call to read the next locations.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "lease_offset": {
      "default": 0,
      "description": "Lease to start at, counted from 0 in lease-ID order; pass nextLeaseOffset from the previous call to read the next 100.",
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "max_frequencies",
    "location_offset",
    "lease_offset"
  ],
  "additionalProperties": false
}
view source ↗

fcc_spectrum_find_transmitters

Find FCC-licensed transmitter sites within a radius of a coordinate, nearest first, each with its callsign, licensee, distance, coordinates, ground elevation, structure height, and the frequencies authorized there. Filter by frequency or band, radio service, and live status (active by default). Coordinates are decimal degrees or DMS strings; mobile-only and area-wide authorizations without a fixed coordinate are not returned, and market-area licenses without site records are found with fcc_spectrum_search_frequencies.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_spectrum_find_transmitters",
    "arguments": {
      "latitude": "<latitude>",
      "longitude": "<longitude>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "latitude": {
      "description": "Search center latitude: decimal degrees (47.6205, \"47.6205\") or a DMS string with hemisphere (\"47-37-13.8 N\", \"47°37'13.8\"N\").",
      "type": "number",
      "minimum": -90,
      "maximum": 90
    },
    "longitude": {
      "description": "Search center longitude: decimal degrees (-122.3493) or a DMS string with hemisphere (\"122-20-57.5 W\").",
      "type": "number",
      "minimum": -180,
      "maximum": 180
    },
    "radius_km": {
      "default": 5,
      "description": "Search radius in km (0.1–100).",
      "type": "number",
      "minimum": 0.1,
      "maximum": 100
    },
    "frequency_low": {
      "description": "Only sites authorized on this frequency, in unit; with frequency_high, the band's lower edge. Matches any assignment whose occupied band overlaps.",
      "type": "number",
      "exclusiveMinimum": 0
    },
    "frequency_high": {
      "description": "Band upper edge in unit; requires frequency_low.",
      "type": "number",
      "exclusiveMinimum": 0
    },
    "unit": {
      "description": "Unit of the frequencies: kHz, MHz (default), or GHz.",
      "default": "MHz",
      "type": "string",
      "enum": [
        "kHz",
        "MHz",
        "GHz"
      ]
    },
    "radio_service": {
      "description": "Two-character radio service code, e.g. \"IG\" (industrial/business pool); see fcc_spectrum_list_reference topic \"radio_services\".",
      "type": "string",
      "pattern": "^[A-Z0-9]{2}$"
    },
    "status": {
      "description": "A active (default), L pending legal, X term pending, or \"any\" for all three. Other statuses keep no site records.",
      "default": "A",
      "type": "string",
      "enum": [
        "A",
        "L",
        "X",
        "any"
      ]
    },
    "limit": {
      "default": 25,
      "description": "Sites per page (1–100).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "max_frequencies_per_site": {
      "default": 10,
      "description": "Most frequencies listed per site (1–50); frequencyCount carries the full count.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    },
    "cursor": {
      "description": "nextCursor from the previous page of the same search; omit for the first page.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,200}$"
    }
  },
  "required": [
    "latitude",
    "longitude",
    "radius_km",
    "unit",
    "status",
    "limit",
    "max_frequencies_per_site"
  ],
  "additionalProperties": false
}
view source ↗

fcc_spectrum_search_frequencies

Find FCC ULS authorizations whose occupied band overlaps a frequency or band. Site assignments (land mobile, microwave, paging, cellular sites) return one row per site and frequency with the site's state and coordinates; market-area licenses and leases (PCS, AWS, 700 MHz, 3.45 and 3.7 GHz, and other auctioned blocks) return one row per spectrum block with its market code and name; 3.5 GHz Priority Access Licenses file no frequency, so list them with fcc_spectrum_search_licenses and radio_service PL. Filter by state, radio service, licensee, and live status (active by default). For transmitter sites near a coordinate, use fcc_spectrum_find_transmitters.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_spectrum_search_frequencies",
    "arguments": {
      "frequency_low": "<frequency_low>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "frequency_low": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Frequency in unit; with frequency_high, the band's lower edge. Matches any authorization whose occupied band overlaps."
    },
    "frequency_high": {
      "description": "Band upper edge in unit; omit to search a single frequency.",
      "type": "number",
      "exclusiveMinimum": 0
    },
    "unit": {
      "description": "Unit of the frequencies: kHz, MHz (default), or GHz.",
      "default": "MHz",
      "type": "string",
      "enum": [
        "kHz",
        "MHz",
        "GHz"
      ]
    },
    "kind": {
      "description": "site: transmitter-site assignments only; market: market-area spectrum blocks only; both (default).",
      "default": "both",
      "type": "string",
      "enum": [
        "site",
        "market",
        "both"
      ]
    },
    "state": {
      "description": "Two-letter USPS code or full state name. Sites match on their filed state, or the state derived from their coordinates; market blocks match on the state codes in the market name.",
      "type": "string",
      "enum": [
        "AL",
        "AK",
        "AZ",
        "AR",
        "CA",
        "CO",
        "CT",
        "DE",
        "DC",
        "FL",
        "GA",
        "HI",
        "ID",
        "IL",
        "IN",
        "IA",
        "KS",
        "KY",
        "LA",
        "ME",
        "MD",
        "MA",
        "MI",
        "MN",
        "MS",
        "MO",
        "MT",
        "NE",
        "NV",
        "NH",
        "NJ",
        "NM",
        "NY",
        "NC",
        "ND",
        "OH",
        "OK",
        "OR",
        "PA",
        "RI",
        "SC",
        "SD",
        "TN",
        "TX",
        "UT",
        "VT",
        "VA",
        "WA",
        "WV",
        "WI",
        "WY",
        "AS",
        "GU",
        "MP",
        "PR",
        "VI"
      ]
    },
    "radio_service": {
      "description": "Two-character radio service code, e.g. \"WU\" (700 MHz upper band); see fcc_spectrum_list_reference topic \"radio_services\".",
      "type": "string",
      "pattern": "^[A-Z0-9]{2}$"
    },
    "licensee": {
      "description": "Licensee name words, with at least one letter or digit; every word must match the start of a word in the name, in any order. A word joined by - or & (\"T-Mobile\", \"AT&T\") matches its pieces side by side.",
      "type": "string",
      "maxLength": 200
    },
    "status": {
      "description": "A active (default), L pending legal, X term pending, or \"any\" for all three. Other statuses keep no frequency records.",
      "default": "A",
      "type": "string",
      "enum": [
        "A",
        "L",
        "X",
        "any"
      ]
    },
    "limit": {
      "default": 50,
      "description": "Rows per page (1–200).",
      "type": "integer",
      "minimum": 1,
      "maximum": 200
    },
    "cursor": {
      "description": "nextCursor from the previous page of the same search; omit for the first page.",
      "type": "string",
      "pattern": "^[A-Za-z0-9_-]{1,200}$"
    }
  },
  "required": [
    "frequency_low",
    "unit",
    "kind",
    "status",
    "limit"
  ],
  "additionalProperties": false
}
view source ↗

fcc_spectrum_list_reference

Decode FCC ULS codes used by the other tools — radio service codes, license statuses, location types, antenna types, applicant types, amateur operator classes — or report coverage: which service groups this index holds, record counts, and when each was last updated. Works before the index is built.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "fcc_spectrum_list_reference",
    "arguments": {
      "topic": "<topic>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "topic": {
      "description": "What to list: a code vocabulary (radio_services, license_statuses, location_types, antenna_types, applicant_types, operator_classes) or coverage, the index build state and loaded service groups.",
      "type": "string",
      "enum": [
        "radio_services",
        "license_statuses",
        "location_types",
        "antenna_types",
        "applicant_types",
        "operator_classes",
        "coverage"
      ]
    },
    "filter": {
      "description": "Radio services only: keep entries whose code and label contain every word given, in any order (e.g. \"700 public safety\"). Case- and accent-insensitive.",
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "topic"
  ],
  "additionalProperties": false
}
view source ↗

Resources

1

One FCC ULS license or spectrum lease by callsign, as JSON: the first page fcc_spectrum_get_license returns (licensee, status and dates, whole locations up to 50 sites and 100 antennas with up to 100 frequency rows, market blocks, lease links with up to 100 leases), plus dataAsOf, the location, site, and frequency-row counts, and a notice naming the fcc_spectrum_get_license call that reads whatever the page leaves out. A callsign shared by several records resolves to the active one, else the most recent.

uri fcc-spectrum://license/{callsign} mime application/json