Skip to main content
Glama

Orbit Sentinel MCP Server

CI Release MCP Registry orbit-sentinel-mcp MCP server Go Reference License: MIT MCP Badge

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/mcp

Transport 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/mcp

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

brew install --cask viventine-space/tap/orbit-sentinel-mcp

Installs 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-mcp

Windows: unzip and note the full path to orbit-sentinel-mcp.exe.

Build from source

go install github.com/viventine-space/orbit-sentinel-mcp@latest

Related MCP server: N2YO Satellite Tracker MCP Server

Configure

The server reads two environment variables:

Variable

Purpose

MCP_API_URL

Orbit Sentinel API base URL (https://orbit-sentinel.viventine.com)

MCP_API_KEY

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-mcp

Restart 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.y

Asset 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 tools
get_bond_portfolioA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (default 1)
operatorNoSearch operator name (partial match)
per_pageNoResults per page (default 20, max 100)
entity_idNoFilter by entity UUID
orbit_typeNoFilter by orbit type: NGSO or GSO

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_dossierA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEntity UUID
include_familyNoRoll the dossier up across the entity's corporate family (same legal entity grouped by shared CIK/FRN or matching name). Default false.
family_confidenceNoFamily 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_subsidiariesNoAlso roll up the entity's direct subsidiaries (from authoritative SEC Exhibit-21 / GCAT parent links). Default false.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_profileA
Read-only

Get a detailed entity profile including filing history by agency, related entities (co-filers), linked satellites, and cross-references.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesEntity UUID
filed_afterNoFilter filing stats to filings after this date (YYYY-MM-DD)
filed_beforeNoFilter filing stats to filings before this date (YYYY-MM-DD)

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_detailA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFiling 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

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_distributionA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
agencyNoFilter by agency (FCC, ITU, UN_OOSA)
entity_typeNoFilter by entity type: company, individual, or government
filed_afterNoStart date (YYYY-MM-DD)
filed_beforeNoEnd date (YYYY-MM-DD)

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_launch_historyA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax launches to return (default 20, max 100)
vehicleNoFilter by vehicle type (e.g., Falcon 9, Electron)
entity_idYesEntity UUID to look up launch history for

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_statusA
Read-only

Get system health status including database connectivity, pipeline queue depth, and per-source crawl health.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_filersA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax entities (default 10, max 100)
agencyNoFilter by agency (FCC, ITU, UN_OOSA)
entity_typeNoFilter by entity type: company, individual, or government
filed_afterNoStart date (YYYY-MM-DD)
filed_beforeNoEnd date (YYYY-MM-DD)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_adherenceA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
is_ngsoNoFilter by orbit type: true for NGSO, false for GSO
summaryNoIf true, return aggregate counts by classification/orbit type instead of individual rows
call_signNoFilter by FCC call sign (exact match)
classificationNoFilter 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

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

researchA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
focusNoOptional focus area: filing, entity, spectrum, or general (default: general)
agencyNoFilter all sub-queries by agency (FCC, ITU, UN_OOSA). Recommended for agency-specific questions.
questionYesNatural language question about space regulatory filings, entities, or spectrum

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_entitiesA
Read-only

Search regulatory entities (companies, operators, manufacturers, governments) by name, type, or country. Supports fuzzy name matching.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFuzzy search on entity name and aliases
pageNoPage number (default 1)
typeNoFilter by entity type, one of: company, individual, government, corporation
countryNoFilter by country: an ISO code (US, GB, FR) or a country name (United States, France); the API maps either to the stored spellings
per_pageNoResults per page (default 25, max 100)

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_awardsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 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
naicsNoNAICS code prefix (e.g. 5415 for computer systems design)
sinceNoOnly awards starting on/after this date (YYYY-MM-DD)
agencyNoSubstring match on awarding/sub/funding agency (e.g. NASA, Department of Defense)
entity_idNoFilter by resolved recipient entity UUID
recipientNoSubstring match on recipient/company name (e.g. boeing)
award_typeNoAward type: 'contract' or 'idv'
min_amountNoMinimum award amount in USD (e.g. 1000000000 for $1B+)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

States a specific verb (Search) and resource (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.

Usage Guidelines4/5

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_filingsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch query for filing titles and summaries
pageNoPage number (default 1)
typeNoFilter 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
agencyNoFilter 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
docketNoFilter by docket number (exact match)
statusNoFiling (application) status, one of: ACCEPTED, CANCELLED, COMMENT_PERIOD, DENIED, DISMISSED, EXPIRED, FILED, GRANTED, PUBLIC_NOTICE, UNDER_REVIEW, UNKNOWN, WITHDRAWN
per_pageNoResults per page (default 10, max 100)
entity_idNoApplicant entity UUID (from search_entities): filings this entity filed
source_idNoAgency file number, exact match (e.g. SAT-LOA-20200526-00055, LLO-22-126)
count_onlyNoIf true, return only {total: N} without fetching rows
filed_afterNoMinimum filed date (YYYY-MM-DD)
filed_beforeNoMaximum filed date (YYYY-MM-DD)
source_id_prefixNoFile-number prefix, e.g. SES-LIC, SAT-LOA, SES-T/C or LLO: filters by FCC application type

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose4/5

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.

Usage Guidelines3/5

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_stationsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bandNoSatellite 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
nameNoSubstring match on station name / FCC call sign
nearNoProximity anchor as 'lat,lon' (e.g. '38.9,-77.0'); returns stations within radius_km ordered by distance
limitNoMax 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
stateNoU.S. state or territory code of the station site (e.g. AK, HI); requires source=fcc
sourceNoDataset: '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_byNo'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
operatorNoSubstring match on operator / licensee name
entity_idNoFilter by resolved operator entity UUID (the filing's applicant); fcc or extracted only
radius_kmNoSearch radius in km for near= (default 500)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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

States a specific verb (Search) and resource (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.

Usage Guidelines4/5

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_positionsA
Read-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).

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoWords to find in argument text or executive summaries: every word must appear (in any order), not as an exact phrase
filerNoSubstring match on the filing party's canonical name
limitNoMax results (default 25, max 200)
docketNoFilter by docket number (e.g. '25-306')
stanceNoFilter by overall stance: support|oppose|qualified_support|qualified_opposition|informational
positionNoFilter by per-argument position: support|oppose|modify|neutral
target_partyNoSubstring match on target_party (the entity being addressed or opposed)
argument_typeNoFilter by argument type: legal|technical|economic|policy|procedural

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose5/5

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.

Usage Guidelines4/5

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_satellitesA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubstring match on satellite name
limitNoMax 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
noradNoNORAD catalog id (integer)
cosparNoCOSPAR / international designator (exact match)
statusNoOrbital status: active (on orbit) or decayed; matches every catalog spelling of each
countryNoOperator country code (exact match)
operatorNoSubstring match on operator name (e.g. SpaceX); note many rows use a country code (US, CIS, PRC) as the operator
entity_idNoFilter by resolved operator entity UUID
count_onlyNoReturn only total (the full match count), no rows. Use for any 'how many' question
object_typeNoObject 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_classNoOrbit class (e.g. LEO, MEO, GEO)
decayed_afterNoDecay/reentry date on or after (YYYY-MM-DD); only decayed objects have a decay date, so this also limits results to decayed objects
decayed_beforeNoDecay/reentry date on or before (YYYY-MM-DD)
launched_afterNoLaunch date on or after (YYYY-MM-DD)
launched_beforeNoLaunch date on or before (YYYY-MM-DD)

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3 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.

Purpose5/5

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.

Usage Guidelines5/5

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_screeningA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
listNoSubstring match on screening list source (e.g. SDN, Entity List, ITAR)
nameNoSubstring match on entity or matched name
limitNoMax 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_idNoFilter by resolved entity UUID
min_similarityNoMinimum match similarity 0-1 (e.g. 0.9)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 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.

Purpose5/5

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.

Usage Guidelines4/5

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_filingsA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cikNoSEC CIK number
limitNoMax 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
sinceNoOnly filings on/after this date (YYYY-MM-DD)
tickerNoCompany ticker (e.g. ASTS)
companyNoSubstring match on company name
entity_idNoFilter by resolved entity UUID
form_typeNoSEC form type (e.g. 8-K, 10-Q, 10-K)

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_semanticA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results (default 10, max 50)
queryYesNatural language search query
agencyNoFilter 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_afterNoMinimum filed date (YYYY-MM-DD)
filed_beforeNoMaximum filed date (YYYY-MM-DD)
min_similarityNoMinimum cosine similarity threshold (default 0.5)

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_authorizationsA
Read-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?'.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 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
systemNoSubstring match on system name
foreignNotrue for systems licensed by an administration other than the United States, false for U.S.-licensed systems (and rows with no licensing administration)
grantedNotrue 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_ngsoNotrue for NGSO systems, false for GSO
operatorNoSubstring match on operator name
call_signNoFCC call sign (exact match, case-insensitive)
entity_idNoFilter by resolved operator entity UUID
count_onlyNoReturn only total (the full match count), no rows. Use for any 'how many' question
licensing_adminNoSubstring match on licensing administration (e.g. Canada, United Kingdom)

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description 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.

Purpose5/5

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

States a specific verb (search) and resource (FCC 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.

Usage Guidelines4/5

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_spectrumA
Read-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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax 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
agencyNoFilter by source agency (FCC, ITU, ...)
holderNoSubstring match on the allocation holder (applicant entity)
directionNoFilter by direction (e.g. uplink, downlink)
freq_low_mhzNoLower bound of the band to search, in MHz
polarizationNoFilter by polarization
freq_high_mhzNoUpper bound of the band to search, in MHz

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

States a specific verb and resource: 'Find 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.

Usage Guidelines4/5

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.

  1. 12 tool updatesv0.7.0
    • Changedget_filing_detail1 field changed
      • changedInput schema / properties / id / description
        Previous 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"
    • Changedsearch_entities2 fields changed
      • changedInput schema / properties / country / description
        Previous 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"
      • changedInput schema / properties / type / description
        Previous value: -"Filter by entity type (OPERATOR, MANUFACTURER, GOVERNMENT, etc.)"New value: +"Filter by entity type, one of: company, individual, government, corporation"
    • Changedsearch_federal_awards1 field changed
      • changedInput schema / properties / limit / description
        Previous 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"
    • Changedsearch_filings6 fields changed
      • changedInput schema / properties / agency / description
        Previous 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"
      • addedInput schema / properties / entity_id
        Added value: +{
        +  "description": "Applicant entity UUID (from search_entities): filings this entity filed",
        +  "type": "string"
        +}
      • addedInput schema / properties / source_id
        Added value: +{
        +  "description": "Agency file number, exact match (e.g. SAT-LOA-20200526-00055, LLO-22-126)",
        +  "type": "string"
        +}
      • addedInput schema / properties / source_id_prefix
        Added value: +{
        +  "description": "File-number prefix, e.g. SES-LIC, SAT-LOA, SES-T/C or LLO: filters by FCC application type",
        +  "type": "string"
        +}
      • changedInput schema / properties / status / description
        Previous 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"
      • changedInput schema / properties / type / description
        Previous 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"
    • Changedsearch_ground_stations6 fields changed
      • changedInput schema / properties / band / description
        Previous 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"
      • changedInput schema / properties / entity_id / description
        Previous 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"
      • addedInput schema / properties / group_by
        Added 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"
        +}
      • changedInput schema / properties / limit / description
        Previous 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"
      • changedInput schema / properties / source / description
        Previous 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)"
      • addedInput schema / properties / state
        Added value: +{
        +  "description": "U.S. state or territory code of the station site (e.g. AK, HI); requires source=fcc",
        +  "type": "string"
        +}
    • Changedsearch_positions1 field changed
      • changedInput schema / properties / q / description
        Previous 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"
    • Changedsearch_satellites8 fields changed
      • addedInput schema / properties / count_only
        Added value: +{
        +  "description": "Return only total (the full match count), no rows. Use for any 'how many' question",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / decayed_after
        Added 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"
        +}
      • addedInput schema / properties / decayed_before
        Added value: +{
        +  "description": "Decay/reentry date on or before (YYYY-MM-DD)",
        +  "type": "string"
        +}
      • addedInput schema / properties / launched_after
        Added value: +{
        +  "description": "Launch date on or after (YYYY-MM-DD)",
        +  "type": "string"
        +}
      • addedInput schema / properties / launched_before
        Added value: +{
        +  "description": "Launch date on or before (YYYY-MM-DD)",
        +  "type": "string"
        +}
      • changedInput schema / properties / limit / description
        Previous 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"
      • addedInput schema / properties / object_type
        Added 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"
        +}
      • changedInput schema / properties / status / description
        Previous value: -"Orbital status (e.g. active, decayed)"New value: +"Orbital status: active (on orbit) or decayed; matches every catalog spelling of each"
    • Changedsearch_screening1 field changed
      • changedInput schema / properties / limit / description
        Previous 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"
    • Changedsearch_sec_filings1 field changed
      • changedInput schema / properties / limit / description
        Previous 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"
    • Changedsearch_semantic1 field changed
      • changedInput schema / properties / agency / description
        Previous 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"
    • Addedsearch_space_station_authorizations
    • Changedsearch_spectrum1 field changed
      • changedInput schema / properties / limit / description
        Previous 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"
  2. 1 tool updatev0.6.6
    • Changedmilestone_adherence1 field changed
      • changedInput schema / properties / classification / description
        Previous 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'"
  3. 1 tool update
    • Addedmilestone_adherence
  4. 20 tool updatesv0.3.1
    • First observedget_bond_portfolio
    • First observedget_entity_dossier
    • First observedget_entity_profile
    • First observedget_filing_detail
    • First observedget_filing_distribution
    • First observedget_filing_trends
    • First observedget_launch_history
    • First observedget_system_status
    • First observedget_top_filers
    • First observedresearch
    • First observedsearch_entities
    • First observedsearch_federal_awards
    • First observedsearch_filings
    • First observedsearch_ground_stations
    • First observedsearch_positions
    • First observedsearch_satellites
    • First observedsearch_screening
    • First observedsearch_sec_filings
    • First observedsearch_semantic
    • First observedsearch_spectrum

TDQS

A4/5.0

Scored across 22 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers