get_granules
Search NASA CMR granules for a specific parent collection and return up to 10 lightweight normalized results.
Key return fields in each item:
concept_id: CMR granule concept ID
native_id: native ID of the granule record
revision_id: revision ID of the granule metadata
provider_id: provider ID of the granule
granule_ur: primary granule identifier
time_start / time_end: temporal coverage bounds
access_urls: actionable data access URLs
cloud_cover: cloud cover percentage
day_night_flag: DAY, NIGHT, BOTH, or UNSPECIFIED
size_mb: file size in megabytes
data_format: file format (e.g., NetCDF-4, GeoTIFF)
bounding_box: [West, South, East, North] Minimum Bounding Rectangle (MBR) footprint. Note: for swath data or irregular polygons, this bounding box fully encloses the data but may contain empty space at the corners.
IMPORTANT — data availability checks: Without temporal and/or spatial filters, results represent ALL granules ever archived in the collection, which may span decades and the entire globe. total_hits without filters tells you the full archive size, NOT whether data exists for a specific area or time period. To verify availability for a specific region and/or period, apply the corresponding spatial or temporal filters. Single-filter queries (e.g., temporal-only) are completely valid and should be used when the user only specifies one constraint, but combining both provides the most precise availability answer.
Key parameters:
collection_concept_id: required parent collection concept ID
temporal_start_date / temporal_end_date: filter to granules overlapping this time window — always set when the user specifies a time period
spatial_wkt_geometry: filter to granules intersecting this area — always set when the user specifies a geographic region
cloud_cover_min / cloud_cover_max: filter optical imagery by cloud cover percentage (0–100). Only set for optical/visible imagery collections (Landsat, MODIS, VIIRS, Sentinel-2 via CMR). Do NOT set for non-optical data (SAR, altimetry, model output, etc.)
Iteration & Refinement:
Results are strictly capped at 10 items to optimize context window usage.
If total_hits exceeds 10 and you lack the necessary results, do not attempt to page. Refine your query by adding tighter spatial or temporal constraints.
Tips:
For the most precise availability check, provide both temporal and spatial filters if the user specifies both; otherwise, apply whichever constraint they provided
total_hits in the response reflects the filtered count — zero means no data for that combination
When users ask for "clear" or "cloud-free" imagery, set cloud_cover_max to a low value (e.g., 10 or 20)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default 10, max 50). Keep this small to avoid context window bloat. When using limit > 10, always specify the fields parameter. | |
| cursor | No | Pagination token for the next page of results. Pass the exact next_cursor string returned by the previous tool call. Cursors are query-scoped: they lock in the original search parameters and cannot be reused across different tools or different queries. If you need to change any search parameter, start a new search without a cursor. | |
| fields | No | ||
| sort_key | No | Sort key for granule results. e.g., '-start_date' (newest first), 'start_date' (oldest first). CMR default is relevance score. For ongoing or near-real-time (NRT) missions where the user wants the most recent data, always use '-start_date' — CMR's default relevance scoring may return historical data first if sort_key is not explicitly set. | |
| day_night_flag | No | Filter granules by day/night acquisition flag. Values: 'DAY', 'NIGHT', 'UNSPECIFIED'. | |
| cloud_cover_max | No | Maximum cloud cover percentage (0–100, inclusive). Use with cloud_cover_min to filter optical/visible imagery granules by cloud cover. For example, set cloud_cover_max=20 to find mostly clear scenes. Only applicable to collections that report cloud cover (e.g., Landsat, MODIS, etc). Omit for non-optical data (SAR, altimetry, etc.). | |
| cloud_cover_min | No | Minimum cloud cover percentage (0–100, inclusive). Use with cloud_cover_max to filter optical/visible imagery granules by cloud cover. Only applicable to collections that report cloud cover (e.g., Landsat, MODIS, etc). Omit for non-optical data (SAR, altimetry, etc.). | |
| temporal_end_date | No | End of temporal filter in ISO 8601 format (e.g., 2024-01-31T23:59:59Z). Finds granules whose temporal extent overlaps this window. Set this whenever the user specifies a time period — omitting it returns granules from the entire collection archive regardless of date. | |
| temporal_start_date | No | Start of temporal filter in ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Finds granules whose temporal extent overlaps this window. Set this whenever the user specifies a time period — omitting it returns granules from the entire collection archive regardless of date. | |
| spatial_wkt_geometry | No | Spatial filter as WKT geometry. Supported types: POLYGON((lon lat, ...)), POINT(lon lat), or LINESTRING(lon lat, ...).Finds granules with spatial extent intersecting this area. CMR returns any granule that touches this shape, so precise geometries are preferred to prevent false positives. Set this whenever the user specifies a geographic region — omitting it returns granules from the entire globe regardless of location. | |
| collection_concept_id | Yes | Parent collection concept ID (format: C<number>-<PROVIDER>, e.g., C2723758340-GES_DISC). Required to scope granule search. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | Status of the tool execution | |
| granules | No | Normalized granule results mapped from UMM-G | |
| total_hits | No | Total number of matching items | |
| next_cursor | No | Pagination token for the next page of results | |
| error_message | No | Error details when status is error |