Skip to main content
Glama

NPM-Version

NASA MCP-Server

Ein Model Context Protocol (MCP)-Server für NASA-APIs, der eine standardisierte Schnittstelle für KI-Modelle zur Interaktion mit den zahlreichen Datenquellen der NASA bietet. Dieser Server implementiert die offizielle Model Context Protocol-Spezifikation.

Vielen Dank an die MCP-Community für ihre Unterstützung und Anleitung!

Merkmale

  • Zugriff auf über 20 NASA-Datenquellen über eine einzige, konsistente Schnittstelle

  • Standardisierte Datenformate, optimiert für die KI-Nutzung

  • Automatische Parametervalidierung und Fehlerbehandlung

  • Ratenbegrenzungsverwaltung für NASA-API-Schlüssel

  • Umfassende Dokumentation und Beispiele

  • Unterstützung für verschiedene NASA-Bildformate

  • Datenkonvertierung und -formatierung für LLM-Kompatibilität

  • Plattformübergreifende Unterstützung (Windows, macOS, Linux)

Related MCP server: NASA APOD MCP Server

Haftungsausschluss

Dieses Projekt steht in keiner Verbindung zur NASA (National Aeronautics and Space Administration) oder ihren Tochtergesellschaften oder verbundenen Unternehmen und wird von diesen auch nicht unterstützt. Es handelt sich um eine unabhängige Implementierung, die auf die öffentlich verfügbaren APIs der NASA zugreift. Alle verwendeten NASA-Daten sind öffentlich verfügbar und unterliegen den Datennutzungsrichtlinien der NASA.

Installation

Ausführen mit npx

env NASA_API_KEY=YOUR_API_KEY npx -y @programcomputer/nasa-mcp-server@latest

Sie können den API-Schlüssel auch als Befehlszeilenargument übergeben:

npx -y @programcomputer/nasa-mcp-server@latest --nasa-api-key=YOUR_API_KEY

Verwenden von SuperGateway für Server-Sent Events (SSE)

Sie können SuperGateway für Server-Sent Events (SSE) verwenden.

Die Entwickler des NASA-MCP-Servers unterstützen das SuperGateway-Repository NICHT. Diese Informationen dienen ausschließlich der Implementierung von SSE-Funktionen nach eigenem Ermessen.

Manuelle Installation

# Clone the repository
git clone https://github.com/ProgramComputer/NASA-MCP-server.git

# Install dependencies
cd NASA-MCP-server
npm install

# Run with your API key
NASA_API_KEY=YOUR_API_KEY npm start

Ausführen auf Cursor

Cursor konfigurieren 🖥️ Hinweis: Erfordert Cursor-Version 0.45.6+

So konfigurieren Sie den NASA MCP-Server im Cursor:

Erstellen oder bearbeiten Sie eine mcp.json Datei in Ihrem Cursor-Konfigurationsverzeichnis mit folgendem Inhalt:

{
  "mcpServers": {
    "nasa-mcp": {
      "command": "npx",
      "args": ["-y", "@programcomputer/nasa-mcp-server@latest"],
      "env": {
        "NASA_API_KEY": "your-api-key"
      }
    }
  }
}

Ersetzen Sie your-api-key durch Ihren NASA-API-Schlüssel von https://api.nasa.gov/ .

Starten Sie Cursor nach dem Hinzufügen der Konfiguration neu, um die neuen NASA-Tools anzuzeigen. Der Composer Agent verwendet bei Bedarf automatisch NASA MCP für raumbezogene Abfragen.

Umgebungsvariablen

Der Server kann mit den folgenden Umgebungsvariablen konfiguriert werden:

Variable

Beschreibung

NASA_API_KEY

Ihr NASA-API-Schlüssel (erhältlich unter api.nasa.gov)

Enthaltene NASA-APIs

Dieser MCP-Server integriert die folgenden NASA-APIs:

  1. NASA Open API (api.nasa.gov):

    • APOD (Astronomiebild des Tages)

    • EPIC (Earth Polychromatic Imaging Camera)

    • DONKI (Weltraumwetterdatenbank mit Meldungen, Wissen und Informationen)

    • Insight (Mars-Wetterdienst)

    • Mars Rover Fotos

    • NEO (Webdienst für erdnahe Objekte)

    • EONET (Erdbeobachtungs- und Naturereignis-Tracker)

    • TLE (Zweilinienelement)

    • NASA-Bild- und Videobibliothek

    • Exoplaneten-Archiv

    • NASA Sounds API (Beta)

    • POWER (Vorhersage der weltweiten Energieressourcen)

  2. JPL Solar System Dynamics API (ssd-api.jpl.nasa.gov):

    • SBDB (Small-Body-Datenbank)

    • SBDB-Anflugdaten

    • Feuerballdaten

    • Scout-API

  3. Erddaten-APIs :

    • GIBS (Global Imagery Browse Services)

    • CMR (Common Metadata Repository) – Erweitert mit erweiterten Suchfunktionen

    • EPIC (Earth Polychromatic Imaging Camera)

    • FIRMS (Feuerinformations- und Ressourcenmanagementsystem)

API-Methoden

Jede NASA-API wird über standardisierte MCP-Methoden bereitgestellt:

APOD (Astronomiebild des Tages)

{
  "method": "nasa/apod",
  "params": {
    "date": "2023-01-01", // Optional: YYYY-MM-DD format
    "count": 5, // Optional: Return a specified number of random images
    "thumbs": true // Optional: Return URL of video thumbnail
  }
}

Mars Rover Fotos

{
  "method": "nasa/mars-rover",
  "params": {
    "rover": "curiosity", // Required: "curiosity", "opportunity", or "spirit"
    "sol": 1000, // Either sol or earth_date is required
    "earth_date": "2023-01-01", // YYYY-MM-DD format
    "camera": "FHAZ" // Optional: Filter by camera type
  }
}

Erdnahe Objekte

{
  "method": "nasa/neo",
  "params": {
    "start_date": "2023-01-01", // Required: YYYY-MM-DD format
    "end_date": "2023-01-07" // Required: YYYY-MM-DD format (max 7 days from start)
  }
}

GIBS (Global Imagery Browse Services)

{
  "method": "nasa/gibs",
  "params": {
    "layer": "MODIS_Terra_CorrectedReflectance_TrueColor", // Required: Layer ID
    "date": "2023-01-01", // Required: YYYY-MM-DD format
    "format": "png" // Optional: "png" or "jpg"
  }
}

POWER (Vorhersage der weltweiten Energieressourcen)

{
  "method": "nasa/power",
  "params": {
    "parameters": "T2M,PRECTOTCORR,WS10M", // Required: Comma-separated list
    "community": "re", // Required: Community identifier
    "latitude": 40.7128, // Required: Latitude
    "longitude": -74.0060, // Required: Longitude
    "start": "20220101", // Required: Start date (YYYYMMDD)
    "end": "20220107" // Required: End date (YYYYMMDD)
  }
}

Eine vollständige Dokumentation aller verfügbaren Methoden und Parameter finden Sie in der API-Referenz im Verzeichnis /docs .

Protokollierungssystem

Der Server beinhaltet eine umfassende Protokollierung:

  • Betriebsstatus und -fortschritt

  • Leistungsmetriken

  • Ratenbegrenzungsverfolgung

  • Fehlerbedingungen

  • Validierung anfordern

Beispielprotokollmeldungen:

[INFO] NASA MCP Server initialized successfully
[INFO] Processing APOD request for date: 2023-01-01
[INFO] Fetching Mars Rover data for Curiosity, sol 1000
[WARNING] Rate limit threshold reached (80%)
[ERROR] Invalid parameter: 'date' must be in YYYY-MM-DD format

Sicherheitsüberlegungen

Dieser MCP-Server implementiert bewährte Sicherheitsmethoden gemäß den Model Context Protocol-Spezifikationen:

  • Eingabevalidierung und -bereinigung mithilfe von Zod-Schemata

  • Keine Ausführung von beliebigem Code

  • Schutz vor Command Injection

  • Richtige Fehlerbehandlung zur Vermeidung von Informationsverlusten

  • Ratenbegrenzung und Timeout-Kontrollen für API-Anfragen

  • Kein dauerhafter Zustand, der über Sitzungen hinweg ausgenutzt werden könnte

Entwicklung

# Clone the repository
git clone https://github.com/ProgramComputer/NASA-MCP-server.git

# Install dependencies
npm install

# Copy the example environment file and update with your API keys
cp .env.example .env

# Build the TypeScript code
npm run build

# Start the development server
npm run dev

# Run tests
npm test

Testen mit MCP Inspector

Der NASA MCP-Server enthält ein Skript, das Ihnen beim Testen der APIs mit dem MCP Inspector hilft:

# Run the provided test script
./scripts/test-with-inspector.sh

Dies wird:

  1. Erstellen Sie das Projekt, um sicherzustellen, dass die neuesten Änderungen enthalten sind

  2. Starten Sie den MCP Inspector mit dem laufenden NASA MCP-Server

  3. Ermöglicht Ihnen, alle NASA-APIs interaktiv zu testen

Beispiel-Testanfragen

Das Repository enthält Beispieltestanforderungen für jede API, die Sie kopieren und in den MCP Inspector einfügen können:

# View the example test requests
cat docs/inspector-test-examples.md

Ausführliche Beispiele finden Sie im Dokument „Inspector Test Examples“ .

MCP-Client-Nutzung

Dieser Server folgt dem offiziellen Model Context Protocol. Hier ist ein Beispiel für die Verwendung mit dem MCP SDK:

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { HttpClientTransport } from "@modelcontextprotocol/sdk/client/http.js";

const transport = new HttpClientTransport({
  url: "http://localhost:3000",
});

const client = new Client({
  name: "mcp-client",
  version: "1.0.0",
});

await client.connect(transport);

// Example: Get today's Astronomy Picture of the Day
const apodResult = await client.request({
  method: "nasa/apod", 
  params: {}
});

// Example: Get Mars Rover photos
const marsRoverResult = await client.request({
  method: "nasa/mars-rover",
  params: { rover: "curiosity", sol: 1000 }
});

// Example: Search for Near Earth Objects
const neoResults = await client.request({
  method: "nasa/neo",
  params: {
    start_date: '2023-01-01',
    end_date: '2023-01-07'
  }
});

// Example: Get satellite imagery from GIBS
const satelliteImage = await client.request({
  method: "nasa/gibs",
  params: {
    layer: 'MODIS_Terra_CorrectedReflectance_TrueColor',
    date: '2023-01-01'
  }
});

// Example: Use the new POWER API
const powerData = await client.request({
  method: "nasa/power",
  params: {
    parameters: "T2M,PRECTOTCORR,WS10M",
    community: "re",
    latitude: 40.7128,
    longitude: -74.0060,
    start: "20220101",
    end: "20220107"
  }
});

Beitragen

  1. Forken Sie das Repository

  2. Erstellen Sie Ihren Feature-Zweig

  3. Tests ausführen: npm test

  4. Senden einer Pull-Anfrage

Lizenz

ISC-Lizenz – Einzelheiten finden Sie in der Lizenzdatei

Available Tools

32 tools
jpl_cadJPL close approachesC
Read-onlyIdempotent

Asteroid and comet close approaches to the planets, past and future, from the JPL SBDB Close-Approach Data API.

ParametersJSON Schema
NameRequiredDescriptionDefault
desNoOnly this object (designation).
neoNoLimit to NEOs (default true upstream).
spkNoOnly this object (SPK-ID).
bodyNoClose-approach body (Earth, Mars, ALL, ...). Default Earth.
sortNoSort field, prefix - for descending. Default date.
h_maxNoMaximum absolute magnitude H.
h_minNoMinimum absolute magnitude H.
limitNoMaximum number of records (1-1000).
date_maxNoEnd date (YYYY-MM-DD, now, or +/-days). Default +60.
date_minNoStart date (YYYY-MM-DD, now, or +/-days). Default now.
dist_maxNoMaximum approach distance, e.g. 0.05 (au) or 10LD. Default 0.05 au.
dist_minNoMinimum approach distance.
fullnameNoInclude full object names.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds almost nothing beyond naming the source and temporal scope; it does not disclose that results default to Earth-bound approaches within 60 days, which is meaningful behavior for an open-world query.

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?

A single front-loaded sentence with no filler or redundancy. It is efficient, though it is arguably too terse to carry any real signal for a 13-parameter tool.

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?

Given 13 optional parameters, no output schema, and an open-world query, the description is thin. The schema documents defaults and formats, but nothing tells the agent what the response contains (record fields, distance units in output) or how the heavily parameterized filtering composes.

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% across all 13 parameters, including defaults, units, and patterns, so the schema does the heavy lifting. The description contributes no additional parameter meaning, which is the baseline-3 case.

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 concrete resource (asteroid/comet close approaches to planets), the temporal scope (past and future), and the upstream source (JPL SBDB Close-Approach Data API). It does not explicitly distinguish itself from the sibling jpl_sbdb beyond the 'close approaches' framing, so it falls short of a 5.

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 when-to-use guidance, no prerequisites, and no mention of alternatives such as jpl_sbdb for general small-body lookups. The agent must infer that this is the close-approach query tool from the description text alone.

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

jpl_fireballJPL fireball eventsB
Read-onlyIdempotent

Fireball (bolide) events reported by US Government sensors, from the JPL Fireball API.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of events (1-1000).
req_altNoOnly events with an altitude.
req_locNoOnly events with a location.
req_velNoOnly events with a velocity.
vel_maxNoMaximum velocity (km/s).
vel_minNoMinimum velocity (km/s).
date_maxNoLatest event date (YYYY-MM-DD).
date_minNoEarliest event date (YYYY-MM-DD).
energy_maxNoMaximum total radiated energy (1e10 J).
energy_minNoMinimum total radiated energy (1e10 J).
impact_e_maxNoMaximum estimated impact energy (kt).
impact_e_minNoMinimum estimated impact energy (kt).
req_vel_compNoOnly events with velocity components.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds the data provenance (US Government sensors), which is useful context, but says nothing about return format, ordering, or pagination behavior for a 13-parameter query 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?

A single efficient sentence with the resource and source front-loaded. Nothing is wasted, though it is arguably too short to be maximally useful.

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?

Annotations cover safety and the schema fully documents parameters, but for a tool with 13 filter parameters and no output schema the description never hints at the filtering/faceting capability an agent would need to know it can narrow results. Adequate but with a clear 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% with all 13 parameters individually documented, so the schema does the heavy lifting. The description adds no additional meaning about filters, ranges, or the date/velocity/energy semantics beyond what the schema already states.

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 resource (fireball/bolide events) and names the data source (JPL Fireball API) and provenance (US Government sensors). It is clearly distinct from orbital-element siblings like jpl_sbdb or jpl_horizons, though the verb is implicit rather than stated.

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 on when to use this tool versus alternatives, and no mention of the rich filtering capability that would be the main reason to select it. The agent must infer usage entirely from the name and schema.

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

jpl_horizonsJPL Horizons ephemeridesC
Read-onlyIdempotent

Ephemerides and object data for solar-system bodies from the JPL Horizons API (GET).

ParametersJSON Schema
NameRequiredDescriptionDefault
CENTERNoCoordinate center, e.g. '500@399' (geocentric).
formatNoResponse format.json
COMMANDYesTarget, e.g. '499' (Mars), '1;' (Ceres), 'C/2020 F3'.
OBJ_DATANoInclude object data.
OUT_UNITSNoOutput units for vector/element tables.
STEP_SIZENoStep size, e.g. '1d' or '1h'.
STOP_TIMENoStop time, e.g. '2024-01-02'.
EPHEM_TYPENoEphemeris type.
MAKE_EPHEMNoGenerate an ephemeris.
QUANTITIESNoObserver quantities, e.g. 'A' or '1,2,20,23'.
START_TIMENoStart time, e.g. '2024-01-01'.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered. The description adds essentially nothing beyond corroborating the GET/read nature; it does not mention rate limits, that MAKE_EPHEM must be set to get an ephemeris, or response size characteristics.

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?

A single efficient sentence with the resource front-loaded and no filler. It is appropriately sized, though it is arguably too terse for an 11-parameter NASA API tool.

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

Completeness2/5

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

This is a complex tool with 11 parameters, 5 enums, and no output schema, yet the description never explains how the parameters combine (e.g., MAKE_EPHEM=YES plus EPHEM_TYPE to get an ephemeris). Full schema coverage and annotations mitigate somewhat, but the description leaves meaningful behavioral gaps for a tool of this complexity.

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

Parameters3/5

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

Schema description coverage is 100%, with enums and examples on every parameter, so the schema carries the full semantic load. The description adds no parameter guidance beyond what is already documented, which is the baseline-3 case.

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 resource and action: 'Ephemerides and object data for solar-system bodies from the JPL Horizons API (GET)'. An agent can tell it serves Horizons queries, but it does not distinguish itself from the closely related sibling jpl_horizons_file or explain what 'object data' covers versus a pure ephemeris.

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 when-to-use guidance, prerequisites, or exclusions. With siblings like jpl_horizons_file, jpl_sbdb and jpl_cad all serving solar-system body queries, the description offers no routing signal for choosing this tool over them.

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

jpl_horizons_fileJPL Horizons ephemerides (file input)B
Read-onlyIdempotent

Same as jpl_horizons, but submits the parameters as a Horizons input file (POST to horizons_file.api).

ParametersJSON Schema
NameRequiredDescriptionDefault
CENTERNoCoordinate center, e.g. '500@399' (geocentric).
formatNoResponse format.json
COMMANDYesTarget, e.g. '499' (Mars), '1;' (Ceres), 'C/2020 F3'.
OBJ_DATANoInclude object data.
OUT_UNITSNoOutput units for vector/element tables.
STEP_SIZENoStep size, e.g. '1d' or '1h'.
STOP_TIMENoStop time, e.g. '2024-01-02'.
EPHEM_TYPENoEphemeris type.
MAKE_EPHEMNoGenerate an ephemeris.
QUANTITIESNoObserver quantities, e.g. 'A' or '1,2,20,23'.
START_TIMENoStart time, e.g. '2024-01-01'.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the transport detail (POST to horizons_file.api), which is useful but not behaviorally rich, and says nothing about the expected payload structure 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?

A single tight sentence with the distinguishing constraint front-loaded; no filler. It is efficiently sized, though its brevity is partly what leaves the file-format payload unexplained.

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?

For an 11-parameter tool with full schema coverage and no output schema, the description is barely adequate. The one genuinely distinguishing feature – what a 'Horizons input file' payload must contain – is asserted but never described, relying entirely on the sibling 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 description coverage is 100% with 11 documented parameters and 5 enums, so the schema carries the semantic burden. The description adds no parameter-level meaning beyond what the schema provides, making the 3 baseline correct.

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?

The description identifies the resource (JPL Horizons ephemerides) and precisely differentiates it from its sibling, stating it is 'same as jpl_horizons, but submits the parameters as a Horizons input file'. An agent can tell the two apart by the submission mechanism, though the core verb (query/fetch) is implied via the cross-reference rather than stated directly.

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 'but submits ... as a Horizons input file' clause implies the scenario for choosing this over jpl_horizons (file-based input), but it never explicitly states when to prefer one over the other or any prerequisites. Usage is inferable from the sibling comparison but not spelled out.

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

jpl_jd_calJPL Julian date converterB
Read-onlyIdempotent

Convert between Julian dates and calendar dates (UTC) with the JPL JD-Calendar API.

ParametersJSON Schema
NameRequiredDescriptionDefault
cdNoCalendar date (UTC) to convert to a Julian date.
jdNoJulian date to convert to a calendar date.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is fully covered. The description only adds the '(UTC)' timezone and API name, but says nothing about return format, error behavior, or whether both params may be sent simultaneously.

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?

A single front-loaded sentence that states verb, resource, timezone, and API with zero filler. Nothing can be trimmed without losing 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?

For a simple two-param converter with full schema coverage and no output schema, the description is close to adequate. However it omits the interaction rule between the two optional parameters, which an agent needs in order to invoke the tool 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%, so both parameters are already documented by the schema patterns and descriptions. The description adds no syntax, format, or mutual-exclusivity detail 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 ('Convert between') and specific resources ('Julian dates and calendar dates (UTC)'), and names the backing API. This is unambiguous and no sibling tool overlaps the date-conversion domain, so differentiation is implicitly satisfied.

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?

The description gives no when-to-use context and, critically, no guidance on which parameter to supply. Since both 'cd' and 'jd' are optional and non-required, an agent gets no help deciding whether to provide one or both, or what happens with neither.

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

jpl_mission_designJPL small-body mission designA
Read-onlyIdempotent

Ballistic mission options to asteroids and comets from the JPL Small-Body Mission Design API. Object mode (des, spk or sstr) returns the pre-computed mission options stored for one object (launch and arrival dates, V-infinity, time of flight). List mode returns the most accessible small bodies for the given launch years, ranked by crit, with optional SBDB filters. Porkchop-plot maps (mode M) and mission-extension searches (mode T) are not exposed.

ParametersJSON Schema
NameRequiredDescriptionDefault
desNoObject mode: designation, e.g. 2012 TC4 or 433.
limNoList mode: how many accessible objects to return (1-200).
spkNoObject mode: SPK-ID, e.g. 2000433.
critNoList mode: optimality criterion. 1 min departure V-infinity (default), 2 min arrival V-infinity, 3 min total delta-V, 4-6 the same with minimum time of flight first.
sstrNoObject mode: search string (name, designation or SPK-ID), e.g. apophis.
yearNoList mode: launch year(s), from the current year up to 20 years ahead. JPL defaults to the next five years.
classNoObject mode: orbit class as a name instead of the three-letter code.
sb_nsNoList mode: numbered (n) or unnumbered (u) objects only.
sb_satNoList mode: only objects with at least one known satellite.
sb_kindNoList mode: asteroids (a) or comets (c) only.
sb_classNoList mode: orbit class code(s), e.g. APO or MBA,OMB (case-sensitive).
sb_groupNoList mode: NEOs or PHAs only.
sb_xfragNoList mode: exclude comet fragments.

TDQS

A4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint), so the bar is lower. The description adds real context: object mode returns pre-computed stored options rather than computing on demand, list mode is ranked by crit, and two API modes are deliberately unexposed. It does not discuss rate limits or result-size behavior for list mode.

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 tight sentences, front-loaded with the API identity, then mode behavior, then explicit exclusions. No filler and nothing repeated from the schema verbatim.

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, zero-required, read-only tool with no output schema, the description covers the mode selection that the flat schema cannot express and rules out two unimplemented modes. Return contents are named for object mode but list-mode record fields (other than crit ranking) are left implicit, which is a minor 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 coverage is 100%, so every parameter is already documented in the schema, making 3 the baseline. The description reinforces the mode split (which params belong to object vs list mode) and notes that JPL defaults year to the next five years, but it does not clarify the mutually exclusive nature of des/spk/sstr or how list-mode filters combine.

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: ballistic mission options to asteroids and comets from the JPL Small-Body Mission Design API, then enumerates its two operating modes (object vs list). An agent can tell what it returns (launch/arrival dates, V-infinity, time of flight) without opening the schema. It never names a sibling tool, so it is clear but not explicitly differentiated from jpl_scout or jpl_horizons.

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?

Clear routing logic: use object mode (des/spk/sstr) for one stored object and list mode for ranked accessible bodies by launch year. It explicitly rules out unsupported work by stating porkchop maps (mode M) and mission-extension searches (mode T) are not exposed, which prevents wasted calls. No guidance on when to prefer this over the neighboring mission/accessibility siblings.

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

jpl_nhatsJPL NHATS human-accessible NEOsB
Read-onlyIdempotent

Near-Earth objects accessible to human missions (NHATS): a constrained summary list, or one object by des/spk.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNoMaximum absolute magnitude H (16-30).
dvNoMaximum total delta-V in km/s (4-12).
desNoObject designation, e.g. 99942 (object mode).
durNoMaximum total mission duration in days (60-450).
occNoMaximum orbit condition code (0-8).
spkNoObject SPK-ID (object mode).
plotNoInclude a base64 plot (object mode; large).
stayNoMinimum stay at the NEO in days (8, 16, 24 or 32).
launchNoLaunch window.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered externally. The description adds only a light behavioral note that the list is 'constrained' and that object mode exists; it says nothing about filtering behavior, result size, or the cost of the plot option beyond what the schema notes.

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?

A single front-loaded sentence with no filler. It is efficient, though the deliberately terse phrasing leaves useful detail (mode switching rules) on the table.

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?

For a 9-parameter, no-required-arg tool with a rich schema but no output schema, the description should clarify how filters apply only in summary mode and how des/spk trigger object mode. It gestures at the two modes but does not fully explain the parameter-to-mode relationship.

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% across all 9 parameters, so the schema already documents ranges, enums, and modes (des/spk for object mode). The description only echoes the des/spk names and adds no syntax or interaction detail, 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 resource (NHATS-accessible NEOs) and verb-ish operation (list or fetch one by des/spk), which is enough to distinguish it from nearby siblings like jpl_neo and jpl_scout. It is clear but does not explicitly contrast itself with those siblings.

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?

The description notes two modes ('constrained summary list, or one object by des/spk') but gives no when-to-use guidance, no prerequisites, and never names an alternative tool for comparison. The mode distinction reads as capability, not usage direction.

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

jpl_periodic_orbitsJPL three-body periodic orbitsC
Read-onlyIdempotent

Periodic orbits (halo, DRO, Lyapunov, ...) in three-body systems from the JPL Three-Body Periodic Orbits database.

ParametersJSON Schema
NameRequiredDescriptionDefault
sysYesThree-body system, e.g. earth-moon, sun-earth, mars-phobos.
librNoLibration point 1-5 (required by some families).
branchNoBranch (required by some families), e.g. N or S.
familyYesOrbit family, e.g. halo, dro, lyapunov, vertical, axial, butterfly.
stabmaxNoMaximum stability index.
stabminNoMinimum stability index.
jacobimaxNoMaximum Jacobi constant.
jacobiminNoMinimum Jacobi constant.
periodmaxNoMaximum period.
periodminNoMinimum period.
periodunitsNoUnits for periodmin/periodmax.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds no behavioral context beyond that—no mention of result volume, pagination, or how the database's optional family-dependent parameters behave.

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?

A single front-loaded sentence with no filler; the resource and source are stated immediately and the family examples are compact.

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

Completeness2/5

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

With 11 parameters (9 optional filters) and no output schema, the description is too thin: it never explains that libr/branch are conditionally required by certain families, nor how the numeric range filters combine. Much of what an agent needs to call this correctly must be reconstructed from the schema alone.

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 every one of the 11 parameters is already documented with examples, ranges and enums. The description adds no syntax, unit, or semantic detail beyond the schema, so 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 the resource (periodic orbits in three-body systems) with concrete family examples and names the authoritative source database. It is distinguishable from siblings like jpl_horizons or jpl_mission_design, though the retrieval verb is implicit rather than explicit.

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 on when to use this tool versus alternatives such as jpl_horizons or jpl_mission_design, and no prerequisites or exclusions are stated. The agent must infer applicability from the resource name alone.

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

jpl_sbdbJPL Small-Body Database lookupB
Read-onlyIdempotent

Orbital and physical data for one asteroid or comet from the JPL Small-Body Database (SBDB).

ParametersJSON Schema
NameRequiredDescriptionDefault
cadNoDEPRECATED alias for ca_data.
desNoPrimary designation or IAU number.
satNoInclude satellite data.
spkNoSPK-ID of the object.
sstrNoSearch string: name, designation or number (e.g. Ceres, 433, 2019 OK).
ca_bodyNoLimit close approaches to this body (e.g. Earth); needs ca_data.
ca_dataNoInclude close-approach data.
vi_dataNoInclude Sentry virtual-impactor data.
phys_parNoInclude physical parameters.
discoveryNoInclude discovery circumstances.
full_precNoFull-precision orbital elements.
alt_orbitsNoInclude alternate orbits.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, openWorld, idempotent, and non-destructive, covering the safety profile. The description adds only the single-object scope, and omits whether an identifier is mandatory, how missing objects are reported, or the deprecated-flag 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?

A single front-loaded sentence with no filler. Every word carries information about resource, scope, and source.

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

Completeness2/5

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

For a 12-parameter tool with no required fields and no output schema, the description is far too thin: it never says how to identify the object (sstr/des/spk) or how the boolean include-flags interact. An agent would have to reverse-engineer invocation from the schema alone.

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 12 parameters are already documented, including the deprecation of 'cad'. The description adds no parameter syntax or interaction detail (e.g. that ca_body needs ca_data), so 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 resource (orbital and physical data) and scope (one asteroid or comet) from a named database, so the agent knows what it gets. It does not differentiate from siblings such as jpl_sentry, jpl_cad, or jpl_horizons, which surface overlapping small-body data.

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?

There is no when-to-use guidance, no mention of prerequisites (e.g. that an identifier must be supplied), and no routing to alternatives like jpl_horizons or jpl_sentry. The agent must infer usage entirely.

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

jpl_scoutJPL Scout NEOCP hazard assessmentB
Read-onlyIdempotent

JPL Scout trajectory analysis and hazard assessment for unconfirmed objects on the Minor Planet Center NEO Confirmation Page.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoObject mode: include the observation file as a list or in MPC format.
plotNoObject mode: base64 plots to include: el (elements), ca (close approach), sr (systematic ranging), colon-separated.
tdesNoNEOCP temporary designation (object mode).
limitNoList mode: return at most this many objects. Applied by this server; Scout has no limit parameter.
orbitsNoObject mode: include sampled orbits.
n_orbitsNoObject mode: number of sampled orbits (1-1000).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds the useful context that the objects are unconfirmed NEOCP entries (implying unstable/short-lived data), but says nothing about response shape, plot encoding, or compute cost of sampling orbits.

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?

A single front-loaded sentence that identifies the domain, the data source, and the analytical output with zero filler.

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

Completeness2/5

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

With no output schema and a dual-mode design (list mode via limit vs object mode via tdes/file/plot/orbits), the description should explain the two invocation modes and what each returns. It never mentions modes at all, leaving an agent to infer everything from parameter names.

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 six parameters are already documented, including the list/object mode distinctions and enum constraints. The description adds no parameter detail beyond what the schema provides, which is the expected baseline.

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?

Specific verb+resource ('trajectory analysis and hazard assessment') applied to a specific target set ('unconfirmed objects on the NEOCP'). It is clearly distinct from confirmed-object siblings like jpl_sentry or jpl_sbdb, though it never names those siblings to sharpen the boundary.

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 statement of when to use this tool versus jpl_sentry, jpl_nhats, or jpl_sbdb, and no mention of prerequisites (e.g., that NEOCP objects are unconfirmed and may vanish). The implicit list-vs-object mode split is left entirely to the schema.

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

jpl_sentryJPL Sentry impact riskB
Read-onlyIdempotent

Earth impact risk assessments from JPL Sentry: summary table, one object, virtual impactors, or removed objects.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoVirtual-impactor mode: all VIs (combine with ip_min/ps_min/h_max to narrow).
desNoObject mode: designation, e.g. 29075 or 2011 AG5.
spkNoObject mode: SPK-ID.
h_maxNoSummary/VI mode: maximum absolute magnitude H.
limitNoReturn at most this many records from list modes. Applied by this server: Sentry has no limit parameter.
ip_minNoSummary/VI mode: minimum impact probability, e.g. 1e-5.
ps_minNoSummary/VI mode: minimum Palermo Scale value, e.g. -3.
removedNoList objects removed from Sentry.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the enumeration of result modes, which is modest added context; it says nothing about rate limits, upstream Sentry availability, or result size behavior (the server-side limit is only disclosed in the schema).

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

Conciseness4/5

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

A single compact sentence with the source and the mode list front-loaded; nothing is wasted. It is arguably too terse for eight interacting parameters, but there is no filler to trim.

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?

With eight optional parameters, no required fields, no output schema and mutually exclusive mode combinations, the description is only minimally sufficient: it names the modes but does not explain that parameters are mode-gated or how the modes relate to each other. The rich schema compensates, keeping this adequate rather than poor.

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 schema descriptions are unusually informative, including mode labels, examples (e.g. '29075 or 2011 AG5', '1e-5') and the note that limit is applied by this server. The description adds no parameter meaning 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.

Purpose4/5

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

The description states a specific resource (Earth impact risk assessments from JPL Sentry) and enumerates the four output modes: summary table, single object, virtual impactors, removed objects. That is far more than a restated title. It does not, however, differentiate itself from the nearby jpl_scout or jpl_nhats siblings, which also concern impact risk, so an agent cannot route between them from this text alone.

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?

Listing the modes implies which parameter combinations to use, and the schema descriptions carry the actual mode mapping ('Object mode:', 'Summary/VI mode:'), but the description itself gives no when-to-use guidance, no prerequisites, and no statement of when to prefer a sibling such as jpl_scout. 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.

nasa_apodNASA Astronomy Picture of the DayA
Read-onlyIdempotent

NASA's Astronomy Picture of the Day (APOD) from the NASA Science APOD API (science.nasa.gov): the latest picture, one date (1995-06-16 onward), or a date range of up to 100 days. Returns the title, credit, explanation as plain text, image or video URL and page link, and embeds up to max_images pictures. No API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate of the picture (YYYY-MM-DD, 1995-06-16 or later). Defaults to the latest published picture. Cannot be combined with start_date/end_date.
end_dateNoEnd of a date range (YYYY-MM-DD); requires start_date. Defaults to today (UTC) when start_date is given.
max_imagesNoHow many pictures to embed as image content (0-5). Remaining entries are listed by URL.
start_dateNoStart of a date range (YYYY-MM-DD).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld, non-destructive; the description adds genuinely new behavioral facts: no API key is required, the date range is capped at 100 days, and images are embedded up to max_images with the rest listed by URL. It doesn't mention rate limits or error handling, so it's not 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.

Conciseness4/5

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

