Skip to main content
Glama
tharlestsa

OpenLandMap MCP Server

by tharlestsa

OpenLandMap MCP Server

MCP Server for the OpenLandMap STAC catalog — full access to global geospatial environmental data for AI agents.

Overview

OpenLandMap provides 104+ collections of global environmental data as Cloud-Optimized GeoTIFFs (COG), covering:

Theme

Examples

Soil

Organic carbon, pH, texture, bulk density, water content

Vegetation

EVI, FAPAR, forest cover, plant functional types

Land Cover

Land cover, land use, cropland, pasture, urban areas

Climate

Land surface temperature (LST), precipitation, bioclim

Terrain

DEM, slope, aspect, curvature, geomorphometry

Water

Water occurrence, snow cover

Atmosphere

NO2, water vapor, aerosol optical depth

Population

Population density, human footprint, wilderness

Related MCP server: Copernicus Earth Observation MCP Server

Installation

cd openlandmap-mcp

# Install with uv
uv pip install -e .

# Or run directly (uv resolves dependencies automatically)
uv run openlandmap-mcp

Configuration

Prerequisites: uv must be installed and available in PATH.

Claude Code

Add to .claude/settings.json (project-level) or ~/.claude/settings.json (global):

{
  "mcpServers": {
    "openlandmap": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/openlandmap-mcp", "openlandmap-mcp"]
    }
  }
}

Claude Desktop

Add to your claude_desktop_config.json:

OS

Path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

Linux

~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "openlandmap": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/openlandmap-mcp", "openlandmap-mcp"]
    }
  }
}

Gemini CLI

Add to ~/.gemini/settings.json (global) or .gemini/settings.json (project-level):

OS

Global path

Linux / macOS

~/.gemini/settings.json

Windows

%USERPROFILE%\.gemini\settings.json

{
  "mcpServers": {
    "openlandmap": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/openlandmap-mcp", "openlandmap-mcp"],
      "timeout": 60000
    }
  }
}

After configuration, verify with the /mcp command inside Gemini CLI to list connected servers and available tools.

ChatGPT Desktop

ChatGPT supports MCP servers exclusively via remote HTTP/SSE transport — local stdio processes are not supported. You need to expose the server over HTTP first.

Step 1 — Start the server with SSE transport:

uv run openlandmap-mcp --transport sse --port 8811

Step 2 — Expose locally (for development) or deploy publicly:

For local development, use a tunnel like ngrok:

ngrok http 8811
# Example output: https://abc123.ngrok.app

For production, deploy behind a reverse proxy with a public HTTPS URL.

Step 3 — Register in ChatGPT Desktop:

  1. Open Settings → Apps & Connectors → Advanced Settings

  2. Enable Developer Mode

  3. Go to Settings → Connectors → Create

  4. Fill in:

    • Name: OpenLandMap

    • Connector URL: https://abc123.ngrok.app/mcp (or your public URL)

    • Authentication: None (or configure as needed)

Note: ChatGPT does not support local config files for MCP. All registration is done through the UI. The server must be reachable over HTTPS.

Cursor / VS Code

Add to .cursor/mcp.json (Cursor) or .vscode/mcp.json (VS Code):

{
  "mcpServers": {
    "openlandmap": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/openlandmap-mcp", "openlandmap-mcp"]
    }
  }
}

Compatibility Matrix

Client

Transport

Config file

Local stdio

Claude Code

stdio

.claude/settings.json

Yes

Claude Desktop

stdio

claude_desktop_config.json

Yes

Gemini CLI

stdio

~/.gemini/settings.json

Yes

ChatGPT Desktop

HTTP/SSE

UI only (no file)

No

Cursor

stdio

.cursor/mcp.json

Yes

VS Code

stdio

.vscode/mcp.json

Yes


Capabilities

1. Catalog Discovery

Browse and search the entire OpenLandMap catalog.

catalog_info()

Returns root catalog metadata: ID, description, STAC version, total collection count.

"What data is available on OpenLandMap?"

list_collections(theme?, keyword?, limit?)

List collections with optional filters by theme alias or keyword search across titles, descriptions, and keywords.

"List all soil collections"
→ list_collections(theme="soil")

"Find collections related to organic carbon"
→ list_collections(keyword="organic carbon")

"Show the first 5 vegetation datasets"
→ list_collections(theme="vegetation", limit=5)

Available theme aliases: soil, vegetation, land_cover, climate, terrain, water, atmosphere, population

get_collection_schema(collection_id)

Returns the full schema of a collection: asset type definitions (MIME types, roles), STAC extensions used, spatial/temporal extent, contact info, style URLs (SLD/QML), and related links.

"Show me everything about the organic carbon collection"
→ get_collection_schema("organic.carbon_usda.6a1c")

discover_data_for_topic(topic)

Natural language search across all collection titles, descriptions, and keywords. Returns results ranked by relevance score.

"Find data about deforestation in the Amazon"
→ discover_data_for_topic("Amazon deforestation forest loss")

"What datasets exist for air quality analysis?"
→ discover_data_for_topic("air quality NO2 aerosol")

2. Collection Operations

Analyze, compare, and explore collections in depth.

compare_collections(collection_ids)

Side-by-side comparison of 2–10 collections: temporal coverage, resolution, units, keywords, and theme.

"Compare soil organic carbon and pH datasets"
→ compare_collections(["organic.carbon_usda.6a1c", "ph.h2o_usda.4c1a2a"])

get_collection_temporal_stats(collection_id)

Temporal statistics: earliest/latest dates, item count, year-by-year distribution, and median update interval.

"How often is the EVI dataset updated?"
→ get_collection_temporal_stats("evi_mod13q1.tmwm.inpaint")

Finds collections sharing the same theme or native category. Useful for discovering complementary datasets.

"What other datasets are related to land surface temperature?"
→ find_related_collections("lst_mod11a2.daytime")

get_soil_collections()

Shortcut returning all soil-related collections (bulk density, organic carbon, pH, sand/clay/silt, texture, water content, taxonomy).

"List all available soil datasets"
→ get_soil_collections()

get_vegetation_collections()

Shortcut returning all vegetation-related collections (EVI, FAPAR, forest cover, plant functional types).

"What vegetation indices are available?"
→ get_vegetation_collections()

get_land_cover_collections()

Shortcut returning all land cover/land use collections (classification, cropland, pasture, urban, change detection).

"Show me land cover datasets"
→ get_land_cover_collections()

3. Item Search & Access

Search and retrieve individual temporal snapshots within collections.

search_items(collection_id, bbox?, datetime_range?, limit?, offset?)

Search items with spatial (bounding box) and temporal (ISO 8601 interval) filters. Supports pagination.

"Find organic carbon data for the Cerrado region"
→ search_items("organic.carbon_usda.6a1c", bbox=[-60.47, -24.68, -41.28, -2.33])

"Get EVI data from 2015 to 2020"
→ search_items("evi_mod13q1.tmwm.inpaint", datetime_range="2015-01-01/2020-12-31", limit=10)

"Show all items in the land cover collection"
→ search_items("land.cover_esacci.lc.l4", limit=50)

get_item_detail(collection_id, item_id)

Full item details: geometry (GeoJSON), bounding box, temporal range, all assets with resolved URLs, MIME types, file sizes, and checksums.

"Show full details for the 2018 organic carbon item"
→ get_item_detail("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_19500101_20171231")

list_items_temporal(collection_id)

Lists all items sorted chronologically. Shows the complete temporal coverage and update pattern of a dataset.

"What time periods are available for EVI?"
→ list_items_temporal("evi_mod13q1.tmwm.inpaint")

find_items_by_point(lon, lat, collection_ids?)

Given a WGS84 coordinate, finds all items covering that point across one or more collections.

"What data is available for Brasília?"
→ find_items_by_point(-47.9, -15.8)

"Find soil data at this location"
→ find_items_by_point(-47.9, -15.8, ["organic.carbon_usda.6a1c", "ph.h2o_usda.4c1a2a"])

4. Asset Access & Download

Resolve URLs and generate download instructions for data files.

get_asset_url(collection_id, item_id, asset_key)

Resolves the full S3 URL for a specific asset. Returns MIME type, roles, COG status, file size, checksum, and S3 bucket/key.

"Get the URL for the 0cm depth organic carbon layer"
→ get_asset_url("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_19500101_20171231", "organic.carbon_usda.6a1c_m_250m_b0cm")

list_assets_for_item(collection_id, item_id)

Lists all assets (data layers, thumbnails, style files) with complete metadata for each.

"What files are available in this item?"
→ list_assets_for_item("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_19500101_20171231")

get_all_data_assets(collection_id, item_id)

Filters to only data assets (role="data"), excluding thumbnails, QML, and SLD files. Returns direct COG URLs.

"Give me only the data layers, not the styles"
→ get_all_data_assets("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_19500101_20171231")

get_asset_download_info(collection_id, item_id, asset_key)

Returns the direct URL plus ready-to-use commands and code snippets:

  • curl command for download

  • wget command for download

  • Python snippet using rasterio (streaming, no download needed)

  • R snippet using terra (streaming, no download needed)

"How do I access the soil carbon data programmatically?"
→ get_asset_download_info("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_19500101_20171231", "organic.carbon_usda.6a1c_m_250m_b0cm")

get_visualization_assets(collection_id, item_id)

Returns visualization-related assets: thumbnails (PNG), QGIS layer styles (QML), and WMS style descriptors (SLD).

"Get the QGIS style file for this layer"
→ get_visualization_assets("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_19500101_20171231")

5. Spatial Queries

Work with geographic regions and spatial coverage.

get_bbox_for_region(region_name)

Returns the WGS84 bounding box [west, south, east, north] for a named region. Supports ~50 regions:

  • Countries: brazil, usa, china, india, australia, germany, france, japan, mexico, argentina, colombia, south_africa, kenya, indonesia, etc.

  • Brazilian states: goias, mato_grosso, para, minas_gerais, sao_paulo, bahia, amazonas, tocantins, maranhao, rondonia, acre, roraima, amapa, etc.

  • Brazilian biomes: cerrado, amazon, amazonia_legal, caatinga, pantanal, mata_atlantica, pampa

  • Continents/regions: south_america, north_america, europe, africa, asia, southeast_asia, oceania, middle_east, global

"What's the bounding box for the Cerrado biome?"
→ get_bbox_for_region("cerrado")
# Returns: {"region": "cerrado", "bbox": [-60.47, -24.68, -41.28, -2.33]}

"Get the bbox for Goiás state"
→ get_bbox_for_region("goias")

find_collections_for_bbox(bbox, theme?)

Finds all collections whose spatial extent intersects the given bounding box. Optionally filters by theme.

"What soil data covers the Cerrado?"
→ find_collections_for_bbox([-60.47, -24.68, -41.28, -2.33], theme="soil")

"Find all datasets available for Southeast Asia"
→ find_collections_for_bbox([92.0, -11.0, 141.0, 28.0])

get_collection_spatial_coverage(collection_id)

Returns full spatial coverage: bounding box, GeoJSON polygon of the extent, ground sample distance (resolution in meters), and CRS.

"What is the spatial resolution of the elevation model?"
→ get_collection_spatial_coverage("dtm.bareearth_ensemble")

6. Analysis & Code Generation

Discover data by topic, analyze temporal coverage, and generate ready-to-use code.

get_data_timeline(collection_ids)

Generates a structured timeline showing data availability across 1–10 collections. Useful for planning multi-temporal analyses.

"Show me when soil and vegetation data overlap"
→ get_data_timeline(["organic.carbon_usda.6a1c", "evi_mod13q1.tmwm.inpaint"])

find_overlapping_datasets(collection_id, start_year, end_year)

Finds all other collections with temporal overlap in the given period. Useful for multi-variable correlation studies.

"What datasets overlap with land cover data between 2010 and 2020?"
→ find_overlapping_datasets("land.cover_esacci.lc.l4", 2010, 2020)

get_stac_item_as_geojson(collection_id, item_id)

Returns the item as a pure GeoJSON Feature, ready for use in any GIS tool, web map, or geospatial pipeline.

"Export this item as GeoJSON"
→ get_stac_item_as_geojson("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_19500101_20171231")

build_python_snippet(collection_id, item_id, asset_key, operation)

Generates a ready-to-run Python code snippet using rasterio and matplotlib.

Operations: open, info, plot, clip_bbox, stats, export_csv

"Generate Python code to plot organic carbon data"
→ build_python_snippet("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_19500101_20171231", "organic.carbon_usda.6a1c_m_250m_b0cm", "plot")

"Generate code to compute statistics"
→ build_python_snippet(..., operation="stats")

"Generate code to clip to a bounding box"
→ build_python_snippet(..., operation="clip_bbox")

build_r_snippet(collection_id, item_id, asset_key, operation)

Generates a ready-to-run R code snippet using terra and sf.

Operations: open, info, plot, clip_bbox, stats, export_csv

"Generate R code to open and plot this raster"
→ build_r_snippet("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_19500101_20171231", "organic.carbon_usda.6a1c_m_250m_b0cm", "plot")

MCP Resources

Static data accessible via URI patterns:

URI

Description

stac://openlandmap/catalog

Root catalog metadata (ID, version, collection count)

stac://openlandmap/themes

Index of all collections organized by thematic category

stac://openlandmap/guide

Usage guide with quick-start instructions

stac://openlandmap/collection/{id}

Full metadata for a specific collection

stac://openlandmap/collection/{id}/item/{item_id}

Full item details including all assets

MCP Prompts

Pre-built workflow templates for common analysis patterns:

Prompt

Description

Parameters

explore_collection

Step-by-step exploration of a collection (schema, temporal coverage, assets, related data)

collection_id

find_data_for_analysis

Guided workflow to find data for a specific analysis (region + topic + period)

topic, region, period

download_workflow

Complete data access workflow with URLs, commands, and code snippets

collection_id, item_id


Usage Examples

"What data is available on OpenLandMap?"
"List all soil datasets"
"Find collections about organic carbon"
"Show the temporal coverage of evi_mod13q1.tmwm.inpaint"
"Find vegetation data for the Cerrado between 2015 and 2020"
"Generate a Python snippet to access EVI data"
"Compare soil collections: organic.carbon vs ph.h2o"
"What is the spatial resolution of the elevation dataset?"
"Find datasets that overlap temporally with land cover between 2010-2020"
"Generate R code to plot soil organic carbon"
"What data is available at coordinates -47.9, -15.8?"
"Export this STAC item as GeoJSON for use in QGIS"
"How do I download the bulk density dataset with curl?"
"Show me the QGIS style file for the pH collection"

Architecture

  • Static catalog: Data is served from S3 (Wasabi) as static STAC JSONs — no server-side search API

  • In-memory cache: Configurable TTL per resource type (1h catalog, 30min collections, 10min items)

  • Lazy loading: Collections fetched on demand with concurrent batch fetch (semaphore-limited) when global filtering is needed

  • No native dependencies: Pure Python and pre-built wheels only (no GDAL/GEOS compilation required)

  • Retry with backoff: Automatic retry (3 attempts, exponential delays 1s/2s/4s) for all HTTP requests

  • Thundering herd protection: Per-key async locks prevent duplicate fetches for the same resource

License

OpenLandMap data is distributed under CC-BY-SA-4.0.

Available Tools

27 tools
build_python_snippetA

Generate a ready-to-use Python code snippet for accessing a raster asset.

Supports multiple operations: open, info, plot, clip_bbox, stats, export_csv.

Args: collection_id: Collection identifier. item_id: Item identifier. asset_key: Asset key within the item. operation: Code operation to generate: 'open' — open the raster with rasterio 'info' — print raster metadata 'plot' — plot with matplotlib 'clip_bbox' — clip to a bounding box 'stats' — compute zonal statistics 'export_csv' — export values to CSV

Returns: Python code snippet as a string.

Example: build_python_snippet("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_20180101_20181231", "organic.carbon_usda.6a1c_m_1km_b30cm_s", "plot")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
item_idYes
asset_keyYes
operationNoopen

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the tool returns a Python code snippet as a string, which is useful. However, it doesn't disclose behavioral traits such as whether the tool requires authentication, has rate limits, or if the generated code includes dependencies (e.g., rasterio, matplotlib). For a code-generation tool with no annotations, this leaves significant gaps in understanding its operation and constraints.

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

Conciseness5/5

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

The description is well-structured and front-loaded: the first sentence states the purpose, followed by a bullet-point list of operations, a clear Args section, and an example. Every sentence adds value without redundancy, making it efficient and easy to scan.

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?

Given the tool's complexity (generating code for multiple operations) and the presence of an output schema (which covers return values), the description is largely complete. It explains parameters thoroughly and includes an example. However, it lacks context on dependencies or execution environment for the generated code, which could be important for users.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It provides clear semantics for all four parameters: collection_id, item_id, and asset_key are explained as identifiers, and operation is detailed with a list of possible values and their purposes (e.g., 'open' for opening with rasterio). This adds substantial meaning beyond the bare schema, though it doesn't specify formats or constraints for the identifiers.

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?

