NASA MCP Server
NASA MCP 服务器
一个用于 NASA API 的模型上下文协议 (MCP) 服务器,为 AI 模型提供标准化接口,使其能够与 NASA 的海量数据源进行交互。该服务器实现了官方的模型上下文协议规范。
非常感谢 MCP 社区的支持和指导!
特征
通过单一、一致的界面访问 20 多个 NASA 数据源
针对人工智能消费优化的标准化数据格式
自动参数验证和错误处理
NASA API 密钥的速率限制管理
全面的文档和示例
支持各种 NASA 图像格式
数据转换和格式化以实现 LLM 兼容性
跨平台支持(Windows、macOS、Linux)
Related MCP server: NASA APOD MCP Server
免责声明
**本项目与美国国家航空航天局 (NASA) 或其任何子公司或附属机构均无关联、认可或相关关系。**它是一个独立的实现,可访问 NASA 的公开 API。所有使用的 NASA 数据均公开,并受 NASA 数据使用政策的约束。
安装
使用 npx 运行
env NASA_API_KEY=YOUR_API_KEY npx -y @programcomputer/nasa-mcp-server@latest您还可以将 API 密钥作为命令行参数传递:
npx -y @programcomputer/nasa-mcp-server@latest --nasa-api-key=YOUR_API_KEY使用 SuperGateway 发送服务器发送事件 (SSE)
您可以使用SuperGateway进行服务器发送事件 (SSE)。
NASA-MCP-server 的开发者不认可 SuperGateway 仓库。此信息仅供希望自行实现 SSE 功能的用户参考。
手动安装
# 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在光标上运行
配置 Cursor 🖥️ 注意:需要 Cursor 版本 0.45.6+
要在 Cursor 中配置 NASA MCP 服务器:
在您的 Cursor 配置目录中创建或编辑mcp.json文件,其中包含以下内容:
{
"mcpServers": {
"nasa-mcp": {
"command": "npx",
"args": ["-y", "@programcomputer/nasa-mcp-server@latest"],
"env": {
"NASA_API_KEY": "your-api-key"
}
}
}
}将your-api-key替换为来自https://api.nasa.gov/的 NASA API 密钥。
添加配置后,重新启动 Cursor 即可看到新的 NASA 工具。Composer Agent 会在适当的情况下自动使用 NASA MCP 进行与空间相关的查询。
环境变量
可以使用以下环境变量配置服务器:
多变的 | 描述 |
| 您的 NASA API 密钥(从 api.nasa.gov 获取) |
包含 NASA API
该 MCP 服务器集成了以下 NASA API:
NASA开放API (api.nasa.gov):
APOD(每日天文图片)
EPIC(地球多色成像相机)
DONKI(空间天气通知、知识、信息数据库)
洞察号(火星气象服务)
火星探测器照片
NEO(近地天体网络服务)
EONET(地球观测站自然事件追踪器)
TLE(双线元件)
美国宇航局图像和视频库
系外行星档案
NASA 声音 API(测试版)
电力(全球能源资源预测)
JPL太阳系动力学API (ssd-api.jpl.nasa.gov):
SBDB(小体数据库)
SBDB近距离数据
火球数据
侦察 API
地球数据API :
GIBS(全球图像浏览服务)
CMR(通用元数据存储库)——增强了高级搜索功能
EPIC(地球多色成像相机)
FIRMS(资源管理系统火灾信息)
API 方法
每个 NASA API 都通过标准化 MCP 方法公开:
APOD(每日天文图片)
{
"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
}
}火星探测器照片
{
"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
}
}近地天体
{
"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(全球图像浏览服务)
{
"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"
}
}电力(全球能源资源预测)
{
"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)
}
}有关所有可用方法和参数的完整文档,请参阅/docs目录中的 API 参考。
日志系统
该服务器包括全面的日志记录:
运营状况及进展
性能指标
速率限制跟踪
错误条件
请求验证
日志消息示例:
[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安全注意事项
该 MCP 服务器遵循模型上下文协议规范实现安全最佳实践:
使用 Zod 模式进行输入验证和清理
禁止执行任意代码
防止命令注入
适当的错误处理以防止信息泄露
API 请求的速率限制和超时控制
没有可跨会话利用的持久状态
发展
# 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使用 MCP Inspector 进行测试
NASA MCP 服务器包含一个脚本,可帮助您使用 MCP 检查器测试 API:
# Run the provided test script
./scripts/test-with-inspector.sh这将:
构建项目以确保包含最新的更改
在 NASA MCP 服务器运行的情况下启动 MCP 检查器
允许您以交互方式测试所有 NASA API
测试请求示例
该存储库包含每个 API 的示例测试请求,您可以将其复制并粘贴到 MCP 检查器中:
# View the example test requests
cat docs/inspector-test-examples.md有关详细示例,请参阅Inspector 测试示例文档。
MCP 客户端使用
此服务器遵循官方模型上下文协议 (Model Context Protocol)。以下是如何将其与 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"
}
});贡献
分叉存储库
创建你的功能分支
运行测试:
npm test提交拉取请求
执照
ISC 许可证 - 详情请参阅许可证文件
Available Tools
32 toolsjpl_cadJPL close approachesCRead-onlyIdempotent
Asteroid and comet close approaches to the planets, past and future, from the JPL SBDB Close-Approach Data API.
| Name | Required | Description | Default |
|---|---|---|---|
| des | No | Only this object (designation). | |
| neo | No | Limit to NEOs (default true upstream). | |
| spk | No | Only this object (SPK-ID). | |
| body | No | Close-approach body (Earth, Mars, ALL, ...). Default Earth. | |
| sort | No | Sort field, prefix - for descending. Default date. | |
| h_max | No | Maximum absolute magnitude H. | |
| h_min | No | Minimum absolute magnitude H. | |
| limit | No | Maximum number of records (1-1000). | |
| date_max | No | End date (YYYY-MM-DD, now, or +/-days). Default +60. | |
| date_min | No | Start date (YYYY-MM-DD, now, or +/-days). Default now. | |
| dist_max | No | Maximum approach distance, e.g. 0.05 (au) or 10LD. Default 0.05 au. | |
| dist_min | No | Minimum approach distance. | |
| fullname | No | Include full object names. |
TDQS
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.
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.
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.
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.
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.
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 eventsBRead-onlyIdempotent
Fireball (bolide) events reported by US Government sensors, from the JPL Fireball API.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of events (1-1000). | |
| req_alt | No | Only events with an altitude. | |
| req_loc | No | Only events with a location. | |
| req_vel | No | Only events with a velocity. | |
| vel_max | No | Maximum velocity (km/s). | |
| vel_min | No | Minimum velocity (km/s). | |
| date_max | No | Latest event date (YYYY-MM-DD). | |
| date_min | No | Earliest event date (YYYY-MM-DD). | |
| energy_max | No | Maximum total radiated energy (1e10 J). | |
| energy_min | No | Minimum total radiated energy (1e10 J). | |
| impact_e_max | No | Maximum estimated impact energy (kt). | |
| impact_e_min | No | Minimum estimated impact energy (kt). | |
| req_vel_comp | No | Only events with velocity components. |
TDQS
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.
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.
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.
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.
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.
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 ephemeridesCRead-onlyIdempotent
Ephemerides and object data for solar-system bodies from the JPL Horizons API (GET).
| Name | Required | Description | Default |
|---|---|---|---|
| CENTER | No | Coordinate center, e.g. '500@399' (geocentric). | |
| format | No | Response format. | json |
| COMMAND | Yes | Target, e.g. '499' (Mars), '1;' (Ceres), 'C/2020 F3'. | |
| OBJ_DATA | No | Include object data. | |
| OUT_UNITS | No | Output units for vector/element tables. | |
| STEP_SIZE | No | Step size, e.g. '1d' or '1h'. | |
| STOP_TIME | No | Stop time, e.g. '2024-01-02'. | |
| EPHEM_TYPE | No | Ephemeris type. | |
| MAKE_EPHEM | No | Generate an ephemeris. | |
| QUANTITIES | No | Observer quantities, e.g. 'A' or '1,2,20,23'. | |
| START_TIME | No | Start time, e.g. '2024-01-01'. |
TDQS
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.
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.
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.
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.
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.
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)BRead-onlyIdempotent
Same as jpl_horizons, but submits the parameters as a Horizons input file (POST to horizons_file.api).
| Name | Required | Description | Default |
|---|---|---|---|
| CENTER | No | Coordinate center, e.g. '500@399' (geocentric). | |
| format | No | Response format. | json |
| COMMAND | Yes | Target, e.g. '499' (Mars), '1;' (Ceres), 'C/2020 F3'. | |
| OBJ_DATA | No | Include object data. | |
| OUT_UNITS | No | Output units for vector/element tables. | |
| STEP_SIZE | No | Step size, e.g. '1d' or '1h'. | |
| STOP_TIME | No | Stop time, e.g. '2024-01-02'. | |
| EPHEM_TYPE | No | Ephemeris type. | |
| MAKE_EPHEM | No | Generate an ephemeris. | |
| QUANTITIES | No | Observer quantities, e.g. 'A' or '1,2,20,23'. | |
| START_TIME | No | Start time, e.g. '2024-01-01'. |
TDQS
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.
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.
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.
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.
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.
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 converterBRead-onlyIdempotent
Convert between Julian dates and calendar dates (UTC) with the JPL JD-Calendar API.
| Name | Required | Description | Default |
|---|---|---|---|
| cd | No | Calendar date (UTC) to convert to a Julian date. | |
| jd | No | Julian date to convert to a calendar date. |
TDQS
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.
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.
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.
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.
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.
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 designARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| des | No | Object mode: designation, e.g. 2012 TC4 or 433. | |
| lim | No | List mode: how many accessible objects to return (1-200). | |
| spk | No | Object mode: SPK-ID, e.g. 2000433. | |
| crit | No | List 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. | |
| sstr | No | Object mode: search string (name, designation or SPK-ID), e.g. apophis. | |
| year | No | List mode: launch year(s), from the current year up to 20 years ahead. JPL defaults to the next five years. | |
| class | No | Object mode: orbit class as a name instead of the three-letter code. | |
| sb_ns | No | List mode: numbered (n) or unnumbered (u) objects only. | |
| sb_sat | No | List mode: only objects with at least one known satellite. | |
| sb_kind | No | List mode: asteroids (a) or comets (c) only. | |
| sb_class | No | List mode: orbit class code(s), e.g. APO or MBA,OMB (case-sensitive). | |
| sb_group | No | List mode: NEOs or PHAs only. | |
| sb_xfrag | No | List mode: exclude comet fragments. |
TDQS
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.
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.
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.
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.
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.
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 NEOsBRead-onlyIdempotent
Near-Earth objects accessible to human missions (NHATS): a constrained summary list, or one object by des/spk.
| Name | Required | Description | Default |
|---|---|---|---|
| h | No | Maximum absolute magnitude H (16-30). | |
| dv | No | Maximum total delta-V in km/s (4-12). | |
| des | No | Object designation, e.g. 99942 (object mode). | |
| dur | No | Maximum total mission duration in days (60-450). | |
| occ | No | Maximum orbit condition code (0-8). | |
| spk | No | Object SPK-ID (object mode). | |
| plot | No | Include a base64 plot (object mode; large). | |
| stay | No | Minimum stay at the NEO in days (8, 16, 24 or 32). | |
| launch | No | Launch window. |
TDQS
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.
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.
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.
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.
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.
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 orbitsCRead-onlyIdempotent
Periodic orbits (halo, DRO, Lyapunov, ...) in three-body systems from the JPL Three-Body Periodic Orbits database.
| Name | Required | Description | Default |
|---|---|---|---|
| sys | Yes | Three-body system, e.g. earth-moon, sun-earth, mars-phobos. | |
| libr | No | Libration point 1-5 (required by some families). | |
| branch | No | Branch (required by some families), e.g. N or S. | |
| family | Yes | Orbit family, e.g. halo, dro, lyapunov, vertical, axial, butterfly. | |
| stabmax | No | Maximum stability index. | |
| stabmin | No | Minimum stability index. | |
| jacobimax | No | Maximum Jacobi constant. | |
| jacobimin | No | Minimum Jacobi constant. | |
| periodmax | No | Maximum period. | |
| periodmin | No | Minimum period. | |
| periodunits | No | Units for periodmin/periodmax. |
TDQS
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.
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.
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.
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.
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.
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 lookupBRead-onlyIdempotent
Orbital and physical data for one asteroid or comet from the JPL Small-Body Database (SBDB).
| Name | Required | Description | Default |
|---|---|---|---|
| cad | No | DEPRECATED alias for ca_data. | |
| des | No | Primary designation or IAU number. | |
| sat | No | Include satellite data. | |
| spk | No | SPK-ID of the object. | |
| sstr | No | Search string: name, designation or number (e.g. Ceres, 433, 2019 OK). | |
| ca_body | No | Limit close approaches to this body (e.g. Earth); needs ca_data. | |
| ca_data | No | Include close-approach data. | |
| vi_data | No | Include Sentry virtual-impactor data. | |
| phys_par | No | Include physical parameters. | |
| discovery | No | Include discovery circumstances. | |
| full_prec | No | Full-precision orbital elements. | |
| alt_orbits | No | Include alternate orbits. |
TDQS
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.
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.
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.
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.
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.
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 assessmentBRead-onlyIdempotent
JPL Scout trajectory analysis and hazard assessment for unconfirmed objects on the Minor Planet Center NEO Confirmation Page.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Object mode: include the observation file as a list or in MPC format. | |
| plot | No | Object mode: base64 plots to include: el (elements), ca (close approach), sr (systematic ranging), colon-separated. | |
| tdes | No | NEOCP temporary designation (object mode). | |
| limit | No | List mode: return at most this many objects. Applied by this server; Scout has no limit parameter. | |
| orbits | No | Object mode: include sampled orbits. | |
| n_orbits | No | Object mode: number of sampled orbits (1-1000). |
TDQS
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.
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.
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.
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.
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.
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 riskBRead-onlyIdempotent
Earth impact risk assessments from JPL Sentry: summary table, one object, virtual impactors, or removed objects.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Virtual-impactor mode: all VIs (combine with ip_min/ps_min/h_max to narrow). | |
| des | No | Object mode: designation, e.g. 29075 or 2011 AG5. | |
| spk | No | Object mode: SPK-ID. | |
| h_max | No | Summary/VI mode: maximum absolute magnitude H. | |
| limit | No | Return at most this many records from list modes. Applied by this server: Sentry has no limit parameter. | |
| ip_min | No | Summary/VI mode: minimum impact probability, e.g. 1e-5. | |
| ps_min | No | Summary/VI mode: minimum Palermo Scale value, e.g. -3. | |
| removed | No | List objects removed from Sentry. |
TDQS
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.
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.
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.
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.
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.
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 DayARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | 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. | |
| end_date | No | End of a date range (YYYY-MM-DD); requires start_date. Defaults to today (UTC) when start_date is given. | |
| max_images | No | How many pictures to embed as image content (0-5). Remaining entries are listed by URL. | |
| start_date | No | Start of a date range (YYYY-MM-DD). |
TDQS
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.
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.
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.
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.
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.
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 searchARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | No | Collections only: DOI, e.g. 10.5067/GHGMR-4FJ04. | |
| bbox | No | Compatibility alias for bounding_box (sent to CMR as bounding_box). | |
| line | No | Line "lon1,lat1,lon2,lat2,...". | |
| page | No | DEPRECATED page-number pagination (CMR page_num). Prefer cursor. Cannot be combined with cursor or offset. | |
| limit | No | Records per page (1-100). | |
| point | No | Point "lon,lat". | |
| circle | No | Circle "lon,lat,radius" with radius in metres (10-6000000). | |
| cursor | No | next_cursor from a previous response. Continue with the cursor alone; omitted filters are restored from it. | |
| fields | No | Compact mode only: normalized fields to return. concept_id is always included. Defaults to all fields except summary. | |
| format | No | Upstream CMR metadata format. json/umm_json support compact output; others are returned raw. dif, dif10, opendata: collections only; stac: granules only. | json |
| offset | No | DEPRECATED offset pagination. Prefer cursor. Cannot be combined with cursor or page. | |
| keyword | No | Collections only: free-text keyword search. | |
| polygon | No | Polygon "lon1,lat1,...,lon1,lat1": closed, counter-clockwise (CMR rejects clockwise rings). | |
| project | No | Project/campaign short name(s). | |
| version | No | Collection version. | |
| platform | No | Platform short name(s), e.g. Terra. | |
| provider | No | Provider ID(s), e.g. POCLOUD, LPCLOUD. | |
| sort_key | No | 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. | |
| temporal | No | 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,". | |
| browsable | No | Only records with (true) or without (false) browse imagery. | |
| concept_id | No | Concept ID(s). For granule searches a collection concept ID (C...) also selects that collection, as in CMR. | |
| instrument | No | Instrument short name(s), e.g. MODIS. | |
| short_name | No | Collection short name(s). | |
| cloud_cover | No | Granules only: cloud cover range "min,max" in percent. | |
| entry_title | No | Collection entry title. | |
| online_only | No | Only online (true) or offline (false) records. | |
| search_type | No | Search collections (datasets) or granules (files). | collections |
| bounding_box | No | Bounding box west,south,east,north (lon/lat degrees). west > east crosses the antimeridian (supported by CMR). | |
| cloud_hosted | No | Collections only: restrict to cloud-hosted (true) or not (false). | |
| downloadable | No | Only records with (true) or without (false) downloadable data links. | |
| has_granules | No | Collections only: require (true) or exclude (false) collections with granules. | |
| response_mode | No | compact (default for json/umm_json): normalized records. raw: upstream metadata as returned (default for other formats). | |
| day_night_flag | No | Granules only: DAY, NIGHT, BOTH or UNSPECIFIED. | |
| include_facets | No | Include CMR v2 facets (counts by keyword, platform, ...). | |
| granule_data_format | No | Collections only: granule data format(s), e.g. netCDF-4. | |
| processing_level_id | No | Collections only: processing level(s), e.g. 3, L2. | |
| producer_granule_id | No | Granules only: producer granule ID. | |
| collection_concept_id | No | Granules only: collection concept ID(s) to search within. | |
| readable_granule_name | No | Granules only: granule name (supports CMR * and ? wildcards). |
Output Schema
| Name | Required | Description |
|---|---|---|
| raw | No | |
| error | No | |
| facets | No | |
| format | Yes | |
| source | Yes | |
| status | Yes | |
| results | Yes | |
| warnings | Yes | |
| total_hits | Yes | |
| next_cursor | Yes | |
| search_type | Yes | |
| retrieved_at | Yes | |
| response_mode | Yes | |
| returned_count | Yes |
TDQS
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.
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.
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.
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.
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.
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 weatherARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Event type: cme, cmea, gst, ips, flr, sep, mpc, rbe, hss, wsa, notifications. | |
| limit | No | Return only the most recent N events. Applied by this server; DONKI has no limit parameter. | |
| endDate | No | End date (YYYY-MM-DD), at most 30 days after startDate. Defaults to today. | |
| startDate | No | Start date (YYYY-MM-DD). With only endDate, 30 days before endDate; with neither, the last 30 days. | |
| response_mode | No | compact (default): one line per event with its key fields. raw: the full DONKI records as JSON (large for cme, cmea and wsa). | compact |
TDQS
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.
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.
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.
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.
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.
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 eventsBRead-onlyIdempotent
Natural events (wildfires, storms, volcanoes, ice, ...) from the Earth Observatory Natural Event Tracker. Filters are sent exactly as given; no automatic broadening.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Only events active within this many prior days. | |
| limit | No | Maximum number of events (1-500). | |
| source | No | EONET source ID(s), comma-separated, e.g. InciWeb,EO. | |
| status | No | Event status filter. | all |
| category | No | EONET category ID(s), comma-separated: e.g. wildfires, severeStorms, volcanoes, seaLakeIce. |
TDQS
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.
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.
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.
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.
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.
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 imageryBRead-onlyIdempotent
Earth Polychromatic Imaging Camera (DSCOVR) full-disc Earth images for a day: metadata for every image plus a bounded number embedded.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date of the images (YYYY-MM-DD). Defaults to the most recent available day. | |
| collection | No | Image collection. | natural |
| max_images | No | How many images to embed (0-3, JPEG). All images are listed with PNG and JPEG URLs. |
TDQS
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.
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.
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.
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.
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.
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 queryBRead-onlyIdempotent
Query the NASA Exoplanet Archive through its TAP service (ADQL). Tables use current TAP names such as ps, pscomppars, cumulative and toi.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum rows (1-1000). | |
| order | No | ADQL ORDER BY expression, e.g. pl_name. | |
| table | Yes | TAP table, e.g. ps (Planetary Systems), pscomppars, cumulative (Kepler KOI), toi. | |
| where | No | ADQL WHERE condition, e.g. disc_year > 2020 and discoverymethod = 'Transit'. | |
| format | No | Result format. | json |
| select | No | Columns to return (ADQL select list). Defaults to *. |
TDQS
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.
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.
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.
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.
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.
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 detectionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Area as west,south,east,north in decimal degrees (preferred). Antimeridian-crossing boxes are rejected. | |
| date | No | First day of the window (YYYY-MM-DD); FIRMS returns [date, date + days - 1]. Omit for the most recent data. | |
| days | No | DAY_RANGE: number of days of detections (1-5). | |
| limit | No | Maximum detections returned (1-2000). total_detections reports the full count. | |
| source | No | FIRMS sensor/product. *_NRT is near real-time, *_SP is standard processing. | VIIRS_SNPP_NRT |
| latitude | No | Legacy area center latitude; requires longitude and radius_km. | |
| longitude | No | Legacy area center longitude; requires latitude and radius_km. | |
| radius_km | No | Half-width in kilometres of the box built around latitude/longitude (converted to a bbox before querying). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| query | Yes | |
| source | Yes | |
| status | Yes | |
| columns | Yes | |
| warnings | Yes | |
| detections | Yes | |
| retrieved_at | Yes | |
| returned_count | Yes | |
| total_detections | Yes |
TDQS
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.
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.
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.
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.
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.
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 imageryBRead-onlyIdempotent
Render a Global Imagery Browse Services (GIBS) layer for a date and bounding box as an image (WMS GetMap, EPSG:4326).
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | Area as west,south,east,north in decimal degrees (EPSG:4326). Defaults to the whole globe. | |
| date | Yes | Imagery date (YYYY-MM-DD). | |
| layer | Yes | GIBS layer identifier, e.g. MODIS_Terra_CorrectedReflectance_TrueColor | |
| format | No | Image format. | png |
| resolution | No | Output resolution in pixels per degree (default 2, i.e. 720x360 for the whole globe). |
TDQS
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.
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.
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.
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.
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.
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 searchBRead-onlyIdempotent
Search NASA's Image and Video Library. Returns item metadata and URLs, with a bounded number of preview thumbnails embedded.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Free-text search terms. | |
| page | No | Result page (1-based). | |
| year_end | No | Latest year (YYYY). | |
| page_size | No | Results per page (1-100). | |
| max_images | No | How many preview thumbnails to embed (0-5). Every item is listed with its URLs. | |
| media_type | No | Restrict to one media type. | |
| year_start | No | Earliest year (YYYY). |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| sol | No | Martian sol of the photos. Provide sol or earth_date. | |
| page | No | Result page (25 photos per page). | |
| rover | Yes | Rover name. | |
| camera | No | Camera abbreviation, e.g. FHAZ, NAVCAM. | |
| earth_date | No | Earth date of the photos (YYYY-MM-DD). Provide sol or earth_date. | |
| max_images | No | How many photos to embed (0-5). |
TDQS
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.
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.
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.
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.
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.
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 ServiceARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End date (YYYY-MM-DD), at most 7 days after start_date. Defaults to start_date. | |
| start_date | No | Start date for the close-approach feed (YYYY-MM-DD). Defaults to today (UTC). | |
| asteroid_id | No | Look up one asteroid by its NeoWs ID instead of the date feed. |
TDQS
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.
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.
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.
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.
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.
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 filesARead-onlyIdempotent
List the data files (with download links) for a NASA Open Science Data Repository (OSDR) study.
| Name | Required | Description | Default |
|---|---|---|---|
| accession_number | Yes | OSD study accession number, e.g. 87 or OSD-87. |
TDQS
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.
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.
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.
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.
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.
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 dataBRead-onlyIdempotent
Daily solar and meteorological data for a point from NASA POWER (Prediction Of Worldwide Energy Resources).
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End date (YYYYMMDD). | |
| start | Yes | Start date (YYYYMMDD). | |
| format | No | Response format. | json |
| latitude | Yes | Latitude in decimal degrees. | |
| community | Yes | User community: RE (renewable energy), SB (sustainable buildings), AG (agroclimatology). | |
| longitude | Yes | Longitude in decimal degrees. | |
| parameters | Yes | Comma-separated POWER parameters, e.g. T2M,PRECTOTCORR,WS10M. | |
| time_standard | No | Time standard for daily values; POWER defaults to LST (local solar time) when omitted. |
TDQS
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.
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.
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.
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.
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.
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 locationsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| end_time | Yes | End time (UTC); at most 366 days after start_time. | |
| start_time | Yes | Start time (UTC), e.g. 2026-09-29T06:00:00Z; a bare date such as 2026-09-29 means 00:00 UTC. | |
| observatories | Yes | 1-5 SSC observatory IDs, e.g. ["iss"] or ["mms1", "moon"] (see nasa_ssc_observatories). A comma-separated string also works. | |
| resolution_factor | No | Return every Nth point of each observatory's base resolution (60-720 s). Chosen automatically when omitted to keep the output bounded. | |
| coordinate_systems | No | Coordinate systems (default geo): geo, gm, gse, gsm, sm, geitod, geij2000. A comma-separated string also works. |
TDQS
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.
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.
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.
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.
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.
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 listARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Case-insensitive text to match in the observatory ID or name, e.g. "mms" or "GOES". | |
| active_on | No | Only observatories with location data on this date (YYYY-MM-DD). |
TDQS
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.
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.
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.
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.
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.
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 projectsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Search mode: how many projects to return (1-50, default 10). | |
| query | No | Search TechPort technology projects, e.g. "solar sail". Results are ordered by relevance. | |
| project_id | No | Fetch one project by its TechPort ID, e.g. 94703. |
TDQS
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.
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.
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.
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.
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.
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 searchARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many results to return (1-50). The service returns every match; the rest are counted but not shown. | |
| query | Yes | Keywords to search for, e.g. "engine" or "solar panel". | |
| collection | No | What to search: patent (licensable patents), patent_issued, software (NASA Software Catalog) or spinoff (Spinoff stories). | patent |
TDQS
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.
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.
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.
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.
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.
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 setsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page (1-based). | |
| sort | No | Sort field for searches (upstream default popularity). | |
| search | No | Search satellite names, e.g. "ISS" or "HUBBLE". Omit to browse all records. | |
| sort_dir | No | Sort direction (upstream default desc). | |
| page_size | No | Records per page (1-100, upstream default 20). | |
| satellite_id | No | NORAD catalog number, e.g. 25544 for the ISS. Cannot be combined with search options. |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Body: mars, moon or vesta. | |
| limit | No | How many layers to return (1-50). | |
| search | No | Keywords to match, e.g. "olympus", "LRO WAC" or "HiRISE". | |
| projection | No | Map projection: equirectangular (global), north_pole or south_pole (polar stereographic). | equirectangular |
TDQS
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.
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.
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.
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.
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.
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)ARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| col | No | Tile column (0 at the left). | |
| row | No | Tile row (0 at the top). Provide row and col, or latitude and longitude. | |
| body | Yes | Body: mars, moon or vesta. | |
| zoom | No | Zoom level (WMTS TileMatrix). 0 is the whole layer; each level doubles the resolution. | |
| layer | Yes | Layer ID from nasa_trek_layers, e.g. Mars_MGS_MOLA_ClrShade_merge_global_463m or LRO_WAC_Mosaic_Global_303ppd_v02. | |
| latitude | No | Equirectangular only: pick the tile containing this latitude (degrees). | |
| longitude | No | Equirectangular only: pick the tile containing this longitude (degrees east, -180 to 360). | |
| projection | No | Map projection: equirectangular (global), north_pole or south_pole (polar stereographic). | equirectangular |
TDQS
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.
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.
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.
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.
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.
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.
32 tool updates
v1.2.0- Changed
jpl_cad25 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / body / descriptionPrevious value: -"Body to find close approaches to (e.g., Earth, Mars, ALL). Default: Earth"New value: +"Close-approach body (Earth, Mars, ALL, ...). Default Earth." - added
Input schema / properties / body / patternAdded value: +"^[A-Za-z]+$" - changed
Input schema / properties / date_max / descriptionPrevious value: -"End date for search (YYYY-MM-DD). Default: +60 days"New value: +"End date (YYYY-MM-DD, now, or +/-days). Default +60." - added
Input schema / properties / date_max / patternAdded value: +"^(now|[+-]\\d{1,5}|\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?)$" - changed
Input schema / properties / date_min / descriptionPrevious value: -"Start date for search (YYYY-MM-DD). Default: now"New value: +"Start date (YYYY-MM-DD, now, or +/-days). Default now." - added
Input schema / properties / date_min / patternAdded value: +"^(now|[+-]\\d{1,5}|\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?)$" - changed
Input schema / properties / des / descriptionPrevious value: -"Object designation (e.g., '2000 SG344' or '433')"New value: +"Only this object (designation)." - added
Input schema / properties / des / maxLengthAdded value: +100 - added
Input schema / properties / des / minLengthAdded value: +1 - changed
Input schema / properties / dist_max / descriptionPrevious 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." - added
Input schema / properties / dist_max / patternAdded value: +"^\\d+(\\.\\d+)?(LD|au|AU)?$" - changed
Input schema / properties / dist_min / descriptionPrevious value: -"Minimum approach distance. Default: none"New value: +"Minimum approach distance." - added
Input schema / properties / dist_min / patternAdded value: +"^\\d+(\\.\\d+)?(LD|au|AU)?$" - changed
Input schema / properties / fullname / descriptionPrevious value: -"Include full object name in result. Default: false"New value: +"Include full object names." - added
Input schema / properties / h_maxAdded value: +{ + "description": "Maximum absolute magnitude H.", + "type": "number" +} - added
Input schema / properties / h_minAdded value: +{ + "description": "Minimum absolute magnitude H.", + "type": "number" +} - added
Input schema / properties / limitAdded value: +{ + "description": "Maximum number of records (1-1000).", + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - changed
Input schema / properties / neo / descriptionPrevious value: -"Limit to NEOs. Default: true"New value: +"Limit to NEOs (default true upstream)." - changed
Input schema / properties / sort / descriptionPrevious value: -"Sort field: date, dist, dist-min, v-inf, v-rel, h, object. Default: date"New value: +"Sort field, prefix - for descending. Default date." - added
Input schema / properties / sort / patternAdded value: +"^-?(date|dist|dist-min|v-inf|v-rel|h|object)$" - changed
Input schema / properties / spk / descriptionPrevious value: -"Object SPK-ID (e.g., '2000433')"New value: +"Only this object (SPK-ID)." - added
Input schema / properties / spk / exclusiveMinimumAdded value: +0 - added
Input schema / properties / spk / maximumAdded value: +9007199254740991 - changed
Input schema / properties / spk / typePrevious value: -"string"New value: +"integer"
- Changed
jpl_fireball20 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / date_max / descriptionPrevious value: -"End date (YYYY-MM-DD)"New value: +"Latest event date (YYYY-MM-DD)." - added
Input schema / properties / date_max / patternAdded value: +"^(now|[+-]\\d{1,5}|\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?)$" - changed
Input schema / properties / date_min / descriptionPrevious value: -"Start date (YYYY-MM-DD)"New value: +"Earliest event date (YYYY-MM-DD)." - added
Input schema / properties / date_min / patternAdded value: +"^(now|[+-]\\d{1,5}|\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?)?)$" - added
Input schema / properties / energy_maxAdded value: +{ + "description": "Maximum total radiated energy (1e10 J).", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / energy_minAdded value: +{ + "description": "Minimum total radiated energy (1e10 J).", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / impact_e_maxAdded value: +{ + "description": "Maximum estimated impact energy (kt).", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / impact_e_minAdded value: +{ + "description": "Minimum estimated impact energy (kt).", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / limit / defaultAdded value: +50 - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of results to return"New value: +"Maximum number of events (1-1000)." - added
Input schema / properties / limit / maximumAdded value: +1000 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / req_altAdded value: +{ + "description": "Only events with an altitude.", + "type": "boolean" +} - added
Input schema / properties / req_locAdded value: +{ + "description": "Only events with a location.", + "type": "boolean" +} - added
Input schema / properties / req_velAdded value: +{ + "description": "Only events with a velocity.", + "type": "boolean" +} - added
Input schema / properties / req_vel_compAdded value: +{ + "description": "Only events with velocity components.", + "type": "boolean" +} - added
Input schema / properties / vel_maxAdded value: +{ + "description": "Maximum velocity (km/s).", + "minimum": 0, + "type": "number" +} - added
Input schema / properties / vel_minAdded value: +{ + "description": "Minimum velocity (km/s).", + "minimum": 0, + "type": "number" +}
- Changed
jpl_horizons25 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / CENTER / descriptionPrevious value: -"Coordinate center (e.g., '500@399' for Earth)"New value: +"Coordinate center, e.g. '500@399' (geocentric)." - added
Input schema / properties / CENTER / maxLengthAdded value: +200 - added
Input schema / properties / CENTER / minLengthAdded value: +1 - changed
Input schema / properties / COMMAND / descriptionPrevious 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'." - added
Input schema / properties / COMMAND / maxLengthAdded value: +200 - added
Input schema / properties / COMMAND / minLengthAdded value: +1 - changed
Input schema / properties / EPHEM_TYPE / descriptionPrevious value: -"Type of ephemeris (OBSERVER, VECTORS, ELEMENTS)"New value: +"Ephemeris type." - changed
Input schema / properties / MAKE_EPHEM / descriptionPrevious value: -"Generate ephemeris"New value: +"Generate an ephemeris." - changed
Input schema / properties / OBJ_DATA / descriptionPrevious value: -"Include object data"New value: +"Include object data." - changed
Input schema / properties / OUT_UNITS / descriptionPrevious value: -"Output units for vector tables"New value: +"Output units for vector/element tables." - changed
Input schema / properties / QUANTITIES / descriptionPrevious 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'." - added
Input schema / properties / QUANTITIES / maxLengthAdded value: +200 - added
Input schema / properties / QUANTITIES / minLengthAdded value: +1 - changed
Input schema / properties / START_TIME / descriptionPrevious value: -"Start time for ephemeris (e.g., '2023-01-01')"New value: +"Start time, e.g. '2024-01-01'." - added
Input schema / properties / START_TIME / maxLengthAdded value: +200 - added
Input schema / properties / START_TIME / minLengthAdded value: +1 - changed
Input schema / properties / STEP_SIZE / descriptionPrevious value: -"Step size for ephemeris points (e.g., '1d' for daily, '1h' for hourly)"New value: +"Step size, e.g. '1d' or '1h'." - added
Input schema / properties / STEP_SIZE / maxLengthAdded value: +200 - added
Input schema / properties / STEP_SIZE / minLengthAdded value: +1 - changed
Input schema / properties / STOP_TIME / descriptionPrevious value: -"Stop time for ephemeris (e.g., '2023-01-02')"New value: +"Stop time, e.g. '2024-01-02'." - added
Input schema / properties / STOP_TIME / maxLengthAdded value: +200 - added
Input schema / properties / STOP_TIME / minLengthAdded value: +1 - added
Input schema / properties / format / defaultAdded value: +"json" - changed
Input schema / properties / format / descriptionPrevious value: -"Response format (json, text)"New value: +"Response format."
- Changed
jpl_horizons_file25 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / CENTER / descriptionPrevious value: -"Coordinate center (e.g., '500@399' for Earth)"New value: +"Coordinate center, e.g. '500@399' (geocentric)." - added
Input schema / properties / CENTER / maxLengthAdded value: +200 - added
Input schema / properties / CENTER / minLengthAdded value: +1 - changed
Input schema / properties / COMMAND / descriptionPrevious 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'." - added
Input schema / properties / COMMAND / maxLengthAdded value: +200 - added
Input schema / properties / COMMAND / minLengthAdded value: +1 - changed
Input schema / properties / EPHEM_TYPE / descriptionPrevious value: -"Type of ephemeris (OBSERVER, VECTORS, ELEMENTS)"New value: +"Ephemeris type." - changed
Input schema / properties / MAKE_EPHEM / descriptionPrevious value: -"Generate ephemeris"New value: +"Generate an ephemeris." - changed
Input schema / properties / OBJ_DATA / descriptionPrevious value: -"Include object data"New value: +"Include object data." - changed
Input schema / properties / OUT_UNITS / descriptionPrevious value: -"Output units for vector tables"New value: +"Output units for vector/element tables." - changed
Input schema / properties / QUANTITIES / descriptionPrevious 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'." - added
Input schema / properties / QUANTITIES / maxLengthAdded value: +200 - added
Input schema / properties / QUANTITIES / minLengthAdded value: +1 - changed
Input schema / properties / START_TIME / descriptionPrevious value: -"Start time for ephemeris (e.g., '2023-01-01')"New value: +"Start time, e.g. '2024-01-01'." - added
Input schema / properties / START_TIME / maxLengthAdded value: +200 - added
Input schema / properties / START_TIME / minLengthAdded value: +1 - changed
Input schema / properties / STEP_SIZE / descriptionPrevious value: -"Step size for ephemeris points (e.g., '1d' for daily, '1h' for hourly)"New value: +"Step size, e.g. '1d' or '1h'." - added
Input schema / properties / STEP_SIZE / maxLengthAdded value: +200 - added
Input schema / properties / STEP_SIZE / minLengthAdded value: +1 - changed
Input schema / properties / STOP_TIME / descriptionPrevious value: -"Stop time for ephemeris (e.g., '2023-01-02')"New value: +"Stop time, e.g. '2024-01-02'." - added
Input schema / properties / STOP_TIME / maxLengthAdded value: +200 - added
Input schema / properties / STOP_TIME / minLengthAdded value: +1 - added
Input schema / properties / format / defaultAdded value: +"json" - changed
Input schema / properties / format / descriptionPrevious value: -"Response format (json, text)"New value: +"Response format."
- Changed
jpl_jd_cal5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / cd / descriptionPrevious 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." - added
Input schema / properties / cd / patternAdded value: +"^-?\\d{1,4}-\\d{2}-\\d{2}([T_ ]\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?)?$" - changed
Input schema / properties / jd / descriptionPrevious value: -"Julian date to convert to calendar date"New value: +"Julian date to convert to a calendar date." - added
Input schema / properties / jd / patternAdded value: +"^-?\\d+(\\.\\d+)?$"
- Added
jpl_mission_design - Changed
jpl_nhats30 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / des / descriptionPrevious value: -"Object designation (e.g., '2000 SG344' or '433')"New value: +"Object designation, e.g. 99942 (object mode)." - added
Input schema / properties / des / maxLengthAdded value: +100 - added
Input schema / properties / des / minLengthAdded value: +1 - changed
Input schema / properties / dur / descriptionPrevious value: -"Minimum total mission duration (days). Values: 60-450, default: 450"New value: +"Maximum total mission duration in days (60-450)." - added
Input schema / properties / dur / maximumAdded value: +450 - added
Input schema / properties / dur / minimumAdded value: +60 - changed
Input schema / properties / dur / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / dv / descriptionPrevious value: -"Minimum total delta-V (km/s). Values: 4-12, default: 12"New value: +"Maximum total delta-V in km/s (4-12)." - added
Input schema / properties / dv / maximumAdded value: +12 - added
Input schema / properties / dv / minimumAdded value: +4 - changed
Input schema / properties / dv / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / h / descriptionPrevious value: -"Object's maximum absolute magnitude (mag). Values: 16-30"New value: +"Maximum absolute magnitude H (16-30)." - added
Input schema / properties / h / maximumAdded value: +30 - added
Input schema / properties / h / minimumAdded value: +16 - changed
Input schema / properties / h / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / launch / descriptionPrevious 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." - added
Input schema / properties / launch / enumAdded value: +[ + "2020-2025", + "2025-2030", + "2030-2035", + "2035-2040", + "2040-2045", + "2020-2045" +] - changed
Input schema / properties / occ / descriptionPrevious value: -"Object's maximum orbit condition code. Values: 0-8"New value: +"Maximum orbit condition code (0-8)." - added
Input schema / properties / occ / maximumAdded value: +8 - added
Input schema / properties / occ / minimumAdded value: +0 - changed
Input schema / properties / occ / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / plot / descriptionPrevious value: -"Include base-64 encoded plot image"New value: +"Include a base64 plot (object mode; large)." - changed
Input schema / properties / spk / descriptionPrevious value: -"Object SPK-ID (e.g., '2000433')"New value: +"Object SPK-ID (object mode)." - added
Input schema / properties / spk / exclusiveMinimumAdded value: +0 - added
Input schema / properties / spk / maximumAdded value: +9007199254740991 - changed
Input schema / properties / spk / typePrevious value: -"string"New value: +"integer" - added
Input schema / properties / stay / anyOfAdded value: +[ + { + "const": 8, + "type": "number" + }, + { + "const": 16, + "type": "number" + }, + { + "const": 24, + "type": "number" + }, + { + "const": 32, + "type": "number" + } +] - changed
Input schema / properties / stay / descriptionPrevious 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)." - removed
Input schema / properties / stay / typeRemoved value: -"number"
- Changed
jpl_periodic_orbits17 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / branch / descriptionPrevious 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." - added
Input schema / properties / branch / patternAdded value: +"^[A-Za-z]{1,3}$" - changed
Input schema / properties / family / descriptionPrevious value: -"Orbit family name (e.g., halo, dro, lyapunov)"New value: +"Orbit family, e.g. halo, dro, lyapunov, vertical, axial, butterfly." - added
Input schema / properties / family / patternAdded value: +"^[a-z_]+$" - changed
Input schema / properties / jacobimax / descriptionPrevious value: -"Maximum Jacobi constant"New value: +"Maximum Jacobi constant." - changed
Input schema / properties / jacobimin / descriptionPrevious value: -"Minimum Jacobi constant"New value: +"Minimum Jacobi constant." - changed
Input schema / properties / libr / descriptionPrevious value: -"Libration point (1-5, required for some families)"New value: +"Libration point 1-5 (required by some families)." - added
Input schema / properties / libr / maximumAdded value: +5 - added
Input schema / properties / libr / minimumAdded value: +1 - changed
Input schema / properties / periodmax / descriptionPrevious value: -"Maximum period"New value: +"Maximum period." - changed
Input schema / properties / periodmin / descriptionPrevious value: -"Minimum period"New value: +"Minimum period." - changed
Input schema / properties / periodunits / descriptionPrevious value: -"Units for period (s, h, d, TU)"New value: +"Units for periodmin/periodmax." - changed
Input schema / properties / stabmax / descriptionPrevious value: -"Maximum stability index"New value: +"Maximum stability index." - changed
Input schema / properties / stabmin / descriptionPrevious value: -"Minimum stability index"New value: +"Minimum stability index." - changed
Input schema / properties / sys / descriptionPrevious value: -"Three-body system (e.g., earth-moon, sun-earth)"New value: +"Three-body system, e.g. earth-moon, sun-earth, mars-phobos." - added
Input schema / properties / sys / patternAdded value: +"^[a-z]+-[a-z]+$"
- Changed
jpl_sbdb16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / alt_orbitsAdded value: +{ + "description": "Include alternate orbits.", + "type": "boolean" +} - added
Input schema / properties / ca_bodyAdded value: +{ + "description": "Limit close approaches to this body (e.g. Earth); needs ca_data.", + "maxLength": 40, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / ca_dataAdded value: +{ + "description": "Include close-approach data.", + "type": "boolean" +} - changed
Input schema / properties / cad / descriptionPrevious value: -"Include close approach data"New value: +"DEPRECATED alias for ca_data." - added
Input schema / properties / desAdded value: +{ + "description": "Primary designation or IAU number.", + "maxLength": 100, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / discoveryAdded value: +{ + "description": "Include discovery circumstances.", + "type": "boolean" +} - added
Input schema / properties / full_precAdded value: +{ + "description": "Full-precision orbital elements.", + "type": "boolean" +} - added
Input schema / properties / phys_parAdded value: +{ + "description": "Include physical parameters.", + "type": "boolean" +} - added
Input schema / properties / satAdded value: +{ + "description": "Include satellite data.", + "type": "boolean" +} - added
Input schema / properties / spkAdded value: +{ + "description": "SPK-ID of the object.", + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" +} - changed
Input schema / properties / sstr / descriptionPrevious value: -"Search string (e.g., asteroid name, number, or designation)"New value: +"Search string: name, designation or number (e.g. Ceres, 433, 2019 OK)." - added
Input schema / properties / sstr / maxLengthAdded value: +200 - added
Input schema / properties / sstr / minLengthAdded value: +1 - added
Input schema / properties / vi_dataAdded value: +{ + "description": "Include Sentry virtual-impactor data.", + "type": "boolean" +} - removed
Input schema / requiredRemoved value: -[ - "sstr" -]
- Changed
jpl_scout16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / file / descriptionPrevious 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." - changed
Input schema / properties / file / enumPrevious value: -[ - "summary", - "ephem", - "obs", - "crit", - "all" -]New value: +[ + "list", + "mpc" +] - changed
Input schema / properties / limit / descriptionPrevious value: -"Limit number of results"New value: +"List mode: return at most this many objects. Applied by this server; Scout has no limit parameter." - added
Input schema / properties / limit / maximumAdded value: +1000 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / n_orbitsAdded value: +{ + "description": "Object mode: number of sampled orbits (1-1000).", + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - removed
Input schema / properties / orbit_idRemoved value: -{ - "description": "Scout internal orbit ID", - "type": "string" -} - added
Input schema / properties / orbitsAdded value: +{ + "description": "Object mode: include sampled orbits.", + "type": "boolean" +} - changed
Input schema / properties / plot / descriptionPrevious value: -"Include plots in the response"New value: +"Object mode: base64 plots to include: el (elements), ca (close approach), sr (systematic ranging), colon-separated." - added
Input schema / properties / plot / patternAdded value: +"^(el|ca|sr)(:(el|ca|sr))*$" - changed
Input schema / properties / plot / typePrevious value: -"boolean"New value: +"string" - removed
Input schema / properties / summaryRemoved value: -{ - "description": "Include summary data in the response", - "type": "boolean" -} - changed
Input schema / properties / tdes / descriptionPrevious value: -"Object temporary designation (e.g., P21Eolo)"New value: +"NEOCP temporary designation (object mode)." - added
Input schema / properties / tdes / patternAdded value: +"^[A-Za-z0-9]{1,16}$"
- Changed
jpl_sentry23 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / all / descriptionPrevious value: -"Get all virtual impactors data"New value: +"Virtual-impactor mode: all VIs (combine with ip_min/ps_min/h_max to narrow)." - removed
Input schema / properties / date_maxRemoved value: -{ - "description": "End date (YYYY-MM-DD)", - "type": "string" -} - removed
Input schema / properties / date_minRemoved value: -{ - "description": "Start date (YYYY-MM-DD)", - "type": "string" -} - changed
Input schema / properties / des / descriptionPrevious value: -"Object designation (e.g., '2011 AG5' or '29075')"New value: +"Object mode: designation, e.g. 29075 or 2011 AG5." - added
Input schema / properties / des / maxLengthAdded value: +100 - added
Input schema / properties / des / minLengthAdded value: +1 - changed
Input schema / properties / h_max / descriptionPrevious value: -"Maximum absolute magnitude (size filter)"New value: +"Summary/VI mode: maximum absolute magnitude H." - changed
Input schema / properties / ip_min / descriptionPrevious value: -"Minimum impact probability"New value: +"Summary/VI mode: minimum impact probability, e.g. 1e-5." - added
Input schema / properties / ip_min / exclusiveMinimumAdded value: +0 - added
Input schema / properties / ip_min / maximumAdded value: +1 - changed
Input schema / properties / ip_min / typePrevious value: -"string"New value: +"number" - changed
Input schema / properties / limit / descriptionPrevious 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." - added
Input schema / properties / limit / maximumAdded value: +1000 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / ps_min / descriptionPrevious value: -"Minimum Palermo Scale value"New value: +"Summary/VI mode: minimum Palermo Scale value, e.g. -3." - changed
Input schema / properties / ps_min / typePrevious value: -"string"New value: +"number" - changed
Input schema / properties / removed / descriptionPrevious value: -"Get objects removed from Sentry monitoring"New value: +"List objects removed from Sentry." - changed
Input schema / properties / spk / descriptionPrevious value: -"Object SPK-ID"New value: +"Object mode: SPK-ID." - added
Input schema / properties / spk / exclusiveMinimumAdded value: +0 - added
Input schema / properties / spk / maximumAdded value: +9007199254740991 - changed
Input schema / properties / spk / typePrevious value: -"string"New value: +"integer"
- Changed
nasa_apod8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / countRemoved value: -{ - "description": "Count of random APODs to retrieve", - "type": "number" -} - changed
Input schema / properties / date / descriptionPrevious 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." - changed
Input schema / properties / end_date / descriptionPrevious 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." - added
Input schema / properties / max_imagesAdded 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" +} - changed
Input schema / properties / start_date / descriptionPrevious value: -"Start date for date range search (YYYY-MM-DD)"New value: +"Start of a date range (YYYY-MM-DD)." - removed
Input schema / properties / thumbsRemoved value: -{ - "description": "Return URL of thumbnail for video content", - "type": "boolean" -} - removed
Input schema / requiredRemoved value: -[ - "date" -]
- Changed
nasa_cmr54 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / bboxAdded 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)." +} - added
Input schema / properties / bounding_boxAdded 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)." +} - added
Input schema / properties / browsableAdded value: +{ + "description": "Only records with (true) or without (false) browse imagery.", + "type": "boolean" +} - added
Input schema / properties / circleAdded value: +{ + "description": "Circle \"lon,lat,radius\" with radius in metres (10-6000000).", + "type": "string" +} - added
Input schema / properties / cloud_coverAdded value: +{ + "description": "Granules only: cloud cover range \"min,max\" in percent.", + "pattern": "^(\\d+(\\.\\d+)?)?,(\\d+(\\.\\d+)?)?$", + "type": "string" +} - added
Input schema / properties / cloud_hostedAdded value: +{ + "description": "Collections only: restrict to cloud-hosted (true) or not (false).", + "type": "boolean" +} - added
Input schema / properties / collection_concept_idAdded 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." +} - added
Input schema / properties / concept_idAdded 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." +} - added
Input schema / properties / cursorAdded 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" +} - added
Input schema / properties / day_night_flagAdded value: +{ + "description": "Granules only: DAY, NIGHT, BOTH or UNSPECIFIED.", + "enum": [ + "DAY", + "NIGHT", + "BOTH", + "UNSPECIFIED" + ], + "type": "string" +} - added
Input schema / properties / doiAdded value: +{ + "description": "Collections only: DOI, e.g. 10.5067/GHGMR-4FJ04.", + "maxLength": 200, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / downloadableAdded value: +{ + "description": "Only records with (true) or without (false) downloadable data links.", + "type": "boolean" +} - added
Input schema / properties / entry_titleAdded value: +{ + "description": "Collection entry title.", + "maxLength": 1000, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / fieldsAdded 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" +} - changed
Input schema / properties / format / descriptionPrevious 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." - changed
Input schema / properties / format / enumPrevious 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" +] - added
Input schema / properties / granule_data_formatAdded 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." +} - added
Input schema / properties / has_granulesAdded value: +{ + "description": "Collections only: require (true) or exclude (false) collections with granules.", + "type": "boolean" +} - added
Input schema / properties / include_facetsAdded value: +{ + "description": "Include CMR v2 facets (counts by keyword, platform, ...).", + "type": "boolean" +} - added
Input schema / properties / instrumentAdded 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." +} - changed
Input schema / properties / keyword / descriptionPrevious value: -"Search keyword"New value: +"Collections only: free-text keyword search." - added
Input schema / properties / keyword / maxLengthAdded value: +1000 - added
Input schema / properties / keyword / minLengthAdded value: +1 - added
Input schema / properties / limit / defaultAdded value: +10 - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of results to return"New value: +"Records per page (1-100)." - added
Input schema / properties / limit / maximumAdded value: +100 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / lineAdded value: +{ + "description": "Line \"lon1,lat1,lon2,lat2,...\".", + "maxLength": 8000, + "type": "string" +} - added
Input schema / properties / offsetAdded value: +{ + "description": "DEPRECATED offset pagination. Prefer cursor. Cannot be combined with cursor or page.", + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / online_onlyAdded value: +{ + "description": "Only online (true) or offline (false) records.", + "type": "boolean" +} - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination"New value: +"DEPRECATED page-number pagination (CMR page_num). Prefer cursor. Cannot be combined with cursor or offset." - added
Input schema / properties / page / maximumAdded value: +9007199254740991 - added
Input schema / properties / page / minimumAdded value: +1 - changed
Input schema / properties / page / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / platformAdded 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." +} - added
Input schema / properties / pointAdded value: +{ + "description": "Point \"lon,lat\".", + "maxLength": 8000, + "type": "string" +} - added
Input schema / properties / polygonAdded value: +{ + "description": "Polygon \"lon1,lat1,...,lon1,lat1\": closed, counter-clockwise (CMR rejects clockwise rings).", + "maxLength": 8000, + "type": "string" +} - added
Input schema / properties / processing_level_idAdded 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." +} - added
Input schema / properties / producer_granule_idAdded value: +{ + "description": "Granules only: producer granule ID.", + "maxLength": 1000, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / projectAdded 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)." +} - added
Input schema / properties / providerAdded 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." +} - added
Input schema / properties / readable_granule_nameAdded value: +{ + "description": "Granules only: granule name (supports CMR * and ? wildcards).", + "maxLength": 1000, + "minLength": 1, + "type": "string" +} - added
Input schema / properties / response_modeAdded value: +{ + "description": "compact (default for json/umm_json): normalized records. raw: upstream metadata as returned (default for other formats).", + "enum": [ + "compact", + "raw" + ], + "type": "string" +} - changed
Input schema / properties / search_type / descriptionPrevious value: -"Search type (collections or granules)"New value: +"Search collections (datasets) or granules (files)." - added
Input schema / properties / short_nameAdded 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)." +} - added
Input schema / properties / sort_key / anyOfAdded value: +[ + { + "pattern": "^[+-]?[a-z_-]+$", + "type": "string" + }, + { + "items": { + "pattern": "^[+-]?[a-z_-]+$", + "type": "string" + }, + "maxItems": 3, + "minItems": 1, + "type": "array" + } +] - changed
Input schema / properties / sort_key / descriptionPrevious 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." - removed
Input schema / properties / sort_key / typeRemoved value: -"string" - added
Input schema / properties / temporalAdded 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" +} - added
Input schema / properties / versionAdded value: +{ + "description": "Collection version.", + "maxLength": 80, + "minLength": 1, + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "keyword", - "search_type", - "format" -] - changed
Output 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" +}
- Changed
nasa_donki7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / endDate / descriptionPrevious value: -"End date (YYYY-MM-DD)"New value: +"End date (YYYY-MM-DD), at most 30 days after startDate. Defaults to today." - added
Input schema / properties / limitAdded value: +{ + "description": "Return only the most recent N events. Applied by this server; DONKI has no limit parameter.", + "maximum": 1000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / response_modeAdded 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" +} - changed
Input schema / properties / startDate / descriptionPrevious 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." - changed
Input schema / properties / type / descriptionPrevious value: -"Type of space weather event"New value: +"Event type: cme, cmea, gst, ips, flr, sep, mpc, rbe, hss, wsa, notifications." - added
Input schema / properties / type / enumAdded value: +[ + "cme", + "cmea", + "gst", + "ips", + "flr", + "sep", + "mpc", + "rbe", + "hss", + "wsa", + "notifications" +]
- Changed
nasa_eonet18 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / category / descriptionPrevious value: -"Event category (wildfires, volcanoes, etc.)"New value: +"EONET category ID(s), comma-separated: e.g. wildfires, severeStorms, volcanoes, seaLakeIce." - added
Input schema / properties / category / patternAdded value: +"^[A-Za-z]+(,[A-Za-z]+)*$" - added
Input schema / properties / days / defaultAdded value: +60 - changed
Input schema / properties / days / descriptionPrevious value: -"Number of days to look back"New value: +"Only events active within this many prior days." - added
Input schema / properties / days / maximumAdded value: +3650 - added
Input schema / properties / days / minimumAdded value: +1 - changed
Input schema / properties / days / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / limit / defaultAdded value: +50 - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of events to return"New value: +"Maximum number of events (1-500)." - added
Input schema / properties / limit / maximumAdded value: +500 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / source / descriptionPrevious value: -"Data source"New value: +"EONET source ID(s), comma-separated, e.g. InciWeb,EO." - added
Input schema / properties / source / patternAdded value: +"^[A-Za-z0-9_]+(,[A-Za-z0-9_]+)*$" - added
Input schema / properties / status / defaultAdded value: +"all" - changed
Input schema / properties / status / descriptionPrevious value: -"Event status (open, closed)"New value: +"Event status filter." - added
Input schema / properties / status / enumAdded value: +[ + "open", + "closed", + "all" +]
- Changed
nasa_epic6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / collection / defaultAdded value: +"natural" - changed
Input schema / properties / collection / descriptionPrevious value: -"Image collection (natural or enhanced)"New value: +"Image collection." - added
Input schema / properties / collection / enumAdded value: +[ + "natural", + "enhanced" +] - changed
Input schema / properties / date / descriptionPrevious value: -"Date of the image (YYYY-MM-DD)"New value: +"Date of the images (YYYY-MM-DD). Defaults to the most recent available day." - added
Input schema / properties / max_imagesAdded 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" +}
- Changed
nasa_exoplanet15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / formatAdded value: +{ + "default": "json", + "description": "Result format.", + "enum": [ + "json", + "csv" + ], + "type": "string" +} - added
Input schema / properties / limit / defaultAdded value: +100 - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of results"New value: +"Maximum rows (1-1000)." - added
Input schema / properties / limit / maximumAdded value: +1000 - added
Input schema / properties / limit / minimumAdded value: +1 - changed
Input schema / properties / limit / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / order / descriptionPrevious value: -"Ordering of results"New value: +"ADQL ORDER BY expression, e.g. pl_name." - added
Input schema / properties / order / minLengthAdded value: +1 - changed
Input schema / properties / select / descriptionPrevious value: -"Columns to return"New value: +"Columns to return (ADQL select list). Defaults to *." - added
Input schema / properties / select / minLengthAdded value: +1 - changed
Input schema / properties / table / descriptionPrevious value: -"Database table to query"New value: +"TAP table, e.g. ps (Planetary Systems), pscomppars, cumulative (Kepler KOI), toi." - added
Input schema / properties / table / patternAdded value: +"^[A-Za-z_][A-Za-z0-9_]*$" - changed
Input schema / properties / where / descriptionPrevious value: -"Filter conditions"New value: +"ADQL WHERE condition, e.g. disc_year > 2020 and discoverymethod = 'Transit'." - added
Input schema / properties / where / minLengthAdded value: +1
- Changed
nasa_firms19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / bboxAdded 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." +} - added
Input schema / properties / dateAdded value: +{ + "description": "First day of the window (YYYY-MM-DD); FIRMS returns [date, date + days - 1]. Omit for the most recent data.", + "type": "string" +} - added
Input schema / properties / days / defaultAdded value: +1 - changed
Input schema / properties / days / descriptionPrevious value: -"Number of days of data to retrieve"New value: +"DAY_RANGE: number of days of detections (1-5)." - added
Input schema / properties / days / maximumAdded value: +5 - added
Input schema / properties / days / minimumAdded value: +1 - changed
Input schema / properties / days / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / latitude / descriptionPrevious value: -"Latitude coordinate"New value: +"Legacy area center latitude; requires longitude and radius_km." - added
Input schema / properties / latitude / maximumAdded value: +90 - added
Input schema / properties / latitude / minimumAdded value: +-90 - added
Input schema / properties / limitAdded value: +{ + "default": 100, + "description": "Maximum detections returned (1-2000). total_detections reports the full count.", + "maximum": 2000, + "minimum": 1, + "type": "integer" +} - changed
Input schema / properties / longitude / descriptionPrevious value: -"Longitude coordinate"New value: +"Legacy area center longitude; requires latitude and radius_km." - added
Input schema / properties / longitude / maximumAdded value: +180 - added
Input schema / properties / longitude / minimumAdded value: +-180 - added
Input schema / properties / radius_kmAdded 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" +} - added
Input schema / properties / sourceAdded 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" +} - removed
Input schema / requiredRemoved value: -[ - "latitude", - "longitude" -] - changed
Output 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" +}
- Changed
nasa_gibs12 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / bboxAdded 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." +} - changed
Input schema / properties / date / descriptionPrevious value: -"Date of imagery (YYYY-MM-DD)"New value: +"Imagery date (YYYY-MM-DD)." - added
Input schema / properties / format / defaultAdded value: +"png" - changed
Input schema / properties / format / descriptionPrevious value: -"Image format (png, jpg, jpeg)"New value: +"Image format." - added
Input schema / properties / format / enumAdded value: +[ + "png", + "jpg", + "jpeg" +] - changed
Input schema / properties / layer / descriptionPrevious value: -"Layer name (e.g., MODIS_Terra_CorrectedReflectance_TrueColor)"New value: +"GIBS layer identifier, e.g. MODIS_Terra_CorrectedReflectance_TrueColor" - added
Input schema / properties / layer / patternAdded value: +"^[A-Za-z0-9_.-]+$" - added
Input schema / properties / resolution / defaultAdded value: +2 - changed
Input schema / properties / resolution / descriptionPrevious value: -"Resolution in pixels per degree"New value: +"Output resolution in pixels per degree (default 2, i.e. 720x360 for the whole globe)." - added
Input schema / properties / resolution / exclusiveMinimumAdded value: +0 - added
Input schema / properties / resolution / maximumAdded value: +40
- Changed
nasa_images16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / max_imagesAdded 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" +} - changed
Input schema / properties / media_type / descriptionPrevious value: -"Media type (image, video, audio)"New value: +"Restrict to one media type." - added
Input schema / properties / media_type / enumAdded value: +[ + "image", + "video", + "audio" +] - added
Input schema / properties / page / defaultAdded value: +1 - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination"New value: +"Result page (1-based)." - added
Input schema / properties / page / maximumAdded value: +100 - added
Input schema / properties / page / minimumAdded value: +1 - changed
Input schema / properties / page / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / page_sizeAdded value: +{ + "default": 10, + "description": "Results per page (1-100).", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - changed
Input schema / properties / q / descriptionPrevious value: -"Search query"New value: +"Free-text search terms." - added
Input schema / properties / q / minLengthAdded value: +1 - changed
Input schema / properties / year_end / descriptionPrevious value: -"End year for results"New value: +"Latest year (YYYY)." - added
Input schema / properties / year_end / patternAdded value: +"^\\d{4}$" - changed
Input schema / properties / year_start / descriptionPrevious value: -"Start year for results"New value: +"Earliest year (YYYY)." - added
Input schema / properties / year_start / patternAdded value: +"^\\d{4}$"
- Added
nasa_insight_weather - Changed
nasa_mars_rover15 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / camera / descriptionPrevious value: -"Camera name"New value: +"Camera abbreviation, e.g. FHAZ, NAVCAM." - added
Input schema / properties / camera / patternAdded value: +"^[A-Za-z_]+$" - changed
Input schema / properties / earth_date / descriptionPrevious value: -"Earth date of the photos (YYYY-MM-DD)"New value: +"Earth date of the photos (YYYY-MM-DD). Provide sol or earth_date." - added
Input schema / properties / max_imagesAdded value: +{ + "default": 3, + "description": "How many photos to embed (0-5).", + "maximum": 5, + "minimum": 0, + "type": "integer" +} - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination"New value: +"Result page (25 photos per page)." - added
Input schema / properties / page / maximumAdded value: +9007199254740991 - added
Input schema / properties / page / minimumAdded value: +1 - changed
Input schema / properties / page / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / rover / descriptionPrevious value: -"Name of the rover (curiosity, opportunity, spirit, perseverance)"New value: +"Rover name." - added
Input schema / properties / rover / enumAdded value: +[ + "curiosity", + "opportunity", + "perseverance", + "spirit" +] - changed
Input schema / properties / sol / descriptionPrevious value: -"Martian sol (day) of the photos"New value: +"Martian sol of the photos. Provide sol or earth_date." - added
Input schema / properties / sol / maximumAdded value: +9007199254740991 - added
Input schema / properties / sol / minimumAdded value: +0 - changed
Input schema / properties / sol / typePrevious value: -"number"New value: +"integer"
- Changed
nasa_neo6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / asteroid_id / descriptionPrevious value: -"ID of a specific asteroid"New value: +"Look up one asteroid by its NeoWs ID instead of the date feed." - added
Input schema / properties / asteroid_id / patternAdded value: +"^\\d+$" - changed
Input schema / properties / end_date / descriptionPrevious 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." - changed
Input schema / properties / start_date / descriptionPrevious 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)." - removed
Input schema / requiredRemoved value: -[ - "start_date", - "end_date" -]
- Changed
nasa_osdr_files3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / accession_number / descriptionPrevious value: -"OSD study accession number (e.g., '87')"New value: +"OSD study accession number, e.g. 87 or OSD-87." - added
Input schema / properties / accession_number / patternAdded value: +"^(OSD-)?\\d+$"
- Changed
nasa_power18 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / community / descriptionPrevious value: -"User community (RE, SB, AG, etc.)"New value: +"User community: RE (renewable energy), SB (sustainable buildings), AG (agroclimatology)." - added
Input schema / properties / community / enumAdded value: +[ + "RE", + "SB", + "AG" +] - changed
Input schema / properties / end / descriptionPrevious value: -"End date (YYYYMMDD)"New value: +"End date (YYYYMMDD)." - added
Input schema / properties / format / defaultAdded value: +"json" - changed
Input schema / properties / format / descriptionPrevious value: -"Response format (json, csv, etc.)"New value: +"Response format." - added
Input schema / properties / format / enumAdded value: +[ + "json", + "csv" +] - changed
Input schema / properties / latitude / descriptionPrevious value: -"Latitude coordinate"New value: +"Latitude in decimal degrees." - added
Input schema / properties / latitude / maximumAdded value: +90 - added
Input schema / properties / latitude / minimumAdded value: +-90 - changed
Input schema / properties / longitude / descriptionPrevious value: -"Longitude coordinate"New value: +"Longitude in decimal degrees." - added
Input schema / properties / longitude / maximumAdded value: +180 - added
Input schema / properties / longitude / minimumAdded value: +-180 - changed
Input schema / properties / parameters / descriptionPrevious value: -"Comma-separated data parameters"New value: +"Comma-separated POWER parameters, e.g. T2M,PRECTOTCORR,WS10M." - added
Input schema / properties / parameters / patternAdded value: +"^[A-Za-z0-9_]+(,[A-Za-z0-9_]+)*$" - changed
Input schema / properties / start / descriptionPrevious value: -"Start date (YYYYMMDD)"New value: +"Start date (YYYYMMDD)." - added
Input schema / properties / time_standardAdded value: +{ + "description": "Time standard for daily values; POWER defaults to LST (local solar time) when omitted.", + "enum": [ + "utc", + "lst" + ], + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "parameters", - "community", - "longitude", - "latitude", - "start", - "end" -]New value: +[ + "parameters", + "community", + "latitude", + "longitude", + "start", + "end" +]
- Added
nasa_ssc_locations - Added
nasa_ssc_observatories - Added
nasa_techport - Added
nasa_techtransfer - Added
nasa_tle - Added
nasa_trek_layers - Added
nasa_trek_tile
2 tool updates
v1.0.0- Changed
nasa_cmr3 fields changed- added
Input schema / properties / formatAdded value: +{ + "default": "json", + "description": "Response format", + "enum": [ + "json", + "umm_json", + "atom", + "echo10", + "iso19115", + "iso_smap", + "kml" + ], + "type": "string" +} - added
Input schema / properties / search_typeAdded value: +{ + "default": "collections", + "description": "Search type (collections or granules)", + "enum": [ + "collections", + "granules" + ], + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "keyword" -]New value: +[ + "keyword", + "search_type", + "format" +]
- Removed
nasa_earth
24 tool updates
- First observed
jpl_cad - First observed
jpl_fireball - First observed
jpl_horizons - First observed
jpl_horizons_file - First observed
jpl_jd_cal - First observed
jpl_nhats - First observed
jpl_periodic_orbits - First observed
jpl_sbdb - First observed
jpl_scout - First observed
jpl_sentry - First observed
nasa_apod - First observed
nasa_cmr - First observed
nasa_donki - First observed
nasa_earth - First observed
nasa_eonet - First observed
nasa_epic - First observed
nasa_exoplanet - First observed
nasa_firms - First observed
nasa_gibs - First observed
nasa_images - First observed
nasa_mars_rover - First observed
nasa_neo - First observed
nasa_osdr_files - First observed
nasa_power
TDQS
Scored across 32 tools
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.
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.
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.
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
Related MCP Connectors
Real-time planetary signal engine and Model Context Protocol (MCP) server for autonomous AI agents.
NASA MCP — wraps NASA Open APIs (api.nasa.gov)
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Geospatial AI MCP server — satellite imagery, embeddings, weather, GNS governance
Related MCP Servers
- AlicenseBqualityCmaintenanceAn 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.216MIT
- FlicenseNot gradedqualityDmaintenanceMulti-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.-
- AlicenseAqualityCmaintenanceMCP 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.11MIT
- FlicenseCqualityDmaintenanceA Model Context Protocol (MCP) server that provides access to NASA's Astronomy Picture of the Day (APOD) API.2-