A single dense sentence, front-loaded with the source and access modes, then the return shape and the no-key note. No filler, though the packing of modes, bounds, and outputs into one sentence makes it slightly heavy.

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 no output schema, the description steps in to describe return fields (title, credit, plain-text explanation, image/video URL, page link) and the embedding behavior. Combined with mode constraints and the no-key note, an agent has everything needed to call it 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 a constraint not present in the schema: the date range cannot exceed 100 days. It also summarizes the date/range interaction, giving real value beyond the schema text.

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 (retrieves NASA's Astronomy Picture of the Day from the NASA Science APOD API) and enumerates the three access modes: latest, single date, or range. This clearly separates it from siblings like nasa_images and nasa_epic.

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?

Explains the three usage modes and the 100-day range limit, plus the 1995-06-16 lower bound. It does not explicitly say when to prefer this over nasa_images or nasa_epic, so it stops short of full alternative routing.

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

nasa_cmrNASA Earthdata CMR searchA
Read-onlyIdempotent

Search NASA's Common Metadata Repository (CMR) for Earth science collections (datasets) or granules (files). Supports identifiers, temporal and spatial filters (bounding_box, point, polygon, line, circle), platform/instrument/project, facets and sorting. Returns a compact normalized envelope by default (response_mode raw for upstream metadata) and a next_cursor for Search After pagination: continue by passing only {"cursor": next_cursor}. Collection matches describe datasets; they do not prove granules exist for a given time or place. No API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
doiNoCollections only: DOI, e.g. 10.5067/GHGMR-4FJ04.
bboxNoCompatibility alias for bounding_box (sent to CMR as bounding_box).
lineNoLine "lon1,lat1,lon2,lat2,...".
pageNoDEPRECATED page-number pagination (CMR page_num). Prefer cursor. Cannot be combined with cursor or offset.
limitNoRecords per page (1-100).
pointNoPoint "lon,lat".
circleNoCircle "lon,lat,radius" with radius in metres (10-6000000).
cursorNonext_cursor from a previous response. Continue with the cursor alone; omitted filters are restored from it.
fieldsNoCompact mode only: normalized fields to return. concept_id is always included. Defaults to all fields except summary.
formatNoUpstream CMR metadata format. json/umm_json support compact output; others are returned raw. dif, dif10, opendata: collections only; stac: granules only.json
offsetNoDEPRECATED offset pagination. Prefer cursor. Cannot be combined with cursor or page.
keywordNoCollections only: free-text keyword search.
polygonNoPolygon "lon1,lat1,...,lon1,lat1": closed, counter-clockwise (CMR rejects clockwise rings).
projectNoProject/campaign short name(s).
versionNoCollection version.
platformNoPlatform short name(s), e.g. Terra.
providerNoProvider ID(s), e.g. POCLOUD, LPCLOUD.
sort_keyNoSort key(s), "-" prefix for descending. Collections: score, usage_score, entry_title, dataset_id, short_name, entry_id, start_date, end_date, platform, instrument, sensor, provider, revision_date, has_granules, create-data-date, ongoing. Granules: start_date, end_date, producer_granule_id, readable_granule_name, granule_ur, revision_date, cloud_cover, day_night_flag, data_size, provider, platform, instrument, sensor, online_only, browsable, entry_title, short_name, version, campaign, project.
temporalNoTemporal range "start,end" in ISO 8601 (date or date-time, UTC assumed). Either side may be empty, e.g. "2020-01-01T00:00:00Z,".
browsableNoOnly records with (true) or without (false) browse imagery.
concept_idNoConcept ID(s). For granule searches a collection concept ID (C...) also selects that collection, as in CMR.
instrumentNoInstrument short name(s), e.g. MODIS.
short_nameNoCollection short name(s).
cloud_coverNoGranules only: cloud cover range "min,max" in percent.
entry_titleNoCollection entry title.
online_onlyNoOnly online (true) or offline (false) records.
search_typeNoSearch collections (datasets) or granules (files).collections
bounding_boxNoBounding box west,south,east,north (lon/lat degrees). west > east crosses the antimeridian (supported by CMR).
cloud_hostedNoCollections only: restrict to cloud-hosted (true) or not (false).
downloadableNoOnly records with (true) or without (false) downloadable data links.
has_granulesNoCollections only: require (true) or exclude (false) collections with granules.
response_modeNocompact (default for json/umm_json): normalized records. raw: upstream metadata as returned (default for other formats).
day_night_flagNoGranules only: DAY, NIGHT, BOTH or UNSPECIFIED.
include_facetsNoInclude CMR v2 facets (counts by keyword, platform, ...).
granule_data_formatNoCollections only: granule data format(s), e.g. netCDF-4.
processing_level_idNoCollections only: processing level(s), e.g. 3, L2.
producer_granule_idNoGranules only: producer granule ID.
collection_concept_idNoGranules only: collection concept ID(s) to search within.
readable_granule_nameNoGranules only: granule name (supports CMR * and ? wildcards).

Output Schema

ParametersJSON Schema
NameRequiredDescription
rawNo
errorNo
facetsNo
formatYes
sourceYes
statusYes
resultsYes
warningsYes
total_hitsYes
next_cursorYes
search_typeYes
retrieved_atYes
response_modeYes
returned_countYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, open-world, non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: compact envelope is the default with raw for upstream metadata, cursor-based Search After pagination semantics, and 'No API key needed' (auth requirement).

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence and each subsequent sentence carries distinct payload (filters, response mode, pagination, caveat, auth). It is dense but every clause earns its place; only the filter enumeration is slightly list-like.

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

Completeness5/5

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

An output schema exists so return values need not be explained, yet the description still clarifies the compact-vs-raw envelope and the next_cursor contract. Combined with the auth note and the granules caveat, an agent has everything needed 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%, so the 39 parameters are fully documented structurally; baseline 3 applies. The description usefully groups the filter families (identifiers, temporal/spatial, platform/instrument/project, facets, sorting) and flags the compact/raw response_mode behavior, but adds no syntax beyond 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 (Search) plus the exact resource (NASA's Common Metadata Repository) and the two search domains (collections/datasets vs granules/files). Among siblings it is the only CMR metadata-search tool, so an agent can place it immediately.

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 practical usage direction: continue pagination by passing only {"cursor": next_cursor}, and warns that collection matches do not prove granules exist for a time/place. It does not name explicit when-not-to-use scenarios, but no sibling tool overlaps enough to require exclusion guidance, so 4 is fair.

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

nasa_donkiNASA DONKI space weatherA
Read-onlyIdempotent

Space Weather Database Of Notifications, Knowledge, Information (DONKI) events by type for up to 30 days at a time, from the NASA CCMC DONKI API (ccmc.gsfc.nasa.gov): solar flares, CMEs and their analyses, geomagnetic storms, interplanetary shocks, SEP, MPC, RBE and HSS events, WSA-ENLIL simulations and notifications. Compact one-line summaries by default; response_mode raw returns the full records. No API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesEvent type: cme, cmea, gst, ips, flr, sep, mpc, rbe, hss, wsa, notifications.
limitNoReturn only the most recent N events. Applied by this server; DONKI has no limit parameter.
endDateNoEnd date (YYYY-MM-DD), at most 30 days after startDate. Defaults to today.
startDateNoStart date (YYYY-MM-DD). With only endDate, 30 days before endDate; with neither, the last 30 days.
response_modeNocompact (default): one line per event with its key fields. raw: the full DONKI records as JSON (large for cme, cmea and wsa).compact

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description still adds real value beyond them: no API key required, the 30-day request ceiling, and that response_mode=raw yields large payloads specifically for cme, cmea and wsa. It stops short of describing pagination or rate-limit behavior, which keeps it out of 5 territory.

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?

A single front-loaded paragraph that names the source and the primary constraint first, then the type list and response modes. It is dense but every clause carries information; the long event-acronym roster is the only slight bloat.

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?

There is no output schema, so the description reasonably covers return shape by explaining compact vs raw. Combined with rich annotations and full schema coverage, an agent has enough to invoke correctly; only the absence of error/empty-result behavior keeps it from 5.

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 five parameters are already documented in the schema, and the description largely restates them (event types, compact vs raw). The 30-day window nuance is the only added semantics, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific resource (DONKI space weather events) with the exact event-type taxonomy and names the upstream source (NASA CCMC DONKI API). An agent can immediately tell this apart from siblings like nasa_neo or jpl_fireball, which cover unrelated datasets.

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 'up to 30 days at a time' window implies a date-range use case, and enumerating the solar-flare/CME/storm event types hints at when the tool applies. However, there is no explicit when-to-use, no alternative named, and no exclusion guidance for an agent choosing among the 30 sibling NASA/JPL tools.

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

nasa_eonetNASA EONET natural eventsB
Read-onlyIdempotent

Natural events (wildfires, storms, volcanoes, ice, ...) from the Earth Observatory Natural Event Tracker. Filters are sent exactly as given; no automatic broadening.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoOnly events active within this many prior days.
limitNoMaximum number of events (1-500).
sourceNoEONET source ID(s), comma-separated, e.g. InciWeb,EO.
statusNoEvent status filter.all
categoryNoEONET category ID(s), comma-separated: e.g. wildfires, severeStorms, volcanoes, seaLakeIce.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral note — filters are passed through verbatim with no automatic broadening — but says nothing about result ordering, pagination, or response shape.

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 short sentences with zero filler; the resource and its scope lead, and the filter-behavior caveat follows. Nothing could be trimmed without losing 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?

For a read-only query tool with fully documented optional parameters and no output schema, the description covers what the tool is but omits how results are returned and how it relates to overlapping siblings. Adequate, but with clear gaps.

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 five parameters (days, limit, source, status, category) are already documented with defaults, ranges, and examples. The description adds no parameter-level detail, 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?

The description names a specific resource (natural events) and its origin (Earth Observatory Natural Event Tracker) with illustrative examples (wildfires, storms, volcanoes, ice). It is clear what the tool returns, though it does not distinguish itself from the similar sibling nasa_firms, which also covers fire/thermal events.

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?

There is no when-to-use guidance, no mention of alternatives among the many NASA siblings, and no indication of when this source is preferable to nasa_firms or nasa_donki. The only guidance given concerns filter strictness, not tool selection.

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

nasa_epicNASA EPIC Earth imageryB
Read-onlyIdempotent

Earth Polychromatic Imaging Camera (DSCOVR) full-disc Earth images for a day: metadata for every image plus a bounded number embedded.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate of the images (YYYY-MM-DD). Defaults to the most recent available day.
collectionNoImage collection.natural
max_imagesNoHow many images to embed (0-3, JPEG). All images are listed with PNG and JPEG URLs.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: every image's metadata is returned while only a bounded number are embedded as JPEGs, which shapes expectations about response size. It says nothing about rate limits or the upstream DSCOVR availability window.

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?

A single front-loaded sentence with a colon-delimited clause that puts the resource first and the return shape second. No filler, though the parenthetical instrument expansion makes it slightly dense to parse.

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?

All three parameters are optional and fully documented in the schema, and the description covers what comes back (full metadata, bounded embeds). With no output schema, it adequately sets expectations for a read-only imagery lookup; only upstream availability caveats are absent.

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 date, collection and max_images are fully documented in the schema, including defaults and the 0-3 bound. The description only vaguely gestures at 'a bounded number embedded' and 'for a day', which the schema states more precisely, so it adds little beyond the structured fields.

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?

Names the specific instrument (Earth Polychromatic Imaging Camera on DSCOVR) and the resource (full-disc Earth images for a day), and states what the response contains: metadata for every image plus a bounded number embedded. It does not explicitly distinguish itself from siblings like nasa_images, nasa_apod or nasa_gibs, but the instrument naming makes the scope identifiable.

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?

There is no when-to-use, when-not-to-use, or alternative-tool guidance. 'For a day' implies the retrieval context, but an agent choosing between nasa_epic, nasa_images and nasa_apod gets no routing help from the description.

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

nasa_exoplanetNASA Exoplanet Archive queryB
Read-onlyIdempotent

Query the NASA Exoplanet Archive through its TAP service (ADQL). Tables use current TAP names such as ps, pscomppars, cumulative and toi.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum rows (1-1000).
orderNoADQL ORDER BY expression, e.g. pl_name.
tableYesTAP table, e.g. ps (Planetary Systems), pscomppars, cumulative (Kepler KOI), toi.
whereNoADQL WHERE condition, e.g. disc_year > 2020 and discoverymethod = 'Transit'.
formatNoResult format.json
selectNoColumns to return (ADQL select list). Defaults to *.

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already declare the full safety profile (readOnly, idempotent, non-destructive, open-world), so the description's marginal burden is low. It usefully adds that access goes through the TAP/ADQL service and that table names must be current, but says nothing about rate limits, result size behavior, or error handling.

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 tight sentences, front-loaded with the core action and service, no filler. The second sentence is slightly redundant with the table parameter description but still earns its place by clarifying valid TAP names.

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?

For a 6-parameter, fully documented query tool with no output schema, the description is adequate but thin. It never states the return shape or that results are tabular rows from the selected columns, and gives no orientation on ADQL restrictions, leaving the agent to infer behavior from the schema alone.

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 every parameter is already documented with examples (ADQL WHERE, ORDER BY, select list, format enum, limit bounds). The description repeats the table-name semantics rather than adding new meaning beyond the schema.

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 (query) and resource (NASA Exoplanet Archive) via a named service (TAP/ADQL), and identifies the table namespace. It distinguishes the tool well from other NASA siblings by pointing at the Exoplanet Archive specifically, though it doesn't name any sibling it complements or overlaps with.

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?

Usage is only implied by the topic: there is no statement of when to reach for this tool versus e.g. jpl_sbdb, jpl_horizons, or the other NASA endpoints. No prerequisites, no exclusions, no alternatives named.

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

nasa_firmsNASA FIRMS active fire detectionsA
Read-onlyIdempotent

Active fire/thermal anomaly detections from NASA FIRMS for a bounding box and 1-5 day window. Requires FIRMS_MAP_KEY (not NASA_API_KEY). The legacy latitude/longitude interface now needs radius_km and is converted to a bbox.

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNoArea as west,south,east,north in decimal degrees (preferred). Antimeridian-crossing boxes are rejected.
dateNoFirst day of the window (YYYY-MM-DD); FIRMS returns [date, date + days - 1]. Omit for the most recent data.
daysNoDAY_RANGE: number of days of detections (1-5).
limitNoMaximum detections returned (1-2000). total_detections reports the full count.
sourceNoFIRMS sensor/product. *_NRT is near real-time, *_SP is standard processing.VIIRS_SNPP_NRT
latitudeNoLegacy area center latitude; requires longitude and radius_km.
longitudeNoLegacy area center longitude; requires latitude and radius_km.
radius_kmNoHalf-width in kilometres of the box built around latitude/longitude (converted to a bbox before querying).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
queryYes
sourceYes
statusYes
columnsYes
warningsYes
detectionsYes
retrieved_atYes
returned_countYes
total_detectionsYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds non-obvious context beyond the annotations: the required FIRMS_MAP_KEY (distinct from NASA_API_KEY) and the fact that the legacy lat/lon interface now requires radius_km and is internally converted to a bbox.

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 dense sentences, front-loaded with purpose, then credential requirement, then the legacy-interface caveat. Every sentence carries information; no filler.

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

Completeness4/5

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

An output schema exists, so return values and pagination need no explanation, and the auth/key requirement is covered. Slight remaining gap: no guidance on choosing among the eight sensor sources beyond the NRT/SP gloss already in the schema.

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 per-parameter baseline is 3. The description earns an extra point by disclosing a cross-parameter dependency the schema only implies locally: latitude/longitude now require radius_km and are converted to a bbox before querying.

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 ('Active fire/thermal anomaly detections from NASA FIRMS') plus the two scoping dimensions (bounding box, 1-5 day window). This clearly separates it from the many sibling tools, none of which deal with fire detections.

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 tells the agent which credential is required and when the legacy lat/lon path applies, which is useful context. It never states when to prefer this tool over an alternative sibling (e.g., nasa_eonet for events) or when-not to use it, so usage is only implied.

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

nasa_gibsNASA GIBS satellite imageryB
Read-onlyIdempotent

Render a Global Imagery Browse Services (GIBS) layer for a date and bounding box as an image (WMS GetMap, EPSG:4326).

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNoArea as west,south,east,north in decimal degrees (EPSG:4326). Defaults to the whole globe.
dateYesImagery date (YYYY-MM-DD).
layerYesGIBS layer identifier, e.g. MODIS_Terra_CorrectedReflectance_TrueColor
formatNoImage format.png
resolutionNoOutput resolution in pixels per degree (default 2, i.e. 720x360 for the whole globe).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds useful protocol context (WMS GetMap, EPSG:4326) and that the output is an image, but says nothing about rate limits, tile capping, or what happens with unsupported layer/date combinations.

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?

A single tight sentence front-loads the verb and resource, then packs protocol and projection into a parenthetical. Nothing is wasted and nothing is buried.

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 correctly states the return type (an image) and the projection, and annotations cover the safety profile. Minor gaps remain around image size limits and whether the layer identifier must be a known GIBS layer, but an agent can call this successfully as written.

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 five parameters are already documented in the schema (bbox format, date format, layer pattern, format enum, resolution default). The description only restates that date and bbox are the inputs, adding no syntax or constraint detail beyond what the schema provides. 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 (Render), resource (GIBS layer), and the underlying mechanism (WMS GetMap, EPSG:4326), so an agent knows exactly what operation this performs. It does not differentiate itself from siblings such as nasa_trek_tile or nasa_images, which an agent choosing between imagery tools would benefit from.

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?

The description gives no when-to-use guidance, no prerequisites, and does not name any alternative among the many NASA/JPL imagery siblings. The agent must infer usage entirely from the layer/date requirement.

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

nasa_imagesNASA Image and Video Library searchB
Read-onlyIdempotent

Search NASA's Image and Video Library. Returns item metadata and URLs, with a bounded number of preview thumbnails embedded.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesFree-text search terms.
pageNoResult page (1-based).
year_endNoLatest year (YYYY).
page_sizeNoResults per page (1-100).
max_imagesNoHow many preview thumbnails to embed (0-5). Every item is listed with its URLs.
media_typeNoRestrict to one media type.
year_startNoEarliest year (YYYY).

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety and idempotency profile is covered. The description adds the useful behavioral fact that results are bounded thumbnails plus metadata URLs, but says nothing about rate limits, auth, or pagination beyond what the schema implies.

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 compact sentences, front-loaded with the action and resource, followed by the return behavior. No filler or redundancy; slightly more detail on distinctions from siblings would still earn its place.

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 and seven parameters, the description does the necessary work of sketching the return shape (metadata, URLs, embedded preview thumbnails), which is the main gap structured data leaves. Routing guidance relative to sibling NASA media tools is the only missing piece.

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 every parameter (q, page, page_size, max_images, media_type, year_start, year_end) is already documented in the schema. The description's only added semantic is that thumbnails are 'bounded', which mirrors the max_images schema entry. Baseline 3 is correct when the schema carries this much weight.

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 (NASA's Image and Video Library) and specifies the return shape (item metadata and URLs, embedded thumbnails). It does not explicitly differentiate itself from media-adjacent siblings like nasa_apod, nasa_eonet, or nasa_gibs, but the resource name is unambiguous.

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 on when to use this tool versus alternatives such as nasa_apod or nasa_eonet, no prerequisites, and no exclusions. An agent must infer usage from the name alone.

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

nasa_insight_weatherNASA InSight Mars weather (historical)A
Read-onlyIdempotent

HISTORICAL DATA ONLY: per-sol Mars surface weather (air temperature, pressure, wind) from NASA's InSight lander at Elysium Planitia. The feed is frozen at the last seven sols it reported (sols 675-681, October 2020) and is no longer updated. Requires NASA_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover readOnly/idempotent/destructive/openWorld, but the description adds genuinely non-structured context: the feed is permanently frozen at a specific sol range and requires NASA_API_KEY. Data staleness and auth requirements are exactly what an agent needs to know and cannot infer from 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?

Two tight sentences with the most important constraint (HISTORICAL DATA ONLY) front-loaded. Every clause earns its place: scope, fields, staleness, sol range, auth.

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 no-parameter, no-output-schema tool, the description covers what it returns (temperature, pressure, wind), where it comes from, why it's static, and what's required to call it. Nothing material 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?

Zero parameters, so there is nothing to document and the baseline is 4. The description appropriately spends its words on scope and freshness rather than inventing parameter guidance.

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 (per-sol Mars surface weather) plus the data source and location (InSight lander, Elysium Planitia). The 'HISTORICAL DATA ONLY' framing immediately distinguishes it from a live-weather tool.

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?

Makes clear when this is appropriate (historical/archival use) and warns that the feed is frozen at sols 675-681 and no longer updated, which is a strong usage signal. It stops short of naming an alternative sibling (e.g., nasa_mars_rover) for current conditions, so it isn't a full when/when-not routing.

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

nasa_mars_roverNASA Mars Rover Photos (retired upstream)A
Read-onlyIdempotent

DEPRECATED: the upstream Mars Rover Photos API (api.nasa.gov/mars-photos) has been returning HTTP 404 "No such app" since at least 2026-09-29. Calls still query it and report the upstream status accurately; no photos are fabricated. Requires NASA_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
solNoMartian sol of the photos. Provide sol or earth_date.
pageNoResult page (25 photos per page).
roverYesRover name.
cameraNoCamera abbreviation, e.g. FHAZ, NAVCAM.
earth_dateNoEarth date of the photos (YYYY-MM-DD). Provide sol or earth_date.
max_imagesNoHow many photos to embed (0-5).

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare read-only, open-world, idempotent, and non-destructive behavior. The description adds context the annotations cannot: that the upstream is dead, that calls still accurately report the upstream status, that no photos are fabricated, and that a NASA_API_KEY is required. This is exactly the extra behavioral disclosure expected.

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 deprecation warning is front-loaded in the first clause, followed by the precise failure mode and the key operational facts. Three compact sentences with no waste.

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 read-only, open-world API tool with a fully documented input schema and no output schema, the description supplies everything an agent needs before calling: deprecation status, upstream behavior, honesty guarantee, and the API key requirement.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all six parameters including the sol/earth_date alternative and the max_images range. The description adds no parameter-level detail beyond that, 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?

The description names the resource (Mars Rover Photos API) and its exact current state (upstream 404 'No such app' since 2026-09-29). It clearly communicates what the tool does (still queries the upstream and reports status) but does not explicitly differentiate itself from any sibling tool, so it stops short of a 5.

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 DEPRECATED label and the 404 detail give strong implicit guidance that this tool should not be selected for photo retrieval. It does not, however, name an alternative tool or state an explicit 'use X instead' condition, which would be needed for a 5.

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

nasa_neoNASA Near Earth Object Web ServiceA
Read-onlyIdempotent

Near-Earth asteroid close approaches from NASA NeoWs: a feed for up to 7 days (defaults to today, UTC) or a single asteroid by ID. Requires NASA_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNoEnd date (YYYY-MM-DD), at most 7 days after start_date. Defaults to start_date.
start_dateNoStart date for the close-approach feed (YYYY-MM-DD). Defaults to today (UTC).
asteroid_idNoLook up one asteroid by its NeoWs ID instead of the date feed.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds two things annotations do not: the auth requirement (NASA_API_KEY) and the hard 7-day window constraint, both of which affect whether a call can succeed.

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?

A single dense sentence that front-loads the resource and enumerates the two modes without filler. It is slightly overloaded with parentheticals, but every clause carries information.

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 some burden for return expectations, and it names what the feed contains (close approaches) and its date scope. Combined with full schema coverage and read-only annotations, an agent has what it needs, though a word on response shape would be ideal.

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 every parameter's format, default and constraint is already documented. The description restates the 7-day limit, today-UTC default and ID-lookup mode rather than adding new syntax or edge-case meaning, so it sits at the baseline for a fully documented schema.

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?

The description names a specific resource and two distinct modes: a close-approach date feed (up to 7 days, default today UTC) and a single-asteroid lookup by ID. That is enough for an agent to know exactly what the tool returns. It does not differentiate itself from orbit/catalog siblings like jpl_cad or jpl_sbdb, which keeps it from a 5.

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?

It clearly explains that asteroid_id selects a single-object lookup 'instead of the date feed', giving an agent the condition for choosing each mode, and states the NASA_API_KEY prerequisite. There are no explicit 'when-not-to-use' rules or named alternative tools, so it stops 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.

nasa_osdr_filesNASA OSDR study filesA
Read-onlyIdempotent

List the data files (with download links) for a NASA Open Science Data Repository (OSDR) study.

ParametersJSON Schema
NameRequiredDescriptionDefault
accession_numberYesOSD study accession number, e.g. 87 or OSD-87.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnly=true, idempotent=true, destructive=false, and openWorld=true, so the safety profile is fully covered. The description adds the one behavioral detail worth knowing (results are file listings with download links), but says nothing about pagination, file counts, or failure modes for unknown accessions.

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?

One sentence, front-loaded with the verb and resource, with the parenthetical scoping the return content. Nothing superfluous.

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 one-parameter, read-only listing tool with no output schema, the description conveys enough: what is returned and how to invoke it. Minor gap in not mentioning behavior for invalid/unknown accession numbers.

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?

With a single parameter and 100% schema description coverage, the schema already documents the accession format and the OSD- prefix pattern. The description adds no parameter detail, so the baseline of 3 is appropriate.

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

Purpose5/5

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

States a specific verb (List) and resource (data files for a NASA OSDR study), and adds the useful scope detail that results include download links. No sibling tool covers OSDR study files, so differentiation is inherent.

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: call it with a study accession when you need that study's files. There is no explicit when-to-use/when-not guidance, no prerequisites, and no 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.

nasa_powerNASA POWER daily point dataB
Read-onlyIdempotent

Daily solar and meteorological data for a point from NASA POWER (Prediction Of Worldwide Energy Resources).

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesEnd date (YYYYMMDD).
startYesStart date (YYYYMMDD).
formatNoResponse format.json
latitudeYesLatitude in decimal degrees.
communityYesUser community: RE (renewable energy), SB (sustainable buildings), AG (agroclimatology).
longitudeYesLongitude in decimal degrees.
parametersYesComma-separated POWER parameters, e.g. T2M,PRECTOTCORR,WS10M.
time_standardNoTime standard for daily values; POWER defaults to LST (local solar time) when omitted.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is fully covered. The description adds little beyond that—it does not mention timeouts, rate limits, or that the data is model-derived/reanalysis rather than observational. With annotations carrying the behavioral burden, a 3 is fair.

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?

A single front-loaded sentence with zero filler that states the resource, granularity, and source. Nothing is wasted.

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?

With 8 parameters and no output schema, the description is thin on what an agent receives back—no mention of returned fields, units, or response shape beyond 'daily'. The schema fully covers inputs, so this is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100%, with every parameter documented including enums for community, format, and time_standard. The description adds no parameter meaning (e.g., valid POWER parameter names, date range limits), so the baseline of 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?

The description names a specific resource (daily solar and meteorological data), its granularity (daily), and its scope (a point), plus expands the POWER acronym. It is clearly distinguishable from sibling tools, though it does not explicitly contrast itself with any of them.

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?

There is no when-to-use guidance, no mention of prerequisites such as which communities map to which parameter sets, and no indication of when an agent should prefer a different NASA dataset tool. Usage is only implied by the tool name and domain.

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

nasa_ssc_locationsSatellite Situation Center spacecraft locationsA
Read-onlyIdempotent

Positions of spacecraft (and the Moon and Sun) over a time range from the NASA Satellite Situation Center (SSCWeb), in geophysical coordinate systems (GEO, GM, GSE, GSM, SM, GEI). Returns a CSV table per observatory: X/Y/Z in km, latitude/longitude in degrees, local time in hours and radial distance in km. The resolution factor is raised automatically to keep the output bounded. No API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_timeYesEnd time (UTC); at most 366 days after start_time.
start_timeYesStart time (UTC), e.g. 2026-09-29T06:00:00Z; a bare date such as 2026-09-29 means 00:00 UTC.
observatoriesYes1-5 SSC observatory IDs, e.g. ["iss"] or ["mms1", "moon"] (see nasa_ssc_observatories). A comma-separated string also works.
resolution_factorNoReturn every Nth point of each observatory's base resolution (60-720 s). Chosen automatically when omitted to keep the output bounded.
coordinate_systemsNoCoordinate systems (default geo): geo, gm, gse, gsm, sm, geitod, geij2000. A comma-separated string also works.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the description wisely spends its budget elsewhere: it discloses that resolution is auto-raised to bound output, that no API key is required, and the exact per-observatory CSV columns returned. It does not mention error handling or the 366-day ceiling (left to the schema), so it is strong but not exhaustive.

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 compact sentences, front-loaded with the core purpose followed by output format and operational notes; no filler. Slightly dense with coordinate-system enumeration that the schema already carries, but nothing is wasted.

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 steps up by enumerating the returned columns and units (X/Y/Z km, lat/lon degrees, local time, radial distance), which is exactly what an agent needs. Remaining gaps such as pagination, error cases, and size limits are minor for a read-only data 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 description coverage is 100%, so all five parameters are already documented with constraints and examples, setting the baseline at 3. The description restates the coordinate system list and the auto-raised resolution factor but adds no new syntax, format, or interaction guidance beyond 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 ('Positions of spacecraft (and the Moon and Sun) over a time range') sourced from a named provider, and pins down the coordinate systems and return shape. An agent can tell it apart from nasa_ssc_observatories (which it explicitly points to for IDs) and from sibling ephemeris tools like jpl_horizons.

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 context is implied (use it when you need spacecraft/Moon/Sun positions over a time span), and it helpfully routes to nasa_ssc_observatories for observable IDs. However, it never states when NOT to use it or compares it to overlapping siblings such as jpl_horizons or nasa_tle, leaving alternative selection to inference.

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

nasa_ssc_observatoriesSatellite Situation Center spacecraft listA
Read-onlyIdempotent

Spacecraft and other observatories whose locations the NASA Satellite Situation Center (SSCWeb) can compute, with their data time ranges and resolution. Use the IDs with nasa_ssc_locations. No API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoCase-insensitive text to match in the observatory ID or name, e.g. "mms" or "GOES".
active_onNoOnly observatories with location data on this date (YYYY-MM-DD).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, open-world behavior. The description adds useful context beyond that: it states no API key is required (auth) and that results include data time ranges and resolution (output shape). It does not mention pagination or rate limits, but with strong annotation coverage this is a solid contribution.

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, front-loaded with the tool's scope, followed by usage and auth details. Every sentence adds value and there is no redundancy or filler.

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

Completeness4/5

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

For a simple discovery list tool with no output schema, the description covers purpose, output content (time ranges and resolution), usage with the sibling, and auth requirements. It could be more complete by mentioning pagination or result limits, but given the tool's simplicity and rich annotations, it is largely sufficient.

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 fully documents both optional parameters (search and active_on). The description does not add any parameter-specific syntax, format, or matching behavior beyond what the schema provides, so the baseline of 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?

The description clearly identifies the resource (spacecraft and observatories computable by SSCWeb) and what the tool returns (IDs, data time ranges, resolution). It distinguishes itself from the sibling nasa_ssc_locations by telling the agent to use the IDs with that tool, though it uses a noun phrase rather than an explicit 'list' verb.

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?

It names the sibling tool nasa_ssc_locations and gives a concrete usage instruction ('Use the IDs with nasa_ssc_locations'), plus an auth note ('No API key needed'). It does not explicitly state when to call this tool versus other discovery tools, but the linkage to the sibling provides clear routing context.

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

nasa_techportNASA TechPort technology projectsA
Read-onlyIdempotent

NASA's technology project inventory (TechPort): search projects by keyword, or fetch one project with its status, dates, program, technology readiness levels (TRL), lead organization, description and benefits. No API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoSearch mode: how many projects to return (1-50, default 10).
queryNoSearch TechPort technology projects, e.g. "solar sail". Results are ordered by relevance.
project_idNoFetch one project by its TechPort ID, e.g. 94703.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, non-destructive and open-world behavior, so the bar is lower; the description adds a genuinely useful operational fact — 'No API key needed' — plus the fact that search results are relevance-ordered. It stops short of describing 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.

Conciseness5/5

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

One tightly packed sentence that leads with the resource and its purpose, then enumerates the two modes and the returned data. No filler or redundancy.

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 usefully names the fields a project includes (status, dates, program, TRL, lead org, description, benefits). The only real gap is not clarifying the relationship/priority between query and project_id, which matters for a 0-required-parameter 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 description coverage is 100%, so the schema already documents limit, query and project_id including ranges and examples. The description reinforces which fields a single-project fetch returns but adds no parameter syntax or constraints beyond the schema, matching the baseline of 3.

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 NASA TechPort projects by keyword or fetch a single project by ID, with the fields returned enumerated. It clearly separates the two operation modes, though it does not explicitly differentiate itself from the near-neighbor sibling nasa_techtransfer, which shares the technology-transfer domain.

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 the two modes ('search by keyword, or fetch one project'), which hints at when each parameter is appropriate, but never states that query and project_id are mutually exclusive or what happens if both/neither are supplied. No alternatives or exclusions are named.

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

nasa_techtransferNASA Technology Transfer searchA
Read-onlyIdempotent

Search NASA's Technology Transfer portfolio (technology.nasa.gov): patents available for licensing, issued patents, the NASA Software Catalog, or Spinoff stories about commercial products that use NASA technology. No API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many results to return (1-50). The service returns every match; the rest are counted but not shown.
queryYesKeywords to search for, e.g. "engine" or "solar panel".
collectionNoWhat to search: patent (licensable patents), patent_issued, software (NASA Software Catalog) or spinoff (Spinoff stories).patent

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety and idempotency profile is covered elsewhere. The description adds only the auth fact (no API key needed); it says nothing about rate limits, result ordering, or pagination behavior beyond what the schema already states.

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 names the resource first, then the collections, then the auth caveat. Every clause carries information, though the parenthetical URL and enumeration make it slightly heavier than strictly necessary.

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 search tool with fully documented parameters and no output schema, the description covers what is being searched and where. Return-shape details are absent but arguably unnecessary, leaving only a small gap around result structure and pagination.

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 the enum, default, limit range, and per-parameter descriptions all documented in the schema. The description merely restates the collection options in prose, adding no syntax or format detail beyond the structured fields, so the baseline of 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?

The description gives a specific verb (Search) and resource (NASA's Technology Transfer portfolio), and enumerates the four searchable collections (licensable patents, issued patents, Software Catalog, Spinoff stories). It does not explicitly differentiate from the adjacent sibling nasa_techport, but the licensing/spinoff framing is clear enough for an agent to pick the right tool.

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 by the collections listed rather than stated: an agent can infer it is for finding licensable NASA technology, software, or spinoff products. There is no explicit when-to-use/when-not or reference to alternatives such as nasa_techport.

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

nasa_tleSatellite two-line element setsA
Read-onlyIdempotent

Two-line element sets (TLE) for Earth-orbiting satellites from the TLE API in the api.nasa.gov catalog (tle.ivanstanojevic.me; CelesTrak data refreshed daily): one satellite by NORAD catalog number, or a paged name search. No API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoResult page (1-based).
sortNoSort field for searches (upstream default popularity).
searchNoSearch satellite names, e.g. "ISS" or "HUBBLE". Omit to browse all records.
sort_dirNoSort direction (upstream default desc).
page_sizeNoRecords per page (1-100, upstream default 20).
satellite_idNoNORAD catalog number, e.g. 25544 for the ISS. Cannot be combined with search options.

TDQS

A3.8/5.0
Behavior4/5

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

With readOnlyHint/idempotentHint/openWorldHint already declared, the description still adds real value: it discloses the data source, that CelesTrak data is refreshed daily (freshness), and that no API key is required (auth). It does not describe pagination mechanics or result shape, so not a full 5.

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?

A single well-packed sentence that front-loads the resource and then the two modes, with zero filler. Slightly dense with parenthetical provenance, but every clause (source, refresh cadence, no key) earns its place.

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 6-parameter, zero-required, no-output-schema lookup tool, the description covers the two access patterns, the data origin and freshness, and the auth situation. Nothing an agent needs in order to call it correctly is missing; return format is standard TLE and need not be restated.

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 every parameter (page, sort, sort_dir, page_size, satellite_id, search) is already documented in the schema, including defaults and the 'cannot be combined' constraint. The description reinforces only the satellite_id-vs-search split and the paged nature; baseline 3 is appropriate when the schema carries the semantics.

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?

Names a specific resource (two-line element sets for Earth-orbiting satellites) and enumerates its two operating modes: single satellite by NORAD catalog number, or a paged name search. It also pins the upstream provider and data lineage (tle.ivanstanojevic.me; CelesTrak, refreshed daily). It does not, however, differentiate itself from overlapping siblings such as jpl_horizons or jpl_sbdb, so a 4 rather than a 5.

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 phrase 'one satellite by NORAD catalog number, or a paged name search' implies the two usage modes, from which an agent can infer that satellite_id is for a known satellite and search is for discovery. There is no explicit when-to-use/when-not guidance and no named alternative among siblings, so usage is only implied rather than stated.

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

nasa_trek_layersNASA Trek map layers (Mars, Moon, Vesta)A
Read-onlyIdempotent

Search the map layer catalogs of NASA Mars Trek, Moon Trek and Vesta Trek (trek.nasa.gov): mosaics, colour hillshades and other imagery served as OGC WMTS tiles. Returns layer IDs for nasa_trek_tile, with mission, instrument and WMTS endpoint. No API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesBody: mars, moon or vesta.
limitNoHow many layers to return (1-50).
searchNoKeywords to match, e.g. "olympus", "LRO WAC" or "HiRISE".
projectionNoMap projection: equirectangular (global), north_pole or south_pole (polar stereographic).equirectangular

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds genuinely new operational context: no API key is required, and it names the payload fields returned (layer ID, mission, instrument, WMTS endpoint) — useful for a tool with no output schema.

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 tight sentences; purpose and scope come first, the downstream handoff second. No filler or repetition of the title.

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 listing the returned fields and naming the tool that consumes them. Coverage of bodies, auth, and pipeline role is solid; only edge behaviors (pagination limits beyond the schema) are left implicit.

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 every parameter (body enum, limit range, search, projection) is already documented. The description mentions the three bodies and layer types but adds no format or matching semantics for search or projection beyond 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 (search) plus the resource (map layer catalogs of Mars/Moon/Vesta Trek) and the content type (mosaics, colour hillshades, OGC WMTS tiles). It also explicitly distinguishes itself from the sibling nasa_trek_tile by naming it as the consumer of the returned layer IDs.

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 clear usage context: discover layers here, then feed the returned IDs to nasa_trek_tile. It does not state when to avoid the tool or how search terms map to the catalog, but the workflow positioning is unambiguous.

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

nasa_trek_tileNASA Trek map tile (Mars, Moon, Vesta)A
Read-onlyIdempotent

One WMTS map tile image from NASA Mars Trek, Moon Trek or Vesta Trek for a layer from nasa_trek_layers, addressed by zoom/row/col or (equirectangular layers) by latitude/longitude. Reads the layer's WMTS capabilities to validate the tile and pick the format. No API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
colNoTile column (0 at the left).
rowNoTile row (0 at the top). Provide row and col, or latitude and longitude.
bodyYesBody: mars, moon or vesta.
zoomNoZoom level (WMTS TileMatrix). 0 is the whole layer; each level doubles the resolution.
layerYesLayer ID from nasa_trek_layers, e.g. Mars_MGS_MOLA_ClrShade_merge_global_463m or LRO_WAC_Mosaic_Global_303ppd_v02.
latitudeNoEquirectangular only: pick the tile containing this latitude (degrees).
longitudeNoEquirectangular only: pick the tile containing this longitude (degrees east, -180 to 360).
projectionNoMap projection: equirectangular (global), north_pole or south_pole (polar stereographic).equirectangular

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already carry readOnly/idempotent/destructive/openWorld hints, and the description adds real context beyond them: it reads the layer's WMTS capabilities to validate the tile and pick the format, and it notes no API key is needed. These are concrete behavioral facts not present in the structured fields.

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 return value, then qualification and sourcing in tight sentences with no filler. Slightly dense but every clause is informative; nothing wasteful.

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?

Covers layer sourcing, both addressing schemes, format validation and auth, which is enough for a tile-fetch tool. No output schema is needed since the return is an image, and annotations cover the safety profile; only the explicit prerequisite ordering with nasa_trek_layers 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 documents all 8 parameters (including the equirectangular-only lat/long note). The description restates the addressing dichotomy (zoom/row/col vs lat/long) but adds no syntax or format detail beyond it, so 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 ('One WMTS map tile image from NASA Mars Trek, Moon Trek or Vesta Trek'), and names the source of valid layer IDs (nasa_trek_layers), cleanly separating it from that sibling. An agent can tell what it returns without opening the schema.

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?

Mentions that the layer comes 'from nasa_trek_layers' and gives the two addressing modes, which implies the workflow, but never states explicitly to call nasa_trek_layers first or when-not to use this tool. Usage is implied rather than instructed.

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. 32 tool updatesv1.2.0
    • Changedjpl_cad25 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / body / description
        Previous value: -"Body to find close approaches to (e.g., Earth, Mars, ALL). Default: Earth"New value: +"Close-approach body (Earth, Mars, ALL, ...). Default Earth."
      • addedInput schema / properties / body / pattern
        Added value: +"^[A-Za-z]+$"
      • changedInput schema / properties / date_max / description
        Previous value: -"End date for search (YYYY-MM-DD). Default: +60 days"New value: +"End date (YYYY-MM-DD, now, or +/-days). Default +60."
      • addedInput schema / properties / date_max / pattern
        Added value: +"^(now|[+-]\\d{1,5}|\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?)$"
      • changedInput schema / properties / date_min / description
        Previous value: -"Start date for search (YYYY-MM-DD). Default: now"New value: +"Start date (YYYY-MM-DD, now, or +/-days). Default now."
      • addedInput schema / properties / date_min / pattern
        Added value: +"^(now|[+-]\\d{1,5}|\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?)$"
      • changedInput schema / properties / des / description
        Previous value: -"Object designation (e.g., '2000 SG344' or '433')"New value: +"Only this object (designation)."
      • addedInput schema / properties / des / maxLength
        Added value: +100
      • addedInput schema / properties / des / minLength
        Added value: +1
      • changedInput schema / properties / dist_max / description
        Previous value: -"Maximum approach distance (e.g., 0.05, 10LD). Default: 0.05 au"New value: +"Maximum approach distance, e.g. 0.05 (au) or 10LD. Default 0.05 au."
      • addedInput schema / properties / dist_max / pattern
        Added value: +"^\\d+(\\.\\d+)?(LD|au|AU)?$"
      • changedInput schema / properties / dist_min / description
        Previous value: -"Minimum approach distance. Default: none"New value: +"Minimum approach distance."
      • addedInput schema / properties / dist_min / pattern
        Added value: +"^\\d+(\\.\\d+)?(LD|au|AU)?$"
      • changedInput schema / properties / fullname / description
        Previous value: -"Include full object name in result. Default: false"New value: +"Include full object names."
      • addedInput schema / properties / h_max
        Added value: +{
        +  "description": "Maximum absolute magnitude H.",
        +  "type": "number"
        +}
      • addedInput schema / properties / h_min
        Added value: +{
        +  "description": "Minimum absolute magnitude H.",
        +  "type": "number"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Maximum number of records (1-1000).",
        +  "maximum": 1000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / neo / description
        Previous value: -"Limit to NEOs. Default: true"New value: +"Limit to NEOs (default true upstream)."
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field: date, dist, dist-min, v-inf, v-rel, h, object. Default: date"New value: +"Sort field, prefix - for descending. Default date."
      • addedInput schema / properties / sort / pattern
        Added value: +"^-?(date|dist|dist-min|v-inf|v-rel|h|object)$"
      • changedInput schema / properties / spk / description
        Previous value: -"Object SPK-ID (e.g., '2000433')"New value: +"Only this object (SPK-ID)."
      • addedInput schema / properties / spk / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / spk / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / spk / type
        Previous value: -"string"New value: +"integer"
    • Changedjpl_fireball20 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / date_max / description
        Previous value: -"End date (YYYY-MM-DD)"New value: +"Latest event date (YYYY-MM-DD)."
      • addedInput schema / properties / date_max / pattern
        Added value: +"^(now|[+-]\\d{1,5}|\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?)$"
      • changedInput schema / properties / date_min / description
        Previous value: -"Start date (YYYY-MM-DD)"New value: +"Earliest event date (YYYY-MM-DD)."
      • addedInput schema / properties / date_min / pattern
        Added value: +"^(now|[+-]\\d{1,5}|\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?)$"
      • addedInput schema / properties / energy_max
        Added value: +{
        +  "description": "Maximum total radiated energy (1e10 J).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / energy_min
        Added value: +{
        +  "description": "Minimum total radiated energy (1e10 J).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / impact_e_max
        Added value: +{
        +  "description": "Maximum estimated impact energy (kt).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / impact_e_min
        Added value: +{
        +  "description": "Minimum estimated impact energy (kt).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / limit / default
        Added value: +50
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of results to return"New value: +"Maximum number of events (1-1000)."
      • addedInput schema / properties / limit / maximum
        Added value: +1000
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / req_alt
        Added value: +{
        +  "description": "Only events with an altitude.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / req_loc
        Added value: +{
        +  "description": "Only events with a location.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / req_vel
        Added value: +{
        +  "description": "Only events with a velocity.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / req_vel_comp
        Added value: +{
        +  "description": "Only events with velocity components.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / vel_max
        Added value: +{
        +  "description": "Maximum velocity (km/s).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / vel_min
        Added value: +{
        +  "description": "Minimum velocity (km/s).",
        +  "minimum": 0,
        +  "type": "number"
        +}
    • Changedjpl_horizons25 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / CENTER / description
        Previous value: -"Coordinate center (e.g., '500@399' for Earth)"New value: +"Coordinate center, e.g. '500@399' (geocentric)."
      • addedInput schema / properties / CENTER / maxLength
        Added value: +200
      • addedInput schema / properties / CENTER / minLength
        Added value: +1
      • changedInput schema / properties / COMMAND / description
        Previous value: -"Target object identifier (e.g., '499' for Mars, '1' for Ceres, 'C/2020 F3' for Comet NEOWISE)"New value: +"Target, e.g. '499' (Mars), '1;' (Ceres), 'C/2020 F3'."
      • addedInput schema / properties / COMMAND / maxLength
        Added value: +200
      • addedInput schema / properties / COMMAND / minLength
        Added value: +1
      • changedInput schema / properties / EPHEM_TYPE / description
        Previous value: -"Type of ephemeris (OBSERVER, VECTORS, ELEMENTS)"New value: +"Ephemeris type."
      • changedInput schema / properties / MAKE_EPHEM / description
        Previous value: -"Generate ephemeris"New value: +"Generate an ephemeris."
      • changedInput schema / properties / OBJ_DATA / description
        Previous value: -"Include object data"New value: +"Include object data."
      • changedInput schema / properties / OUT_UNITS / description
        Previous value: -"Output units for vector tables"New value: +"Output units for vector/element tables."
      • changedInput schema / properties / QUANTITIES / description
        Previous value: -"Observable quantities to include (e.g., 'A' for all, or '1,2,20,23' for specific ones)"New value: +"Observer quantities, e.g. 'A' or '1,2,20,23'."
      • addedInput schema / properties / QUANTITIES / maxLength
        Added value: +200
      • addedInput schema / properties / QUANTITIES / minLength
        Added value: +1
      • changedInput schema / properties / START_TIME / description
        Previous value: -"Start time for ephemeris (e.g., '2023-01-01')"New value: +"Start time, e.g. '2024-01-01'."
      • addedInput schema / properties / START_TIME / maxLength
        Added value: +200
      • addedInput schema / properties / START_TIME / minLength
        Added value: +1
      • changedInput schema / properties / STEP_SIZE / description
        Previous value: -"Step size for ephemeris points (e.g., '1d' for daily, '1h' for hourly)"New value: +"Step size, e.g. '1d' or '1h'."
      • addedInput schema / properties / STEP_SIZE / maxLength
        Added value: +200
      • addedInput schema / properties / STEP_SIZE / minLength
        Added value: +1
      • changedInput schema / properties / STOP_TIME / description
        Previous value: -"Stop time for ephemeris (e.g., '2023-01-02')"New value: +"Stop time, e.g. '2024-01-02'."
      • addedInput schema / properties / STOP_TIME / maxLength
        Added value: +200
      • addedInput schema / properties / STOP_TIME / minLength
        Added value: +1
      • addedInput schema / properties / format / default
        Added value: +"json"
      • changedInput schema / properties / format / description
        Previous value: -"Response format (json, text)"New value: +"Response format."
    • Changedjpl_horizons_file25 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / CENTER / description
        Previous value: -"Coordinate center (e.g., '500@399' for Earth)"New value: +"Coordinate center, e.g. '500@399' (geocentric)."
      • addedInput schema / properties / CENTER / maxLength
        Added value: +200
      • addedInput schema / properties / CENTER / minLength
        Added value: +1
      • changedInput schema / properties / COMMAND / description
        Previous value: -"Target object identifier (e.g., '499' for Mars, '1' for Ceres, 'C/2020 F3' for Comet NEOWISE)"New value: +"Target, e.g. '499' (Mars), '1;' (Ceres), 'C/2020 F3'."
      • addedInput schema / properties / COMMAND / maxLength
        Added value: +200
      • addedInput schema / properties / COMMAND / minLength
        Added value: +1
      • changedInput schema / properties / EPHEM_TYPE / description
        Previous value: -"Type of ephemeris (OBSERVER, VECTORS, ELEMENTS)"New value: +"Ephemeris type."
      • changedInput schema / properties / MAKE_EPHEM / description
        Previous value: -"Generate ephemeris"New value: +"Generate an ephemeris."
      • changedInput schema / properties / OBJ_DATA / description
        Previous value: -"Include object data"New value: +"Include object data."
      • changedInput schema / properties / OUT_UNITS / description
        Previous value: -"Output units for vector tables"New value: +"Output units for vector/element tables."
      • changedInput schema / properties / QUANTITIES / description
        Previous value: -"Observable quantities to include (e.g., 'A' for all, or '1,2,20,23' for specific ones)"New value: +"Observer quantities, e.g. 'A' or '1,2,20,23'."
      • addedInput schema / properties / QUANTITIES / maxLength
        Added value: +200
      • addedInput schema / properties / QUANTITIES / minLength
        Added value: +1
      • changedInput schema / properties / START_TIME / description
        Previous value: -"Start time for ephemeris (e.g., '2023-01-01')"New value: +"Start time, e.g. '2024-01-01'."
      • addedInput schema / properties / START_TIME / maxLength
        Added value: +200
      • addedInput schema / properties / START_TIME / minLength
        Added value: +1
      • changedInput schema / properties / STEP_SIZE / description
        Previous value: -"Step size for ephemeris points (e.g., '1d' for daily, '1h' for hourly)"New value: +"Step size, e.g. '1d' or '1h'."
      • addedInput schema / properties / STEP_SIZE / maxLength
        Added value: +200
      • addedInput schema / properties / STEP_SIZE / minLength
        Added value: +1
      • changedInput schema / properties / STOP_TIME / description
        Previous value: -"Stop time for ephemeris (e.g., '2023-01-02')"New value: +"Stop time, e.g. '2024-01-02'."
      • addedInput schema / properties / STOP_TIME / maxLength
        Added value: +200
      • addedInput schema / properties / STOP_TIME / minLength
        Added value: +1
      • addedInput schema / properties / format / default
        Added value: +"json"
      • changedInput schema / properties / format / description
        Previous value: -"Response format (json, text)"New value: +"Response format."
    • Changedjpl_jd_cal5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / cd / description
        Previous value: -"Calendar date to convert to Julian date (YYYY-MM-DD or YYYY-MM-DDThh:mm:ss format)"New value: +"Calendar date (UTC) to convert to a Julian date."
      • addedInput schema / properties / cd / pattern
        Added value: +"^-?\\d{1,4}-\\d{2}-\\d{2}([T_ ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?)?$"
      • changedInput schema / properties / jd / description
        Previous value: -"Julian date to convert to calendar date"New value: +"Julian date to convert to a calendar date."
      • addedInput schema / properties / jd / pattern
        Added value: +"^-?\\d+(\\.\\d+)?$"
    • Addedjpl_mission_design
    • Changedjpl_nhats30 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / des / description
        Previous value: -"Object designation (e.g., '2000 SG344' or '433')"New value: +"Object designation, e.g. 99942 (object mode)."
      • addedInput schema / properties / des / maxLength
        Added value: +100
      • addedInput schema / properties / des / minLength
        Added value: +1
      • changedInput schema / properties / dur / description
        Previous value: -"Minimum total mission duration (days). Values: 60-450, default: 450"New value: +"Maximum total mission duration in days (60-450)."
      • addedInput schema / properties / dur / maximum
        Added value: +450
      • addedInput schema / properties / dur / minimum
        Added value: +60
      • changedInput schema / properties / dur / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / dv / description
        Previous value: -"Minimum total delta-V (km/s). Values: 4-12, default: 12"New value: +"Maximum total delta-V in km/s (4-12)."
      • addedInput schema / properties / dv / maximum
        Added value: +12
      • addedInput schema / properties / dv / minimum
        Added value: +4
      • changedInput schema / properties / dv / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / h / description
        Previous value: -"Object's maximum absolute magnitude (mag). Values: 16-30"New value: +"Maximum absolute magnitude H (16-30)."
      • addedInput schema / properties / h / maximum
        Added value: +30
      • addedInput schema / properties / h / minimum
        Added value: +16
      • changedInput schema / properties / h / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / launch / description
        Previous value: -"Launch window (year range). Values: 2020-2025, 2025-2030, 2030-2035, 2035-2040, 2040-2045, 2020-2045, default: 2020-2045"New value: +"Launch window."
      • addedInput schema / properties / launch / enum
        Added value: +[
        +  "2020-2025",
        +  "2025-2030",
        +  "2030-2035",
        +  "2035-2040",
        +  "2040-2045",
        +  "2020-2045"
        +]
      • changedInput schema / properties / occ / description
        Previous value: -"Object's maximum orbit condition code. Values: 0-8"New value: +"Maximum orbit condition code (0-8)."
      • addedInput schema / properties / occ / maximum
        Added value: +8
      • addedInput schema / properties / occ / minimum
        Added value: +0
      • changedInput schema / properties / occ / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / plot / description
        Previous value: -"Include base-64 encoded plot image"New value: +"Include a base64 plot (object mode; large)."
      • changedInput schema / properties / spk / description
        Previous value: -"Object SPK-ID (e.g., '2000433')"New value: +"Object SPK-ID (object mode)."
      • addedInput schema / properties / spk / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / spk / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / spk / type
        Previous value: -"string"New value: +"integer"
      • addedInput schema / properties / stay / anyOf
        Added value: +[
        +  {
        +    "const": 8,
        +    "type": "number"
        +  },
        +  {
        +    "const": 16,
        +    "type": "number"
        +  },
        +  {
        +    "const": 24,
        +    "type": "number"
        +  },
        +  {
        +    "const": 32,
        +    "type": "number"
        +  }
        +]
      • changedInput schema / properties / stay / description
        Previous value: -"Minimum stay time (days). Values: 8, 16, 24, 32, default: 8"New value: +"Minimum stay at the NEO in days (8, 16, 24 or 32)."
      • removedInput schema / properties / stay / type
        Removed value: -"number"
    • Changedjpl_periodic_orbits17 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / branch / description
        Previous value: -"Branch within family (N/S, E/W, etc., required for some families)"New value: +"Branch (required by some families), e.g. N or S."
      • addedInput schema / properties / branch / pattern
        Added value: +"^[A-Za-z]{1,3}$"
      • changedInput schema / properties / family / description
        Previous value: -"Orbit family name (e.g., halo, dro, lyapunov)"New value: +"Orbit family, e.g. halo, dro, lyapunov, vertical, axial, butterfly."
      • addedInput schema / properties / family / pattern
        Added value: +"^[a-z_]+$"
      • changedInput schema / properties / jacobimax / description
        Previous value: -"Maximum Jacobi constant"New value: +"Maximum Jacobi constant."
      • changedInput schema / properties / jacobimin / description
        Previous value: -"Minimum Jacobi constant"New value: +"Minimum Jacobi constant."
      • changedInput schema / properties / libr / description
        Previous value: -"Libration point (1-5, required for some families)"New value: +"Libration point 1-5 (required by some families)."
      • addedInput schema / properties / libr / maximum
        Added value: +5
      • addedInput schema / properties / libr / minimum
        Added value: +1
      • changedInput schema / properties / periodmax / description
        Previous value: -"Maximum period"New value: +"Maximum period."
      • changedInput schema / properties / periodmin / description
        Previous value: -"Minimum period"New value: +"Minimum period."
      • changedInput schema / properties / periodunits / description
        Previous value: -"Units for period (s, h, d, TU)"New value: +"Units for periodmin/periodmax."
      • changedInput schema / properties / stabmax / description
        Previous value: -"Maximum stability index"New value: +"Maximum stability index."
      • changedInput schema / properties / stabmin / description
        Previous value: -"Minimum stability index"New value: +"Minimum stability index."
      • changedInput schema / properties / sys / description
        Previous value: -"Three-body system (e.g., earth-moon, sun-earth)"New value: +"Three-body system, e.g. earth-moon, sun-earth, mars-phobos."
      • addedInput schema / properties / sys / pattern
        Added value: +"^[a-z]+-[a-z]+$"
    • Changedjpl_sbdb16 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / alt_orbits
        Added value: +{
        +  "description": "Include alternate orbits.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / ca_body
        Added value: +{
        +  "description": "Limit close approaches to this body (e.g. Earth); needs ca_data.",
        +  "maxLength": 40,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / ca_data
        Added value: +{
        +  "description": "Include close-approach data.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / cad / description
        Previous value: -"Include close approach data"New value: +"DEPRECATED alias for ca_data."
      • addedInput schema / properties / des
        Added value: +{
        +  "description": "Primary designation or IAU number.",
        +  "maxLength": 100,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / discovery
        Added value: +{
        +  "description": "Include discovery circumstances.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / full_prec
        Added value: +{
        +  "description": "Full-precision orbital elements.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / phys_par
        Added value: +{
        +  "description": "Include physical parameters.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / sat
        Added value: +{
        +  "description": "Include satellite data.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / spk
        Added value: +{
        +  "description": "SPK-ID of the object.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • changedInput schema / properties / sstr / description
        Previous value: -"Search string (e.g., asteroid name, number, or designation)"New value: +"Search string: name, designation or number (e.g. Ceres, 433, 2019 OK)."
      • addedInput schema / properties / sstr / maxLength
        Added value: +200
      • addedInput schema / properties / sstr / minLength
        Added value: +1
      • addedInput schema / properties / vi_data
        Added value: +{
        +  "description": "Include Sentry virtual-impactor data.",
        +  "type": "boolean"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "sstr"
        -]
    • Changedjpl_scout16 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / file / description
        Previous value: -"Type of data file to return (summary, ephem, obs, crit, all)"New value: +"Object mode: include the observation file as a list or in MPC format."
      • changedInput schema / properties / file / enum
        Previous value: -[
        -  "summary",
        -  "ephem",
        -  "obs",
        -  "crit",
        -  "all"
        -]New value: +[
        +  "list",
        +  "mpc"
        +]
      • changedInput schema / properties / limit / description
        Previous value: -"Limit number of results"New value: +"List mode: return at most this many objects. Applied by this server; Scout has no limit parameter."
      • addedInput schema / properties / limit / maximum
        Added value: +1000
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / n_orbits
        Added value: +{
        +  "description": "Object mode: number of sampled orbits (1-1000).",
        +  "maximum": 1000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • removedInput schema / properties / orbit_id
        Removed value: -{
        -  "description": "Scout internal orbit ID",
        -  "type": "string"
        -}
      • addedInput schema / properties / orbits
        Added value: +{
        +  "description": "Object mode: include sampled orbits.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / plot / description
        Previous value: -"Include plots in the response"New value: +"Object mode: base64 plots to include: el (elements), ca (close approach), sr (systematic ranging), colon-separated."
      • addedInput schema / properties / plot / pattern
        Added value: +"^(el|ca|sr)(:(el|ca|sr))*$"
      • changedInput schema / properties / plot / type
        Previous value: -"boolean"New value: +"string"
      • removedInput schema / properties / summary
        Removed value: -{
        -  "description": "Include summary data in the response",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / tdes / description
        Previous value: -"Object temporary designation (e.g., P21Eolo)"New value: +"NEOCP temporary designation (object mode)."
      • addedInput schema / properties / tdes / pattern
        Added value: +"^[A-Za-z0-9]{1,16}$"
    • Changedjpl_sentry23 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / all / description
        Previous value: -"Get all virtual impactors data"New value: +"Virtual-impactor mode: all VIs (combine with ip_min/ps_min/h_max to narrow)."
      • removedInput schema / properties / date_max
        Removed value: -{
        -  "description": "End date (YYYY-MM-DD)",
        -  "type": "string"
        -}
      • removedInput schema / properties / date_min
        Removed value: -{
        -  "description": "Start date (YYYY-MM-DD)",
        -  "type": "string"
        -}
      • changedInput schema / properties / des / description
        Previous value: -"Object designation (e.g., '2011 AG5' or '29075')"New value: +"Object mode: designation, e.g. 29075 or 2011 AG5."
      • addedInput schema / properties / des / maxLength
        Added value: +100
      • addedInput schema / properties / des / minLength
        Added value: +1
      • changedInput schema / properties / h_max / description
        Previous value: -"Maximum absolute magnitude (size filter)"New value: +"Summary/VI mode: maximum absolute magnitude H."
      • changedInput schema / properties / ip_min / description
        Previous value: -"Minimum impact probability"New value: +"Summary/VI mode: minimum impact probability, e.g. 1e-5."
      • addedInput schema / properties / ip_min / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / ip_min / maximum
        Added value: +1
      • changedInput schema / properties / ip_min / type
        Previous value: -"string"New value: +"number"
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of results to return"New value: +"Return at most this many records from list modes. Applied by this server: Sentry has no limit parameter."
      • addedInput schema / properties / limit / maximum
        Added value: +1000
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / ps_min / description
        Previous value: -"Minimum Palermo Scale value"New value: +"Summary/VI mode: minimum Palermo Scale value, e.g. -3."
      • changedInput schema / properties / ps_min / type
        Previous value: -"string"New value: +"number"
      • changedInput schema / properties / removed / description
        Previous value: -"Get objects removed from Sentry monitoring"New value: +"List objects removed from Sentry."
      • changedInput schema / properties / spk / description
        Previous value: -"Object SPK-ID"New value: +"Object mode: SPK-ID."
      • addedInput schema / properties / spk / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / spk / maximum
        Added value: +9007199254740991
      • changedInput schema / properties / spk / type
        Previous value: -"string"New value: +"integer"
    • Changednasa_apod8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / count
        Removed value: -{
        -  "description": "Count of random APODs to retrieve",
        -  "type": "number"
        -}
      • changedInput schema / properties / date / description
        Previous value: -"The date of the APOD image to retrieve (YYYY-MM-DD)"New value: +"Date of the picture (YYYY-MM-DD, 1995-06-16 or later). Defaults to the latest published picture. Cannot be combined with start_date/end_date."
      • changedInput schema / properties / end_date / description
        Previous value: -"End date for date range search (YYYY-MM-DD)"New value: +"End of a date range (YYYY-MM-DD); requires start_date. Defaults to today (UTC) when start_date is given."
      • addedInput schema / properties / max_images
        Added value: +{
        +  "default": 1,
        +  "description": "How many pictures to embed as image content (0-5). Remaining entries are listed by URL.",
        +  "maximum": 5,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / start_date / description
        Previous value: -"Start date for date range search (YYYY-MM-DD)"New value: +"Start of a date range (YYYY-MM-DD)."
      • removedInput schema / properties / thumbs
        Removed value: -{
        -  "description": "Return URL of thumbnail for video content",
        -  "type": "boolean"
        -}
      • removedInput schema / required
        Removed value: -[
        -  "date"
        -]
    • Changednasa_cmr54 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / bbox
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "number"
        +      },
        +      "maxItems": 4,
        +      "minItems": 4,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Compatibility alias for bounding_box (sent to CMR as bounding_box)."
        +}
      • addedInput schema / properties / bounding_box
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "number"
        +      },
        +      "maxItems": 4,
        +      "minItems": 4,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Bounding box west,south,east,north (lon/lat degrees). west > east crosses the antimeridian (supported by CMR)."
        +}
      • addedInput schema / properties / browsable
        Added value: +{
        +  "description": "Only records with (true) or without (false) browse imagery.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / circle
        Added value: +{
        +  "description": "Circle \"lon,lat,radius\" with radius in metres (10-6000000).",
        +  "type": "string"
        +}
      • addedInput schema / properties / cloud_cover
        Added value: +{
        +  "description": "Granules only: cloud cover range \"min,max\" in percent.",
        +  "pattern": "^(\\d+(\\.\\d+)?)?,(\\d+(\\.\\d+)?)?$",
        +  "type": "string"
        +}
      • addedInput schema / properties / cloud_hosted
        Added value: +{
        +  "description": "Collections only: restrict to cloud-hosted (true) or not (false).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / collection_concept_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^[A-Z]{1,4}\\d+-[A-Za-z0-9_]+$",
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "pattern": "^[A-Z]{1,4}\\d+-[A-Za-z0-9_]+$",
        +        "type": "string"
        +      },
        +      "maxItems": 100,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Granules only: collection concept ID(s) to search within."
        +}
      • addedInput schema / properties / concept_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^[A-Z]{1,4}\\d+-[A-Za-z0-9_]+$",
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "pattern": "^[A-Z]{1,4}\\d+-[A-Za-z0-9_]+$",
        +        "type": "string"
        +      },
        +      "maxItems": 100,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Concept ID(s). For granule searches a collection concept ID (C...) also selects that collection, as in CMR."
        +}
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "next_cursor from a previous response. Continue with the cursor alone; omitted filters are restored from it.",
        +  "maxLength": 8192,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / day_night_flag
        Added value: +{
        +  "description": "Granules only: DAY, NIGHT, BOTH or UNSPECIFIED.",
        +  "enum": [
        +    "DAY",
        +    "NIGHT",
        +    "BOTH",
        +    "UNSPECIFIED"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / doi
        Added value: +{
        +  "description": "Collections only: DOI, e.g. 10.5067/GHGMR-4FJ04.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / downloadable
        Added value: +{
        +  "description": "Only records with (true) or without (false) downloadable data links.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / entry_title
        Added value: +{
        +  "description": "Collection entry title.",
        +  "maxLength": 1000,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / fields
        Added value: +{
        +  "description": "Compact mode only: normalized fields to return. concept_id is always included. Defaults to all fields except summary.",
        +  "items": {
        +    "enum": [
        +      "concept_id",
        +      "title",
        +      "short_name",
        +      "version",
        +      "provider",
        +      "time_start",
        +      "time_end",
        +      "platforms",
        +      "instruments",
        +      "processing_level",
        +      "doi",
        +      "cloud_hosted",
        +      "online_access",
        +      "links",
        +      "summary",
        +      "collection_concept_id",
        +      "producer_granule_id",
        +      "day_night_flag",
        +      "cloud_cover",
        +      "browse_available"
        +    ],
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • changedInput schema / properties / format / description
        Previous value: -"Response format"New value: +"Upstream CMR metadata format. json/umm_json support compact output; others are returned raw. dif, dif10, opendata: collections only; stac: granules only."
      • changedInput schema / properties / format / enum
        Previous value: -[
        -  "json",
        -  "umm_json",
        -  "atom",
        -  "echo10",
        -  "iso19115",
        -  "iso_smap",
        -  "kml"
        -]New value: +[
        +  "json",
        +  "umm_json",
        +  "atom",
        +  "echo10",
        +  "iso19115",
        +  "kml",
        +  "csv",
        +  "xml",
        +  "native",
        +  "dif",
        +  "dif10",
        +  "opendata",
        +  "stac"
        +]
      • addedInput schema / properties / granule_data_format
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 256,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "maxLength": 256,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "maxItems": 20,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Collections only: granule data format(s), e.g. netCDF-4."
        +}
      • addedInput schema / properties / has_granules
        Added value: +{
        +  "description": "Collections only: require (true) or exclude (false) collections with granules.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / include_facets
        Added value: +{
        +  "description": "Include CMR v2 facets (counts by keyword, platform, ...).",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / instrument
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 256,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "maxLength": 256,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "maxItems": 20,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Instrument short name(s), e.g. MODIS."
        +}
      • changedInput schema / properties / keyword / description
        Previous value: -"Search keyword"New value: +"Collections only: free-text keyword search."
      • addedInput schema / properties / keyword / maxLength
        Added value: +1000
      • addedInput schema / properties / keyword / minLength
        Added value: +1
      • addedInput schema / properties / limit / default
        Added value: +10
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of results to return"New value: +"Records per page (1-100)."
      • addedInput schema / properties / limit / maximum
        Added value: +100
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / line
        Added value: +{
        +  "description": "Line \"lon1,lat1,lon2,lat2,...\".",
        +  "maxLength": 8000,
        +  "type": "string"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "DEPRECATED offset pagination. Prefer cursor. Cannot be combined with cursor or page.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / online_only
        Added value: +{
        +  "description": "Only online (true) or offline (false) records.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination"New value: +"DEPRECATED page-number pagination (CMR page_num). Prefer cursor. Cannot be combined with cursor or offset."
      • addedInput schema / properties / page / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / page / minimum
        Added value: +1
      • changedInput schema / properties / page / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / platform
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 256,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "maxLength": 256,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "maxItems": 20,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Platform short name(s), e.g. Terra."
        +}
      • addedInput schema / properties / point
        Added value: +{
        +  "description": "Point \"lon,lat\".",
        +  "maxLength": 8000,
        +  "type": "string"
        +}
      • addedInput schema / properties / polygon
        Added value: +{
        +  "description": "Polygon \"lon1,lat1,...,lon1,lat1\": closed, counter-clockwise (CMR rejects clockwise rings).",
        +  "maxLength": 8000,
        +  "type": "string"
        +}
      • addedInput schema / properties / processing_level_id
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 40,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "maxLength": 40,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "maxItems": 20,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Collections only: processing level(s), e.g. 3, L2."
        +}
      • addedInput schema / properties / producer_granule_id
        Added value: +{
        +  "description": "Granules only: producer granule ID.",
        +  "maxLength": 1000,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / project
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 256,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "maxLength": 256,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "maxItems": 20,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Project/campaign short name(s)."
        +}
      • addedInput schema / properties / provider
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "maxLength": 80,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "maxItems": 20,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Provider ID(s), e.g. POCLOUD, LPCLOUD."
        +}
      • addedInput schema / properties / readable_granule_name
        Added value: +{
        +  "description": "Granules only: granule name (supports CMR * and ? wildcards).",
        +  "maxLength": 1000,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / response_mode
        Added value: +{
        +  "description": "compact (default for json/umm_json): normalized records. raw: upstream metadata as returned (default for other formats).",
        +  "enum": [
        +    "compact",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / search_type / description
        Previous value: -"Search type (collections or granules)"New value: +"Search collections (datasets) or granules (files)."
      • addedInput schema / properties / short_name
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 256,
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "maxLength": 256,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "maxItems": 20,
        +      "minItems": 1,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Collection short name(s)."
        +}
      • addedInput schema / properties / sort_key / anyOf
        Added value: +[
        +  {
        +    "pattern": "^[+-]?[a-z_-]+$",
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "pattern": "^[+-]?[a-z_-]+$",
        +      "type": "string"
        +    },
        +    "maxItems": 3,
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort_key / description
        Previous value: -"Field to sort results by"New value: +"Sort key(s), \"-\" prefix for descending. Collections: score, usage_score, entry_title, dataset_id, short_name, entry_id, start_date, end_date, platform, instrument, sensor, provider, revision_date, has_granules, create-data-date, ongoing. Granules: start_date, end_date, producer_granule_id, readable_granule_name, granule_ur, revision_date, cloud_cover, day_night_flag, data_size, provider, platform, instrument, sensor, online_only, browsable, entry_title, short_name, version, campaign, project."
      • removedInput schema / properties / sort_key / type
        Removed value: -"string"
      • addedInput schema / properties / temporal
        Added value: +{
        +  "description": "Temporal range \"start,end\" in ISO 8601 (date or date-time, UTC assumed). Either side may be empty, e.g. \"2020-01-01T00:00:00Z,\".",
        +  "type": "string"
        +}
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "Collection version.",
        +  "maxLength": 80,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "keyword",
        -  "search_type",
        -  "format"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "http_status": {
        +          "anyOf": [
        +            {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "kind": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "kind",
        +        "message",
        +        "http_status"
        +      ],
        +      "type": "object"
        +    },
        +    "facets": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "name": {
        +            "type": "string"
        +          },
        +          "values": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "count": {
        +                  "type": [
        +                    "number",
        +                    "null"
        +                  ]
        +                },
        +                "title": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "title",
        +                "count"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "values"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "format": {
        +      "enum": [
        +        "json",
        +        "umm_json",
        +        "atom",
        +        "echo10",
        +        "iso19115",
        +        "kml",
        +        "csv",
        +        "xml",
        +        "native",
        +        "dif",
        +        "dif10",
        +        "opendata",
        +        "stac"
        +      ],
        +      "type": "string"
        +    },
        +    "next_cursor": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "raw": {},
        +    "response_mode": {
        +      "enum": [
        +        "compact",
        +        "raw"
        +      ],
        +      "type": "string"
        +    },
        +    "results": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "browse_available": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "cloud_cover": {
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "cloud_hosted": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "collection_concept_id": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "concept_id": {
        +            "type": "string"
        +          },
        +          "day_night_flag": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "doi": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "instruments": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "links": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "title": {
        +                      "type": [
        +                        "string",
        +                        "null"
        +                      ]
        +                    },
        +                    "type": {
        +                      "type": [
        +                        "string",
        +                        "null"
        +                      ]
        +                    },
        +                    "url": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "url",
        +                    "type",
        +                    "title"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "online_access": {
        +            "type": [
        +              "boolean",
        +              "null"
        +            ]
        +          },
        +          "platforms": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "processing_level": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "producer_granule_id": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "provider": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "short_name": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "summary": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "time_end": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "time_start": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "title": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "version": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "concept_id"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "retrieved_at": {
        +      "type": "string"
        +    },
        +    "returned_count": {
        +      "anyOf": [
        +        {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "search_type": {
        +      "enum": [
        +        "collections",
        +        "granules"
        +      ],
        +      "type": "string"
        +    },
        +    "source": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "request_id": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "retrieved_at": {
        +          "type": "string"
        +        },
        +        "service": {
        +          "type": "string"
        +        },
        +        "took_ms": {
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "service",
        +        "url",
        +        "request_id",
        +        "took_ms",
        +        "retrieved_at"
        +      ],
        +      "type": "object"
        +    },
        +    "status": {
        +      "enum": [
        +        "success",
        +        "no_results",
        +        "error"
        +      ],
        +      "type": "string"
        +    },
        +    "total_hits": {
        +      "anyOf": [
        +        {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "warnings": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "search_type",
        +    "format",
        +    "response_mode",
        +    "results",
        +    "returned_count",
        +    "total_hits",
        +    "next_cursor",
        +    "source",
        +    "retrieved_at",
        +    "warnings"
        +  ],
        +  "type": "object"
        +}
    • Changednasa_donki7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / endDate / description
        Previous value: -"End date (YYYY-MM-DD)"New value: +"End date (YYYY-MM-DD), at most 30 days after startDate. Defaults to today."
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Return only the most recent N events. Applied by this server; DONKI has no limit parameter.",
        +  "maximum": 1000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / response_mode
        Added value: +{
        +  "default": "compact",
        +  "description": "compact (default): one line per event with its key fields. raw: the full DONKI records as JSON (large for cme, cmea and wsa).",
        +  "enum": [
        +    "compact",
        +    "raw"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / startDate / description
        Previous value: -"Start date (YYYY-MM-DD)"New value: +"Start date (YYYY-MM-DD). With only endDate, 30 days before endDate; with neither, the last 30 days."
      • changedInput schema / properties / type / description
        Previous value: -"Type of space weather event"New value: +"Event type: cme, cmea, gst, ips, flr, sep, mpc, rbe, hss, wsa, notifications."
      • addedInput schema / properties / type / enum
        Added value: +[
        +  "cme",
        +  "cmea",
        +  "gst",
        +  "ips",
        +  "flr",
        +  "sep",
        +  "mpc",
        +  "rbe",
        +  "hss",
        +  "wsa",
        +  "notifications"
        +]
    • Changednasa_eonet18 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / category / description
        Previous value: -"Event category (wildfires, volcanoes, etc.)"New value: +"EONET category ID(s), comma-separated: e.g. wildfires, severeStorms, volcanoes, seaLakeIce."
      • addedInput schema / properties / category / pattern
        Added value: +"^[A-Za-z]+(,[A-Za-z]+)*$"
      • addedInput schema / properties / days / default
        Added value: +60
      • changedInput schema / properties / days / description
        Previous value: -"Number of days to look back"New value: +"Only events active within this many prior days."
      • addedInput schema / properties / days / maximum
        Added value: +3650
      • addedInput schema / properties / days / minimum
        Added value: +1
      • changedInput schema / properties / days / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / limit / default
        Added value: +50
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of events to return"New value: +"Maximum number of events (1-500)."
      • addedInput schema / properties / limit / maximum
        Added value: +500
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / source / description
        Previous value: -"Data source"New value: +"EONET source ID(s), comma-separated, e.g. InciWeb,EO."
      • addedInput schema / properties / source / pattern
        Added value: +"^[A-Za-z0-9_]+(,[A-Za-z0-9_]+)*$"
      • addedInput schema / properties / status / default
        Added value: +"all"
      • changedInput schema / properties / status / description
        Previous value: -"Event status (open, closed)"New value: +"Event status filter."
      • addedInput schema / properties / status / enum
        Added value: +[
        +  "open",
        +  "closed",
        +  "all"
        +]
    • Changednasa_epic6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / collection / default
        Added value: +"natural"
      • changedInput schema / properties / collection / description
        Previous value: -"Image collection (natural or enhanced)"New value: +"Image collection."
      • addedInput schema / properties / collection / enum
        Added value: +[
        +  "natural",
        +  "enhanced"
        +]
      • changedInput schema / properties / date / description
        Previous value: -"Date of the image (YYYY-MM-DD)"New value: +"Date of the images (YYYY-MM-DD). Defaults to the most recent available day."
      • addedInput schema / properties / max_images
        Added value: +{
        +  "default": 1,
        +  "description": "How many images to embed (0-3, JPEG). All images are listed with PNG and JPEG URLs.",
        +  "maximum": 3,
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Changednasa_exoplanet15 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / format
        Added value: +{
        +  "default": "json",
        +  "description": "Result format.",
        +  "enum": [
        +    "json",
        +    "csv"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / limit / default
        Added value: +100
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of results"New value: +"Maximum rows (1-1000)."
      • addedInput schema / properties / limit / maximum
        Added value: +1000
      • addedInput schema / properties / limit / minimum
        Added value: +1
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / order / description
        Previous value: -"Ordering of results"New value: +"ADQL ORDER BY expression, e.g. pl_name."
      • addedInput schema / properties / order / minLength
        Added value: +1
      • changedInput schema / properties / select / description
        Previous value: -"Columns to return"New value: +"Columns to return (ADQL select list). Defaults to *."
      • addedInput schema / properties / select / minLength
        Added value: +1
      • changedInput schema / properties / table / description
        Previous value: -"Database table to query"New value: +"TAP table, e.g. ps (Planetary Systems), pscomppars, cumulative (Kepler KOI), toi."
      • addedInput schema / properties / table / pattern
        Added value: +"^[A-Za-z_][A-Za-z0-9_]*$"
      • changedInput schema / properties / where / description
        Previous value: -"Filter conditions"New value: +"ADQL WHERE condition, e.g. disc_year > 2020 and discoverymethod = 'Transit'."
      • addedInput schema / properties / where / minLength
        Added value: +1
    • Changednasa_firms19 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / bbox
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "number"
        +      },
        +      "maxItems": 4,
        +      "minItems": 4,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Area as west,south,east,north in decimal degrees (preferred). Antimeridian-crossing boxes are rejected."
        +}
      • addedInput schema / properties / date
        Added value: +{
        +  "description": "First day of the window (YYYY-MM-DD); FIRMS returns [date, date + days - 1]. Omit for the most recent data.",
        +  "type": "string"
        +}
      • addedInput schema / properties / days / default
        Added value: +1
      • changedInput schema / properties / days / description
        Previous value: -"Number of days of data to retrieve"New value: +"DAY_RANGE: number of days of detections (1-5)."
      • addedInput schema / properties / days / maximum
        Added value: +5
      • addedInput schema / properties / days / minimum
        Added value: +1
      • changedInput schema / properties / days / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude coordinate"New value: +"Legacy area center latitude; requires longitude and radius_km."
      • addedInput schema / properties / latitude / maximum
        Added value: +90
      • addedInput schema / properties / latitude / minimum
        Added value: +-90
      • addedInput schema / properties / limit
        Added value: +{
        +  "default": 100,
        +  "description": "Maximum detections returned (1-2000). total_detections reports the full count.",
        +  "maximum": 2000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / longitude / description
        Previous value: -"Longitude coordinate"New value: +"Legacy area center longitude; requires latitude and radius_km."
      • addedInput schema / properties / longitude / maximum
        Added value: +180
      • addedInput schema / properties / longitude / minimum
        Added value: +-180
      • addedInput schema / properties / radius_km
        Added value: +{
        +  "description": "Half-width in kilometres of the box built around latitude/longitude (converted to a bbox before querying).",
        +  "exclusiveMinimum": 0,
        +  "maximum": 500,
        +  "type": "number"
        +}
      • addedInput schema / properties / source
        Added value: +{
        +  "default": "VIIRS_SNPP_NRT",
        +  "description": "FIRMS sensor/product. *_NRT is near real-time, *_SP is standard processing.",
        +  "enum": [
        +    "LANDSAT_NRT",
        +    "MODIS_NRT",
        +    "MODIS_SP",
        +    "VIIRS_NOAA20_NRT",
        +    "VIIRS_NOAA20_SP",
        +    "VIIRS_NOAA21_NRT",
        +    "VIIRS_SNPP_NRT",
        +    "VIIRS_SNPP_SP"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "latitude",
        -  "longitude"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "columns": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "detections": {
        +      "items": {
        +        "additionalProperties": {
        +          "type": [
        +            "string",
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "error": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "http_status": {
        +          "anyOf": [
        +            {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "kind": {
        +          "type": "string"
        +        },
        +        "message": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "kind",
        +        "message",
        +        "http_status"
        +      ],
        +      "type": "object"
        +    },
        +    "query": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "bbox": {
        +          "items": {
        +            "type": "number"
        +          },
        +          "maxItems": 4,
        +          "minItems": 4,
        +          "type": "array"
        +        },
        +        "date": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "day_range": {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        "derived_from": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "latitude": {
        +                  "type": "number"
        +                },
        +                "longitude": {
        +                  "type": "number"
        +                },
        +                "radius_km": {
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "latitude",
        +                "longitude",
        +                "radius_km"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "source": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "source",
        +        "bbox",
        +        "day_range",
        +        "date",
        +        "derived_from"
        +      ],
        +      "type": "object"
        +    },
        +    "retrieved_at": {
        +      "type": "string"
        +    },
        +    "returned_count": {
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "source": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "retrieved_at": {
        +          "type": "string"
        +        },
        +        "service": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "service",
        +        "url",
        +        "retrieved_at"
        +      ],
        +      "type": "object"
        +    },
        +    "status": {
        +      "enum": [
        +        "success",
        +        "no_results",
        +        "error"
        +      ],
        +      "type": "string"
        +    },
        +    "total_detections": {
        +      "anyOf": [
        +        {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ]
        +    },
        +    "warnings": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "status",
        +    "query",
        +    "total_detections",
        +    "returned_count",
        +    "columns",
        +    "detections",
        +    "source",
        +    "retrieved_at",
        +    "warnings"
        +  ],
        +  "type": "object"
        +}
    • Changednasa_gibs12 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / bbox
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "number"
        +      },
        +      "maxItems": 4,
        +      "minItems": 4,
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Area as west,south,east,north in decimal degrees (EPSG:4326). Defaults to the whole globe."
        +}
      • changedInput schema / properties / date / description
        Previous value: -"Date of imagery (YYYY-MM-DD)"New value: +"Imagery date (YYYY-MM-DD)."
      • addedInput schema / properties / format / default
        Added value: +"png"
      • changedInput schema / properties / format / description
        Previous value: -"Image format (png, jpg, jpeg)"New value: +"Image format."
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "png",
        +  "jpg",
        +  "jpeg"
        +]
      • changedInput schema / properties / layer / description
        Previous value: -"Layer name (e.g., MODIS_Terra_CorrectedReflectance_TrueColor)"New value: +"GIBS layer identifier, e.g. MODIS_Terra_CorrectedReflectance_TrueColor"
      • addedInput schema / properties / layer / pattern
        Added value: +"^[A-Za-z0-9_.-]+$"
      • addedInput schema / properties / resolution / default
        Added value: +2
      • changedInput schema / properties / resolution / description
        Previous value: -"Resolution in pixels per degree"New value: +"Output resolution in pixels per degree (default 2, i.e. 720x360 for the whole globe)."
      • addedInput schema / properties / resolution / exclusiveMinimum
        Added value: +0
      • addedInput schema / properties / resolution / maximum
        Added value: +40
    • Changednasa_images16 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / max_images
        Added value: +{
        +  "default": 3,
        +  "description": "How many preview thumbnails to embed (0-5). Every item is listed with its URLs.",
        +  "maximum": 5,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / media_type / description
        Previous value: -"Media type (image, video, audio)"New value: +"Restrict to one media type."
      • addedInput schema / properties / media_type / enum
        Added value: +[
        +  "image",
        +  "video",
        +  "audio"
        +]
      • addedInput schema / properties / page / default
        Added value: +1
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination"New value: +"Result page (1-based)."
      • addedInput schema / properties / page / maximum
        Added value: +100
      • addedInput schema / properties / page / minimum
        Added value: +1
      • changedInput schema / properties / page / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / page_size
        Added value: +{
        +  "default": 10,
        +  "description": "Results per page (1-100).",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedInput schema / properties / q / description
        Previous value: -"Search query"New value: +"Free-text search terms."
      • addedInput schema / properties / q / minLength
        Added value: +1
      • changedInput schema / properties / year_end / description
        Previous value: -"End year for results"New value: +"Latest year (YYYY)."
      • addedInput schema / properties / year_end / pattern
        Added value: +"^\\d{4}$"
      • changedInput schema / properties / year_start / description
        Previous value: -"Start year for results"New value: +"Earliest year (YYYY)."
      • addedInput schema / properties / year_start / pattern
        Added value: +"^\\d{4}$"
    • Addednasa_insight_weather
    • Changednasa_mars_rover15 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / camera / description
        Previous value: -"Camera name"New value: +"Camera abbreviation, e.g. FHAZ, NAVCAM."
      • addedInput schema / properties / camera / pattern
        Added value: +"^[A-Za-z_]+$"
      • changedInput schema / properties / earth_date / description
        Previous value: -"Earth date of the photos (YYYY-MM-DD)"New value: +"Earth date of the photos (YYYY-MM-DD). Provide sol or earth_date."
      • addedInput schema / properties / max_images
        Added value: +{
        +  "default": 3,
        +  "description": "How many photos to embed (0-5).",
        +  "maximum": 5,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / page / description
        Previous value: -"Page number for pagination"New value: +"Result page (25 photos per page)."
      • addedInput schema / properties / page / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / page / minimum
        Added value: +1
      • changedInput schema / properties / page / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / rover / description
        Previous value: -"Name of the rover (curiosity, opportunity, spirit, perseverance)"New value: +"Rover name."
      • addedInput schema / properties / rover / enum
        Added value: +[
        +  "curiosity",
        +  "opportunity",
        +  "perseverance",
        +  "spirit"
        +]
      • changedInput schema / properties / sol / description
        Previous value: -"Martian sol (day) of the photos"New value: +"Martian sol of the photos. Provide sol or earth_date."
      • addedInput schema / properties / sol / maximum
        Added value: +9007199254740991
      • addedInput schema / properties / sol / minimum
        Added value: +0
      • changedInput schema / properties / sol / type
        Previous value: -"number"New value: +"integer"
    • Changednasa_neo6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / asteroid_id / description
        Previous value: -"ID of a specific asteroid"New value: +"Look up one asteroid by its NeoWs ID instead of the date feed."
      • addedInput schema / properties / asteroid_id / pattern
        Added value: +"^\\d+$"
      • changedInput schema / properties / end_date / description
        Previous value: -"End date for asteroid search (YYYY-MM-DD)"New value: +"End date (YYYY-MM-DD), at most 7 days after start_date. Defaults to start_date."
      • changedInput schema / properties / start_date / description
        Previous value: -"Start date for asteroid search (YYYY-MM-DD)"New value: +"Start date for the close-approach feed (YYYY-MM-DD). Defaults to today (UTC)."
      • removedInput schema / required
        Removed value: -[
        -  "start_date",
        -  "end_date"
        -]
    • Changednasa_osdr_files3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / accession_number / description
        Previous value: -"OSD study accession number (e.g., '87')"New value: +"OSD study accession number, e.g. 87 or OSD-87."
      • addedInput schema / properties / accession_number / pattern
        Added value: +"^(OSD-)?\\d+$"
    • Changednasa_power18 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / community / description
        Previous value: -"User community (RE, SB, AG, etc.)"New value: +"User community: RE (renewable energy), SB (sustainable buildings), AG (agroclimatology)."
      • addedInput schema / properties / community / enum
        Added value: +[
        +  "RE",
        +  "SB",
        +  "AG"
        +]
      • changedInput schema / properties / end / description
        Previous value: -"End date (YYYYMMDD)"New value: +"End date (YYYYMMDD)."
      • addedInput schema / properties / format / default
        Added value: +"json"
      • changedInput schema / properties / format / description
        Previous value: -"Response format (json, csv, etc.)"New value: +"Response format."
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "json",
        +  "csv"
        +]
      • changedInput schema / properties / latitude / description
        Previous value: -"Latitude coordinate"New value: +"Latitude in decimal degrees."
      • addedInput schema / properties / latitude / maximum
        Added value: +90
      • addedInput schema / properties / latitude / minimum
        Added value: +-90
      • changedInput schema / properties / longitude / description
        Previous value: -"Longitude coordinate"New value: +"Longitude in decimal degrees."
      • addedInput schema / properties / longitude / maximum
        Added value: +180
      • addedInput schema / properties / longitude / minimum
        Added value: +-180
      • changedInput schema / properties / parameters / description
        Previous value: -"Comma-separated data parameters"New value: +"Comma-separated POWER parameters, e.g. T2M,PRECTOTCORR,WS10M."
      • addedInput schema / properties / parameters / pattern
        Added value: +"^[A-Za-z0-9_]+(,[A-Za-z0-9_]+)*$"
      • changedInput schema / properties / start / description
        Previous value: -"Start date (YYYYMMDD)"New value: +"Start date (YYYYMMDD)."
      • addedInput schema / properties / time_standard
        Added value: +{
        +  "description": "Time standard for daily values; POWER defaults to LST (local solar time) when omitted.",
        +  "enum": [
        +    "utc",
        +    "lst"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "parameters",
        -  "community",
        -  "longitude",
        -  "latitude",
        -  "start",
        -  "end"
        -]New value: +[
        +  "parameters",
        +  "community",
        +  "latitude",
        +  "longitude",
        +  "start",
        +  "end"
        +]
    • Addednasa_ssc_locations
    • Addednasa_ssc_observatories
    • Addednasa_techport
    • Addednasa_techtransfer
    • Addednasa_tle
    • Addednasa_trek_layers
    • Addednasa_trek_tile
  2. 2 tool updatesv1.0.0
    • Changednasa_cmr3 fields changed
      • addedInput schema / properties / format
        Added value: +{
        +  "default": "json",
        +  "description": "Response format",
        +  "enum": [
        +    "json",
        +    "umm_json",
        +    "atom",
        +    "echo10",
        +    "iso19115",
        +    "iso_smap",
        +    "kml"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / search_type
        Added value: +{
        +  "default": "collections",
        +  "description": "Search type (collections or granules)",
        +  "enum": [
        +    "collections",
        +    "granules"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "keyword"
        -]New value: +[
        +  "keyword",
        +  "search_type",
        +  "format"
        +]
    • Removednasa_earth
  3. 24 tool updates
    • First observedjpl_cad
    • First observedjpl_fireball
    • First observedjpl_horizons
    • First observedjpl_horizons_file
    • First observedjpl_jd_cal
    • First observedjpl_nhats
    • First observedjpl_periodic_orbits
    • First observedjpl_sbdb
    • First observedjpl_scout
    • First observedjpl_sentry
    • First observednasa_apod
    • First observednasa_cmr
    • First observednasa_donki
    • First observednasa_earth
    • First observednasa_eonet
    • First observednasa_epic
    • First observednasa_exoplanet
    • First observednasa_firms
    • First observednasa_gibs
    • First observednasa_images
    • First observednasa_mars_rover
    • First observednasa_neo
    • First observednasa_osdr_files
    • First observednasa_power

TDQS

B3.3/5.0

Scored across 32 tools

Disambiguation3/5

Most tools target distinct NASA data sources, but several pairs overlap: nasa_neo and jpl_cad both handle close approaches, jpl_sentry and jpl_scout both assess impact risk, and jpl_horizons and jpl_horizons_file offer the same data via different HTTP methods. Descriptions help distinguish these, but an agent could still misselect.

Naming Consistency5/5

All tool names use consistent snake_case with a clear provider prefix (nasa_ or jpl_) and service-oriented nouns. The pattern is predictable throughout, with only minor abbreviations like jpl_jd_cal that still fit the convention.

Tool Count2/5

32 tools is well above the recommended 3–15 range and feels heavy even for a broad NASA data server. While each tool maps to a distinct API, the set would be more manageable if split into focused sub-servers.

Completeness3/5

The surface covers many NASA APIs but misses major ones like NTRS, ADS, PDS, and HEASARC. Additionally, some included tools are deprecated or frozen (nasa_mars_rover, nasa_insight_weather), creating dead ends that limit reliable coverage.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    An MCP server that enables LLMs to query data from various NASA APIs, allowing access to astronomical data, space weather information, Earth imagery, and exoplanet information directly from compatible AI clients.
    21
    6
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Multi-Agent Conversation Protocol server for accessing NASA's Astronomy Picture of the Day (APOD) API, allowing users to retrieve space imagery and related information through natural language interactions.
    -
  • A
    license
    A
    quality
    C
    maintenance
    MCP server providing AI agents with access to NASA and space/astronomy data including APOD, Mars rover photos, near-Earth asteroids, exoplanets, Earth imagery, natural events, and space weather.
    11
    MIT