The description clearly states the tool's purpose: 'Generate a ready-to-use Python code snippet for accessing a raster asset.' It specifies the exact action (generate), target (Python code snippet), and resource (raster asset). This distinguishes it from sibling tools like build_r_snippet (for R) or get_asset_url (for URLs).

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

Usage Guidelines3/5

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

The description implies usage through the list of supported operations (e.g., open, info, plot), suggesting it's for generating code to perform these specific tasks on raster assets. However, it lacks explicit guidance on when to use this tool versus alternatives like get_asset_download_info or get_visualization_assets, and doesn't mention prerequisites or exclusions.

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

build_r_snippetA

Generate a ready-to-use R code snippet for accessing a raster asset.

Uses terra, sf, and rstac packages.

Args: collection_id: Collection identifier. item_id: Item identifier. asset_key: Asset key within the item. operation: Code operation: 'open' — open with terra::rast() 'info' — print metadata 'plot' — plot the raster 'clip_bbox' — crop to bounding box 'stats' — compute statistics 'export_csv' — export to CSV

Returns: R code snippet as a string.

Example: build_r_snippet("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_20180101_20181231", "organic.carbon_usda.6a1c_m_1km_b30cm_s", "plot")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
item_idYes
asset_keyYes
operationNoopen

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool generates code (not executes it), mentions the R packages used (terra, sf, rstac), and lists possible operations, but does not cover behavioral aspects like error handling, rate limits, or authentication needs. It adds some value but lacks comprehensive behavioral context.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the main purpose, followed by details on packages, parameters, returns, and an example. Every sentence adds value without redundancy, making it efficient and easy to parse.

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

Completeness4/5

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

Given the tool's complexity (4 parameters, 0% schema coverage, no annotations) and the presence of an output schema (implied by 'Returns: R code snippet as a string'), the description is mostly complete. It covers parameters and operations well but could include more on behavioral aspects like dependencies or limitations to be fully comprehensive.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It adds significant meaning beyond the schema by explaining each parameter's role (e.g., 'collection_id: Collection identifier') and detailing the 'operation' parameter with specific enum-like values and their purposes. This clarifies what inputs are needed and how they affect the output.

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?

The description clearly states the tool's purpose: 'Generate a ready-to-use R code snippet for accessing a raster asset.' It specifies the verb ('generate'), resource ('R code snippet'), and target ('accessing a raster asset'), and distinguishes from siblings like 'build_python_snippet' by focusing on R specifically.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool—for generating R code to access raster assets—and implies usage through the example. However, it does not explicitly state when not to use it or name alternatives (e.g., when Python code is needed instead of R).

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

catalog_infoA

Return metadata about the OpenLandMap STAC root catalog.

Returns the catalog identifier, description, STAC version, total number of collections, and conformance classes.

Example return: {"id": "openlandmap", "stac_version": "1.0.0", "total_collections": 104, ...}

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns metadata (implying a read-only operation) and provides an example return format, which adds useful context. However, it does not mention behavioral aspects like error handling, rate limits, or authentication needs, leaving some gaps in transparency.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by specifics on what is returned and an example. Every sentence adds value—none are redundant or wasteful—making it efficiently structured and easy to parse.

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

Completeness4/5

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

Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is largely complete. It explains what the tool does and provides an example return. However, without an output schema, it could benefit from more detail on the full return structure or potential errors, but it adequately covers the basics for this simple 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?

The tool has 0 parameters, and the input schema has 100% coverage (empty object). The description does not need to add parameter semantics, so it appropriately focuses on output. The baseline for 0 parameters is 4, as the description compensates by detailing the return value without unnecessary parameter information.

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?

The description clearly states the tool's purpose with a specific verb ('Return') and resource ('metadata about the OpenLandMap STAC root catalog'), distinguishing it from siblings like list_collections or get_collection_schema. It explicitly mentions what metadata is returned (catalog identifier, description, STAC version, etc.), making the purpose unambiguous.

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

Usage Guidelines4/5

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

The description implies usage for retrieving high-level catalog metadata, but does not explicitly state when to use this tool versus alternatives like list_collections (which lists collections) or other sibling tools. It provides clear context for catalog-level information but lacks explicit exclusions or named alternatives.

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

compare_collectionsA

Compare multiple collections side by side.

Shows temporal coverage, resolution, variable/layer info, theme, and keyword overlap for each collection. Useful for deciding which dataset best fits an analysis.

Args: collection_ids: List of collection IDs to compare (2-10). Use list_collections() to discover IDs.

Returns: CollectionComparison with one entry per collection.

Example: compare_collections(["organic.carbon_usda.6a1c", "ph.h2o_usda.6a1c"])

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idsYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes what the tool does (comparison) and the output format ('CollectionComparison with one entry per collection'), but lacks details on permissions, rate limits, or error handling. It adds some context like the input range ('2-10') but could be more comprehensive for a tool with no annotation support.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by usage context, args, returns, and an example. Every sentence adds value without redundancy, making it efficient and easy to parse for an AI agent.

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?

Given the tool's moderate complexity (one parameter but with specific constraints), no annotations, and no output schema, the description does a good job of covering purpose, usage, parameters, and output. It could improve by detailing the structure of 'CollectionComparison' or error cases, but it's largely complete for effective use.

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?

The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains that 'collection_ids' is a list of IDs to compare, specifies the allowed range ('2-10'), and provides an example with actual IDs. This compensates well for the schema's lack of descriptions, though it doesn't detail ID format or validation rules.

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?

The description clearly states the tool's purpose with specific verbs ('compare multiple collections side by side') and resources ('collections'), and distinguishes it from siblings by focusing on comparison rather than discovery or retrieval. It explicitly lists what aspects are compared: temporal coverage, resolution, variable/layer info, theme, and keyword overlap.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('useful for deciding which dataset best fits an analysis') and references a sibling tool for discovering IDs ('Use list_collections() to discover IDs'). However, it does not explicitly state when not to use it or name specific alternatives 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.

discover_data_for_topicA

Discover relevant datasets for a research topic.

Given a natural language description of a topic (e.g., 'soil organic carbon', 'Amazon deforestation', 'air quality', 'snow cover'), searches across all collection titles, descriptions, and keywords to find relevant datasets ranked by relevance.

Args: topic: Research topic in natural language. Examples: 'carbono orgânico do solo', 'vegetation indices', 'land surface temperature', 'human footprint'.

Returns: TopicDiscovery dict with ranked results and total found.

Example: discover_data_for_topic("soil organic carbon") discover_data_for_topic("desmatamento na Amazônia")

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool searches across titles, descriptions, and keywords and ranks results by relevance, which adds useful behavioral context. However, it lacks details on permissions, rate limits, or error handling, leaving gaps for a tool with no annotation coverage.

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?

The description is well-structured with clear sections (purpose, args, returns, examples) and front-loaded key information. It is appropriately sized, but the example section could be slightly more concise. Most sentences earn their place by adding value.

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?

Given no annotations and no output schema, the description does a good job explaining the tool's purpose, parameters, and returns ('TopicDiscovery dict with ranked results and total found'). However, it lacks details on output structure or error cases, which would enhance completeness for a tool with such minimal structured 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 description coverage is 0%, so the description must compensate. It provides a dedicated 'Args' section that explains the 'topic' parameter with meaning ('Research topic in natural language'), examples, and usage context, adding significant value beyond the bare schema. This fully compensates for the lack of schema descriptions.

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?

The description clearly states the tool's purpose with specific verbs ('discover relevant datasets', 'searches across all collection titles, descriptions, and keywords') and distinguishes it from siblings by focusing on topic-based discovery rather than spatial, temporal, or collection-specific searches. It explicitly identifies the resource as 'datasets' and the action as 'discover' and 'searches'.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('Given a natural language description of a topic') with examples, but it does not explicitly state when not to use it or name alternatives among siblings. It implies usage for topic-based discovery versus other tools that might handle spatial or temporal queries.

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

find_collections_for_bboxA

Find collections whose spatial extent intersects a bounding box.

Searches all collections for spatial overlap with the given area. Optionally filters by theme.

Args: bbox: Bounding box in WGS84 [min_lon, min_lat, max_lon, max_lat]. theme: Optional theme filter ('soil', 'vegetation', etc.).

Returns: List of CollectionMatch dicts with id, title, theme, extents.

Example: find_collections_for_bbox([-54, -18, -45, -12], theme="soil")

ParametersJSON Schema
NameRequiredDescriptionDefault
bboxYes
themeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses the search behavior ('Searches all collections for spatial overlap') and output format ('List of CollectionMatch dicts'), but lacks details on permissions, rate limits, pagination, or error handling. It adds basic context but misses key operational traits.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose. Each sentence adds value: spatial search scope, parameter semantics, return format, and a concrete example. No wasted words, and the example efficiently illustrates usage.

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?

Given 2 parameters with 0% schema coverage and an output schema (implied by 'Returns'), the description is largely complete. It explains inputs and outputs sufficiently, though behavioral aspects like error cases or performance limits are omitted. For a search tool with structured return data, this is adequate but not exhaustive.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It clearly explains both parameters: 'bbox' (WGS84 format with coordinate order) and 'theme' (optional filter with examples like 'soil', 'vegetation'). This adds essential meaning beyond the bare schema, though it doesn't detail validation rules or theme constraints.

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?

The description clearly states the specific action ('Find collections whose spatial extent intersects a bounding box') and resource ('collections'), distinguishing it from siblings like 'find_items_by_point' (point-based) and 'list_collections' (unfiltered listing). The verb 'find' with spatial intersection is precise and unambiguous.

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

Usage Guidelines3/5

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

The description implies usage for spatial searches with optional theme filtering, but lacks explicit guidance on when to use this versus alternatives like 'find_overlapping_datasets' or theme-specific tools (e.g., 'get_soil_collections'). No exclusions or prerequisites are mentioned, leaving context partially implied.

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

find_items_by_pointA

Find items that cover a specific geographic point.

Searches across one or more collections for items whose bounding box contains the given coordinate. Filters collections by spatial extent before fetching items.

Args: lon: Longitude in WGS84 (-180 to 180). lat: Latitude in WGS84 (-90 to 90). collection_ids: Collections to search. If None, searches all (filtered by spatial extent first, max 50).

Returns: List of ItemMatch dicts with collection_id, item_id, temporal info.

Example: find_items_by_point(-47.9, -15.8) # Brasília find_items_by_point(-47.9, -15.8, ["organic.carbon_usda.6a1c"])

ParametersJSON Schema
NameRequiredDescriptionDefault
lonYes
latYes
collection_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it describes the search logic ('filters collections by spatial extent before fetching items'), mentions a constraint ('max 50' when searching all collections), and explains the return format ('List of ItemMatch dicts with collection_id, item_id, temporal info'). It doesn't cover permissions, rate limits, or error conditions.

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

Conciseness5/5

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

The description is appropriately sized and well-structured: purpose statement first, then search logic, followed by parameter explanations, return format, and examples. Every sentence adds value with zero waste, and it's front-loaded with the core functionality.

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?

Given the tool's moderate complexity (3 parameters, spatial search logic), no annotations, but with an output schema present, the description is complete enough. It covers purpose, usage, parameters, return format, and provides examples. The output schema handles return structure details, so the description appropriately focuses on operational context.

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 description coverage is 0%, so the description must compensate fully. It successfully adds meaning for all 3 parameters: explains lon/lat coordinate system and ranges (WGS84, -180 to 180, -90 to 90), clarifies collection_ids behavior ('If None, searches all'), and provides examples showing usage. This goes well beyond what the bare schema provides.

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?

The description clearly states the tool's purpose with specific verbs ('Find items that cover a specific geographic point') and resources ('items', 'collections'). It distinguishes from siblings by specifying geographic point-based search versus bounding box (find_collections_for_bbox) or general search (search_items).

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

Usage Guidelines4/5

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

The description provides clear context about when to use this tool ('searches across one or more collections for items whose bounding box contains the given coordinate') and mentions filtering behavior. However, it doesn't explicitly state when NOT to use it or name specific alternative tools among siblings, though the context implies alternatives exist.

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

find_overlapping_datasetsA

Find datasets with temporal overlap for correlation analysis.

Given a collection and a year range, finds all other collections that have data within that period. Useful for multi-variable studies.

Args: collection_id: Reference collection identifier. start_year: Start year (inclusive). end_year: End year (inclusive).

Returns: List of OverlapInfo dicts with overlapping period details.

Example: find_overlapping_datasets("organic.carbon_usda.6a1c", 2010, 2020)

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
start_yearYes
end_yearYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool 'finds all other collections that have data within that period' but doesn't disclose important behavioral traits like whether this is a read-only operation, potential rate limits, authentication needs, or what happens with invalid inputs. The description adds some context about temporal overlap but lacks comprehensive behavioral details needed for a tool with no annotations.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded with the core purpose in the first sentence. Every section (purpose, usage context, parameters, returns, example) earns its place by adding specific value without redundancy. The structure is logical and efficient, with no wasted words.

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?

Given the tool's moderate complexity (3 parameters, no annotations, but has output schema), the description is reasonably complete. It covers purpose, usage context, parameter semantics, return values, and provides an example. The output schema exists, so the description doesn't need to explain return values in detail. However, it could be more complete by addressing behavioral aspects like error conditions or performance characteristics.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It successfully adds meaning beyond the bare schema by explaining each parameter's purpose: 'collection_id: Reference collection identifier', 'start_year: Start year (inclusive)', 'end_year: End year (inclusive)'. The description also clarifies the temporal relationship ('within that period') and provides an example with concrete values, though it doesn't explain parameter constraints or formats beyond basic types.

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?

The description clearly states the tool's purpose with specific verbs ('Find datasets with temporal overlap for correlation analysis') and resources ('collections'). It distinguishes from siblings like 'compare_collections' or 'find_related_collections' by focusing specifically on temporal overlap rather than general comparison or relationship finding.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool ('Useful for multi-variable studies') and implies usage by describing what it does. However, it doesn't explicitly state when NOT to use it or name specific alternative tools from the sibling list, such as 'compare_collections' or 'find_related_collections', which might serve similar but different purposes.

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

get_all_data_assetsA

Get only data assets (excluding thumbnails, styles).

Filters assets by role='data', returning only actual raster data layers (Cloud-Optimized GeoTIFFs). Useful when you need download URLs.

Args: collection_id: Collection identifier. item_id: Item identifier.

Returns: List of AssetInfo dicts with role 'data'.

Example: get_all_data_assets("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_20180101_20181231")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
item_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it filters assets by role='data', excludes thumbnails and styles, and returns download URLs. However, it lacks details on permissions, rate limits, error handling, or pagination, which are important for a tool that accesses data assets.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by details on filters, usage, parameters, returns, and an example. Every sentence adds value without redundancy, making it efficient and easy to scan.

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?

Given the tool's complexity (filtering data assets), lack of annotations, and presence of an output schema (which handles return values), the description is mostly complete. It covers purpose, filters, usage, parameters, and an example. However, it could improve by addressing behavioral aspects like error cases or authentication needs, which are not covered by the output schema.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics by explaining that 'collection_id' and 'item_id' are identifiers for filtering assets, and the example provides concrete values. This clarifies parameter usage beyond the bare schema, though it could specify format constraints or relationships between parameters.

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?

The description clearly states the tool's purpose with specific verbs ('Get', 'Filters', 'returning') and resources ('data assets', 'raster data layers', 'Cloud-Optimized GeoTIFFs'). It explicitly distinguishes this tool from siblings by specifying it excludes thumbnails and styles, unlike tools like 'get_visualization_assets' or 'list_assets_for_item' which might include all asset types.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('Useful when you need download URLs') and implicitly distinguishes it from alternatives by specifying it filters by role='data' and excludes other asset types. However, it does not explicitly name when-not-to-use cases or mention specific sibling tools as alternatives, such as 'get_visualization_assets' for non-data assets.

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

get_asset_download_infoA

Get download instructions for an asset in multiple formats.

Returns the direct S3 URL plus ready-to-use commands and code snippets for curl, wget, Python (rasterio), and R (terra).

Args: collection_id: Collection identifier. item_id: Item identifier. asset_key: Asset key to get download info for.

Returns: DownloadInfo dict with url and code snippets.

Example: get_asset_download_info("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_20180101_20181231", "organic.carbon_usda.6a1c_m_1km_b30cm_s")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
item_idYes
asset_keyYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the return format ('DownloadInfo dict with url and code snippets') and the multi-format nature, which is useful. However, it doesn't mention authentication requirements, rate limits, error conditions, or whether this is a read-only operation (though 'Get' implies it).

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by structured sections for Args, Returns, and an Example. Every sentence adds value—no fluff or repetition. It's efficiently organized for quick scanning.

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

Completeness3/5

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

For a 3-parameter tool with no annotations and no output schema, the description does a decent job covering purpose, parameters, and return format. However, it lacks details on authentication, errors, or behavioral nuances (e.g., whether the S3 URL is pre-signed). Given the complexity, it's adequate but not fully complete.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It lists all three parameters with brief explanations ('Collection identifier', 'Item identifier', 'Asset key') and provides a concrete example showing their usage. This adds significant meaning beyond the bare schema, though it doesn't detail parameter formats or constraints.

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?

The description clearly states the specific action ('Get download instructions') and resource ('for an asset in multiple formats'), distinguishing it from siblings like 'get_asset_url' (which likely returns just the URL) or 'list_assets_for_item' (which lists assets without download details). It specifies the multi-format output including S3 URL and code snippets.

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

Usage Guidelines3/5

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

The description implies usage when download instructions are needed, but doesn't explicitly state when to use this tool versus alternatives like 'get_asset_url' or the sibling snippet-building tools. It provides an example but lacks explicit guidance on prerequisites or comparison with other tools.

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

get_asset_urlA

Resolve the full URL and metadata for a specific asset.

Returns the direct S3 URL, MIME type, roles, COG status, and S3 bucket/key for programmatic access.

Args: collection_id: Collection identifier. item_id: Item identifier. asset_key: Asset key within the item (e.g. the layer name).

Returns: AssetInfo dict with url, type, roles, is_cog, s3_bucket, s3_key.

Example: get_asset_url("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_20180101_20181231", "organic.carbon_usda.6a1c_m_1km_b30cm_s")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
item_idYes
asset_keyYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden and does well by disclosing behavioral traits: it describes the return format ('AssetInfo dict with url, type, roles, is_cog, s3_bucket, s3_key') and implies read-only behavior through 'resolve' and 'returns'. It could improve by mentioning rate limits or authentication needs, but it covers key output behavior adequately.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by return details, args, returns, and an example. Each section earns its place by adding value without redundancy, making it easy to scan and understand quickly.

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?

Given 3 parameters with 0% schema coverage and no output schema, the description is nearly complete: it explains purpose, parameters, and return values in detail. It could slightly improve by mentioning error cases or prerequisites, but it provides sufficient context for an agent to invoke the tool correctly in most scenarios.

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 description coverage is 0%, so the description must compensate fully. It adds significant meaning beyond the schema by explaining each parameter's purpose ('Collection identifier', 'Item identifier', 'Asset key within the item') and providing an example with concrete values, which clarifies usage and format expectations effectively.

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?

The description clearly states the tool's purpose with specific verbs ('resolve', 'returns') and resources ('full URL and metadata for a specific asset'). It distinguishes from siblings like 'get_asset_download_info' or 'list_assets_for_item' by focusing on resolving a single asset's URL and metadata rather than listing or downloading.

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

Usage Guidelines4/5

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

The description implies usage context by specifying it's for 'a specific asset' and 'programmatic access', which helps differentiate from visualization or listing tools. However, it doesn't explicitly state when not to use this tool or name alternatives among siblings, such as 'get_asset_download_info' for download-related needs.

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

get_bbox_for_regionA

Get the WGS84 bounding box for a named region.

Supports countries, Brazilian states, Brazilian biomes, continents, and macro-regions. Useful for building spatial queries.

Args: region_name: Region name (case-insensitive, underscores for spaces). Examples: 'brazil', 'goias', 'cerrado', 'europe', 'south_america', 'amazonia_legal', 'global'.

Returns: Dict with bbox [west, south, east, north] and region name. If not found, returns error with list of available regions.

Example: get_bbox_for_region("cerrado") # → {"region": "cerrado", "bbox": [-60.47, -24.68, -41.28, -2.33]}

ParametersJSON Schema
NameRequiredDescriptionDefault
region_nameYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: case-insensitive input with underscores for spaces, the return format (dict with bbox and region name), and error handling (returns error with list of available regions if not found). It lacks details on rate limits or authentication needs, but covers essential operational traits.

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

Conciseness5/5

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

The description is well-structured and front-loaded, starting with the core purpose, followed by usage context, parameter details, return values, and an example. Every sentence adds value without redundancy, making it efficient and easy to parse.

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?

Given the tool's moderate complexity (single parameter, no output schema, no annotations), the description is complete. It covers purpose, usage, parameter details, return format, error handling, and includes an example, providing all necessary information for an agent to use the tool effectively.

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?

The schema description coverage is 0%, so the description must fully compensate. It provides comprehensive parameter semantics: explains what 'region_name' represents, gives formatting rules (case-insensitive, underscores for spaces), and lists concrete examples ('brazil', 'goias', etc.), adding significant value beyond the basic 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?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('WGS84 bounding box for a named region'). It distinguishes itself from siblings by focusing on bounding box retrieval for geographic regions, unlike other tools that handle data discovery, collection queries, or snippet building.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool ('Useful for building spatial queries') and lists supported region types (countries, Brazilian states, etc.). However, it does not explicitly state when not to use it or name specific alternatives among the sibling tools for similar spatial operations.

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

get_collection_schemaA

Return the full schema of a collection including asset definitions.

Provides complete metadata: asset types with MIME types and roles, STAC extensions, spatial/temporal extent, contact info, style URLs, related links (DOI, documentation, thumbnail).

Args: collection_id: Collection identifier (e.g. 'organic.carbon_usda.6a1c'). Use list_collections() to discover available IDs.

Returns: CollectionSchema dict with all metadata fields.

Example: get_collection_schema("organic.carbon_usda.6a1c")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns metadata (a read operation) and implies it's non-destructive, but lacks details on rate limits, authentication needs, or error behaviors. The description adds some context about the metadata scope but does not fully compensate for the absence of annotations.

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

Conciseness5/5

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

The description is well-structured and front-loaded, starting with the core purpose followed by metadata details, parameter explanation, return value, and an example. Every sentence adds value without redundancy, making it efficient and easy to parse.

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

Completeness4/5

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

Given the tool's moderate complexity (1 parameter, no output schema, no annotations), the description is largely complete, covering purpose, usage, parameters, and return format. However, it lacks explicit behavioral details (e.g., error handling or performance), which slightly reduces completeness for a tool with no annotations.

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 description coverage is 0%, so the description must compensate. It provides detailed semantics for the single parameter (collection_id), including an example format and guidance to use list_collections() for discovery. This adds significant meaning beyond the basic schema, fully documenting the parameter's use and constraints.

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?

The description clearly states the tool's purpose with specific verbs ('Return the full schema') and resources ('collection including asset definitions'), distinguishing it from siblings like list_collections (which lists IDs) or get_item_detail (which focuses on items). It explicitly mentions what metadata is included, making the scope unambiguous.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool by specifying it returns 'complete metadata' and referencing list_collections() to discover IDs. However, it does not explicitly state when not to use it or name alternatives among siblings (e.g., catalog_info or compare_collections), which prevents a perfect score.

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

get_collection_spatial_coverageA

Get the full spatial coverage details of a collection.

Returns the bounding box, a GeoJSON polygon of the extent, the native ground sample distance (resolution in meters), and the coordinate reference system.

Args: collection_id: Collection identifier.

Returns: SpatialCoverage dict with bbox, geometry, gsd, and CRS.

Example: get_collection_spatial_coverage("organic.carbon_usda.6a1c")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the return structure (SpatialCoverage dict with specific fields) and includes an example, which adds behavioral context. However, it doesn't mention error handling, performance characteristics, or authentication requirements.

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

Conciseness5/5

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

The description is efficiently structured: purpose statement, detailed return values, parameter explanation, return structure, and an example—all in four concise sentences. Each sentence adds value with zero wasted text.

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

Completeness4/5

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

For a single-parameter read operation with no annotations or output schema, the description is reasonably complete: it explains what the tool does, what it returns, and includes an example. However, it lacks information on error cases or rate limits, which would be helpful given the absence of structured metadata.

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

Parameters4/5

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

Schema description coverage is 0%, but the description compensates by explaining the single parameter ('collection_id: Collection identifier') and providing an example with a concrete value. This adds meaningful semantics beyond the bare schema, though it doesn't detail format constraints or validation rules.

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?

The description clearly states the specific action ('Get the full spatial coverage details') and resource ('of a collection'), distinguishing it from siblings like 'get_collection_schema' or 'get_collection_temporal_stats'. It precisely identifies what information is retrieved (bounding box, GeoJSON polygon, ground sample distance, CRS).

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

Usage Guidelines3/5

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

