orbit-sentinel-mcp
The Orbit Sentinel MCP server provides regulatory intelligence across 419,000+ space regulatory filings from FCC, ITU, UNOOSA, FAA-AST, and other sources. Here's what you can do:
Research & Search
research— Primary entry point for natural-language questions; searches filings, entities, and a semantic index in parallelsearch_filings— Search regulatory filings by keyword, agency, type, status, docket, and date rangesearch_semantic— Meaning-based (vector) search across filing textsearch_entities— Find companies, operators, manufacturers, or governments by name, type, or country
Filing & Entity Details
get_filing_detail— Full details of a filing: spectrum data, orbital parameters, ground stations, signals, and policy argumentsget_entity_profile— Entity filing history, related entities, linked satellites, and cross-referencesget_entity_dossier— Cross-source dossier combining filings, SEC signals, sanctions screening, satellites, ground stations, federal awards, and surety bonds
Spectrum & Orbital Assets
search_spectrum— Find which entities hold a given frequency band, filterable by agency, direction, and polarizationsearch_satellites— Search the satellite catalog by name, operator, country, orbit class, NORAD/COSPAR IDsearch_ground_stations— Search ground/earth stations by name, frequency, operator, or geographic proximity
Policy & Analytics
search_positions— Search LLM-extracted policy arguments from filings by docket, stance, or argument typeget_filing_trends— Filing volume trends over time, including top movers year-over-yearget_top_filers— Rank entities by filing count, filterable by agency, type, and dateget_filing_distribution— Filing count breakdown by type and agency
Financial & Compliance
get_bond_portfolio— FCC surety bond portfolios for satellite operatorssearch_federal_awards— U.S. federal contracts/IDVs from USAspendingsearch_sec_filings— SEC filings (8-K, 10-Q, 10-K) for tracked space companiessearch_screening— Check entities against sanctions/export-control lists (OFAC SDN, BIS Entity List, ITAR Debarred, etc.)
Launch History & System
get_launch_history— Launch history from the FAA/GCAT database including vehicle, site, and outcomeget_system_status— System health, database connectivity, pipeline queue, and per-source crawl status
Provides access to extracted space regulatory filings from the FCC, enabling search and retrieval of filings related to satellite and spectrum matters.
Orbit Sentinel MCP Server
MCP (Model Context Protocol) server for Orbit Sentinel — 950K+ space regulatory filings from FCC, ITU, UNOOSA, and FAA-AST, queryable from Claude Desktop, Claude Code, Cursor, or any MCP client.
An API key is required. Beta access: https://console.viventine.com.
The server is a thin, open-source (MIT) client of the public REST API — nine Go files, easy to audit before you run it. Run it locally over stdio, or skip the install entirely and point your client at the hosted remote endpoint (below).
Install
Remote (no install)
The lowest-friction path — no binary, no updates. Point any HTTP-capable MCP client at:
https://orbit-sentinel.viventine.com/mcpTransport is Streamable HTTP (stateless). Two ways to authenticate:
OAuth (recommended) — sign in with your Viventine account in the browser; no key to copy or store. In Claude Code:
claude mcp add --transport http orbit-sentinel https://orbit-sentinel.viventine.com/mcpThen run /mcp -> orbit-sentinel -> authenticate. A browser opens for sign-in
and consent; Claude Code stores the token and refreshes it automatically. The
same works as a custom connector in claude.ai / Claude Desktop (Settings ->
Connectors -> Add custom connector -> paste the URL -> sign in).
API key — if you'd rather use a static key (or your client can't do OAuth), pass your console key as a bearer token:
claude mcp add --transport http orbit-sentinel \
https://orbit-sentinel.viventine.com/mcp \
--header "Authorization: Bearer <your-key>"Get a key / beta access at https://console.viventine.com.
Generic MCP clients — any Streamable HTTP client works via OAuth 2.1
(RFC 9728 protected-resource discovery) or an Authorization: Bearer <key>
header. Requests sending Python's default urllib User-Agent (Python-urllib/x.y)
are blocked at our edge with HTTP 403; set your own User-Agent, or use requests
or httpx. An unauthenticated tools/call answers
HTTP 401 with a WWW-Authenticate header pointing at the protected-resource
metadata, which is how OAuth-capable clients discover the flow; initialize
and tools/list stay open. For a stdio-only client, bridge with
npx mcp-remote https://orbit-sentinel.viventine.com/mcp.
Claude Desktop (one-click)
Download orbit-sentinel-mcp.mcpb and double-click it — Claude Desktop installs the extension and prompts for your API key. Bundles macOS (universal), Linux, and Windows binaries.
Homebrew (macOS — recommended)
brew install --cask viventine-space/tap/orbit-sentinel-mcpInstalls to $(brew --prefix)/bin/orbit-sentinel-mcp, handles the quarantine
flag for you, and upgrades with brew upgrade.
Manual download
Download the archive for your platform from the latest release, then:
tar -xzf orbit-sentinel-mcp_*.tar.gz
mkdir -p ~/bin && mv orbit-sentinel-mcp ~/bin/macOS only — the binary is not notarized yet, so clear the quarantine flag once:
xattr -d com.apple.quarantine ~/bin/orbit-sentinel-mcpWindows: unzip and note the full path to orbit-sentinel-mcp.exe.
Build from source
go install github.com/viventine-space/orbit-sentinel-mcp@latestRelated MCP server: N2YO Satellite Tracker MCP Server
Configure
The server reads two environment variables:
Variable | Purpose |
| Orbit Sentinel API base URL ( |
| Your API key from the console |
Claude Desktop — add to ~/Library/Application Support/Claude/claude_desktop_config.json
(Windows: %APPDATA%\Claude\claude_desktop_config.json), using the absolute
path to the binary (~ is not expanded):
{
"mcpServers": {
"orbit-sentinel": {
"command": "/absolute/path/to/orbit-sentinel-mcp",
"env": {
"MCP_API_URL": "https://orbit-sentinel.viventine.com",
"MCP_API_KEY": "<your-key>"
}
}
}
}Claude Code — one command:
claude mcp add orbit-sentinel \
--env MCP_API_URL=https://orbit-sentinel.viventine.com \
--env MCP_API_KEY=<your-key> \
-- ~/bin/orbit-sentinel-mcpRestart your client; the Orbit Sentinel tools (research, search_filings,
get_entity_profile, …) appear in the tools menu.
Releasing (maintainers)
Tag and push — GitHub Actions builds and publishes all platforms:
git tag v0.x.y && git push origin v0.x.yAsset names are version-stable (orbit-sentinel-mcp_<os>_<arch>.tar.gz), so
releases/latest/download/... URLs always serve the newest build.
The Claude Desktop bundle (orbit-sentinel-mcp.mcpb) is packed and uploaded
by the release workflow — the manifest template lives at mcpb/manifest.json
(its version is stamped from the tag at pack time).
Then repeat the Glama release
— it does not auto-update from GitHub, and it gates the quality score on the
badge above. On the Dockerfile admin page,
the saved build spec should carry over (build steps install Go and go build;
placeholder parameters need a dummy MCP_API_KEY to satisfy the env schema) —
click Build, then Make Release with the new version. Manual for now;
consider Glama API integration next release cycle.
Available Tools
22 toolsget_bond_portfolioARead-only
Get FCC surety bond portfolio for satellite operators. Two distinct figures per operator: the POSTED bond, which is an amount an FCC document states and is absent for most authorizations, and the COMPUTED 47 CFR 25.165 liability, which is Orbit Sentinel's own arithmetic and is not a bond anyone has posted. Never report a computed figure as an operator's actual bond, and read 'not documented' as unknown rather than zero. Also returns summary statistics and FAA financial responsibility data. Use for questions about satellite operator financial obligations, bond compliance, or TPL coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (default 1) | |
| operator | No | Search operator name (partial match) | |
| per_page | No | Results per page (default 20, max 100) | |
| entity_id | No | Filter by entity UUID | |
| orbit_type | No | Filter by orbit type: NGSO or GSO |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered, yet the description adds crucial interpretive behavior: the POSTED vs COMPUTED distinction, the warning never to report a computed figure as an actual bond, and the instruction to treat 'not documented' as unknown rather than zero. These are exactly the semantics an agent cannot infer from structured fields and prevent materially wrong answers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the purpose before the caveats, and each sentence carries real informational weight. Slightly long, but the length is justified by the data-interpretation warnings rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must characterize the return, and it does: two figures per operator plus summary statistics and FAA financial responsibility data. It omits return shape details like pagination metadata and per-operator fields, but an agent has enough to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description adds no filtering syntax or format details beyond what the schema already documents (operator partial match, orbit_type NGSO/GSO, pagination). The baseline of 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource with domain scope: 'Get FCC surety bond portfolio for satellite operators.' No sibling tool covers bonds or financial obligations, so the purpose is unambiguous and distinguishable from the rest of the registry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The final sentence gives clear trigger conditions ('questions about satellite operator financial obligations, bond compliance, or TPL coverage'), which tells the agent when to reach for this tool. It stops short of naming an exclusion or an alternative sibling, so it is clear context rather than fully explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_dossierARead-only
Get a cross-source dossier for an entity (by UUID): regulatory filings, SEC financial signals, sanctions/export-control screening hits, and asset footprint (satellites, ground stations, federal awards, surety bonds) — counts plus recent samples in one call. The most complete single view of an operator. Set include_family=true to roll the totals up across the entity's corporate family.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity UUID | |
| include_family | No | Roll the dossier up across the entity's corporate family (same legal entity grouped by shared CIK/FRN or matching name). Default false. | |
| family_confidence | No | Family grouping strictness when include_family=true: 'high' (default; exact name / shared identifier) or 'medium' (also groups normalized-name matches like 'AT&T INC.' with 'AT&T Corp.'). | |
| include_subsidiaries | No | Also roll up the entity's direct subsidiaries (from authoritative SEC Exhibit-21 / GCAT parent links). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, consistent with a read operation. The description adds useful behavioral context: it returns 'counts plus recent samples' and explains how parameters affect the rollup. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact (3 sentences), front-loaded with the core purpose, and every sentence adds value. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (dossier from multiple sources) and no output schema, the description informs that results include 'counts plus recent samples'. It covers key parameters well. A brief note on the general output structure would improve completeness but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all parameters described). The description adds meaning beyond the schema: it explains that include_family 'rolls the totals up across the entity's corporate family', clarifies family_confidence strictness levels with examples, and describes include_subsidiaries as rolling up direct subsidiaries from SEC data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb phrase 'Get a cross-source dossier for an entity (by UUID)' and lists concrete data types (regulatory filings, SEC signals, sanctions screening, asset footprint). It clearly distinguishes from siblings which are mostly search tools or single-source tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the key parameters (include_family, include_subsidiaries) and states the tool provides 'the most complete single view'. It implies use for a comprehensive overview but does not explicitly exclude alternatives or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entity_profileARead-only
Get a detailed entity profile including filing history by agency, related entities (co-filers), linked satellites, and cross-references.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Entity UUID | |
| filed_after | No | Filter filing stats to filings after this date (YYYY-MM-DD) | |
| filed_before | No | Filter filing stats to filings before this date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description correctly implies a read-only operation ('Get'), consistent with readOnlyHint=true. However, it adds no further behavioral context beyond what annotations already provide (e.g., no mention of rate limits, authentication, or return structure).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with purpose, no wasted words. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides a reasonable overview of the return content (filing history, related entities, etc.). However, it could be improved by mentioning the output is a structured object, but this is not critical for a read-only tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with clear descriptions for all parameters. The description adds no additional meaning beyond the schema (e.g., entity UUID, date filters). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('get') and resource ('entity profile'), and lists key components (filing history by agency, related entities, linked satellites, cross-references). This clearly differentiates it from sibling tools like 'get_entity_dossier' or 'get_bond_portfolio'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the 20+ sibling tools. There is no mention of alternative use cases or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_filing_detailARead-only
Get full details of a specific regulatory filing, by UUID or agency file number, including spectrum data, orbital parameters, ground stations, signals, related filings, attachments, and (for policy filings) executive summary, overall stance, and structured arguments.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Filing UUID or agency file number (e.g. SES-STA-20250604-00870, LLO-22-126). A file number shared by several filings returns an error listing their UUIDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this as a safe read, so the description doesn't need to restate safety. It adds value by scoping exactly what payload comes back (spectrum, orbital, signals, attachments, policy analysis), but omits any note on size, auth requirements, or whether all facets are always present versus conditional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence that puts the action and lookup keys first, then the return contents. The long facet enumeration is dense but each item earns its place by telling the agent what it can avoid fetching separately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return contents, and it does so thoroughly, including the policy-filing-only fields. Minor gaps remain around the distinction between always-returned and conditionally-returned facets, but the agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'id' parameter is already well documented in the schema, including the error case for ambiguous file numbers. The description adds nothing beyond restating that either UUID or file number is accepted, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get full details') and resource ('a specific regulatory filing') with the lookup keys (UUID or agency file number) named. The enumeration of returned facets (spectrum data, orbital parameters, ground stations, signals, related filings, attachments, policy fields) makes it unmistakably distinct from search_filings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the detail-fetch companion to search_filings once a filing ID is known, but the description never says so or names alternatives. No prerequisites or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_filing_distributionARead-only
Get filing count distribution by filing type. Filter by agency and date range. Use for questions about what types of filings are most common.
| Name | Required | Description | Default |
|---|---|---|---|
| agency | No | Filter by agency (FCC, ITU, UN_OOSA) | |
| entity_type | No | Filter by entity type: company, individual, or government | |
| filed_after | No | Start date (YYYY-MM-DD) | |
| filed_before | No | End date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the readOnlyHint annotation, indicating safe read operation. However, it doesn't disclose additional behavioral traits such as pagination, rate limits, or whether the distribution includes all filing types or only those with data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded action and clear purpose. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description fails to specify the structure of the returned distribution (e.g., list of filing type counts). It mentions 'filing count distribution' but lacks detail, which is a gap for an aggregation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All four parameters have descriptions in the input schema (100% coverage). The description adds minimal value beyond reminding about agency and date-range filters, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get filing count distribution by filing type,' specifying the verb and resource. It distinguishes from siblings like get_filing_detail or get_filing_trends by focusing on distribution across types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use for questions about what types of filings are most common.' While it doesn't list alternatives, the context of sibling tools makes when-to-use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_filing_trendsARead-only
Get filing volume trends over time periods with optional top movers (entities with biggest changes). Use for questions about growth, trends, emerging players, or year-over-year comparisons.
| Name | Required | Description | Default |
|---|---|---|---|
| agency | No | Filter by agency (FCC, ITU, UN_OOSA) | |
| periods | No | Number of periods (default 2, max 12) | |
| entity_id | No | Entity UUID for per-entity trends | |
| top_movers | No | Top N entities by biggest change | |
| entity_type | No | Filter by entity type: company, individual, or government | |
| period_months | No | Months per period (default 12, max 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the description correctly implies a read operation. The description adds that it returns trends and top movers but does not detail behavior like aggregation methods, pagination, or rate limits. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary function, and contains no redundant or extraneous information. Each sentence serves a clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 parameters and no output schema. The description explains what the tool returns (trends and optional top movers) but lacks details on the output structure (e.g., list of periods, counts). This is a gap for an agent to fully understand the response format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 each parameter. The description adds context about optional top movers but does not explain parameter specifics beyond the schema. Therefore, it adds minimal value, matching the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves filing volume trends over time periods, with optional parameters for top movers. This distinguishes it from siblings like get_filing_detail (specific filing) and get_filing_distribution (filing distribution), making its purpose specific and distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using the tool for questions about growth, trends, emerging players, or year-over-year comparisons. However, it does not provide exclusions or mention alternative tools for different queries, such as get_filing_distribution for distribution queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_launch_historyARead-only
Get launch history for a space entity. Returns launches from the FAA/GCAT database including vehicle type, launch site, outcome, and date. Requires entity_id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max launches to return (default 20, max 100) | |
| vehicle | No | Filter by vehicle type (e.g., Falcon 9, Electron) | |
| entity_id | Yes | Entity UUID to look up launch history for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and description adds source database (FAA/GCAT) and return fields, but no additional behavioral details like pagination or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences are concise and front-loaded, but could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple query tool with no output schema, description covers main return fields and requirement. Adequately complete given context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. Description does not add significant meaning beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'Get' and resource 'launch history for a space entity', and distinguishes from sibling tools like get_entity_dossier or get_entity_profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies requirement for entity_id but lacks guidance on when to use this tool versus alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_statusARead-only
Get system health status including database connectivity, pipeline queue depth, and per-source crawl health.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds context about specific health components but does not disclose any additional behavioral traits (e.g., rate limits, data recency). It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the tool's purpose and key components with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description lists what the tool checks but does not describe the return format or how status is reported. This gap leaves the agent uncertain about the response structure. Adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, and schema coverage is 100% trivially. The description does not need to add param info, and it appropriately focuses on tool purpose. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'system health status', listing specific components like database connectivity, pipeline queue depth, and per-source crawl health. This distinguishes it from sibling tools which focus on entities, filings, or other data queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for checking system status, but provides no explicit guidance on when to use this tool versus alternatives, nor any when-not scenarios. Sibling tools are diverse, but no direct alternative for system health is present; guidance is minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_filersARead-only
Get the top filing entities ranked by number of filings. Filter by agency and date range. Use for questions about who files the most, biggest players, or filing rankings.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entities (default 10, max 100) | |
| agency | No | Filter by agency (FCC, ITU, UN_OOSA) | |
| entity_type | No | Filter by entity type: company, individual, or government | |
| filed_after | No | Start date (YYYY-MM-DD) | |
| filed_before | No | End date (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include `readOnlyHint: true`, confirming no destructive behavior. The description adds that results are ranked by filing count and filters by agency/date range, which goes beyond the annotation. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence states the core purpose and ranking; the second provides filtering context and usage examples. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a retrieval tool with 5 optional parameters and no output schema, the description sufficiently covers the purpose, filtering, and typical use cases. It is complete given the complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 5 parameters are described in the input schema with 100% coverage. The description mentions filtering by 'agency and date range', which aligns with the schema but adds no additional meaning beyond what is already present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and resource 'top filing entities' ranked by number of filings. It distinguishes itself from sibling tools like `get_filing_trends` and `get_filing_distribution` by focusing on rankings of entities rather than trends or distributions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use: 'Use for questions about who files the most, biggest players, or filing rankings.' This provides clear context. It does not mention when not to use or list alternatives, but the sibling tools cover distinct purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
milestone_adherenceARead-only
FCC deployment milestone adherence (47 CFR 25.164): which authorized satellite systems met their deployment milestones. Grading is deliberately asymmetric — an adverse grade must be earned, a favourable grade must be labelled. 'missed' and 'met_late' appear only where a human verified a cited FCC document; otherwise the row reads 'verification_required', which asserts nothing about the operator and must not be reported as a miss. Favourable grades are never withheld, so read verification_status: 'arithmetic_corroborated' means the deployment counts independently agree — a computation, not a person, did the corroborating — and 'uncorroborated' means the arithmetic is SILENT, not that it disagrees; no favourable grade is currently contradicted by the data. computed_grade always carries the raw arithmetic even where classification withholds it. Filter by call_sign, classification, is_ngso; set summary=true for aggregate counts, which include withheld_adverse and uncorroborated_favourable.
| Name | Required | Description | Default |
|---|---|---|---|
| is_ngso | No | Filter by orbit type: true for NGSO, false for GSO | |
| summary | No | If true, return aggregate counts by classification/orbit type instead of individual rows | |
| call_sign | No | Filter by FCC call sign (exact match) | |
| classification | No | Filter by classification: met|met_computed|met_late|pending|extended|waived|missed|verification_required|not_deployment_obligation|attribution_ambiguous|attribution_undetermined|unknown. 'missed_unverified' no longer exists — unverified adverse grades are now 'verification_required' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=true in annotations, the description carries the behavioral burden and does so unusually well: it explains the deliberately asymmetric grading, that 'missed'/'met_late' require human verification of a cited FCC document, that 'verification_required' asserts nothing and must not be reported as a miss, and that 'uncorroborated' means the arithmetic is silent rather than disagreeing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and nearly every sentence carries semantic weight about grading rules. It is a single dense paragraph, though, with interpretive caveats compressed together rather than structured, which slightly impedes scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must explain returns — and it does: it defines the grade vocabulary, verification_status values, and that computed_grade always carries raw arithmetic even when classification withholds a grade. An agent has everything needed to call and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: it clarifies that summary aggregates include withheld_adverse and uncorroborated_favourable, and notes that 'missed_unverified' was replaced by 'verification_required'. It still largely restates the filter parameters, keeping it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and regulatory basis: 'FCC deployment milestone adherence (47 CFR 25.164) — which authorized satellite systems met their deployment milestones.' No sibling tool overlaps this domain (they are search_* and get_* entity/filing tools), so an agent can route to it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than framed: 'Filter by call_sign, classification, is_ngso; set summary=true for aggregate counts' tells how to parameterize but never states when this tool is the right choice versus an alternative, nor any exclusions. There is no sibling to name here, so the omission is less costly, but explicit context is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
researchARead-only
Primary research tool — searches filings, entities, and semantic index in parallel. Use this FIRST for any question. Pass the agency parameter for agency-specific questions (e.g., agency="FCC" for FCC questions).
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | Optional focus area: filing, entity, spectrum, or general (default: general) | |
| agency | No | Filter all sub-queries by agency (FCC, ITU, UN_OOSA). Recommended for agency-specific questions. | |
| question | Yes | Natural language question about space regulatory filings, entities, or spectrum |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotation already indicates readOnlyHint=true (safe read operation). Description adds that it searches in parallel but does not disclose performance characteristics, rate limits, or empty result behavior. Adequate but not enriched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with purpose. No redundancy or filler. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a broad search tool with 3 well-documented parameters and no output schema, the description covers usage intent and priority. Lacks return value description but is sufficient for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters are already well-documented. Description adds usage guidance for the agency parameter but duplicates the focus parameter's default. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it is the primary research tool that searches filings, entities, and semantic index in parallel. Distinguishes itself from more specific sibling tools like search_filings, search_entities, and search_semantic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this FIRST for any question' and advises passing the agency parameter for agency-specific questions. Provides clear context but does not explicitly mention when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_entitiesARead-only
Search regulatory entities (companies, operators, manufacturers, governments) by name, type, or country. Supports fuzzy name matching.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Fuzzy search on entity name and aliases | |
| page | No | Page number (default 1) | |
| type | No | Filter by entity type, one of: company, individual, government, corporation | |
| country | No | Filter by country: an ISO code (US, GB, FR) or a country name (United States, France); the API maps either to the stored spellings | |
| per_page | No | Results per page (default 25, max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered by structured data. The description adds the useful behavioral detail that name matching is fuzzy, but says nothing about result ordering, pagination behavior, or the fact that all filters are optional (a broad query may return a very large set).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the verb and resource, with no filler. The parenthetical entity list is slightly redundant with the type parameter and is where the value mismatch creeps in.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, fully-optional-filter search tool with no output schema and complete parameter docs, the description covers what the tool is and what it searches. It omits only return shape and result-volume expectations, which are low-risk for a standard search endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the five parameters are already well documented (including the ISO-code-or-name handling for country), making 3 the baseline. The description adds only a corroborating note on fuzzy name matching, and its illustrative entity list ('operators, manufacturers') does not match the schema's type values (company, individual, government, corporation), creating mild confusion about valid filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (regulatory entities), and enumerates what counts as an entity (companies, operators, manufacturers, governments) plus the three axes of search (name, type, country). This is clearly distinct from siblings like search_filings or get_entity_profile, but it never explicitly names or contrasts those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Search ... by name, type, or country. Supports fuzzy name matching' implies how to use it, but there is no guidance on when to choose this over get_entity_profile (single-entity lookup) or search_semantic. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_federal_awardsARead-only
Search U.S. federal awards (USAspending contracts + IDVs) by recipient, agency, award type, NAICS, or minimum amount, joined to the resolved recipient entity. Ordered by award amount (largest first). Use for 'NASA contracts to Boeing over $1B' or an operator's federal funding footprint.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows returned (default 50, max 500). The response total is the full match count regardless of limit; rows cannot be paged, so answer counting questions from total. Output keeps the rows that fit in about 40 KB and says how many it left out | |
| naics | No | NAICS code prefix (e.g. 5415 for computer systems design) | |
| since | No | Only awards starting on/after this date (YYYY-MM-DD) | |
| agency | No | Substring match on awarding/sub/funding agency (e.g. NASA, Department of Defense) | |
| entity_id | No | Filter by resolved recipient entity UUID | |
| recipient | No | Substring match on recipient/company name (e.g. boeing) | |
| award_type | No | Award type: 'contract' or 'idv' | |
| min_amount | No | Minimum award amount in USD (e.g. 1000000000 for $1B+) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint=true in annotations, the description usefully adds that results are joined to the resolved recipient entity and are ordered by award amount (largest first) — ordering behavior an agent cannot infer from annotations. It omits the pagination/row-capping behavior, but that is covered in the limit parameter's schema description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: purpose and filters, ordering, then usage examples. Nothing is redundant and the most decision-relevant content (what it searches and the sort order) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description covers the searchable dimensions, the ordering, and the entity join, while the limit parameter schema explains the total-count and row-cap semantics. Coverage is strong, though it could say more about the returned row shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters are already documented with examples and defaults. The description restates the filter categories but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (U.S. federal awards, scoped to USAspending contracts + IDVs), enumerates the filter dimensions, and discloses the join to resolved recipient entities. An agent can distinguish it from search_entities or search_sec_filings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage examples ('NASA contracts to Boeing over $1B', 'an operator's federal funding footprint'), which clearly signal when to reach for this tool. It does not, however, name an alternative tool or state exclusions, so it falls short of the explicit when/when-not bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_filingsARead-only
Search space regulatory filings by keyword, agency, type, status, date range, agency file number (exact or prefix such as SES-LIC) or applicant entity. Returns a paginated list of filings from FCC, ITU, UNOOSA, and other agencies.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query for filing titles and summaries | |
| page | No | Page number (default 1) | |
| type | No | Filter by filing type, one of: ADVANCE_PUBLICATION, COMMENT, EARTH_STATION_PERMIT, ENVIRONMENTAL_ASSESSMENT, EXPERIMENTAL_LICENSE, EX_PARTE, LAUNCH_LICENSE, MODIFICATION, OPPOSITION, ORBITAL_DEBRIS_PLAN, OTHER, PETITION, REENTRY_LICENSE, REGISTRATION, REMOTE_SENSING_LICENSE, RENEWAL, SATELLITE_LICENSE, SPECIAL_TEMPORARY_AUTH, SPECTRUM_COORDINATION, TRANSFER_OF_CONTROL. For FCC application types such as SES-LIC use source_id_prefix | |
| agency | No | Filter by source agency, one of: ACMA_AU, CNES_FR, FAA_AST, FCC, ITU, NOAA, NTIA, OFCOM_UK, OTHER, SEC, STATE_AK, STATE_FL, STATE_TX, STATE_VA, UN_OOSA, USPTO | |
| docket | No | Filter by docket number (exact match) | |
| status | No | Filing (application) status, one of: ACCEPTED, CANCELLED, COMMENT_PERIOD, DENIED, DISMISSED, EXPIRED, FILED, GRANTED, PUBLIC_NOTICE, UNDER_REVIEW, UNKNOWN, WITHDRAWN | |
| per_page | No | Results per page (default 10, max 100) | |
| entity_id | No | Applicant entity UUID (from search_entities): filings this entity filed | |
| source_id | No | Agency file number, exact match (e.g. SAT-LOA-20200526-00055, LLO-22-126) | |
| count_only | No | If true, return only {total: N} without fetching rows | |
| filed_after | No | Minimum filed date (YYYY-MM-DD) | |
| filed_before | No | Maximum filed date (YYYY-MM-DD) | |
| source_id_prefix | No | File-number prefix, e.g. SES-LIC, SAT-LOA, SES-T/C or LLO: filters by FCC application type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this is a safe read, so the bar is lower. The description adds that results are paginated and which source agencies are covered (FCC, ITU, UNOOSA, and others), which is useful context beyond the annotations, but it omits ordering, result caps, and any rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded: the capability and its filter dimensions come first, the return shape second. Zero filler, and the filter list is compact enough to scan without reading the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter, fully optional, read-only list tool with no output schema, the description covers capability, filters, and paginated return shape, with the schema filling in all parameter detail. It stops short of 5 only because it leaves ordering and pagination termination behavior unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 13 parameters with enum values and formats. The description only restates the filter dimensions at a summary level and adds no syntax or semantics beyond the schema, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (space regulatory filings) and enumerates the filter dimensions the tool supports. It does not, however, differentiate itself from siblings like get_filing_detail, get_filing_distribution, or search_sec_filings, so an agent must infer the boundary on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the catalog of filter dimensions (keyword, agency, type, status, date range, file number, entity) hints at when each is appropriate, and the SES-LIC example signals the exact-vs-prefix distinction. There is no explicit when-to-use, when-not, or named alternative among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ground_stationsARead-only
Search ground / earth stations by name, frequency band, operator, entity, U.S. state, or geographic proximity (near='lat,lon' within radius_km, ordered by great-circle distance). Defaults to the FCC IBFS earth-station archive (one row per call sign, through 2025-06-17); source=acma|ised|ofcom reads a national register, source=extracted the stations extracted from filings. Each result is labeled with its source. group_by=state|operator returns call-sign counts per bucket. Use for 'earth stations within 200km of 38.9,-77.0', 'how many V-band earth stations per state', or an operator's gateway footprint.
| Name | Required | Description | Default |
|---|---|---|---|
| band | No | Satellite frequency band, one of: L, S, C, X, Ku, Ka, V, E. For fcc and the national registers a station matches only if one of its frequency ranges lies entirely within the band (V = 37,500-51,400 MHz); for source=extracted it is an exact match against the station's extracted band list | |
| name | No | Substring match on station name / FCC call sign | |
| near | No | Proximity anchor as 'lat,lon' (e.g. '38.9,-77.0'); returns stations within radius_km ordered by distance | |
| limit | No | Max rows returned (default 50, max 500). The response total is the full match count regardless of limit; rows cannot be paged, so answer counting questions from total. Output keeps the rows that fit in about 40 KB and says how many it left out | |
| state | No | U.S. state or territory code of the station site (e.g. AK, HI); requires source=fcc | |
| source | No | Dataset: 'fcc' (default; FCC IBFS earth-station filings through 2025-06-17, one row per call sign, reliable coordinates), 'acma', 'ised' or 'ofcom' (Australian, Canadian or UK earth-station register), or 'extracted' (LLM-extracted from filings, carries band names, coordinates are lossy) | |
| group_by | No | 'state' or 'operator': return distinct call-sign counts per state or operator instead of rows (total is the distinct call signs matched); requires source=fcc | |
| operator | No | Substring match on operator / licensee name | |
| entity_id | No | Filter by resolved operator entity UUID (the filing's applicant); fcc or extracted only | |
| radius_km | No | Search radius in km for near= (default 500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds substantial context beyond that: the default archive and its date cutoff, the caveat that extracted coordinates are lossy while fcc coordinates are reliable, and that each result is labeled with its source. It does not describe pagination/return shape, but with annotations present the bar is lower.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and filters, then defaults and grouping. Dense but each sentence carries information; the example queries are compact and useful. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter read-only search with no output schema, the description covers the default dataset, the full source enum with tradeoffs, grouping semantics, and proximity behavior, which is everything an agent needs to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already fully documented in the schema. The description reinforces defaults and proximity ordering but largely overlaps with the schema descriptions rather than adding new semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (ground/earth stations) and enumerates the filter dimensions (name, band, operator, entity, state, proximity). It clearly distinguishes itself from sibling tools like search_satellites and search_space_station_authorizations by scoping to earth stations across named registers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage contexts ('earth stations within 200km of 38.9,-77.0', 'how many V-band earth stations per state', operator gateway footprint) and explains the source= options and group_by behavior. It stops short of naming sibling alternatives or explicit when-not-to-use conditions, so a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_positionsARead-only
Search LLM-extracted policy arguments across COMMENT / REPLY / PETITION filings. Filter by docket, overall stance, argument type, target party, or filer. Use this to answer questions like 'who opposed X?', 'what did SpaceX argue in 25-306?', 'which filings support modular satellite licensing?'. Returns one row per (filing, argument).
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Words to find in argument text or executive summaries: every word must appear (in any order), not as an exact phrase | |
| filer | No | Substring match on the filing party's canonical name | |
| limit | No | Max results (default 25, max 200) | |
| docket | No | Filter by docket number (e.g. '25-306') | |
| stance | No | Filter by overall stance: support|oppose|qualified_support|qualified_opposition|informational | |
| position | No | Filter by per-argument position: support|oppose|modify|neutral | |
| target_party | No | Substring match on target_party (the entity being addressed or opposed) | |
| argument_type | No | Filter by argument type: legal|technical|economic|policy|procedural |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the safety profile, so the bar is lower. The description adds genuinely useful behavior beyond that: the source data is LLM-extracted arguments and results are one row per (filing, argument). It does not mention pagination beyond the limit param or result ordering, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and resource, then filters, then usage examples, then return shape. No filler or repetition; every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, no-output-schema search tool, the description covers what it searches, how to filter, when to use it, and the result granularity. It omits ordering/pagination behavior and any note on data provenance limits of the LLM extraction, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 eight parameters including the per-word 'q' matching rule and enum-like value lists. The description only echoes the filter dimensions (docket, stance, argument type, target party, filer) without adding syntax or behavior beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and a precise resource: searching LLM-extracted policy arguments, scoped to COMMENT/REPLY/PETITION filings. This distinguishes it from generic siblings like search_filings and search_semantic, which operate on filings or free text rather than per-argument positions. The return granularity (one row per filing, argument) further pins down what the tool is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete example questions that select this tool ('who opposed X?', 'what did SpaceX argue in 25-306?', 'which filings support modular satellite licensing?'), giving an agent clear use-case context. However, it names no alternative sibling or an explicit when-not condition, so routing versus search_filings/search_semantic is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_satellitesARead-only
Search the satellite catalog (UCS + Space-Track SATCAT) by name, operator, country, orbit class, status, object type, launch or decay date range, COSPAR, or NORAD id. Joined to the resolved operator entity. Every response includes total, the full number of matching objects (rows are capped at 500 and cannot be paged), so answer counting questions from total — set count_only=true to skip the rows. Combine filters in one call instead of splitting the search, e.g. a constellation's payloads launched in a given year: name=, object_type=payload, launched_after=-01-01, launched_before=-12-31, count_only=true. Use for counting a fleet or a segment, 'what does SpaceX have in LEO?', 'find NORAD 44713', or building an operator's fleet.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Substring match on satellite name | |
| limit | No | Max rows returned (default 50, max 500). total always reports the full match count regardless of limit. Output keeps the rows that fit in about 40 KB and says how many it left out | |
| norad | No | NORAD catalog id (integer) | |
| cospar | No | COSPAR / international designator (exact match) | |
| status | No | Orbital status: active (on orbit) or decayed; matches every catalog spelling of each | |
| country | No | Operator country code (exact match) | |
| operator | No | Substring match on operator name (e.g. SpaceX); note many rows use a country code (US, CIS, PRC) as the operator | |
| entity_id | No | Filter by resolved operator entity UUID | |
| count_only | No | Return only total (the full match count), no rows. Use for any 'how many' question | |
| object_type | No | Object type: payload, rocket_body, debris, or unknown. Use payload to count satellites rather than all cataloged objects. unknown also matches ~340 merge-era rows with no type; payload/rocket_body/debris exclude them | |
| orbit_class | No | Orbit class (e.g. LEO, MEO, GEO) | |
| decayed_after | No | Decay/reentry date on or after (YYYY-MM-DD); only decayed objects have a decay date, so this also limits results to decayed objects | |
| decayed_before | No | Decay/reentry date on or before (YYYY-MM-DD) | |
| launched_after | No | Launch date on or after (YYYY-MM-DD) | |
| launched_before | No | Launch date on or before (YYYY-MM-DD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true; the description supplies the operationally critical behaviors an agent would otherwise guess wrong: rows are capped at 500 and cannot be paged, total always reports the full match count, and output keeps ~40 KB of rows and reports what it dropped. These are exactly the facts that change how an agent calls this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, purpose and constraints front-loaded, no filler. The weak spot is redundancy: count_only's purpose appears both in the description and twice in the schema, and the third sentence stacks three separate use cases where one or two would carry the same signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 15 optional parameters, no output schema, and only a readOnlyHint annotation, the description still covers return shape (total), row capping, truncation behavior, the operator-entity join, and query strategy. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 and the schema already carries per-parameter meaning. The description earns above baseline by showing a concrete chained invocation (name=<constellation>, object_type=payload, launched_after/before=<YYYY>-01-01..12-31, count_only=true), which demonstrates combination semantics rather than restating individual fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Search') and resource ('the satellite catalog (UCS + Space-Track SATCAT)'), then enumerates the exact filter facets available. It is clearly distinguishable from siblings like search_ground_stations and search_positions, and the 'joined to the resolved operator entity' clause adds a structural fact no sibling repeats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it ('counting a fleet or a segment', 'what does SpaceX have in LEO?', 'find NORAD 44713', 'building an operator's fleet') and gives an anti-pattern instruction ('Combine filters in one call instead of splitting the search'). The count_only routing rule ('Use for any how many question', echoed in the schema) closes the loop.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_screeningARead-only
Check entities against consolidated sanctions / export-control screening lists (OFAC SDN, BIS Entity List, ITAR Debarred, etc.). Filter by entity, name, list source, or minimum match similarity. Use for compliance / due-diligence questions.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | Substring match on screening list source (e.g. SDN, Entity List, ITAR) | |
| name | No | Substring match on entity or matched name | |
| limit | No | Max rows returned (default 50, max 500). The response total is the full match count regardless of limit; rows cannot be paged, so answer counting questions from total. Output keeps the rows that fit in about 40 KB and says how many it left out | |
| entity_id | No | Filter by resolved entity UUID | |
| min_similarity | No | Minimum match similarity 0-1 (e.g. 0.9) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds useful scope disclosure by naming the concrete screening lists covered, but says nothing about how matches are scored/returned or any limits on the screening data beyond what the limit param covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The screening scope and covered lists come first, then the filters, then the intended use case — well front-loaded for an agent scanning candidates.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup tool with fully documented parameters and no output schema, the description covers what is being checked and why. It omits the shape of a result (matched entity, similarity value, list attribution), which the schema only partially hints at via 'matched name'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 five parameters, including the min_similarity range and the limit behavior. The description only restates the filter dimensions ('entity, name, list source, or minimum match similarity') at the same level of detail as the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Check entities against consolidated sanctions / export-control screening lists') and enumerates the actual sources (OFAC SDN, BIS Entity List, ITAR Debarred). This cleanly distinguishes it from the generic sibling search_entities, which covers the broader entity dataset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for compliance / due-diligence questions' gives a clear context of use. It stops short of naming alternatives or exclusions (e.g. use search_entities for non-sanctions lookups), so nothing routes the agent away from this tool when it is the wrong one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sec_filingsARead-only
Search SEC filings for tracked space companies (8-K material events, 10-Q, 10-K). Filter by ticker, CIK, company name, resolved entity, form type, or date. Use for financial signals — e.g. recent 8-Ks for a satellite operator.
| Name | Required | Description | Default |
|---|---|---|---|
| cik | No | SEC CIK number | |
| limit | No | Max rows returned (default 50, max 100). The response total is the full match count regardless of limit; rows cannot be paged, so answer counting questions from total. Output keeps the rows that fit in about 40 KB and says how many it left out | |
| since | No | Only filings on/after this date (YYYY-MM-DD) | |
| ticker | No | Company ticker (e.g. ASTS) | |
| company | No | Substring match on company name | |
| entity_id | No | Filter by resolved entity UUID | |
| form_type | No | SEC form type (e.g. 8-K, 10-Q, 10-K) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered and the bar is lower. The description adds the scope qualifier 'tracked space companies' but says nothing about result handling, truncation, or auth expectations beyond what the schema already documents in the limit parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, filtering capability and use case front-loaded, with no filler or redundant restatement. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a 7-parameter search tool with no output schema, and the schema's limit description covers the return-size behavior. However, with a near-identical sibling (search_filings) in the toolset, the description never arbitrates which one the agent should pick, leaving a routing gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the limit parameter's schema text is unusually rich (40 KB cap, unpaged rows, total-count semantics). The description merely restates the filter dimensions (ticker, CIK, company, entity, form type, date) without adding format or matching semantics beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search SEC filings for tracked space companies') and enumerates the covered form types (8-K, 10-Q, 10-K) plus the filterable dimensions. It is clearly separable from non-filing siblings like search_satellites or search_ground_stations, though it does not distinguish itself from the similarly named search_filings sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit use case with an example ('Use for financial signals — e.g. recent 8-Ks for a satellite operator'), which tells the agent the intent behind the tool. It stops short of stating when NOT to use it or pointing to alternatives such as search_filings or get_filing_detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_semanticARead-only
Semantic vector search across filing text using natural language. Uses nomic-embed-text-v1.5 embeddings to find filings by meaning, not just keywords. Note: FCC filings have limited embedding coverage — use search_filings for FCC keyword search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10, max 50) | |
| query | Yes | Natural language search query | |
| agency | No | Filter by source agency, one of: ACMA_AU, CNES_FR, FAA_AST, FCC, ITU, NOAA, NTIA, OFCOM_UK, OTHER, SEC, STATE_AK, STATE_FL, STATE_TX, STATE_VA, UN_OOSA, USPTO | |
| filed_after | No | Minimum filed date (YYYY-MM-DD) | |
| filed_before | No | Maximum filed date (YYYY-MM-DD) | |
| min_similarity | No | Minimum cosine similarity threshold (default 0.5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read, and the description adds a genuinely useful behavioral caveat that annotations cannot convey: limited embedding coverage for FCC filings. It stops short of describing result ranking/scoring behavior or fallback semantics when similarity is below threshold.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler, and the core capability is front-loaded ahead of the implementation detail and the caveat. Each sentence carries distinct information (what it does, how, and its limitation).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter search tool with no output schema and only a readOnly annotation, the description covers purpose, mechanism, and the key coverage limitation. It leaves the agent guessing about result shape and scoring/pagination behavior, but the essential call requirements are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — every parameter including limit, agency enum values, date bounds, and the min_similarity default is documented in the schema itself. The description adds no additional parameter meaning beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (semantic vector search across filing text) plus the underlying mechanism (nomic-embed-text-v1.5 embeddings). The contrast with keyword search and the explicit pointer to search_filings makes it distinguishable from its closest sibling without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for use (find filings by meaning, not just keywords) and names the alternative tool for the case where this one is weak (FCC keyword search via search_filings). It does not spell out a general when-not rule for the other listed agencies, so the routing guidance is good but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_space_station_authorizationsARead-only
Search the FCC Approved Space Station List (SSAL): U.S.-licensed space stations and foreign-licensed ones approved for U.S. market access, by operator, system, licensing administration, call sign, entity, orbit type (is_ngso), foreign licensing (foreign) and grant (granted). Each row carries us_market_access (granted and foreign). Every response includes total, the full match count; set count_only=true to skip the rows. Use for 'how many foreign NGSO systems have U.S. market access?' (is_ngso=true, foreign=true, granted=true, count_only=true) or 'is Telesat's system on the SSAL?'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows returned (default 50, max 500). total always reports the full match count regardless of limit; rows cannot be paged. Output keeps the rows that fit in about 40 KB and says how many it left out | |
| system | No | Substring match on system name | |
| foreign | No | true for systems licensed by an administration other than the United States, false for U.S.-licensed systems (and rows with no licensing administration) | |
| granted | No | true for rows with an entry in the list's Grant column, false for rows without. The FCC fills it for U.S.-licensed systems too, so U.S. market access is granted=true with foreign=true | |
| is_ngso | No | true for NGSO systems, false for GSO | |
| operator | No | Substring match on operator name | |
| call_sign | No | FCC call sign (exact match, case-insensitive) | |
| entity_id | No | Filter by resolved operator entity UUID | |
| count_only | No | Return only total (the full match count), no rows. Use for any 'how many' question | |
| licensing_admin | No | Substring match on licensing administration (e.g. Canada, United Kingdom) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond readOnlyHint: every response includes total, count_only skips rows, rows cannot be paged, and output truncates around 40 KB with a count of omitted rows. It also explains the derived us_market_access flag. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and filter list, then moves to row semantics, count behavior, and examples. The filter enumeration is somewhat redundant with the schema but still useful for scanning, and the description is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter search tool with no output schema, the description covers the return shape (total, rows, truncation behavior) and provides example invocations. Nothing critical for correct invocation appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 adds the derived us_market_access relationship (granted + foreign) and reinforces count_only and filter combinations; the filter list largely restates schema fields, but the added row-level semantics justify a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (FCC Approved Space Station List/SSAL), and defines the data scope: U.S.-licensed stations plus foreign-licensed ones approved for U.S. market access. The resource is distinct from sibling tools like search_satellites and search_ground_stations even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete example queries ('how many foreign NGSO systems have U.S. market access?' and 'is Telesat's system on the SSAL?') and ties count_only=true to 'how many' questions. It does not name alternative tools or state when to avoid this one, so usage is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_spectrumARead-only
Find which entities hold a frequency band. Given a range in MHz, returns spectrum allocations overlapping it, joined to the source filing and applicant — e.g. 'who is allocated 11700-12200 MHz downlink?'. Filter by agency, direction, polarization, or holder name.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows returned (default 50, max 500). The response total is the full match count regardless of limit; rows cannot be paged, so answer counting questions from total. Output keeps the rows that fit in about 40 KB and says how many it left out | |
| agency | No | Filter by source agency (FCC, ITU, ...) | |
| holder | No | Substring match on the allocation holder (applicant entity) | |
| direction | No | Filter by direction (e.g. uplink, downlink) | |
| freq_low_mhz | No | Lower bound of the band to search, in MHz | |
| polarization | No | Filter by polarization | |
| freq_high_mhz | No | Upper bound of the band to search, in MHz |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that results are joined to the source filing and applicant, which enriches understanding of the output, but says nothing about result caps, paging, or auth that isn't delegated to the schema's limit text.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding, and the core purpose plus the illustrative query are front-loaded. Every clause either defines the operation or demonstrates it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries return-value burden and does so by naming the allocation-plus-filing-plus-applicant join. The paging/limit behavior is handled in the schema, so only minor detail is missing for a correct call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are already documented in structured data. The description reinforces the MHz range and filter axes but adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Find which entities hold a frequency band', and names the exact return payload (spectrum allocations joined to source filing and applicant). The concrete example 'who is allocated 11700-12200 MHz downlink?' makes it unmistakable against siblings like search_filings or search_satellites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The example query establishes a clear use scenario (band-ownership lookup) and the filter list signals how to narrow results. It lacks explicit when-not-to-use guidance or naming of an alternative sibling, which keeps 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.
12 tool updates
v0.7.0- Changed
get_filing_detail1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Filing UUID"New value: +"Filing UUID or agency file number (e.g. SES-STA-20250604-00870, LLO-22-126). A file number shared by several filings returns an error listing their UUIDs"
- Changed
search_entities2 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"Filter by country code (US, GB, FR, etc.)"New value: +"Filter by country: an ISO code (US, GB, FR) or a country name (United States, France); the API maps either to the stored spellings" - changed
Input schema / properties / type / descriptionPrevious value: -"Filter by entity type (OPERATOR, MANUFACTURER, GOVERNMENT, etc.)"New value: +"Filter by entity type, one of: company, individual, government, corporation"
- Changed
search_federal_awards1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 50, max 500)"New value: +"Max rows returned (default 50, max 500). The response total is the full match count regardless of limit; rows cannot be paged, so answer counting questions from total. Output keeps the rows that fit in about 40 KB and says how many it left out"
- Changed
search_filings6 fields changed- changed
Input schema / properties / agency / descriptionPrevious value: -"Filter by source agency (FCC, ITU, UN_OOSA, FAA_AST, NOAA)"New value: +"Filter by source agency, one of: ACMA_AU, CNES_FR, FAA_AST, FCC, ITU, NOAA, NTIA, OFCOM_UK, OTHER, SEC, STATE_AK, STATE_FL, STATE_TX, STATE_VA, UN_OOSA, USPTO" - added
Input schema / properties / entity_idAdded value: +{ + "description": "Applicant entity UUID (from search_entities): filings this entity filed", + "type": "string" +} - added
Input schema / properties / source_idAdded value: +{ + "description": "Agency file number, exact match (e.g. SAT-LOA-20200526-00055, LLO-22-126)", + "type": "string" +} - added
Input schema / properties / source_id_prefixAdded value: +{ + "description": "File-number prefix, e.g. SES-LIC, SAT-LOA, SES-T/C or LLO: filters by FCC application type", + "type": "string" +} - changed
Input schema / properties / status / descriptionPrevious value: -"Filter by status (FILED, GRANTED, DENIED, UNDER_REVIEW, etc.)"New value: +"Filing (application) status, one of: ACCEPTED, CANCELLED, COMMENT_PERIOD, DENIED, DISMISSED, EXPIRED, FILED, GRANTED, PUBLIC_NOTICE, UNDER_REVIEW, UNKNOWN, WITHDRAWN" - changed
Input schema / properties / type / descriptionPrevious value: -"Filter by filing type (SATELLITE_LICENSE, EARTH_STATION_PERMIT, SPECTRUM_COORDINATION, etc.)"New value: +"Filter by filing type, one of: ADVANCE_PUBLICATION, COMMENT, EARTH_STATION_PERMIT, ENVIRONMENTAL_ASSESSMENT, EXPERIMENTAL_LICENSE, EX_PARTE, LAUNCH_LICENSE, MODIFICATION, OPPOSITION, ORBITAL_DEBRIS_PLAN, OTHER, PETITION, REENTRY_LICENSE, REGISTRATION, REMOTE_SENSING_LICENSE, RENEWAL, SATELLITE_LICENSE, SPECIAL_TEMPORARY_AUTH, SPECTRUM_COORDINATION, TRANSFER_OF_CONTROL. For FCC application types such as SES-LIC use source_id_prefix"
- Changed
search_ground_stations6 fields changed- changed
Input schema / properties / band / descriptionPrevious value: -"Frequency band, exact match against the station's band list (e.g. Ku); requires source=extracted"New value: +"Satellite frequency band, one of: L, S, C, X, Ku, Ka, V, E. For fcc and the national registers a station matches only if one of its frequency ranges lies entirely within the band (V = 37,500-51,400 MHz); for source=extracted it is an exact match against the station's extracted band list" - changed
Input schema / properties / entity_id / descriptionPrevious value: -"Filter by resolved operator entity UUID; requires source=extracted"New value: +"Filter by resolved operator entity UUID (the filing's applicant); fcc or extracted only" - added
Input schema / properties / group_byAdded value: +{ + "description": "'state' or 'operator': return distinct call-sign counts per state or operator instead of rows (total is the distinct call signs matched); requires source=fcc", + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 50, max 500)"New value: +"Max rows returned (default 50, max 500). The response total is the full match count regardless of limit; rows cannot be paged, so answer counting questions from total. Output keeps the rows that fit in about 40 KB and says how many it left out" - changed
Input schema / properties / source / descriptionPrevious value: -"Dataset: 'fcc' (authoritative FCC IBFS registry, reliable coordinates) or 'extracted' (entity-linked, LLM-extracted from filings, carries bands). Defaults to fcc for proximity, extracted for band/entity searches."New value: +"Dataset: 'fcc' (default; FCC IBFS earth-station filings through 2025-06-17, one row per call sign, reliable coordinates), 'acma', 'ised' or 'ofcom' (Australian, Canadian or UK earth-station register), or 'extracted' (LLM-extracted from filings, carries band names, coordinates are lossy)" - added
Input schema / properties / stateAdded value: +{ + "description": "U.S. state or territory code of the station site (e.g. AK, HI); requires source=fcc", + "type": "string" +}
- Changed
search_positions1 field changed- changed
Input schema / properties / q / descriptionPrevious value: -"Substring search across argument text and executive summaries"New value: +"Words to find in argument text or executive summaries: every word must appear (in any order), not as an exact phrase"
- Changed
search_satellites8 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "description": "Return only total (the full match count), no rows. Use for any 'how many' question", + "type": "boolean" +} - added
Input schema / properties / decayed_afterAdded value: +{ + "description": "Decay/reentry date on or after (YYYY-MM-DD); only decayed objects have a decay date, so this also limits results to decayed objects", + "type": "string" +} - added
Input schema / properties / decayed_beforeAdded value: +{ + "description": "Decay/reentry date on or before (YYYY-MM-DD)", + "type": "string" +} - added
Input schema / properties / launched_afterAdded value: +{ + "description": "Launch date on or after (YYYY-MM-DD)", + "type": "string" +} - added
Input schema / properties / launched_beforeAdded value: +{ + "description": "Launch date on or before (YYYY-MM-DD)", + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 50, max 500)"New value: +"Max rows returned (default 50, max 500). total always reports the full match count regardless of limit. Output keeps the rows that fit in about 40 KB and says how many it left out" - added
Input schema / properties / object_typeAdded value: +{ + "description": "Object type: payload, rocket_body, debris, or unknown. Use payload to count satellites rather than all cataloged objects. unknown also matches ~340 merge-era rows with no type; payload/rocket_body/debris exclude them", + "type": "string" +} - changed
Input schema / properties / status / descriptionPrevious value: -"Orbital status (e.g. active, decayed)"New value: +"Orbital status: active (on orbit) or decayed; matches every catalog spelling of each"
- Changed
search_screening1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 50, max 500)"New value: +"Max rows returned (default 50, max 500). The response total is the full match count regardless of limit; rows cannot be paged, so answer counting questions from total. Output keeps the rows that fit in about 40 KB and says how many it left out"
- Changed
search_sec_filings1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 50, max 500)"New value: +"Max rows returned (default 50, max 100). The response total is the full match count regardless of limit; rows cannot be paged, so answer counting questions from total. Output keeps the rows that fit in about 40 KB and says how many it left out"
- Changed
search_semantic1 field changed- changed
Input schema / properties / agency / descriptionPrevious value: -"Filter by source agency"New value: +"Filter by source agency, one of: ACMA_AU, CNES_FR, FAA_AST, FCC, ITU, NOAA, NTIA, OFCOM_UK, OTHER, SEC, STATE_AK, STATE_FL, STATE_TX, STATE_VA, UN_OOSA, USPTO"
- Added
search_space_station_authorizations - Changed
search_spectrum1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"Max results (default 50, max 500)"New value: +"Max rows returned (default 50, max 500). The response total is the full match count regardless of limit; rows cannot be paged, so answer counting questions from total. Output keeps the rows that fit in about 40 KB and says how many it left out"
1 tool update
v0.6.6- Changed
milestone_adherence1 field changed- changed
Input schema / properties / classification / descriptionPrevious value: -"Filter by classification: met|met_late|pending|extended|waived|missed|missed_unverified|unknown"New value: +"Filter by classification: met|met_computed|met_late|pending|extended|waived|missed|verification_required|not_deployment_obligation|attribution_ambiguous|attribution_undetermined|unknown. 'missed_unverified' no longer exists — unverified adverse grades are now 'verification_required'"
1 tool update
- Added
milestone_adherence
20 tool updates
v0.3.1- First observed
get_bond_portfolio - First observed
get_entity_dossier - First observed
get_entity_profile - First observed
get_filing_detail - First observed
get_filing_distribution - First observed
get_filing_trends - First observed
get_launch_history - First observed
get_system_status - First observed
get_top_filers - First observed
research - First observed
search_entities - First observed
search_federal_awards - First observed
search_filings - First observed
search_ground_stations - First observed
search_positions - First observed
search_satellites - First observed
search_screening - First observed
search_sec_filings - First observed
search_semantic - First observed
search_spectrum
TDQS
Scored across 22 tools
Most tools target clearly distinct data sources or resources (filings, satellites, ground stations, federal awards, sanctions, SEC filings, SSAL, spectrum, policy positions), so selection is generally unambiguous. Minor overlap exists between research (a parallel meta-search) and the individual search_* tools, and between get_entity_profile and get_entity_dossier, which both present entity-level views.
The set follows a strong snake_case verb_noun convention: get_* for retrieval and search_* for queries across the whole surface. Two outliers break the pattern — 'research' (bare verb, no object) and 'milestone_adherence' (noun phrase) — but these are minor deviations in an otherwise predictable scheme.
At 22 tools the count is on the heavy side for the 16-25 band, but the domain is broad (regulatory filings, satellites, spectrum, awards, sanctions, bonds, milestones), and nearly every tool maps to a distinct source or question type, so they largely earn their place.
The surface gives comprehensive read coverage of a regulatory-intelligence domain: entity profiles and cross-source dossiers, filings, satellites, ground stations, spectrum allocations, federal awards, sanctions screening, SEC signals, bonds, milestones, trends, launches, and system health. For a read-only query server there are no obvious dead ends.
Maintenance
Related MCP Connectors
Digital-regulation tracking and analysis across jurisdictions; STRIDE access is required.
Regulatory filings, XBRL financials and company data from securities regulators worldwide
Verified, tier-0 regulatory data for AI across 850+ official sources and 50+ jurisdictions.
Patent search, USPTO data, patent landscape & pgvector prior-art search for agents.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceSatellite Tracking MCP Server4MIT
- AlicenseBqualityDmaintenanceProvides access to satellite tracking data from N2YO, allowing users to query satellite positions, predict passes, and access TLE data through natural language requests.13MIT
- FlicenseNot gradedqualityDmaintenanceEnables satellite orbital mechanics calculations including visibility predictions, access window analysis, and TLE generation from natural language descriptions. Supports 200+ world cities and multiple orbit types (LEO, MEO, GEO, SSO, Molniya, Polar).-
- AlicenseNot gradedqualityDmaintenanceAI-powered patent search and analysis across 220M+ global patents. Semantic search, prior art discovery, novelty/patentability reports, and patent content retrieval.Apache 2.0