fcc-spectrum-mcp-server
An MCP server that provides tools to search the FCC Universal Licensing System for radio licenses, find nearby licensed transmitter sites, and identify licensees on specific frequencies. It supports STDIO and Streamable HTTP transports and includes tools for searching licenses by callsign or FRN, retrieving full license details, finding transmitters by location, and searching frequencies.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://fcc-spectrum.caseyjhand.com/mcpWhat its tools do
5 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search FCC ULS licenses by callsign, licensee name, or FRN
- Find nearby licensed transmitter sites based on coordinates
- Identify who is licensed on a specific frequency or band
- Retrieve full license details including antennas and microwave paths
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- fcc-spectrum-mcp-server 0.3.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 5 advertised
- Resources
- 1 advertised
- Resource templates
- 2 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": true,
"listChanged": true
},
"extensions": {
"io.modelcontextprotocol/skills": {
"directoryRead": true
}
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
5 advertised
fcc_spectrum_search_licenses — Search FCC ULS licenses
Search FCC ULS licenses and spectrum leases by callsign, licensee name, FCC Registration Number (FRN), market code, 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, market_code, 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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"frn": {
"type": "string",
"pattern": "^\\d{10}$",
"description": "FCC Registration Number, up to 10 digits; spaces and hyphens are removed and it is left-padded with zeros."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive integer records per page; values above 100 are clamped to 100 with a notice."
},
"state": {
"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"
],
"type": "string",
"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."
},
"cursor": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,200}$",
"description": "nextCursor from the previous page of the same search; omit for the first page."
},
"status": {
"enum": [
"A",
"C",
"E",
"L",
"P",
"T",
"X",
"any"
],
"type": "string",
"default": "A",
"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."
},
"callsign": {
"type": "string",
"pattern": "^[A-Z0-9]{3,10}$",
"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."
},
"licensee": {
"type": "string",
"maxLength": 200,
"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."
},
"market_code": {
"type": "string",
"pattern": "^(?:[A-Z]{3}\\d{3}|[A-Z]\\d{5}|[A-Z]{2}\\d{4}|NW)$",
"description": "Market code of a geographic-area license, matched exactly, e.g. \"PEA016\", \"CMA020\", \"D06037\", or \"NW\" (nationwide); results carry it as marketCode. Case, spaces, and hyphens are ignored, and the digits are left-padded with zeros (\"pea16\" reads as PEA016)."
},
"radio_service": {
"type": "string",
"pattern": "^[A-Z0-9]{2}$",
"description": "Two-character radio service code, e.g. \"CD\" (paging) or \"BR\" (BRS); see fcc_spectrum_list_reference topic \"radio_services\"."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"licenses",
"dataAsOf",
"totalCount",
"truncated",
"shown",
"cap",
"appliedFilters"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The page limit applied."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"index_not_ready",
"no_criteria",
"unknown_radio_service",
"service_not_indexed",
"invalid_cursor"
],
"description": "Machine-readable failure mode. Declared by this tool: `index_not_ready`: No completed index generation is published yet. `no_criteria`: No search field was supplied. `unknown_radio_service`: The radio service code is neither in the FCC code table nor held by the index. `service_not_indexed`: The radio service code is valid but no indexed service group carries it. `invalid_cursor`: The cursor does not decode, belongs to an earlier index generation, or is from a licensee search the daily refresh has since changed. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"shown": {
"type": "number",
"description": "Records on this page."
},
"notice": {
"type": "string",
"description": "Why nothing matched, what redaction excluded, or how to page further."
},
"dataAsOf": {
"type": "string",
"description": "Creation time of the newest applied ULS file (ISO 8601)."
},
"licenses": {
"type": "array",
"items": {
"type": "object",
"required": [
"usi",
"isLease",
"licenseStatus",
"statusLabel",
"radioServiceCode",
"radioServiceLabel",
"serviceGroup",
"licenseeName",
"licenseeRedacted",
"locationCount",
"frequencyCount"
],
"properties": {
"frn": {
"type": "string",
"description": "FCC Registration Number of the licensee, when filed."
},
"usi": {
"type": "string",
"description": "Unique system identifier of the record; pass it to fcc_spectrum_get_license."
},
"isLease": {
"type": "boolean",
"description": "True for a spectrum leasing arrangement, whose licensee is the lessee."
},
"callsign": {
"type": "string",
"description": "Callsign, or lease ID (L + 9 digits) on a lease; absent on the few records filed without one."
},
"grantDate": {
"type": "string",
"description": "Grant date (YYYY-MM-DD)."
},
"marketCode": {
"type": "string",
"description": "Market code of a geographic-area license; pass it as market_code to list the market's licenses."
},
"marketName": {
"type": "string",
"description": "Market name of a geographic-area license."
},
"expiredDate": {
"type": "string",
"description": "Expiration date (YYYY-MM-DD)."
},
"statusLabel": {
"type": "string",
"description": "Label of the license status code."
},
"licenseeCity": {
"type": "string",
"description": "Licensee mailing city, when filed and not redacted."
},
"licenseeName": {
"type": [
"string",
"null"
],
"description": "Licensee (lessee on a lease) as filed; null when redacted or not on file."
},
"serviceGroup": {
"type": "string",
"description": "FCC bulk-data service group the record was indexed from (e.g. \"paging\"); fcc_spectrum_list_reference topic \"coverage\" lists the groups."
},
"applicantType": {
"type": "string",
"description": "ULS applicant type code (I individual, C corporation, …), when filed."
},
"licenseStatus": {
"type": "string",
"description": "ULS license status code (A active, E expired, C canceled, T terminated, …)."
},
"licenseeState": {
"type": "string",
"description": "Licensee mailing state, when filed."
},
"locationCount": {
"type": "number",
"description": "Locations indexed for the record; 0 when its status is not A, L, or X, since sites are kept only for active, pending-legal, and term-pending records."
},
"frequencyCount": {
"type": "number",
"description": "Frequency rows indexed for the record; 0 when its status is not A, L, or X."
},
"lastActionDate": {
"type": "string",
"description": "Date of the last ULS action on the record (YYYY-MM-DD)."
},
"cancellationDate": {
"type": "string",
"description": "Cancellation date (YYYY-MM-DD)."
},
"licenseeRedacted": {
"type": "boolean",
"description": "True when the licensee is an individual whose name and city are withheld."
},
"radioServiceCode": {
"type": "string",
"description": "Two-character ULS radio service code."
},
"radioServiceLabel": {
"type": "string",
"description": "Label of the radio service code."
}
},
"description": "One license or lease record.",
"additionalProperties": false
},
"description": "Matching records, ranked by name-match relevance when licensee is given and in callsign order otherwise."
},
"truncated": {
"type": "boolean",
"description": "True when more records follow this page."
},
"nextCursor": {
"type": "string",
"description": "Pass as cursor with the same filters for the next page; absent on the last page."
},
"totalCount": {
"type": "number",
"description": "Records matching the filters, across every page."
},
"appliedFilters": {
"type": "object",
"required": [
"status"
],
"properties": {
"frn": {
"type": "string",
"description": "Normalized FRN filter."
},
"state": {
"type": "string",
"description": "Normalized licensee state filter."
},
"status": {
"type": "string",
"description": "Status filter, default included."
},
"callsign": {
"type": "string",
"description": "Normalized callsign filter."
},
"licensee": {
"type": "string",
"description": "Licensee name words searched."
},
"market_code": {
"type": "string",
"description": "Normalized market code filter."
},
"radio_service": {
"type": "string",
"description": "Radio service code filter."
}
},
"description": "Filters as the server applied them, normalized values and defaults included.",
"additionalProperties": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}fcc_spectrum_get_license — Get an FCC ULS 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, each antenna's authorized frequencies with power, ERP/EIRP, station class, transmitter, and emission designators, and the microwave paths it transmits on (receive location and antenna, receive coordinates, receiving callsign); 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, 100 antennas, and 100 paths, up to max_frequencies frequency rows, and 100 leases, and names the location_offset or lease_offset that reads the rest; location_number starts the locations at a location number the search tools return. 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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"usi": {
"type": "string",
"pattern": "^[1-9]\\d{0,9}$",
"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."
},
"callsign": {
"type": "string",
"pattern": "^[A-Z0-9]{3,10}$",
"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."
},
"lease_offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Lease to start at, counted from 0 in lease-ID order; pass nextLeaseOffset from the previous call to read the next 100."
},
"location_number": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Location number to start at: the locationNumber of a fcc_spectrum_find_transmitters or fcc_spectrum_search_frequencies result. A number the record does not file starts at the next one it does. Pass this or a nonzero location_offset, not both; page on with nextLocationOffset."
},
"location_offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Location to start at, counted from 0 in location-number order; pass nextLocationOffset from the previous call to read the next locations. To start at a location number instead, pass location_number."
},
"max_frequencies": {
"type": "integer",
"default": 100,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive integer frequency-row budget across the locations this call lists; values above 1000 are clamped to 1000 with a notice. Rows beyond it are dropped from the last locations first. Large microwave and land-mobile licenses exceed the default."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"found",
"dataAsOf",
"truncated",
"shown",
"cap"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The max_frequencies cap applied."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"index_not_ready",
"identifier_required",
"location_start_conflict"
],
"description": "Machine-readable failure mode. Declared by this tool: `index_not_ready`: No completed index generation is published yet. `identifier_required`: Neither or both of callsign and usi were supplied. `location_start_conflict`: location_number was supplied with a nonzero location_offset. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "True when a record matched; false returns guidance and candidates instead."
},
"shown": {
"type": "number",
"description": "Frequency rows returned."
},
"notice": {
"type": "string",
"description": "What this call left out and the call that reads it, where an unfiled location_number started the locations, or why an offset or location number listed nothing."
},
"license": {
"type": "object",
"required": [
"usi",
"isLease",
"licenseStatus",
"statusLabel",
"radioServiceCode",
"radioServiceLabel",
"serviceGroup",
"licensee",
"leasedFrom",
"leases",
"leaseCount"
],
"properties": {
"usi": {
"type": "string",
"description": "Unique system identifier."
},
"leases": {
"type": "array",
"items": {
"type": "object",
"required": [
"usi",
"licenseStatus"
],
"properties": {
"usi": {
"type": "string",
"description": "Lease USI."
},
"callsign": {
"type": "string",
"description": "Lease ID."
},
"licenseStatus": {
"type": "string",
"description": "Lease status code."
}
},
"description": "One lease.",
"additionalProperties": false
},
"description": "Leases carved from this license, up to 100 from lease_offset, in lease-ID order."
},
"market": {
"type": "object",
"required": [
"marketCode",
"blocks"
],
"properties": {
"blocks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"lowMhz": {
"type": "number",
"description": "Lower edge, MHz; absent on a block filed as a channel width only."
},
"highMhz": {
"type": "number",
"description": "Upper edge, MHz; absent on a block filed as a channel width only."
},
"channelWidthMhz": {
"type": "number",
"description": "Channel width, MHz, of a block ULS files with no frequency (a 0 lower edge): 3.5 GHz Priority Access License channels, which the Spectrum Access System assigns within 3550–3650 MHz."
},
"partitionAreaIds": {
"type": "array",
"items": {
"type": "number",
"description": "One ULS partition area ID."
},
"description": "ULS partition areas this band is filed under; a partitioned license files one band per area, listed once here."
}
},
"description": "One spectrum block.",
"additionalProperties": false
},
"description": "Spectrum blocks authorized in the market; kept only for status A, L, or X (active, pending legal, term pending), so empty otherwise."
},
"marketCode": {
"type": "string",
"description": "Market code (e.g. BTA028, CMA001)."
},
"marketName": {
"type": "string",
"description": "Market name as filed (cut at 30 characters by ULS)."
},
"channelBlock": {
"type": "string",
"description": "Channel block, as filed."
}
},
"description": "Geographic-area license market; present on market-based records.",
"additionalProperties": false
},
"amateur": {
"type": "object",
"properties": {
"trusteeName": {
"type": [
"string",
"null"
],
"description": "Trustee name; null when redaction withholds it."
},
"operatorClass": {
"type": "string",
"description": "Amateur operator class code."
},
"trusteeCallsign": {
"type": "string",
"description": "Trustee callsign of a club, military-recreation, or RACES license."
},
"previousCallsign": {
"type": "string",
"description": "Previous callsign of the station."
},
"operatorClassLabel": {
"type": "string",
"description": "Label of the operator class code."
}
},
"description": "Amateur license details; present on amateur records.",
"additionalProperties": false
},
"isLease": {
"type": "boolean",
"description": "True for a spectrum leasing arrangement."
},
"callsign": {
"type": "string",
"description": "Callsign, or lease ID (L + 9 digits) on a lease."
},
"licensee": {
"type": "object",
"required": [
"name",
"redacted",
"role"
],
"properties": {
"frn": {
"type": "string",
"description": "FCC Registration Number, when filed."
},
"city": {
"type": "string",
"description": "Mailing city, when filed and not redacted."
},
"name": {
"type": [
"string",
"null"
],
"description": "Licensee or lessee name as filed; null when redacted or not on file."
},
"role": {
"enum": [
"licensee",
"lessee"
],
"type": "string",
"description": "lessee on a lease record, licensee otherwise."
},
"state": {
"type": "string",
"description": "Mailing state, when filed."
},
"redacted": {
"type": "boolean",
"description": "True when the licensee is an individual whose name and city are withheld."
},
"applicantType": {
"type": "string",
"description": "ULS applicant type code, when filed."
}
},
"description": "The licensee entity (the lessee on a lease).",
"additionalProperties": false
},
"grantDate": {
"type": "string",
"description": "Grant date (YYYY-MM-DD)."
},
"leaseCount": {
"type": "number",
"description": "Total leases carved from this license."
},
"leasedFrom": {
"type": "array",
"items": {
"type": "object",
"required": [
"usi"
],
"properties": {
"usi": {
"type": "string",
"description": "Parent license USI; pass it as usi to read the parent."
},
"callsign": {
"type": "string",
"description": "Parent license callsign."
}
},
"description": "One parent license.",
"additionalProperties": false
},
"description": "Licenses this lease is carved from; empty unless the record is a lease."
},
"expiredDate": {
"type": "string",
"description": "Expiration date (YYYY-MM-DD)."
},
"statusLabel": {
"type": "string",
"description": "Label of the license status code."
},
"serviceGroup": {
"type": "string",
"description": "FCC bulk-data service group the record was indexed from (e.g. \"paging\"); fcc_spectrum_list_reference topic \"coverage\" lists the groups."
},
"effectiveDate": {
"type": "string",
"description": "Effective date (YYYY-MM-DD)."
},
"licenseStatus": {
"type": "string",
"description": "ULS license status code."
},
"lastActionDate": {
"type": "string",
"description": "Date of the last ULS action (YYYY-MM-DD)."
},
"cancellationDate": {
"type": "string",
"description": "Cancellation date (YYYY-MM-DD)."
},
"radioServiceCode": {
"type": "string",
"description": "Two-character ULS radio service code."
},
"radioServiceLabel": {
"type": "string",
"description": "Label of the radio service code."
}
},
"description": "The record; present when found is true.",
"additionalProperties": false
},
"dataAsOf": {
"type": "string",
"description": "Creation time of the newest applied ULS file (ISO 8601)."
},
"guidance": {
"type": "string",
"description": "Why nothing matched and where to look next; present when found is false."
},
"locations": {
"type": "array",
"items": {
"type": "object",
"required": [
"locationNumber",
"antennas"
],
"properties": {
"city": {
"type": "string",
"description": "Site city, as filed."
},
"name": {
"type": "string",
"description": "Site name, as filed; omitted on an individual licensee's record while redaction is on."
},
"sites": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "Site city, as filed."
},
"name": {
"type": "string",
"description": "Site name, as filed; omitted on an individual licensee's record while redaction is on."
},
"state": {
"type": "string",
"description": "Site state: as filed, or derived from the coordinates when the filing leaves it blank."
},
"county": {
"type": "string",
"description": "Site county, as filed."
},
"address": {
"type": "string",
"description": "Site street address; omitted on an individual licensee's record while redaction is on."
},
"latitude": {
"type": "number",
"description": "Latitude, decimal degrees (NAD83 as filed); absent when the filed coordinates fail validation."
},
"radiusKm": {
"type": "number",
"description": "Radius of operation for an area location, km."
},
"asrNumber": {
"type": "string",
"description": "FCC Antenna Structure Registration number: seven digits, never the 9999999 placeholder; omitted when the filing holds anything else (the placeholder, N/A, an application file number)."
},
"longitude": {
"type": "number",
"description": "Longitude, decimal degrees (NAD83 as filed); absent when the filed coordinates fail validation."
},
"structureType": {
"type": "string",
"description": "Structure type code, as filed (e.g. TOWER, BTWR)."
},
"coordinatesDms": {
"type": "string",
"description": "Coordinates as filed, degrees-minutes-seconds text."
},
"overallHeightM": {
"type": "number",
"description": "Overall structure height, meters."
},
"supportHeightM": {
"type": "number",
"description": "Support structure height, meters."
},
"groundElevationM": {
"type": "number",
"description": "Ground elevation, meters above mean sea level."
},
"locationTypeCode": {
"type": "string",
"description": "ULS location type code (F fixed, M mobile, …); absent when not filed."
},
"locationClassCode": {
"type": "string",
"description": "ULS location class code, as filed."
},
"locationTypeLabel": {
"type": "string",
"description": "Label of the location type code."
},
"locationClassLabel": {
"type": "string",
"description": "FCC label of the filed location class; absent for an unknown code. This is authorization metadata, not actual on-air activity."
},
"stateFromCoordinates": {
"type": "boolean",
"description": "True when state was derived from the coordinates rather than filed."
}
},
"description": "One filed site.",
"additionalProperties": false
},
"description": "Every site the license files under this location number, in filing order; present only when there are several, and then the location's own site fields are absent."
},
"state": {
"type": "string",
"description": "Site state: as filed, or derived from the coordinates when the filing leaves it blank."
},
"county": {
"type": "string",
"description": "Site county, as filed."
},
"address": {
"type": "string",
"description": "Site street address; omitted on an individual licensee's record while redaction is on."
},
"antennas": {
"type": "array",
"items": {
"type": "object",
"required": [
"frequencies"
],
"properties": {
"make": {
"type": "string",
"description": "Antenna manufacturer, as filed."
},
"haatM": {
"type": "number",
"description": "Height above average terrain, meters."
},
"model": {
"type": "string",
"description": "Antenna model, as filed."
},
"paths": {
"type": "array",
"items": {
"type": "object",
"required": [
"pathNumber",
"receive"
],
"properties": {
"receive": {
"type": "object",
"required": [
"locationNumber"
],
"properties": {
"latitude": {
"type": "number",
"description": "Receive site latitude, decimal degrees, from this license's own site record; present only when the license files exactly one site under the receive location number and its coordinates validate."
},
"longitude": {
"type": "number",
"description": "Receive site longitude, decimal degrees; present with latitude."
},
"siteCount": {
"type": "number",
"description": "Sites this license files under the receive location number, when not exactly one: 0 when it files none, 2 or more when the number is shared, and then no coordinates are given."
},
"antennaFiled": {
"type": "boolean",
"const": false,
"description": "false when this license files no antenna record under antennaNumber at the receive location; absent otherwise."
},
"antennaNumber": {
"type": "number",
"description": "Receive antenna number at that location; absent when the filing leaves it blank."
},
"locationNumber": {
"type": "number",
"description": "Location number of the receive end, on this license."
}
},
"description": "The receive end, resolved against this license's own location and antenna records; the receiving station's license is not read.",
"additionalProperties": false
},
"pathType": {
"type": "string",
"description": "Path type as filed, e.g. \"Fixed Point-to-Point\" or \"Area\"; absent when blank."
},
"pathNumber": {
"type": "number",
"description": "Path number as filed; not unique on a license, where a number can be filed more than once."
},
"passiveReceiver": {
"type": "boolean",
"description": "True when the filing marks the receiver passive, false when not; absent when blank."
},
"receiverCallsign": {
"type": "string",
"description": "Receiving station's callsign as filed, neither normalized nor checked (some filings hold placeholders such as N/A); absent when blank. Pass it as callsign to fcc_spectrum_get_license to try reading the receiving license."
}
},
"description": "One microwave path (PA record) this antenna transmits on, as filed.",
"additionalProperties": false
},
"description": "Microwave paths this antenna transmits on, in filing order; present only on an antenna that transmits on a filed path. An antenna with a path but no antenna or frequency record is listed with only its number, empty frequencies, and paths."
},
"gainDbi": {
"type": "number",
"description": "Antenna gain, dBi."
},
"azimuthDeg": {
"type": "number",
"description": "Azimuth of the main beam, degrees true."
},
"frequencies": {
"type": "array",
"items": {
"type": "object",
"required": [
"frequencyMhz",
"emissions"
],
"properties": {
"erpW": {
"type": "number",
"description": "Effective radiated power, watts."
},
"eirpDbm": {
"type": "number",
"description": "Effective isotropic radiated power, dBm."
},
"upperMhz": {
"type": "number",
"description": "Upper edge when the assignment is a range, MHz."
},
"emissions": {
"type": "array",
"items": {
"type": "string",
"description": "One emission designator, e.g. \"11K2F3E\"."
},
"description": "Emission designators filed for this frequency row."
},
"bandwidthMhz": {
"type": "number",
"description": "Widest necessary bandwidth parsed from the emission designators, MHz; a designator 20% of the assigned frequency or wider is a filing error and is left out."
},
"frequencyMhz": {
"type": "number",
"description": "Assigned (center) frequency, MHz."
},
"powerOutputW": {
"type": "number",
"description": "Transmitter output power, watts."
},
"stationClass": {
"type": "string",
"description": "ULS class-of-station code, as filed (e.g. FB2, FXO); decode with fcc_spectrum_list_reference, topic \"station_classes\", filter set to this code. Unknown filed codes remain unchanged."
},
"transmitterMake": {
"type": "string",
"description": "Transmitter manufacturer, as filed."
},
"transmitterModel": {
"type": "string",
"description": "Transmitter model, as filed."
}
},
"description": "One authorized frequency row, as filed (adaptive-modulation filings repeat a frequency per step).",
"additionalProperties": false
},
"description": "Frequency rows on this antenna, in filing order."
},
"recordCount": {
"type": "number",
"description": "AN records the license files under this location and antenna number, when more than one (usually one per site sharing the location number); fields that differ between them are omitted."
},
"beamwidthDeg": {
"type": "number",
"description": "Beamwidth, degrees."
},
"heightToTipM": {
"type": "number",
"description": "Height to antenna tip above ground, meters."
},
"polarization": {
"type": "string",
"description": "Polarization code, as filed."
},
"antennaNumber": {
"type": "number",
"description": "Filed antenna number within the location; absent for an independently retained unnumbered AN record, which has no associated frequency rows."
},
"antennaTypeCode": {
"type": "string",
"description": "ULS antenna type code (H Hub, P Passive Repeater, R Final Receiver, T Transmit Antenna)."
},
"heightToCenterM": {
"type": "number",
"description": "Height to center of radiation above ground, meters."
}
},
"description": "One antenna at a location.",
"additionalProperties": false
},
"description": "Antennas filed under this location number; with several sites, ULS does not say which site each antenna and frequency belongs to."
},
"latitude": {
"type": "number",
"description": "Latitude, decimal degrees (NAD83 as filed); absent when the filed coordinates fail validation."
},
"radiusKm": {
"type": "number",
"description": "Radius of operation for an area location, km."
},
"asrNumber": {
"type": "string",
"description": "FCC Antenna Structure Registration number: seven digits, never the 9999999 placeholder; omitted when the filing holds anything else (the placeholder, N/A, an application file number)."
},
"longitude": {
"type": "number",
"description": "Longitude, decimal degrees (NAD83 as filed); absent when the filed coordinates fail validation."
},
"structureType": {
"type": "string",
"description": "Structure type code, as filed (e.g. TOWER, BTWR)."
},
"coordinatesDms": {
"type": "string",
"description": "Coordinates as filed, degrees-minutes-seconds text."
},
"locationNumber": {
"type": "number",
"description": "Location number within the license."
},
"overallHeightM": {
"type": "number",
"description": "Overall structure height, meters."
},
"supportHeightM": {
"type": "number",
"description": "Support structure height, meters."
},
"groundElevationM": {
"type": "number",
"description": "Ground elevation, meters above mean sea level."
},
"locationTypeCode": {
"type": "string",
"description": "ULS location type code (F fixed, M mobile, …); absent when not filed."
},
"locationClassCode": {
"type": "string",
"description": "ULS location class code, as filed."
},
"locationTypeLabel": {
"type": "string",
"description": "Label of the location type code."
},
"locationClassLabel": {
"type": "string",
"description": "FCC label of the filed location class; absent for an unknown code. This is authorization metadata, not actual on-air activity."
},
"stateFromCoordinates": {
"type": "boolean",
"description": "True when state was derived from the coordinates rather than filed."
}
},
"description": "One license location number: one site, or several sites the license files under the same number.",
"additionalProperties": false
},
"description": "Locations with antennas, frequency rows, and paths, one entry per location number (a number filed at several sites lists them in sites): whole locations from location_offset or location_number up to 50 sites, 100 antennas, and 100 paths (a path counted at its transmit location), or one larger location alone; present when found is true."
},
"pathTotal": {
"type": "number",
"description": "Microwave paths the record files across all its locations; 0 when technicalRetained is false, since paths are kept only for status A, L, or X. Present when found is true, except on an index built before paths were indexed, where the notice reports the gap."
},
"siteTotal": {
"type": "number",
"description": "Sites the record files, each site of a shared location number counted; present when found is true."
},
"truncated": {
"type": "boolean",
"description": "True when this call leaves part of the record out: locations after the ones listed, frequency rows beyond max_frequencies, or leases after the ones listed."
},
"candidates": {
"type": "array",
"items": {
"type": "object",
"required": [
"callsign",
"usi",
"licenseStatus"
],
"properties": {
"usi": {
"type": "string",
"description": "Candidate USI."
},
"callsign": {
"type": "string",
"description": "Candidate callsign."
},
"licenseStatus": {
"type": "string",
"description": "Candidate status code."
}
},
"description": "One callsign-prefix match.",
"additionalProperties": false
},
"description": "Up to 5 records whose callsign starts with the one requested; present when a callsign lookup found nothing."
},
"locationTotal": {
"type": "number",
"description": "Location numbers the record files; present when found is true."
},
"nextLeaseOffset": {
"type": "number",
"description": "Pass as lease_offset to read the leases after these; absent when none follow."
},
"technicalRetained": {
"type": "boolean",
"description": "False when the status is not A, L, or X (active, pending legal, term pending): sites and frequencies are kept only for those, so locations is empty."
},
"nextLocationOffset": {
"type": "number",
"description": "Pass as location_offset to read the locations after these; absent when none follow."
},
"otherCallsignRecords": {
"type": "array",
"items": {
"type": "object",
"required": [
"usi",
"licenseStatus"
],
"properties": {
"usi": {
"type": "string",
"description": "USI of another record under the same callsign; pass it as usi to read that record."
},
"licenseStatus": {
"type": "string",
"description": "Its status code."
}
},
"description": "Another record sharing the callsign.",
"additionalProperties": false
},
"description": "Other records under the same callsign (ULS reuses callsigns); present when found is true."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}fcc_spectrum_find_transmitters — Find FCC-licensed sites near a point
Find FCC-licensed sites within a radius of a coordinate, nearest first, each with its callsign, licensee, distance, coordinates, filed location type and class, ground elevation, structure height, and authorized frequencies. Filter by frequency or band, radio service, location type, location class, and live status (active by default). Unset location_class keeps all filed roles, including receive and passive locations; filed classes describe authorization, not actual on-air activity. Coordinates are decimal degrees or DMS strings. Mobile and temporary-fixed operating areas are returned at their center with radiusKm and match when the center lies within radius_km. Locations without valid coordinates are omitted; market-area licenses without site records are found with fcc_spectrum_search_frequencies.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"latitude",
"longitude"
],
"properties": {
"unit": {
"enum": [
"kHz",
"MHz",
"GHz"
],
"type": "string",
"default": "MHz",
"description": "Unit of the frequencies: kHz, MHz (default), or GHz."
},
"limit": {
"type": "integer",
"default": 25,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive integer sites per page; values above 100 are clamped to 100 with a notice."
},
"cursor": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,200}$",
"description": "nextCursor from the previous page of the same search; omit for the first page."
},
"status": {
"enum": [
"A",
"L",
"X",
"any"
],
"type": "string",
"default": "A",
"description": "A active (default), L pending legal, X term pending, or \"any\" for all three. Other statuses keep no site records."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"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\")."
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Search center longitude: decimal degrees (-122.3493) or a DMS string with hemisphere (\"122-20-57.5 W\")."
},
"radius_km": {
"type": "number",
"default": 5,
"maximum": 100,
"minimum": 0.1,
"description": "Search radius in km (0.1–100)."
},
"frequency_low": {
"type": "number",
"description": "Only sites authorized on this frequency, in unit; with frequency_high, the band's lower edge. Matches any assignment whose occupied band overlaps.",
"exclusiveMinimum": 0
},
"location_type": {
"enum": [
"6",
"F",
"I",
"L",
"M",
"P",
"T"
],
"type": "string",
"description": "One ULS location type code, case-insensitive: \"F\" keeps fixed sites only, \"M\" mobile and \"T\" temporary-fixed operating areas; see fcc_spectrum_list_reference topic \"location_types\". Omit for every type."
},
"radio_service": {
"type": "string",
"pattern": "^[A-Z0-9]{2}$",
"description": "Two-character radio service code, e.g. \"IG\" (industrial/business pool); see fcc_spectrum_list_reference topic \"radio_services\"."
},
"frequency_high": {
"type": "number",
"description": "Band upper edge in unit; requires frequency_low.",
"exclusiveMinimum": 0
},
"location_class": {
"enum": [
"C",
"L",
"P",
"R",
"T"
],
"type": "string",
"description": "One filed FCC location class, case-insensitive: C Centerpoint, L IQ/QQ Area of Operation Desc, P Passive Repeater Location, R Receive Location, T Transmit Location. Omit for every class; filed classes do not establish actual on-air activity."
},
"max_frequencies_per_site": {
"type": "integer",
"default": 10,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive integer frequency budget per site; values above 50 are clamped to 50 with a notice. frequencyCount carries the full count."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"sites",
"dataAsOf",
"totalCount",
"truncated",
"shown",
"cap",
"searchCenter",
"appliedFilters"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The page limit applied."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"index_not_ready",
"invalid_frequency_range",
"unknown_radio_service",
"service_not_indexed",
"invalid_cursor"
],
"description": "Machine-readable failure mode. Declared by this tool: `index_not_ready`: No completed index generation is published yet. `invalid_frequency_range`: frequency_high is below frequency_low, is given without frequency_low, or the band exceeds 300 GHz. `unknown_radio_service`: The radio service code is neither in the FCC code table nor held by the index. `service_not_indexed`: The radio service code is valid but no indexed service group carries it. `invalid_cursor`: The cursor does not decode or belongs to an earlier index generation. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"shown": {
"type": "number",
"description": "Sites on this page."
},
"sites": {
"type": "array",
"items": {
"type": "object",
"required": [
"usi",
"isLease",
"licenseStatus",
"radioServiceCode",
"radioServiceLabel",
"licenseeName",
"licenseeRedacted",
"locationNumber",
"distanceKm",
"latitude",
"longitude",
"frequencyCount",
"frequenciesShown",
"frequencies"
],
"properties": {
"usi": {
"type": "string",
"description": "Unique system identifier of the license; pass it to fcc_spectrum_get_license."
},
"state": {
"type": "string",
"description": "Site state: as filed, or derived from the coordinates."
},
"county": {
"type": "string",
"description": "Site county, as filed."
},
"isLease": {
"type": "boolean",
"description": "True for a spectrum leasing arrangement."
},
"callsign": {
"type": "string",
"description": "Callsign, or lease ID on a lease."
},
"latitude": {
"type": "number",
"description": "Latitude as filed, decimal degrees (NAD83): the site, or the center of an operating area."
},
"radiusKm": {
"type": "number",
"description": "Radius of operation around latitude/longitude, km, as filed; mobile (M) and temporary-fixed (T) areas file one, and some fixed and other sites do. Absent when not filed."
},
"asrNumber": {
"type": "string",
"description": "FCC Antenna Structure Registration number: seven digits, never the 9999999 placeholder; omitted when the filing holds anything else (the placeholder, N/A, an application file number)."
},
"longitude": {
"type": "number",
"description": "Longitude as filed, decimal degrees (NAD83): the site, or the center of an operating area."
},
"distanceKm": {
"type": "number",
"description": "Great-circle distance from the search center to latitude/longitude, km; for an operating area (radiusKm filed) that is its center, so the area can reach nearer."
},
"frequencies": {
"type": "array",
"items": {
"type": "object",
"required": [
"frequencyMhz",
"stationClasses",
"emissions"
],
"properties": {
"maxErpW": {
"type": "number",
"description": "Highest effective radiated power filed, watts."
},
"upperMhz": {
"type": "number",
"description": "Upper edge when the assignment is a range, MHz."
},
"emissions": {
"type": "array",
"items": {
"type": "string",
"description": "One emission designator, e.g. \"11K2F3E\"."
},
"description": "Distinct emission designators filed for this frequency."
},
"maxEirpDbm": {
"type": "number",
"description": "Highest effective isotropic radiated power filed, dBm."
},
"bandwidthMhz": {
"type": "number",
"description": "Widest necessary bandwidth parsed from the emission designators, MHz; a designator 20% of the assigned frequency or wider is a filing error and is left out."
},
"frequencyMhz": {
"type": "number",
"description": "Assigned (center) frequency, MHz."
},
"stationClasses": {
"type": "array",
"items": {
"type": "string",
"description": "One ULS class-of-station code, e.g. \"FB2\"."
},
"description": "Distinct station classes filed for this frequency across antennas and modulation steps; decode each with fcc_spectrum_list_reference, topic \"station_classes\", filter set to the code. Unknown filed codes remain unchanged."
}
},
"description": "One frequency authorized at the site, collapsed across antennas and modulation steps.",
"additionalProperties": false
},
"description": "Frequencies at the site, ascending."
},
"licenseeName": {
"type": [
"string",
"null"
],
"description": "Licensee (lessee on a lease) as filed; null when redacted or not on file."
},
"licenseStatus": {
"type": "string",
"description": "License status code (A, L, or X)."
},
"frequencyCount": {
"type": "number",
"description": "Frequencies at the site (only those overlapping the band when one is given)."
},
"locationNumber": {
"type": "number",
"description": "Location number within the license; pass it as location_number to fcc_spectrum_get_license to read the location's antennas and frequencies."
},
"overallHeightM": {
"type": "number",
"description": "Overall structure height, meters."
},
"frequenciesShown": {
"type": "number",
"description": "Frequencies listed, after max_frequencies_per_site."
},
"groundElevationM": {
"type": "number",
"description": "Ground elevation, meters above mean sea level."
},
"licenseeRedacted": {
"type": "boolean",
"description": "True when the licensee is an individual whose name is withheld."
},
"locationTypeCode": {
"type": "string",
"description": "ULS location type code, e.g. F (fixed), M (mobile), T (temporary fixed); absent when not filed."
},
"radioServiceCode": {
"type": "string",
"description": "Two-character ULS radio service code."
},
"locationClassCode": {
"type": "string",
"description": "Filed FCC location class: C centerpoint, L area description, P passive repeater, R receive, T transmit; absent when not filed."
},
"locationTypeLabel": {
"type": "string",
"description": "Label of the location type code, e.g. \"Mobile\"; absent when no type is filed."
},
"radioServiceLabel": {
"type": "string",
"description": "Label of the radio service code."
},
"locationClassLabel": {
"type": "string",
"description": "FCC label of the filed class; absent for an unknown code. Authorization metadata does not establish actual on-air activity."
},
"sitesSharingNumber": {
"type": "number",
"description": "Sites the license files under this location number, when more than one; each is returned as its own site, and frequencies then lists the number's frequencies, since ULS does not say which site uses each."
},
"stateFromCoordinates": {
"type": "boolean",
"description": "True when state was derived from the coordinates rather than filed."
}
},
"description": "One FCC-licensed site with its filed location role.",
"additionalProperties": false
},
"description": "FCC-licensed sites, nearest first; filed classes can include transmit, receive, and passive roles."
},
"notice": {
"type": "string",
"description": "Why nothing matched and how to widen the search, or how to page further."
},
"dataAsOf": {
"type": "string",
"description": "Creation time of the newest applied ULS file (ISO 8601)."
},
"truncated": {
"type": "boolean",
"description": "True when more sites follow this page."
},
"nextCursor": {
"type": "string",
"description": "Pass as cursor with the same inputs for the next page; absent on the last page."
},
"totalCount": {
"type": "number",
"description": "Sites within the radius matching the filters, across every page."
},
"searchCenter": {
"type": "object",
"required": [
"latitude",
"longitude",
"radiusKm"
],
"properties": {
"latitude": {
"type": "number",
"description": "Center latitude, decimal degrees."
},
"radiusKm": {
"type": "number",
"description": "Search radius, km."
},
"longitude": {
"type": "number",
"description": "Center longitude, decimal degrees."
}
},
"description": "The search circle as the server applied it (DMS input converted).",
"additionalProperties": false
},
"appliedFilters": {
"type": "object",
"required": [
"status",
"max_frequencies_per_site"
],
"properties": {
"status": {
"type": "string",
"description": "Status filter, default included."
},
"location_type": {
"type": "string",
"description": "Location type code filter."
},
"radio_service": {
"type": "string",
"description": "Radio service code filter."
},
"location_class": {
"type": "string",
"description": "Filed location class filter."
},
"frequency_low_mhz": {
"type": "number",
"description": "Band lower edge, converted to MHz."
},
"frequency_high_mhz": {
"type": "number",
"description": "Band upper edge, converted to MHz."
},
"max_frequencies_per_site": {
"type": "number",
"description": "Per-site frequency cap applied."
}
},
"description": "Filters as the server applied them, normalized values and defaults included.",
"additionalProperties": false
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}fcc_spectrum_search_frequencies — Search FCC ULS authorizations by frequency
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, FRN, market code, and live status (active by default). For transmitter sites near a coordinate, use fcc_spectrum_find_transmitters.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"frequency_low"
],
"properties": {
"frn": {
"type": "string",
"pattern": "^\\d{10}$",
"description": "Licensee's FCC Registration Number, up to 10 digits; spaces and hyphens are removed and it is left-padded with zeros. Individual licensees match and are returned redacted."
},
"kind": {
"enum": [
"site",
"market",
"both"
],
"type": "string",
"default": "both",
"description": "site: transmitter-site assignments only; market: market-area spectrum blocks only; both (default)."
},
"unit": {
"enum": [
"kHz",
"MHz",
"GHz"
],
"type": "string",
"default": "MHz",
"description": "Unit of the frequencies: kHz, MHz (default), or GHz."
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Positive integer rows per page; values above 200 are clamped to 200 with a notice."
},
"state": {
"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"
],
"type": "string",
"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 when their FCC market area reaches the state (a multi-state market matches each of its states), their market name carries the state code, or their license files a site there; nationwide and Gulf of Mexico markets match no state."
},
"cursor": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,200}$",
"description": "nextCursor from the previous page of the same search; omit for the first page."
},
"status": {
"enum": [
"A",
"L",
"X",
"any"
],
"type": "string",
"default": "A",
"description": "A active (default), L pending legal, X term pending, or \"any\" for all three. Other statuses keep no frequency records."
},
"licensee": {
"type": "string",
"maxLength": 200,
"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."
},
"market_code": {
"type": "string",
"pattern": "^(?:[A-Z]{3}\\d{3}|[A-Z]\\d{5}|[A-Z]{2}\\d{4}|NW)$",
"description": "Market code of the license, matched exactly, e.g. \"PEA016\", \"CMA020\", or \"NW\" (nationwide); market rows carry it as marketCode. Applies to site and market rows alike, since cellular (CMA) licenses file sites rather than blocks. Case, spaces, and hyphens are ignored, and the digits are left-padded with zeros (\"pea16\" reads as PEA016)."
},
"frequency_low": {
"type": "number",
"description": "Frequency in unit; with frequency_high, the band's lower edge. Matches any authorization whose occupied band overlaps.",
"exclusiveMinimum": 0
},
"radio_service": {
"type": "string",
"pattern": "^[A-Z0-9]{2}$",
"description": "Two-character radio service code, e.g. \"WU\" (700 MHz upper band); see fcc_spectrum_list_reference topic \"radio_services\"."
},
"frequency_high": {
"type": "number",
"description": "Band upper edge in unit; omit to search a single frequency.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"assignments",
"dataAsOf",
"totalCount",
"truncated",
"shown",
"cap",
"appliedFilters"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"cap": {
"type": "number",
"description": "The page limit applied."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"index_not_ready",
"invalid_frequency_range",
"unknown_radio_service",
"service_not_indexed",
"invalid_cursor"
],
"description": "Machine-readable failure mode. Declared by this tool: `index_not_ready`: No completed index generation is published yet. `invalid_frequency_range`: frequency_high is below frequency_low, or the band exceeds 300 GHz. `unknown_radio_service`: The radio service code is neither in the FCC code table nor held by the index. `service_not_indexed`: The radio service code is valid but no indexed service group carries it. `invalid_cursor`: The cursor does not decode or belongs to an earlier index generation. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"shown": {
"type": "number",
"description": "Rows on this page."
},
"notice": {
"type": "string",
"description": "Why nothing matched, what the state and redaction rules skipped, or how to page further."
},
"dataAsOf": {
"type": "string",
"description": "Creation time of the newest applied ULS file (ISO 8601)."
},
"truncated": {
"type": "boolean",
"description": "True when more rows follow this page."
},
"nextCursor": {
"type": "string",
"description": "Pass as cursor with the same inputs for the next page; absent on the last page. A page over a dense band can hold fewer rows than limit and still carry one."
},
"totalCount": {
"type": "number",
"description": "Rows matching the filters, across every page; at least this many when totalIsLowerBound is true."
},
"assignments": {
"type": "array",
"items": {
"type": "object",
"required": [
"kind",
"usi",
"isLease",
"licenseStatus",
"radioServiceCode",
"radioServiceLabel",
"licenseeName",
"licenseeRedacted",
"frequencyMhz"
],
"properties": {
"usi": {
"type": "string",
"description": "Unique system identifier of the license; pass it to fcc_spectrum_get_license."
},
"kind": {
"enum": [
"site",
"market"
],
"type": "string",
"description": "site: a frequency at a transmitter site; market: a spectrum block across a market area."
},
"state": {
"type": "string",
"description": "Site state, as filed or derived from the coordinates (site rows)."
},
"county": {
"type": "string",
"description": "Site county, as filed (site rows)."
},
"isLease": {
"type": "boolean",
"description": "True for a spectrum leasing arrangement."
},
"maxErpW": {
"type": "number",
"description": "Highest effective radiated power filed, watts (site rows)."
},
"callsign": {
"type": "string",
"description": "Callsign, or lease ID on a lease."
},
"latitude": {
"type": "number",
"description": "Site latitude, decimal degrees (site rows with valid coordinates); the center of an operating area when radiusKm is filed."
},
"radiusKm": {
"type": "number",
"description": "Radius of operation around latitude/longitude, km, as filed (site rows at a single site); mobile (M) and temporary-fixed (T) areas file one, and some fixed and other sites do."
},
"upperMhz": {
"type": "number",
"description": "Upper edge of a ranged site assignment or of a market block, MHz."
},
"emissions": {
"type": "array",
"items": {
"type": "string",
"description": "One emission designator."
},
"description": "Distinct emission designators filed for this frequency (site rows)."
},
"longitude": {
"type": "number",
"description": "Site longitude, decimal degrees (site rows with valid coordinates); the center of an operating area when radiusKm is filed."
},
"marketCode": {
"type": "string",
"description": "Market code (market rows); pass it as market_code to search that market."
},
"marketName": {
"type": "string",
"description": "Market name as filed, cut at 30 characters by ULS (market rows)."
},
"bandwidthMhz": {
"type": "number",
"description": "Widest necessary bandwidth parsed from the emission designators, MHz (site rows); a designator 20% of the assigned frequency or wider is a filing error and is left out."
},
"channelBlock": {
"type": "string",
"description": "Channel block, as filed (market rows)."
},
"frequencyMhz": {
"type": "number",
"description": "Assigned frequency (site) or block lower edge (market), MHz."
},
"licenseeName": {
"type": [
"string",
"null"
],
"description": "Licensee (lessee on a lease) as filed; null when redacted or not on file."
},
"licenseStatus": {
"type": "string",
"description": "License status code (A, L, or X)."
},
"locationNumber": {
"type": "number",
"description": "Location number within the license (site rows); pass it as location_number to fcc_spectrum_get_license to read the location's antennas and frequencies."
},
"stationClasses": {
"type": "array",
"items": {
"type": "string",
"description": "One ULS class-of-station code."
},
"description": "Distinct station classes filed for this frequency at the site (site rows); decode each with fcc_spectrum_list_reference, topic \"station_classes\", filter set to the code. Unknown filed codes remain unchanged."
},
"licenseeRedacted": {
"type": "boolean",
"description": "True when the licensee is an individual whose name is withheld."
},
"locationTypeCode": {
"type": "string",
"description": "ULS location type code, e.g. F (fixed), M (mobile), T (temporary fixed) (site rows at a single site; absent when not filed)."
},
"partitionAreaIds": {
"type": "array",
"items": {
"type": "number",
"description": "One ULS partition area ID."
},
"description": "ULS partition areas this block is filed under (market rows); a partitioned license files one block per area, returned here as one row."
},
"radioServiceCode": {
"type": "string",
"description": "Two-character ULS radio service code."
},
"locationClassCode": {
"type": "string",
"description": "Filed FCC location class, only on a single-site assignment; absent on shared-number assignments and market rows."
},
"locationTypeLabel": {
"type": "string",
"description": "Label of the location type code, e.g. \"Mobile\" (site rows at a single site)."
},
"radioServiceLabel": {
"type": "string",
"description": "Label of the radio service code."
},
"locationClassLabel": {
"type": "string",
"description": "FCC label of the filed class, only when known on a single-site assignment. Authorization metadata does not establish actual on-air activity."
},
"sitesSharingNumber": {
"type": "number",
"description": "Sites the license files under this location number, when more than one (site rows); ULS does not say which of them uses the frequency, so the row has no coordinates, location type, radius, county, or state. fcc_spectrum_get_license lists the sites."
},
"stateFromCoordinates": {
"type": "boolean",
"description": "True when state was derived from the coordinates rather than filed (site rows)."
}
},
"description": "One site assignment or market spectrum block.",
"additionalProperties": false
},
"description": "Matching site assignments and market blocks, frequency ascending."
},
"appliedFilters": {
"type": "object",
"required": [
"frequency_low_mhz",
"frequency_high_mhz",
"kind",
"status"
],
"properties": {
"frn": {
"type": "string",
"description": "Normalized FRN filter."
},
"kind": {
"type": "string",
"description": "Kinds searched."
},
"state": {
"type": "string",
"description": "Normalized state filter."
},
"status": {
"type": "string",
"description": "Status filter, default included."
},
"licensee": {
"type": "string",
"description": "Licensee name words searched."
},
"market_code": {
"type": "string",
"description": "Normalized market code filter."
},
"radio_service": {
"type": "string",
"description": "Radio service code filter."
},
"frequency_low_mhz": {
"type": "number",
"description": "Band lower edge, converted to MHz."
},
"frequency_high_mhz": {
"type": "number",
"description": "Band upper edge, converted to MHz (equal to the lower edge for one frequency)."
}
},
"description": "Filters as the server applied them, normalized values and defaults included.",
"additionalProperties": false
},
"totalIsLowerBound": {
"type": "boolean",
"description": "True when a dense band was counted only in part, so totalCount is a lower bound; absent when the count is exact."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}fcc_spectrum_list_reference — List FCC ULS reference codes and coverage
Decode FCC ULS codes used by the other tools — radio service codes, station classes, 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. Station classes describe licensed categories, not actual on-air activity.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"topic"
],
"properties": {
"topic": {
"enum": [
"radio_services",
"station_classes",
"license_statuses",
"location_types",
"antenna_types",
"applicant_types",
"operator_classes",
"coverage"
],
"type": "string",
"description": "What to list: a code vocabulary (radio_services, station_classes, license_statuses, location_types, antenna_types, applicant_types, operator_classes) or coverage, the index build state and loaded service groups."
},
"filter": {
"type": "string",
"maxLength": 200,
"description": "radio_services and station_classes only: keep entries whose code and label contain every token given, in any order (e.g. \"700 public safety\" or \"FB2\"). Case- and accent-insensitive; punctuation separates tokens. A nonblank filter must normalize to at least one ASCII letter or digit; blank means unset. Other topics disclose that filter was not applied."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"topic"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_filter"
],
"description": "Machine-readable failure mode. Declared by this tool: `invalid_filter`: A nonblank filter on radio_services or station_classes normalizes to no searchable tokens. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"index": {
"type": "object",
"required": [
"ready",
"status"
],
"properties": {
"error": {
"type": "string",
"description": "Why the published index cannot be served, or the message of the most recent failed build or refresh."
},
"ready": {
"type": "boolean",
"description": "True when a completed index generation is published and searches work."
},
"status": {
"enum": [
"none",
"building",
"ready"
],
"type": "string",
"description": "none: never built; building: a build is in progress with no published generation yet; ready: searchable."
},
"dataAsOf": {
"type": "string",
"description": "Creation time of the newest applied ULS file (ISO 8601)."
},
"generation": {
"type": "string",
"description": "File name of the published index generation."
},
"lastFullBuild": {
"type": "string",
"description": "When the published generation finished its weekly rebuild (ISO 8601)."
},
"lastDailyApplied": {
"type": "string",
"description": "Creation time of the newest daily file applied on top of the weekly snapshot (ISO 8601)."
},
"pathCoverageIncomplete": {
"type": "boolean",
"description": "True when the generation was built before microwave paths were indexed, so a license can list no paths it files; searches remain available, but a complete weekly rebuild is needed."
},
"antennaCoverageIncomplete": {
"type": "boolean",
"description": "True when earlier decoding discarded unnumbered antenna records; searches remain available, but a complete weekly rebuild is needed."
}
},
"description": "Index build state; present for coverage.",
"additionalProperties": false
},
"topic": {
"enum": [
"radio_services",
"station_classes",
"license_statuses",
"location_types",
"antenna_types",
"applicant_types",
"operator_classes",
"coverage"
],
"type": "string",
"description": "The topic answered."
},
"groups": {
"type": "array",
"items": {
"type": "object",
"required": [
"group",
"indexed"
],
"properties": {
"group": {
"type": "string",
"description": "FCC bulk-data service group name, as the FCC names its files (e.g. \"LMpriv\")."
},
"sites": {
"type": "number",
"description": "Location records kept for this group (status A, L, or X licenses only); absent when not indexed."
},
"indexed": {
"type": "boolean",
"description": "True when this group is loaded in the published index."
},
"records": {
"type": "number",
"description": "License and lease records indexed from this group; absent when not indexed."
},
"frequencies": {
"type": "number",
"description": "Frequency records kept for this group (status A, L, or X licenses only); absent when not indexed."
},
"snapshotCreated": {
"type": "string",
"description": "Creation time of the FCC's weekly snapshot this group was built from (ISO 8601); absent when not indexed."
}
},
"description": "Coverage of one weekly service group.",
"additionalProperties": false
},
"description": "Every weekly service group this server can index, with whether it is loaded; present for coverage."
},
"notice": {
"type": "string",
"description": "Guidance when a filter matched nothing, was not applied, the index is not built yet, or its antenna or path coverage needs a full rebuild."
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"code",
"label"
],
"properties": {
"code": {
"type": "string",
"description": "The code as filed in ULS records."
},
"group": {
"type": "string",
"description": "FCC bulk-data service group that carries this radio service code; radio_services only, absent for other topics and before the index is built."
},
"label": {
"type": "string",
"description": "FCC label for the code; equal to the code when the index holds a code the bundled table lacks."
},
"indexedRecords": {
"type": "number",
"description": "Records in the index carrying this radio service code; radio_services only, absent for other topics and before the index is built."
}
},
"description": "One decoded code.",
"additionalProperties": false
},
"description": "Decoded codes, in code order; present for every topic except coverage."
},
"dataAsOf": {
"type": "string",
"description": "Creation time of the newest applied ULS file (ISO 8601); absent before the index is built."
},
"redactIndividuals": {
"type": "boolean",
"description": "True when individual licensees are redacted and excluded from name search; present for coverage."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}Prompts
0 advertised
Resources
1 advertised
fcc-spectrum-guide
Investigate FCC ULS licenses, nearby sites, spectrum holdings, leases, and microwave paths with fcc_spectrum_* tools. Use when combining results or deciding whether an empty search, market match, or filed site supports a geographic or technical conclusion.
skill://fcc-spectrum-guide/SKILL.mdfcc_spectrum_license — FCC ULS license by callsign
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, 100 antennas, and 100 microwave paths with up to 100 frequency rows, market blocks, lease links with up to 100 leases), plus dataAsOf, the location, site, path, 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.
fcc-spectrum://license/{callsign}io.modelcontextprotocol/skills
skill://{+path}30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 703 ms
- 95th percentile latency
- 703 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 703 ms · metadata changed · 5 tool(s), 1 resource(s), 2 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http fcc-spectrum-mcp-server-caseyjhand https://fcc-spectrum.caseyjhand.com/mcpCodex
codex mcp add fcc-spectrum-mcp-server-caseyjhand --url https://fcc-spectrum.caseyjhand.com/mcpCursor
{
"mcpServers": {
"fcc-spectrum-mcp-server-caseyjhand": {
"url": "https://fcc-spectrum.caseyjhand.com/mcp"
}
}
}Cline
{
"mcpServers": {
"fcc-spectrum-mcp-server-caseyjhand": {
"type": "streamableHttp",
"url": "https://fcc-spectrum.caseyjhand.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"fcc-spectrum-mcp-server-caseyjhand": {
"type": "http",
"url": "https://fcc-spectrum.caseyjhand.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http fcc-spectrum-mcp-server-caseyjhand https://fcc-spectrum.caseyjhand.com/mcpClaude Desktop
https://fcc-spectrum.caseyjhand.com/mcpWindsurf
{
"mcpServers": {
"fcc-spectrum-mcp-server-caseyjhand": {
"serverUrl": "https://fcc-spectrum.caseyjhand.com/mcp"
}
}
}Let your agent find its tools
Find servers like fcc-spectrum-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.