The description implies usage when spatial coverage details are needed for a specific collection, but provides no explicit guidance on when to use this tool versus alternatives like 'find_collections_for_bbox' or 'get_bbox_for_region'. No exclusions or prerequisites are mentioned.

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

get_collection_temporal_statsB

Get temporal statistics for a collection.

Returns earliest/latest dates, total item count, distribution by year, and estimated update frequency (median interval between items).

Args: collection_id: Collection identifier.

Returns: TemporalStats dict with dates, counts, and year distribution.

Example: get_collection_temporal_stats("evi_mod13q1.tmwm.inpaint")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It describes the return format ('TemporalStats dict with dates, counts, and year distribution') and gives an example, but doesn't mention performance characteristics, rate limits, authentication requirements, error conditions, or whether this is a read-only operation. For a tool with no annotation coverage, this leaves significant behavioral gaps.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement, bullet-point-like output details, labeled argument and return sections, and a practical example. Every sentence adds value without redundancy. The information is front-loaded with the core functionality stated first.

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

Completeness3/5

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

Given the tool's moderate complexity (statistical analysis), no annotations, no output schema, and 0% schema description coverage, the description provides adequate but incomplete coverage. It explains what the tool does and shows basic usage, but lacks details about the return structure, error handling, performance, and when to use versus alternatives. The absence of output schema means the description should ideally elaborate more on the 'TemporalStats dict' format.

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?

With 0% schema description coverage and only one parameter, the description adds essential meaning by explaining that 'collection_id' is a 'Collection identifier' and providing a concrete example ('evi_mod13q1.tmwm.inpaint'). This compensates well for the schema's lack of documentation, though it doesn't elaborate on format constraints or validation rules.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get temporal statistics for a collection' with specific outputs listed (earliest/latest dates, total item count, distribution by year, estimated update frequency). It distinguishes from siblings like 'get_data_timeline' or 'list_items_temporal' by focusing on statistical summaries rather than raw data listing. However, it doesn't explicitly contrast with all similar tools.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'get_data_timeline', 'list_items_temporal', and 'get_collection_spatial_coverage', there's no indication of when statistical summaries are preferred over raw temporal listings or when to choose temporal versus spatial analysis. The example shows usage but doesn't provide contextual decision criteria.

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

get_data_timelineA

Generate a structured timeline of data availability across collections.

Shows when data is available for each collection, useful for planning multi-temporal or multi-variable analyses.

Args: collection_ids: List of collection IDs (1-10).

Returns: DataTimeline dict with entries sorted chronologically.

Example: get_data_timeline(["organic.carbon_usda.6a1c", "evi_mod13q1.tmwm.inpaint"])

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idsYes

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool 'Shows when data is available' and returns a 'DataTimeline dict with entries sorted chronologically', but lacks details on permissions, rate limits, error handling, or whether it's a read-only operation. For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by usage context, args, returns, and an example—all in a compact format with no wasted sentences. Each section adds value, making it easy to scan and understand quickly.

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

Completeness3/5

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

Given the tool's moderate complexity (1 parameter, no output schema, no annotations), the description covers the basics well but lacks depth. It explains what the tool does and provides an example, but without annotations or output schema, it misses details on behavioral traits like safety or response structure, leaving some contextual gaps for an AI agent.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It adds meaningful context by specifying 'collection_ids: List of collection IDs (1-10)', clarifying the parameter's purpose and constraints (e.g., list size limit), which goes beyond the bare schema. However, it doesn't detail the format or examples of collection IDs beyond the provided example.

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?

The description clearly states the tool's purpose with specific verbs ('Generate a structured timeline') and resources ('data availability across collections'), distinguishing it from siblings like 'get_collection_temporal_stats' or 'list_items_temporal' by focusing on availability planning rather than statistical summaries or item listings.

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 provides clear context for when to use the tool ('useful for planning multi-temporal or multi-variable analyses'), but does not explicitly mention when not to use it or name specific alternatives among the many sibling tools, such as 'compare_collections' or 'discover_data_for_topic', which might serve related purposes.

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

get_item_detailA

Get full details for a specific STAC item including all assets.

Returns complete metadata, bounding box, geometry, temporal range, and all available assets with resolved URLs, MIME types, roles, and file sizes.

Args: collection_id: Collection identifier. item_id: Item identifier within the collection.

Returns: ItemDetail dict with geometry, properties, and assets list.

Example: get_item_detail("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_20180101_20181231")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
item_idYes

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden. It describes the return content well but lacks critical behavioral details such as error handling, performance expectations, authentication requirements, or rate limits for a data retrieval tool.

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

Conciseness5/5

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

The description is well-structured and front-loaded with the core purpose, followed by returns, args, and an example. Every sentence adds value with no redundancy, making it efficient and easy to parse.

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

Completeness3/5

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

For a tool with 2 parameters, no annotations, and no output schema, the description adequately covers purpose and parameters but lacks behavioral context (e.g., error cases, performance). It's minimally viable but leaves gaps in operational transparency.

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

Parameters4/5

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

Schema description coverage is 0%, but the description compensates by clearly defining both parameters ('collection_id' and 'item_id') in the Args section and providing an example with realistic values, adding meaningful context 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?

The description clearly states the specific action ('Get full details') and resource ('a specific STAC item including all assets'), distinguishing it from siblings like 'get_stac_item_as_geojson' or 'list_assets_for_item' by emphasizing comprehensive metadata retrieval.

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

Usage Guidelines3/5

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

Usage is implied through the description of what it returns (full details vs. partial), but there's no explicit guidance on when to use this tool over alternatives like 'get_stac_item_as_geojson' or 'list_assets_for_item'. The example helps illustrate typical use cases.

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

get_land_cover_collectionsB

List all land cover and land use collections.

Returns collections about land cover classification, cropland, pasture, urban areas, and land use change.

Returns: List of CollectionSummary dicts for land cover collections.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns a list of CollectionSummary dicts, which adds some context about the output format, but it lacks details on permissions, rate limits, pagination, or error handling. For a tool with zero annotation coverage, this is a significant gap in transparency.

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?

The description is front-loaded with the core purpose in the first sentence, followed by details on return content and format. It is appropriately sized with three sentences, each adding useful information without redundancy, though the structure could be slightly tighter by integrating the return details more seamlessly.

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

Completeness3/5

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

Given the tool has 0 parameters, 100% schema coverage, and an output schema exists, the description is minimally adequate. It explains what the tool does and what it returns, but with no annotations and many sibling tools, it lacks context on when to use it or behavioral traits like performance or constraints, leaving gaps in completeness.

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?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description does not mention parameters, which is appropriate. It adds value by specifying the return type and content focus (land cover classification, cropland, etc.), compensating for the lack of parameter details.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('List') and resource ('all land cover and land use collections'), and it distinguishes the resource type from siblings like 'get_soil_collections' or 'get_vegetation_collections'. However, it does not explicitly differentiate its scope from 'list_collections' or other general listing tools, which slightly reduces clarity.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention siblings like 'list_collections' (which might list all collections) or 'get_soil_collections' (which focuses on soil), leaving the agent to infer usage from the name and description alone without explicit context or exclusions.

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

get_soil_collectionsA

List all soil-related collections with depth information.

Shortcut for soil analysis. Returns collections about bulk density, organic carbon, pH, sand/clay/silt content, texture, water content, and soil taxonomy.

Returns: List of CollectionSummary dicts for soil collections.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns a list of CollectionSummary dicts, which is useful behavioral information. However, it doesn't mention potential limitations like pagination, rate limits, authentication requirements, or error conditions, leaving gaps for a read operation.

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?

The description is well-structured and appropriately sized: it starts with the core purpose, adds context as a shortcut, details the return content, and specifies the return format. Each sentence adds value, though the 'Returns:' section could be integrated more smoothly.

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?

Given the tool has 0 parameters, 100% schema coverage, and an output schema exists (implied by 'Returns: List of CollectionSummary dicts'), the description is reasonably complete. It explains what the tool does and what it returns, though it could benefit from more behavioral details like performance or constraints.

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?

The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to add parameter semantics, so a baseline of 4 is appropriate. It doesn't incorrectly mention parameters, maintaining clarity.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'List all soil-related collections with depth information.' It specifies the verb ('List'), resource ('soil-related collections'), and scope ('with depth information'). However, it doesn't explicitly differentiate from sibling tools like 'list_collections' or 'get_land_cover_collections', which prevents a score of 5.

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

Usage Guidelines3/5

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

