Skip to main content
Glama

search_datasets

Search the AQUAVIEW catalog — a comprehensive collection of 268K+ global oceanographic, atmospheric, and marine datasets from 15 sources (NOAA, NDBC, IOOS, WOD, CoastWatch, etc.), intended for scientific research, data analysis, and environmental monitoring.

This searches METADATA — which datasets exist. To pull the actual observations (temperature profiles, buoy readings, float positions), use get_data instead; list_data_sources shows which sources support it.

You must provide at least one of: q, bbox, datetime, collections, filter, or token. Hint: When the user asks for a region, prefer the 'bbox' parameter over including region name in 'q'. Use the geo_hints resource for common bounding boxes.

Args: q: Free-text search across title, description, and keywords (e.g., "sea surface temperature"). Case-insensitive, OR logic across terms. bbox: Bounding box as "west,south,east,north" (e.g., "-98,24,-80,31" for Gulf of Mexico). datetime: Temporal filter. Single datetime, range ("2020-01-01T00:00:00Z/2024-12-31T23:59:59Z"), or open-ended ("../2024-01-01T00:00:00Z" or "2020-01-01T00:00:00Z/.."). collections: Comma-separated collection IDs to search within (e.g., "NOAA,NDBC,WOD"). Use list_collections to see available IDs. exclude_collections: Comma-separated collection IDs to omit from results (e.g., "INCIDENT_NEWS" to drop oil-spill reports from free-text searches). Applied as a CQL2 NOT filter, so it composes with filter. filter: CQL2-JSON filter as an object or JSON-encoded string. Supports flat and nested property paths. Flat example: {"op": "=", "args": [{"property": "aquaview:institution"}, "NOAA/NCEI"]}. Nested example (filter by per-variable stats summary): {"op": "<=", "args": [{"property": "aquaview:column_stats_summary.variables.Pressure.min"}, 10]}. Supported operators: =, <>, <, >, <=, >=, like, between, in, and, or, not. license: Comma-separated SPDX license id(s) to match exactly (e.g., "CC-BY-4.0,CC0-1.0"). Also accepts the controlled extra values "public-domain", "proprietary", "various", "unknown". Matched against aquaview:license, which is normalized on every item regardless of source. sortby: Sort specification as "+field,-field" (e.g., "+properties.datetime,-id"). + = ascending, - = descending. limit: Number of results to return, 1-100. Defaults to 10. token: Pagination token from a previous response's 'next_token' field. Pass this to get the next page of results. fields: Comma-separated list of fields to include in results (e.g., "id,geometry,properties.title"). Reduces response size. When set in CSV mode, emits projected columns (no canonical columns, no asset_keys, no ## assets section). include_assets: If False (default), asset download records are omitted to save ~60-70% of response tokens; CSV mode still emits a capped asset_keys hint column (e.g. column_stats;overview;gdac_prof;+[N]) so an agent can see what kinds of assets exist. To get full URLs, call get_item(collection, item_id) for the specific id. If True, assets are included inline (full dict for JSON/TOON; ## assets section with item_id,key,href,type,title rows for CSV). output_format: "csv" (default, sectioned CSV — canonical columns including asset_keys hint), "json", or "toon".

Returns: Search results with metadata (total matched, returned, next_token) and items. CSV mode emits ## metadata + ## items sections and a ## assets section when include_assets=True; columns are id,collection,bbox,datetime,title,institution, platform_type,cdm_data_type,variables,keywords,source_url,description, column_stats_summary,geometry,asset_keys. JSON/TOON return the STAC feature shape, with the assets dict present only when include_assets=True.

Input Schema

