Skip to main content
Glama

fcc-spectrum-mcp-server

Server Details

Search FCC radio licenses, find nearby transmitter sites, and see who is licensed on a frequency.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/fcc-spectrum-mcp-server
GitHub Stars
1
Server Listing
fcc-spectrum-mcp-server

TDQS

A4.4/5.0

Scored across 5 tools

Disambiguation4/5

Three search tools (find_transmitters, search_frequencies, search_licenses) plus get_license could overlap, but the descriptions explicitly distinguish them by entry point (location-first, frequency-first, metadata-first) and cross-reference each other, so an agent can choose correctly. Only minor ambiguity remains around frequency-vs-transmitter results that both surface sites.

Naming Consistency5/5

Every tool uses the same fcc_spectrum_ prefix followed by a clear verb_noun pattern (find_transmitters, get_license, list_reference, search_frequencies, search_licenses). The convention is consistent throughout with no stray casing or verb styles.

Tool Count5/5

Five tools is well-scoped for a read-only FCC ULS data server, with each tool earning its place across spatial, frequency, metadata, detail, and reference-decode concerns. No redundancy or filler.

Completeness4/5

The surface covers the core read lifecycle: search by location, frequency, and license metadata, fetch full records, and decode reference codes/coverage. It is a read-only domain so CRUD is not expected, though pagination and cross-tool navigation are handled manually rather than via dedicated helpers.

Available Tools

5 tools
fcc_spectrum_find_transmittersFind FCC-licensed transmitters near a pointA
Read-onlyIdempotent
Inspect

Find FCC-licensed transmitter sites within a radius of a coordinate, nearest first, each with its callsign, licensee, distance, coordinates, location type, ground elevation, structure height, and the frequencies authorized there. Filter by frequency or band, radio service, location type, and live status (active by default). Coordinates are decimal degrees or DMS strings. Mobile and temporary-fixed operating areas are filed as a center and a radius of operation: they are returned at their center with radiusKm, and match when the center lies within radius_km. Locations filed without coordinates are not returned, and market-area licenses without site records are found with fcc_spectrum_search_frequencies.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitNoUnit of the frequencies: kHz, MHz (default), or GHz.MHz
limitNoSites per page (1–100).
cursorNonextCursor from the previous page of the same search; omit for the first page.
statusNoA active (default), L pending legal, X term pending, or "any" for all three. Other statuses keep no site records.A
latitudeYesSearch center latitude: decimal degrees (47.6205, "47.6205") or a DMS string with hemisphere ("47-37-13.8 N", "47°37'13.8"N").
longitudeYesSearch center longitude: decimal degrees (-122.3493) or a DMS string with hemisphere ("122-20-57.5 W").
radius_kmNoSearch radius in km (0.1–100).
frequency_lowNoOnly sites authorized on this frequency, in unit; with frequency_high, the band's lower edge. Matches any assignment whose occupied band overlaps.
location_typeNoOne 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_serviceNoTwo-character radio service code, e.g. "IG" (industrial/business pool); see fcc_spectrum_list_reference topic "radio_services".
frequency_highNoBand upper edge in unit; requires frequency_low.
max_frequencies_per_siteNoMost frequencies listed per site (1–50); frequencyCount carries the full count.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe page limit applied.
errorNoPresent when the call failed. Absent on success.
shownNoSites on this page.
sitesNoTransmitter sites, nearest first.
noticeNoWhy nothing matched and how to widen the search, or how to page further.
dataAsOfNoCreation time of the newest applied ULS file (ISO 8601).
truncatedNoTrue when more sites follow this page.
nextCursorNoPass as cursor with the same inputs for the next page; absent on the last page.
totalCountNoSites within the radius matching the filters, across every page.
searchCenterNoThe search circle as the server applied it (DMS input converted).
appliedFiltersNoFilters as the server applied them, normalized values and defaults included.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safe-read profile (readOnlyHint, idempotentHint, openWorldHint=false), so the description's value is in edge-case behavior: non-coordinate filings are dropped, mobile/temporary areas are returned at their center with radiusKm and match on center-in-radius, and the active-status default. That is substantive beyond the structured fields, though the status default is also visible in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and ordering, then edge cases; every sentence carries information. The mid-sentence enumeration of returned fields is slightly redundant given an output schema exists, but it costs little and the whole is a tight paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, defaulted, paginated search tool with an output schema and full annotation coverage, the description supplies the remaining operational context an agent needs: defaults, exclusion behavior, and where to go for the one class of records this tool cannot return.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics not obvious from the schema alone: coordinates accept decimal degrees or DMS strings, and the center-radius matching rule explains how radius_km interacts with mobile/temporary-fixed records. Frequency overlap matching is also clarified, though much of it is echoed in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Find FCC-licensed transmitter sites within a radius'), fixes the ordering ('nearest first') and enumerates the salient returned attributes. It also differentiates itself from siblings by directing market-area license lookups to fcc_spectrum_search_frequencies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use conditions (radius search near a coordinate), when-not (locations filed without coordinates are not returned; market-area licenses go to another tool), and the default filter state ('active by default'). The named alternative tool and the condition selecting it are spelled out, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fcc_spectrum_get_licenseGet an FCC ULS licenseA
Read-onlyIdempotent
Inspect

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; 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
usiNoUnique 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.
callsignNoCallsign 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_offsetNoLease to start at, counted from 0 in lease-ID order; pass nextLeaseOffset from the previous call to read the next 100.
location_numberNoLocation 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_offsetNoLocation 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_frequenciesNoMost 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe max_frequencies cap applied.
errorNoPresent when the call failed. Absent on success.
foundNoTrue when a record matched; false returns guidance and candidates instead.
shownNoFrequency rows returned.
noticeNoWhat 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.
licenseNoThe record; present when found is true.
dataAsOfNoCreation time of the newest applied ULS file (ISO 8601).
guidanceNoWhy nothing matched and where to look next; present when found is false.
locationsNoLocations with antennas and frequency rows, 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 and 100 antennas, or one larger location alone; present when found is true.
siteTotalNoSites the record files, each site of a shared location number counted; present when found is true.
truncatedNoTrue 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.
candidatesNoUp to 5 records whose callsign starts with the one requested; present when a callsign lookup found nothing.
locationTotalNoLocation numbers the record files; present when found is true.
nextLeaseOffsetNoPass as lease_offset to read the leases after these; absent when none follow.
technicalRetainedNoFalse 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.
nextLocationOffsetNoPass as location_offset to read the locations after these; absent when none follow.
otherCallsignRecordsNoOther records under the same callsign (ULS reuses callsigns); present when found is true.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already covering the read-only/idempotent safety profile, the description adds substantial behavioral context beyond them: paging caps (50 locations, 100 antennas, max_frequencies rows, 100 leases), the nextLocationOffset/nextLeaseOffset paging protocol, truncation order ("rows beyond it are dropped from the last locations first"), the dedup rule for callsigns shared by several records, and the filter that technical detail is kept only for active, pending-legal, and term-pending records.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and scope are front-loaded, and the dense later clauses about paging, detail retention, and dedup all carry information an agent needs. It is a single long semicolon-chained passage rather than cleanly separated sections, which slightly hurts scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, yet the description still tells the agent what record types exist (geographic-area licenses with market/spectrum blocks, lease links in both directions) and how to page large records. Nothing needed to call this correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters with patterns, defaults, and constraints; that sets the baseline at 3. The description reinforces the meaning of the offsets and max_frequencies but adds little semantic detail the schema does not already carry.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ("Fetch one FCC ULS license or spectrum lease in full") and enumerates the returned structure down to antenna emission designators, so an agent knows exactly what this tool produces. It also names the two lookup keys (callsign, USI) that separate it from the search siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied clearly: usi values come from fcc_spectrum_search_licenses / find_transmitters / search_frequencies, and location_number comes from find_transmitters or search_frequencies results, which routes the agent to use this after searching. There is no explicit when-not statement or direct contrast with fcc_spectrum_search_licenses beyond this sourcing of arguments.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fcc_spectrum_list_referenceList FCC ULS reference codes and coverageA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesWhat 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.
filterNoRadio services only: keep entries whose code and label contain every word given, in any order (e.g. "700 public safety"). Case- and accent-insensitive.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
indexNoIndex build state; present for coverage.
topicNoThe topic answered.
groupsNoEvery weekly service group this server can index, with whether it is loaded; present for coverage.
noticeNoGuidance when a filter matched nothing, was not applied, or the index is not built yet.
entriesNoDecoded codes, in code order; present for every topic except coverage.
dataAsOfNoCreation time of the newest applied ULS file (ISO 8601); absent before the index is built.
redactIndividualsNoTrue when individual licensees are redacted and excluded from name search; present for coverage.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is covered structurally. The description adds genuinely useful context beyond that: this lookup works even before the index is built, and the coverage branch reports record counts and last-updated timestamps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the primary purpose (decode codes) followed by the secondary one (report coverage). Every clause earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers both invocation modes plus the pre-index availability. Only the `filter` parameter's behavior is left entirely to the schema, which is acceptable given the schema documents it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the enum values and the filter semantics fully documented in the schema itself. The description restates the same vocabulary list already enumerated in the `topic` enum and says nothing about the `filter` parameter, so it adds little beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific dual purpose — decoding FCC ULS code vocabularies or reporting index coverage — and enumerates the exact vocabularies (radio services, license statuses, location types, antenna types, applicant types, operator classes). This clearly separates it from the find/get/search sibling tools, which operate on records rather than code lookups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Decode FCC ULS codes used by the other tools' establishes the context (a helper for interpreting values returned by siblings), and 'Works before the index is built' signals a prerequisite-free availability window. No explicit when-not guidance or named alternative is given, but the usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fcc_spectrum_search_frequenciesSearch FCC ULS authorizations by frequencyA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
frnNoLicensee'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.
kindNosite: transmitter-site assignments only; market: market-area spectrum blocks only; both (default).both
unitNoUnit of the frequencies: kHz, MHz (default), or GHz.MHz
limitNoRows per page (1–200).
stateNoTwo-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.
cursorNonextCursor from the previous page of the same search; omit for the first page.
statusNoA active (default), L pending legal, X term pending, or "any" for all three. Other statuses keep no frequency records.A
licenseeNoLicensee 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_codeNoMarket 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_lowYesFrequency in unit; with frequency_high, the band's lower edge. Matches any authorization whose occupied band overlaps.
radio_serviceNoTwo-character radio service code, e.g. "WU" (700 MHz upper band); see fcc_spectrum_list_reference topic "radio_services".
frequency_highNoBand upper edge in unit; omit to search a single frequency.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe page limit applied.
errorNoPresent when the call failed. Absent on success.
shownNoRows on this page.
noticeNoWhy nothing matched, what the state and redaction rules skipped, or how to page further.
dataAsOfNoCreation time of the newest applied ULS file (ISO 8601).
truncatedNoTrue when more rows follow this page.
nextCursorNoPass 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.
totalCountNoRows matching the filters, across every page; at least this many when totalIsLowerBound is true.
assignmentsNoMatching site assignments and market blocks, frequency ascending.
appliedFiltersNoFilters as the server applied them, normalized values and defaults included.
totalIsLowerBoundNoTrue when a dense band was counted only in part, so totalCount is a lower bound; absent when the count is exact.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover safety (readOnly, idempotent, closed-world), but the description adds substantive behavior: the divergent row shapes for site vs market/lease records, the coverage gap that PALs file no frequency, and the default live-status filter. It doesn't mention pagination semantics beyond the schema's cursor/limit, but the depth here exceeds the annotation bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, purpose front-loaded, with the routing advice appended rather than buried. The long semicolon-delimited enumerations of license types and filters are dense but each clause carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. For a 12-parameter search tool, the description covers purpose, result row semantics, coverage exclusions, and sibling alternatives – nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description enumerates the filterable dimensions (state, radio service, licensee, FRN, market code, live status) but adds little syntax or semantics beyond what the schema already documents for each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: 'Find FCC ULS authorizations whose occupied band overlaps a frequency or band.' It then distinguishes result shapes (one row per site vs per spectrum block), which no sibling tool does, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes two cases to alternatives: 3.5 GHz Priority Access Licenses have no frequency and must go through fcc_spectrum_search_licenses with radio_service PL, and coordinate-proximity transmitter searches belong to fcc_spectrum_find_transmitters. Both when-not conditions are named with the substitute tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fcc_spectrum_search_licensesSearch FCC ULS licensesA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
frnNoFCC Registration Number, up to 10 digits; spaces and hyphens are removed and it is left-padded with zeros.
limitNoRecords per page (1–100).
stateNoLicensee 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.
cursorNonextCursor from the previous page of the same search; omit for the first page.
statusNoLicense 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.A
callsignNoExact 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.
licenseeNoLicensee 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_codeNoMarket 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_serviceNoTwo-character radio service code, e.g. "CD" (paging) or "BR" (BRS); see fcc_spectrum_list_reference topic "radio_services".

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe page limit applied.
errorNoPresent when the call failed. Absent on success.
shownNoRecords on this page.
noticeNoWhy nothing matched, what redaction excluded, or how to page further.
dataAsOfNoCreation time of the newest applied ULS file (ISO 8601).
licensesNoMatching records, ranked by name-match relevance when licensee is given and in callsign order otherwise.
truncatedNoTrue when more records follow this page.
nextCursorNoPass as cursor with the same filters for the next page; absent on the last page.
totalCountNoRecords matching the filters, across every page.
appliedFiltersNoFilters as the server applied them, normalized values and defaults included.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and idempotent, so the safety profile is covered. The description still adds meaningful behavior beyond that: the default-to-active filtering and the word-prefix (non-fuzzy) matching semantics of licensee names, which an agent could otherwise get wrong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core purpose, then adds constraint, default-status, and matching-semantics sentences. Four sentences, all carrying distinct information with no repetition, though it is dense enough that a slight trim would improve it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained. The description fully covers the invocation constraints, default filtering, status override, and matching caveats for a nine-parameter search tool, leaving nothing an agent needs missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the schema documents each parameter's format, keeping this near the baseline of 3. The description goes beyond it by stating the cross-parameter constraint (at least one of callsign/licensee/frn/market_code/radio_service/state required), which is not expressed via JSON Schema required fields, plus the status-narrowing rule.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (FCC ULS licenses and spectrum leases), enumerates the filterable fields, and precisely describes the return shape (one row per record with USI). It also names the follow-up sibling fcc_spectrum_get_license, so an agent can distinguish it from find_transmitters and search_frequencies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete conditions: at least one of the six search fields is required, status only narrows, and status "any" is needed to include expired/cancelled/terminated records. It explains the follow-up tool by name, but does not explicitly contrast against the other search siblings, keeping it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • First observedfcc_spectrum_find_transmitters
    • First observedfcc_spectrum_get_license
    • First observedfcc_spectrum_list_reference
    • First observedfcc_spectrum_search_frequencies
    • First observedfcc_spectrum_search_licenses

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.