The description provides implied usage guidance by calling it a 'Shortcut for soil analysis' and listing the types of collections returned. However, it doesn't explicitly state when to use this tool versus alternatives like 'list_collections' or 'discover_data_for_topic', nor does it mention any prerequisites or exclusions.

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

get_stac_item_as_geojsonA

Return a STAC item as a pure GeoJSON Feature.

Ready for use in any GIS system, web map, or geospatial tool. Strips STAC-specific fields and returns standard GeoJSON.

Args: collection_id: Collection identifier. item_id: Item identifier.

Returns: GeoJSON Feature dict with geometry, properties, and bbox.

Example: get_stac_item_as_geojson("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_20180101_20181231")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
item_idYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: the tool performs a read operation (implied by 'Return'), converts data to GeoJSON, and strips STAC-specific fields. However, it lacks details on error handling, rate limits, or authentication needs, leaving gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, followed by clear sections for Args, Returns, and an Example. Every sentence adds value without redundancy, and the structure enhances readability for an AI agent, making it efficiently informative.

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?

Given no annotations and no output schema, the description does well by explaining the transformation to GeoJSON and providing an example. However, it could be more complete by mentioning potential errors or the tool's read-only nature. For a 2-parameter tool with low schema coverage, it covers essentials but has minor gaps.

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 description coverage is 0%, so the description must compensate. It explicitly lists both parameters ('collection_id' and 'item_id') with brief explanations, and the example provides concrete usage, adding significant meaning beyond the bare schema. This fully addresses the parameter documentation gap.

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?

The description clearly states the specific action ('Return a STAC item as a pure GeoJSON Feature'), identifies the resource (STAC item), and distinguishes it from siblings like 'get_item_detail' by emphasizing the GeoJSON conversion and stripping of STAC-specific fields. The phrase 'Ready for use in any GIS system, web map, or geospatial tool' further clarifies the output's utility.

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

Usage Guidelines3/5

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

The description implies usage when a standardized GeoJSON format is needed, as opposed to raw STAC data, but does not explicitly state when to use this tool versus alternatives like 'get_item_detail' or 'list_assets_for_item'. It provides context ('Strips STAC-specific fields') but lacks explicit guidance on prerequisites or exclusions.

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

get_vegetation_collectionsB

List all vegetation-related collections.

Returns collections about EVI, FAPAR, forest cover, potential vegetation, and plant functional types.

Returns: List of CollectionSummary dicts for vegetation collections.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the return type ('List of CollectionSummary dicts') and examples of collection types, but lacks details on permissions, rate limits, pagination, or error handling. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

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?

The description is front-loaded with the core purpose in the first sentence, followed by additional details on return content and format. It is efficient with minimal waste, though the 'Returns:' section could be integrated more smoothly. Overall, it is appropriately sized and structured.

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

Completeness3/5

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

Given the tool's simplicity (0 parameters, output schema exists), the description is adequate but has gaps. It covers the purpose and return examples, but lacks behavioral context (e.g., how it differs from siblings, any limitations). With an output schema, it need not explain return values in detail, but more guidance on usage would improve completeness.

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?

The input schema has 0 parameters with 100% coverage, so no parameter information is needed. The description does not add parameter semantics, but this is acceptable given the schema's completeness. A baseline of 4 is appropriate for tools with no parameters, as there is nothing to compensate for.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'List all vegetation-related collections.' It specifies the verb ('List') and resource ('vegetation-related collections'), and provides examples of collection types (EVI, FAPAR, etc.). However, it does not explicitly differentiate from sibling tools like 'get_land_cover_collections' or 'get_soil_collections', which likely serve similar but distinct purposes, preventing a score of 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools such as 'list_collections' (which might list all collections) or 'get_land_cover_collections' (which might focus on a subset), nor does it specify prerequisites or exclusions. Usage is implied by the purpose but not explicitly stated.

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

get_visualization_assetsB

Get visualization-related assets: thumbnails, QML, SLD styles.

Returns assets useful for previewing and styling the data in GIS applications like QGIS (QML) or WMS services (SLD).

Args: collection_id: Collection identifier. item_id: Item identifier.

Returns: List of AssetInfo dicts with visualization roles.

Example: get_visualization_assets("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_20180101_20181231")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
item_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns a list of AssetInfo dicts with visualization roles, which adds behavioral context beyond the input schema. However, it doesn't cover other traits like error handling, rate limits, or authentication needs, which are important for a tool with no annotations. The description doesn't contradict any annotations, as none exist.

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?

The description is appropriately sized and front-loaded, starting with the purpose, followed by usage context, parameters, returns, and an example. Each sentence adds value, such as explaining the assets' use in GIS applications. However, the example could be more concise, and some redundancy exists in repeating parameter names without additional insight.

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?

Given the tool has an output schema (true), the description doesn't need to detail return values, and it adequately covers the purpose and usage. With no annotations and low schema coverage, it adds context like the types of assets and their applications. However, it could be more complete by addressing potential errors or prerequisites, but the presence of an output schema mitigates some gaps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It lists the parameters (collection_id, item_id) and provides an example, but doesn't explain their semantics, such as what constitutes a valid identifier or format. The example helps but doesn't fully clarify parameter meaning, leaving gaps in understanding beyond the basic schema.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Get visualization-related assets: thumbnails, QML, SLD styles.' It specifies the verb ('Get') and resource ('visualization-related assets'), and distinguishes it from sibling tools like 'get_all_data_assets' or 'list_assets_for_item' by focusing on visualization-specific assets. However, it doesn't explicitly differentiate from all siblings, such as 'get_asset_download_info', which might overlap in functionality.

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

Usage Guidelines3/5

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

The description implies usage context by stating 'Returns assets useful for previewing and styling the data in GIS applications like QGIS (QML) or WMS services (SLD).' This suggests when to use it—for GIS visualization tasks. However, it lacks explicit guidance on when not to use it or alternatives, such as using 'get_all_data_assets' for non-visualization assets, leaving some ambiguity.

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

list_assets_for_itemA

List all assets of a specific item with complete metadata.

Returns every asset including data layers, thumbnails, style files (SLD/QML), with URLs, MIME types, file sizes, and roles.

Args: collection_id: Collection identifier. item_id: Item identifier.

Returns: Dict mapping asset keys to AssetInfo dicts.

Example: list_assets_for_item("organic.carbon_usda.6a1c", "organic.carbon_usda.6a1c_20180101_20181231")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
item_idYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that it returns 'every asset' with detailed metadata, which is useful behavioral context. However, it lacks information on permissions, rate limits, pagination, or error handling, which are important for a tool with no annotation coverage.

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?

The description is well-structured with a purpose statement, detailed return info, parameter definitions, and an example. It is front-loaded with the core functionality. Some sentences could be more concise, but overall it is efficient with minimal waste.

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?

Given no annotations and no output schema, the description does a good job explaining the tool's purpose, parameters, and return format (dict mapping asset keys to AssetInfo dicts). It includes an example, which adds clarity. However, it could improve by addressing behavioral aspects like error cases or performance expectations.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explicitly lists and defines the two parameters ('collection_id: Collection identifier', 'item_id: Item identifier'), adding clear meaning beyond the bare schema. This adequately covers both parameters, though it could provide more context on format or examples.

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?

The description clearly states the verb ('List all assets') and resource ('of a specific item'), specifying it returns 'complete metadata' including data layers, thumbnails, style files with URLs, MIME types, file sizes, and roles. It distinguishes from siblings like 'get_all_data_assets' (which likely lists assets across items) by focusing on a single item.

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

Usage Guidelines3/5

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

The description implies usage when needing all assets for a specific item, but does not explicitly state when to use this tool versus alternatives like 'get_visualization_assets' or 'get_asset_download_info'. No exclusions or prerequisites are mentioned, leaving some ambiguity in context.

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

list_collectionsA

List available data collections in the OpenLandMap catalog.

Supports filtering by thematic category and keyword search in title/description. Returns lightweight summaries for browsing.

Args: theme: Filter by theme alias ('soil', 'vegetation', 'climate', 'land_cover', 'terrain', 'water', 'atmosphere', 'population') or native theme name. Case-insensitive. keyword: Text search across title, description, and keywords. Case-insensitive. limit: Maximum number of results (1-200, default: 50).

Returns: List of CollectionSummary dicts with id, title, theme, temporal extent, item count, etc.

Example: list_collections(theme="soil", limit=10) list_collections(keyword="organic carbon")

ParametersJSON Schema
NameRequiredDescriptionDefault
themeNo
keywordNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it's a read-only operation (implied by 'List'), supports filtering and search, returns lightweight summaries, and includes details like case-insensitive parameters and default limits. However, it lacks information on rate limits, authentication needs, 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.