NameRequiredDescriptionDefault
qNo
bboxNo
limitNo
tokenNo
fieldsNo
filterNo
sortbyNo
licenseNo
datetimeNo
collectionsNo
output_formatNocsv
include_assetsNo
exclude_collectionsNo

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed14 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -false
    • removedInput schema / properties / bbox / description
      Removed value: -"Bounding box as \"west,south,east,north\" (e.g., \"-98,24,-80,31\" for Gulf of Mexico)."
    • removedInput schema / properties / collections / description
      Removed value: -"Comma-separated collection IDs to search within (e.g., \"NOAA,NDBC,WOD\"). Use list_collections to see available IDs."
    • removedInput schema / properties / datetime / description
      Removed value: -"Temporal filter. Single datetime, range (\"2020-01-01T00:00:00Z/2024-12-31T23:59:59Z\"), or open-ended (\"../2024-01-01T00:00:00Z\" or \"2020-01-01T00:00:00Z/..\")."
    • removedInput schema / properties / exclude_collections / description
      Removed value: -"Comma-separated collection IDs to omit from results (e.g., \"INCIDENT_NEWS\" to drop oil-spill reports from free-text searches). Applied as a CQL2 NOT filter, so it composes with `filter`."
    • removedInput schema / properties / fields / description
      Removed value: -"Comma-separated list of fields to include in results (e.g., \"id,geometry,properties.title\"). Reduces response size. When set in CSV mode, emits projected columns (no canonical columns, no asset_keys, no `## assets` section)."
    • removedInput schema / properties / filter / description
      Removed value: -"CQL2-JSON filter as an object or JSON-encoded string. Supports flat and nested property paths. Flat example: {\"op\": \"=\", \"args\": [{\"property\": \"aquaview:institution\"}, \"NOAA/NCEI\"]}. Nested example (filter by per-variable stats summary): {\"op\": \"<=\", \"args\": [{\"property\": \"aquaview:column_stats_summary.variables.Pressure.min\"}, 10]}. Supported operators: =, <>, <, >, <=, >=, like, between, in, and, or, not."
    • removedInput schema / properties / include_assets / description
      Removed value: -"If False (default), asset download records are omitted to save ~60-70% of response tokens; CSV mode still emits a capped `asset_keys` hint column (e.g. `column_stats;overview;gdac_prof;+[N]`) so an agent can see what kinds of assets exist. To get full URLs, call `get_item(collection, item_id)` for the specific id. If True, assets are included inline (full dict for JSON/TOON; `## assets` section with item_id,key,href,type,title rows for CSV)."
    • removedInput schema / properties / license / description
      Removed value: -"Comma-separated SPDX license id(s) to match exactly (e.g., \"CC-BY-4.0,CC0-1.0\"). Also accepts the controlled extra values \"public-domain\", \"proprietary\", \"various\", \"unknown\". Matched against `aquaview:license`, which is normalized on every item regardless of source."
    • removedInput schema / properties / limit / description
      Removed value: -"Number of results to return, 1-100. Defaults to 10."
    • removedInput schema / properties / output_format / description
      Removed value: -"\"csv\" (default, sectioned CSV — canonical columns including asset_keys hint), \"json\", or \"toon\"."
    • removedInput schema / properties / q / description
      Removed value: -"Free-text search across title, description, and keywords (e.g., \"sea surface temperature\"). Case-insensitive, OR logic across terms."
    • removedInput schema / properties / sortby / description
      Removed value: -"Sort specification as \"+field,-field\" (e.g., \"+properties.datetime,-id\"). + = ascending, - = descending."
    • removedInput schema / properties / token / description
      Removed value: -"Pagination token from a previous response's 'next_token' field. Pass this to get the next page of results."
  2. Changed1 schema field changed
    • addedInput schema / properties / license
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Comma-separated SPDX license id(s) to match exactly (e.g., \"CC-BY-4.0,CC0-1.0\"). Also accepts the controlled extra values \"public-domain\", \"proprietary\", \"various\", \"unknown\". Matched against `aquaview:license`, which is normalized on every item regardless of source."
      +}
  3. First observed

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and largely meets it: it discloses the metadata-only scope, the required-parameter constraint, pagination via next_token, and concrete cost/token behavior (include_assets False omits assets to save ~60-70% of response tokens; fields reduces response size). It stops short of stating read-only/permission semantics or rate limits, so a 4 rather than 5.

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

Conciseness4/5

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

Long, but the length is justified by 13 undocumented parameters and is well-structured with Args and Returns sections. The purpose and the get_data disambiguation are front-loaded. A few parenthetical asides (e.g. the CQL2 NOT explanation for exclude_collections) add detail that could be trimmed, but nothing is egregiously wasteful.

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

Completeness5/5

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

For a 13-parameter metadata search, the description covers scope, required inputs, every parameter, pagination, output formats, and even a Returns section despite an output schema being present. An agent has everything needed to invoke it correctly, including the sibling routing to get the actual data.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate, and it does: every one of the 13 parameters is documented with meaning, format, defaults, and worked examples (bbox as 'west,south,east,north', datetime range syntax, CQL2 filter with flat and nested examples and the operator list, license controlled values, sortby +/- convention, limit 1-100). This adds substantial meaning beyond the bare schema.

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

Purpose5/5

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

States a specific verb (Search) and resource (the AQUAVIEW catalog of metadata), and explicitly distinguishes the scope: 'This searches METADATA — which datasets exist.' It names the sibling it is not (get_data pulls actual observations) and the sibling that helps (list_data_sources), so an agent can differentiate without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use vs alternatives ('to pull the actual observations... use get_data instead'), a constraint ('must provide at least one of: q, bbox, datetime, collections, filter, or token'), and a routing hint ('prefer bbox over region name in q'; use geo_hints for bounding boxes). This is about as prescriptive as usage guidance gets.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources