Skip to main content
Glama

Search data

search_data
Read-onlyIdempotent

Search the data catalog: which dataset's values answer a question about weather and the people and places it affects, or what data exists at a point. With query it ranks datasets and map layers and returns hits with the next call (a named place fills its area; add a place if note asks) and any verified example; without it, it lists datasets at the place with freshness, or all. A place or domain keeps datasets covering it; kind and family filter a listing, rank a query; describe_data lists other variables for get_data. Example: {"query": "snow depth", "location": "Erie, PA"}.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "search_data"
  }
}

Input Schema

NameRequiredDescriptionDefault
latNoLatitude (-90 to 90), with lon.
lonNoLongitude (-180 to 180), with lat.
kindNogrid: forecasts (incl. AQ, UV, HeatRisk, radar nowcast), normals, astronomy, observed daily extremes; snapshot: latest radar mosaics, satellite, analyses, AQ, soil moisture; feature: station obs and normals, soundings, recon, lightning flashes, radar cell detections, reports, alerts, outlooks, places; text: forecaster text; index: climate indices, SSW.
limitNoRows (1-10); default 5 with query, all without.
queryNoThe question in the user's words (2-200 chars); omit to list.
domainNoCoverage filter without a place; global = no filter.
familyNoSource family, describe_data's `family` (1-40 chars).
locationNo"City, ST", ZIP or "lat,lon" (up to 200 chars); not with lat/lon.

Output Schema

NameRequiredDescriptionDefault
hitsYes
noteNo
queryNo
domainNoThe coverage filter applied: the place's domain, or `domain`.
locationNo
data_statusNoListing at a place: present only when the data service did not provide freshness, or answered from a cached copy.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedOutput schema / properties / hits / items / properties / variable / description
      Previous value: -"Best-matching standard variable name."New value: +"The standard variable the call reads; absent when it reads several (an index `*` call lists `variables`)."
    • addedOutput schema / properties / hits / items / properties / variables
      Added value: +{
      +  "description": "index: every variable the call reads (standard names).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / kind / description
      Previous value: -"grid: forecasts (incl. AQ, UV, HeatRisk, radar nowcast), normals, astronomy, observed daily extremes; snapshot: latest radar mosaics, satellite, analyses, AQ, soil moisture; feature: station obs and normals, soundings, recon, lightning flashes, radar cell detections, reports, alerts, outlooks, places; text: forecaster text; index: climate indices."New value: +"grid: forecasts (incl. AQ, UV, HeatRisk, radar nowcast), normals, astronomy, observed daily extremes; snapshot: latest radar mosaics, satellite, analyses, AQ, soil moisture; feature: station obs and normals, soundings, recon, lightning flashes, radar cell detections, reports, alerts, outlooks, places; text: forecaster text; index: climate indices, SSW."
  3. Changed1 schema field changed
    • changedInput schema / properties / domain / description
      Previous value: -"Coverage filter without a place; omit for tropical or recon."New value: +"Coverage filter without a place; global = no filter."
  4. Changed2 schema fields changed
    • changedInput schema / properties / family / description
      Previous value: -"Only this source family, describe_data's `family` (1-40 chars)."New value: +"Source family, describe_data's `family` (1-40 chars)."
    • changedInput schema / properties / kind / description
      Previous value: -"This kind only."New value: +"grid: forecasts (incl. AQ, UV, HeatRisk, radar nowcast), normals, astronomy, observed daily extremes; snapshot: latest radar mosaics, satellite, analyses, AQ, soil moisture; feature: station obs and normals, soundings, recon, lightning flashes, radar cell detections, reports, alerts, outlooks, places; text: forecaster text; index: climate indices."
  5. Changed5 schema fields changed
    • changedInput schema / properties / family / description
      Previous value: -"Only this source family, describe_data's `family` (1-40 characters)."New value: +"Only this source family, describe_data's `family` (1-40 chars)."
    • changedInput schema / properties / kind / description
      Previous value: -"Only this dataset kind."New value: +"This kind only."
    • changedInput schema / properties / kind / enum
      Previous value: -[
      -  "grid",
      -  "snapshot",
      -  "feature",
      -  "text"
      -]New value: +[
      +  "grid",
      +  "snapshot",
      +  "feature",
      +  "text",
      +  "index"
      +]
    • changedInput schema / properties / query / description
      Previous value: -"The question in the user's words (2-200 characters); omit to list."New value: +"The question in the user's words (2-200 chars); omit to list."
    • changedOutput schema / properties / hits / items / properties / kind / enum
      Previous value: -[
      -  "grid",
      -  "snapshot",
      -  "feature",
      -  "text"
      -]New value: +[
      +  "grid",
      +  "snapshot",
      +  "feature",
      +  "geojson",
      +  "text",
      +  "index"
      +]
  6. Changed1 schema field changed
    • changedInput schema / properties / domain / description
      Previous value: -"Coverage filter without a place."New value: +"Coverage filter without a place; omit for tropical or recon."
  7. Changed5 schema fields changed
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +{}
    • changedOutput schema / properties / hits / items / additionalProperties
      Previous value: -falseNew value: +{}
    • changedOutput schema / properties / hits / items / properties / call / additionalProperties
      Previous value: -falseNew value: +{}
    • changedOutput schema / properties / hits / items / properties / example / additionalProperties
      Previous value: -falseNew value: +{}
    • changedOutput schema / properties / location / additionalProperties
      Previous value: -falseNew value: +{}
  8. Changed2 schema fields changed
    • changedInput schema / properties / family / description
      Previous value: -"Only this source family, e.g. \"nbm\" (1-40 characters)."New value: +"Only this source family, describe_data's `family` (1-40 characters)."
    • addedOutput schema / properties / hits / items / properties / example
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "A verified get_data call on this dataset for a question like this one, verbatim: adapt its place and times.",
      +  "properties": {
      +    "call": {
      +      "additionalProperties": {},
      +      "properties": {},
      +      "type": "object"
      +    },
      +    "question": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "question",
      +    "call"
      +  ],
      +  "type": "object"
      +}
  9. Added

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuinely useful operational context: hits carry the next `call`, a named place fills its `area`, a `note` may ask for a place, and a verified `example` may be returned, plus freshness in listings. It stops short of describing pagination or what happens when no hits match, so it is solid but not rich.

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

Conciseness3/5

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

The core content is dense but a single rambling sentence with nested parentheticals, so the query-mode vs list-mode split is hard to parse on first read. The trailing JSON example is genuinely helpful and earns its place. Front-loading is decent (search purpose first) but structure could be split into short mode-specific sentences.

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

Completeness4/5

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

With an output schema, 100% parameter coverage, and full annotations, the description only needs to explain modes and routing, which it does. It explains both invocation modes, the place/domain scoping rule, and the handoff to describe_data/get_data. Minor gaps remain around failure and empty-result behavior for an 8-parameter discovery tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: `kind` and `family` filter a listing yet rank a query, `domain` or a place restricts datasets to those covering it, and `location` feeds the returned call's `area`. Those behavioral distinctions between the same parameter in query vs list mode are not evident from the schema alone.

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

Purpose4/5

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

The opening clause names a specific verb and resource (search the data catalog) and frames the two intents: finding which dataset answers a question, or what data exists at a point. It also explicitly routes to siblings at the end (describe_data for other variables, get_data for values), so it is distinguishable. The phrasing is convoluted and mixes purpose with return mechanics, keeping it short of a 5.

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

Usage Guidelines4/5

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

It gives explicit conditional behavior: with `query` it ranks datasets and map layers, without it it lists datasets at a place (with freshness) or all. It names describe_data as the alternative for listing other variables before get_data. It does not cover edge cases such as when to prefer find_tools or find_places for place resolution, so it is clear context rather than exhaustive when/when-not guidance.

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.