Conciseness5/5

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

The description is appropriately sized and front-loaded: the first sentence states the purpose, followed by filtering details, return type, and structured sections for Args, Returns, and Example. Every sentence adds value, with no wasted words, making it easy to scan and understand.

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?

Given the tool's moderate complexity (3 parameters, no annotations, but with output schema), the description is complete enough. It explains the purpose, usage, parameters, return values (though output schema exists, it clarifies the content), and provides examples. This covers all necessary aspects for an AI agent to use the tool effectively.

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 description coverage is 0%, so the description must compensate. It adds significant meaning beyond the schema: explains 'theme' with specific aliases and case-insensitivity, 'keyword' with search scope and case-insensitivity, and 'limit' with range and default. This fully documents all three parameters, providing clear semantics and usage examples.

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?

The description clearly states the tool's purpose: 'List available data collections in the OpenLandMap catalog.' It specifies the verb 'List' and resource 'data collections,' and distinguishes it from siblings like 'get_soil_collections' or 'search_items' by focusing on catalog browsing with filtering capabilities.

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

Usage Guidelines4/5

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

The description provides clear context for usage: 'Supports filtering by thematic category and keyword search in title/description. Returns lightweight summaries for browsing.' It implies when to use this tool (for browsing collections with filters) but does not explicitly state when not to use it or name alternatives among siblings, such as 'search_items' for more detailed searches.

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

list_items_temporalA

List all items in a collection organized chronologically.

Shows the temporal coverage of the dataset — useful for understanding data availability and update frequency.

Args: collection_id: Collection identifier.

Returns: List of TemporalSlice dicts sorted by start date.

Example: list_items_temporal("evi_mod13q1.tmwm.inpaint")

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses that results are 'sorted by start date' and returns 'List of TemporalSlice dicts,' which adds behavioral context beyond basic listing. However, it doesn't mention pagination, rate limits, authentication needs, or error conditions, leaving gaps for a tool that likely accesses datasets.

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

Conciseness5/5

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

The description is well-structured and appropriately sized. It starts with a clear purpose statement, adds context in a second sentence, then provides Args, Returns, and Example sections. Every sentence earns its place, with no redundant or verbose content.

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?

Given the tool's moderate complexity (listing items with temporal focus), no annotations, and an output schema (implied by 'Returns' section), the description is fairly complete. It covers purpose, parameter semantics, return format, and includes an example. However, it lacks details on behavioral aspects like pagination or error handling, which could be useful given the data context.

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?

The description includes an 'Args' section that documents the single parameter 'collection_id' as 'Collection identifier,' and the example provides a concrete value. With 0% schema description coverage, this fully compensates by adding meaning not in the schema. The parameter is straightforward, so no deeper semantics are needed.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'List all items in a collection organized chronologically.' It specifies the verb ('List'), resource ('items in a collection'), and organizational method ('chronologically'). However, it doesn't explicitly differentiate from sibling tools like 'search_items' or 'list_collections' beyond mentioning temporal organization.

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

Usage Guidelines3/5

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

The description provides implied usage guidance by stating it's 'useful for understanding data availability and update frequency.' This suggests when to use it, but doesn't explicitly contrast with alternatives like 'search_items' (which might filter) or 'list_collections' (which lists collections, not items). No explicit when-not-to-use or prerequisite information is provided.

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

search_itemsA

Search items in a STAC collection with spatial and temporal filters.

Items represent temporal snapshots of the collection's data. Each item contains one or more assets (Cloud-Optimized GeoTIFFs).

Args: collection_id: Collection ID (e.g. 'organic.carbon_usda.6a1c'). bbox: Bounding box in WGS84 [min_lon, min_lat, max_lon, max_lat]. Example: [-54.0, -18.0, -45.0, -12.0] (part of Cerrado). datetime_range: ISO 8601 interval. Examples: '2010-01-01/2020-12-31', '2015-06-01/..', '../2020-01-01' limit: Max items to return (1-200, default: 20). offset: Number of results to skip for pagination.

Returns: ItemCollection with total_matched, returned, items, next_offset.

Example: search_items("organic.carbon_usda.6a1c", bbox=[-54,-18,-45,-12], limit=5)

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_idYes
bboxNo
datetime_rangeNo
limitNo
offsetNo

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it's a search operation (implied read-only), explains what items represent, mentions pagination behavior with limit/offset, and describes the return structure. It doesn't mention rate limits, authentication needs, or error conditions, but provides substantial operational context.

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

Conciseness5/5

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

The description is efficiently structured with clear sections: purpose statement, item/asset explanation, parameter documentation with examples, return description, and usage example. Every sentence adds value - no redundant information. The information is front-loaded with the core purpose stated first.

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

Completeness4/5

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

For a search tool with 5 parameters, 0% schema coverage, and no output schema, the description provides excellent coverage of inputs, behavior, and return format. The main gap is the lack of explicit error handling information or authentication requirements. Given the rich parameter documentation and behavioral context, it's nearly complete for agent usage.

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?

With 0% schema description coverage, the description fully compensates by providing detailed semantic information for all 5 parameters. Each parameter gets clear explanations with examples: collection_id format, bbox coordinate order and reference system, datetime_range ISO 8601 format with interval examples, limit range and default, and offset purpose for pagination.

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?

The description clearly states the tool's purpose with specific verb ('Search') and resource ('items in a STAC collection'), and distinguishes it from siblings by specifying spatial and temporal filters. It explains what items represent (temporal snapshots) and their assets, providing domain context that differentiates from tools like 'find_items_by_point' or 'list_items_temporal'.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (searching with spatial and temporal filters) and includes an example. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the many sibling tools (e.g., 'find_items_by_point' for point-based queries or 'list_items_temporal' for temporal-only queries).

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. Dates show when Glama detected each change.

  1. 27 tool updatesv0.1.0
    • First observedbuild_python_snippet
    • First observedbuild_r_snippet
    • First observedcatalog_info
    • First observedcompare_collections
    • First observeddiscover_data_for_topic
    • First observedfind_collections_for_bbox
    • First observedfind_items_by_point
    • First observedfind_overlapping_datasets
    • First observedfind_related_collections
    • First observedget_all_data_assets
    • First observedget_asset_download_info
    • First observedget_asset_url
    • First observedget_bbox_for_region
    • First observedget_collection_schema
    • First observedget_collection_spatial_coverage
    • First observedget_collection_temporal_stats
    • First observedget_data_timeline
    • First observedget_item_detail
    • First observedget_land_cover_collections
    • First observedget_soil_collections
    • First observedget_stac_item_as_geojson
    • First observedget_vegetation_collections
    • First observedget_visualization_assets
    • First observedlist_assets_for_item
    • First observedlist_collections
    • First observedlist_items_temporal
    • First observedsearch_items

TDQS

A3.6/5.0
Disambiguation3/5

Most tools have distinct purposes, but there is some overlap that could cause confusion. For example, get_asset_url and get_asset_download_info both provide asset URLs, and list_assets_for_item overlaps with get_all_data_assets and get_visualization_assets in listing assets. The descriptions help differentiate, but an agent might struggle to choose between these similar tools.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern throughout, such as build_python_snippet, catalog_info, compare_collections, and find_collections_for_bbox. There are no deviations in naming conventions, making the set predictable and easy to understand.

Tool Count2/5

With 27 tools, the count is too high for the server's purpose of accessing and exploring geospatial data. Many tools could be consolidated (e.g., multiple asset-listing tools) or omitted without losing functionality, leading to potential overwhelm and inefficiency for agents.

Completeness4/5

The toolset provides comprehensive coverage for discovering, accessing, and analyzing OpenLandMap data, including catalog browsing, spatial/temporal queries, asset retrieval, and code generation. Minor gaps exist, such as no direct data manipulation or advanced analysis tools, but core workflows are well-supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Enables AI assistants to search and access geospatial datasets through STAC (SpatioTemporal Asset Catalog) APIs. Supports querying satellite imagery, weather data, and other geospatial assets with spatial, temporal, and attribute filters.
    11
    13
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Provides tools to search, download, and manage satellite imagery from all Copernicus Sentinel missions via the Copernicus Data Space ecosystem. It enables advanced geospatial queries, temporal coverage analysis, and automated data management for Earth observation tasks.
    13
    5
    LGPL 3.0
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to discover and access 800TB+ of public geospatial data from Source Cooperative, with tools for listing organizations, products, files, and fuzzy search.
    6
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tharlestsa/openlandmap_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server