STAC MCP Server
The STAC MCP Server enables AI assistants and applications to interact with STAC catalogs for geospatial data discovery and access.
Core Capabilities:
Search and browse collections - List available STAC collections with customizable limits
Get detailed collection/item information - Retrieve comprehensive metadata about specific collections and items
Advanced geospatial search - Find STAC items using spatial filters (bounding boxes, GeoJSON AOI), temporal ranges, and custom query parameters
Estimate data sizes - Calculate dataset sizes using lazy loading without downloading actual data
Multi-catalog support - Connect to Microsoft Planetary Computer or any STAC-compliant API
Area of Interest clipping - Automatically clip data to the smallest area when both bbox and GeoJSON AOI are provided
Batch processing - Handle multiple items efficiently with structured metadata retention
Provides access to STAC (SpatioTemporal Asset Catalog) APIs for discovering and accessing geospatial datasets including satellite imagery and weather data, with support for spatial and temporal queries across STAC-compliant catalogs
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@STAC MCP Serversearch for recent satellite imagery over California from the last month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
STAC MCP Server
An MCP (Model Context Protocol) Server that provides access to STAC (SpatioTemporal Asset Catalog) APIs for geospatial data discovery and access. Supports dual output modes (text and structured json) for all tools.
The coverage badge is updated automatically on pushes to
mainby the CI workflow.
Overview
This MCP server enables AI assistants and applications to interact with STAC catalogs to:
Search and browse STAC collections
Find geospatial datasets (satellite imagery, weather data, etc.)
Access metadata and asset information
Perform spatial and temporal queries
Related MCP server: SkyFi MCP Server
Features
Available Tools
All tools accept an optional output_format parameter ("text" default, or "json"). JSON mode returns a single MCP TextContent whose text field is a compact JSON envelope: { "mode": "json", "data": { ... } } (or { "mode": "text_fallback", "content": ["..."] } if a handler lacks a JSON branch). This preserves backward compatibility while enabling structured consumption (see ADR 0006 and ASR 1003).
get_root: Fetch root document (id/title/description/links/conformance subset)get_conformance: List all conformance classes; optionally verify specific URIsget_capabilities: Get a summary of STAC API capabilities (query, sort, fields, queryables, aggregation, filter)search_collections: List and search available STAC collectionsget_collection: Get detailed information about a specific collectionsearch_items: Search for STAC items with spatial, temporal, and attribute filtersget_item: Get detailed information about a specific STAC itemget_queryables: Get queryable properties for a collectionget_aggregations: Get aggregations for STAC itemsestimate_data_size: Estimate data size for STAC items using lazy loading (XArray + odc.stac)
Search Parameters
The search_items tool supports comprehensive STAC API search parameters:
collections: One or more collection IDs to searchbbox: Bounding box [west, south, east, north] or GeoJSON geometrydatetime: Datetime filter (e.g., "2020-01-01/2020-12-31")limit: Maximum number of items to returnquery: Query filter for propertiesfields: List of fields to include/exclude (e.g., ["id", "properties.datetime"])intersects: GeoJSON geometry for spatial intersection queriesids: List of specific item IDs to retrieve (batch fetch)sortby: Sort order (e.g., ["-properties.datetime"] for descending)sign_assets: If True and catalog is Planetary Computer, sign asset URLs for direct access
Pagination Support
Search responses include pagination metadata with cursor-based navigation links:
{
"type": "item_list",
"count": 10,
"items": [...],
"meta": {
"catalog_url": "https://example.com/stac",
"parameters": {...},
"returned": 10,
"has_more": true,
"links": [
{"rel": "next", "href": "https://example.com/stac/search?token=abc123"},
{"rel": "prev", "href": "https://example.com/stac/search?token=xyz789"}
]
}
}Planetary Computer Asset Signing
When working with Microsoft Planetary Computer catalogs, you can enable asset signing to get signed URLs for direct asset access:
{
"method": "tools/call",
"params": {
"name": "search_items",
"arguments": {
"collections": ["sentinel-2-l2a"],
"limit": 5,
"sign_assets": true
}
}
}Capability Discovery & Aggregations
The new capability tools (ADR 0004) allow adaptive client behavior:
Graceful fallbacks: Missing
/conformance,/queryables, or aggregation support returns structured JSON withsupported:falseinstead of hard errors.get_conformancefalls back to the root document'sconformsToarray when the dedicated endpoint is absent.get_queryablesreturns an empty set with a message if the endpoint is not implemented by the catalog.get_aggregationsconstructs a STAC Search request with anaggregationsobject; if unsupported (HTTP 400/404), it returns a descriptive message while preserving original search parameters.
Data Size Estimation
The estimate_data_size tool provides accurate size estimates for geospatial datasets without downloading the actual data:
Lazy Loading: Uses odc.stac to load STAC items into xarray datasets without downloading
AOI Clipping: Automatically clips to the smallest area when both bbox and AOI GeoJSON are provided
Fallback Estimation: Provides size estimates even when odc.stac fails
Detailed Metadata: Returns information about data variables, spatial dimensions, and individual assets
Batch Support: Retains structured metadata for efficient batch processing
Usage
MCP Protocol / Server Configuration
The server implements the Model Context Protocol (MCP) for standardized communication.
{
"stac": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/wayfinder-foundry/stac-mcp",
"stac-mcp"
],
"transport": "stdio",
}
}Published Image
# With Docker
docker run --rm -i ghcr.io/wayfinder-foundry/stac-mcp:latest
# With Podman
podman run --rm -i ghcr.io/wayfinder-foundry/stac-mcp:latestExamples
Example: Basic Search
{
"method": "tools/call",
"params": {
"name": "search_items",
"arguments": {
"collections": ["landsat-c2l2-sr"],
"bbox": [-122.5, 37.7, -122.3, 37.8],
"datetime": "2023-01-01/2023-01-31",
"limit": 5,
"output_format": "json"
}
}
}The server responds with a single TextContent whose text is a JSON string like:
{
"type": "item_list",
"count": 5,
"items": [{"id": "..."}],
"meta": {
"catalog_url": "https://example.com/stac",
"parameters": {...},
"returned": 5,
"has_more": false,
"links": []
}
}Example: Advanced Search with Sorting and Field Selection
{
"method": "tools/call",
"params": {
"name": "search_items",
"arguments": {
"collections": ["sentinel-2-l2a"],
"intersects": {
"type": "Point",
"coordinates": [-122.4194, 37.7749]
},
"sortby": ["-properties.datetime"],
"fields": ["id", "properties.datetime", "properties.eo:cloud_cover"],
"limit": 10,
"output_format": "json"
}
}
}Example: Batch Fetch Specific Items
{
"method": "tools/call",
"params": {
"name": "search_items",
"arguments": {
"ids": ["item1", "item2", "item3"],
"output_format": "json"
}
}
}Development
Local Development
git clone https://github.com/wayfinder-foundry/stac-mcp.git
cd stac-mcp
pip install -e ".[dev]"For local development with containers, you can use VS Code's Remote Containers extension with the provided .devcontainer configuration.
Testing
pytest -vTest Coverage
The project uses coverage.py (already a dependency was added) for measuring statement and branch coverage.
Quick run (terminal):
coverage run -m pytest -q
coverage report -mExample output (illustrative):
Name Stmts Miss Branch BrMiss Cover
---------------------------------------------------------------------
stac_mcp/observability.py 185 4 42 3 96%
stac_mcp/tools/execution.py 68 2 18 1 94%
... (others) ...
---------------------------------------------------------------------
TOTAL 620 20 140 9 96%Generate an HTML report (optional):
coverage html
open htmlcov/index.html # macOSConfiguration: .coveragerc enforces branch = True and omits tests/* and scripts/version.py. Update omit patterns only when necessary to keep metrics honest.
Recommended workflow before opening a PR:
ruff format stac_mcp/ tests/ruff check stac_mcp/ tests/ --fixcoverage run -m pytest -qcoverage report -m(ensure no unexpected drops)
Linting
ruff format stac_mcp/ tests/
ruff check stac_mcp/ tests/ --fix --no-cacheVersion Management
The project uses semantic versioning (SemVer) with automated version management based on PR labels or branch naming, implemented in .github/workflows/container.yml.
Automatic Versioning
When PRs are merged to main, the workflow determines the version increment using either PR labels or branch prefixes:
PR Labels (Recommended for Automated Tools)
Labels take priority over branch prefixes. Add one of these labels to your PR:
bump:patch or bump:hotfix → patch increment (0.1.0 → 0.1.1) for bug fixes
bump:minor or bump:feature → minor increment (0.1.0 → 0.2.0) for new features
bump:major or bump:release → major increment (0.1.0 → 1.0.0) for breaking changes
Branch Prefixes (For Human Contributors)
If no version bump label is present, the workflow falls back to branch prefix detection:
hotfix/, fix/, copilot/fix-, or copilot/hotfix/ branches → patch increment (0.1.0 → 0.1.1) for bug fixes
feature/ or copilot/feature/ branches → minor increment (0.1.0 → 0.2.0) for new features
release/ or copilot/release/ branches → major increment (0.1.0 → 1.0.0) for breaking changes
See CONTRIBUTING.md for detailed guidelines on version bumping.
Manual Version Management
You can also manually manage versions using the version script (should normally not be needed unless doing a coordinated release):
# Show current version
python scripts/version.py current
# Increment version based on change type
python scripts/version.py patch # Bug fixes (0.1.0 -> 0.1.1)
python scripts/version.py minor # New features (0.1.0 -> 0.2.0)
python scripts/version.py major # Breaking changes (0.1.0 -> 1.0.0)
# Set specific version
python scripts/version.py set 1.2.3The version system maintains consistency across:
pyproject.toml(project version)stac_mcp/__init__.py(version)stac_mcp/server.py(server_version in MCP initialization)
Container Development
To develop with containers:
# Build development image
docker build -f Containerfile -t stac-mcp:dev .
# Test the container
docker run --rm -i stac-mcp:dev
# Using docker-compose for development
docker-compose up --build
# For debugging, use an interactive shell (requires modifying Containerfile)
# docker run --rm -it --entrypoint=/bin/sh stac-mcp:devCurrent Containerfile (single-stage) notes:
Based on
python:3.12-slimfor broad wheel compatibility (rasterio, shapely, etc.)Installs GDAL/PROJ system libraries needed by rasterio/odc-stac
Installs the package with
pip install .Entrypoint:
python -m stac_mcp.server(stdio MCP transport)Multi-stage/distroless hardening can be reintroduced later (tracked by potential future ADR)
Documentation
FastMCP Guidelines and Architecture
STAC MCP includes comprehensive documentation for FastMCP patterns and agentic geospatial reasoning:
FastMCP Documentation: Complete guide to MCP decorators, resources, tools, and prompts for STAC workflows
DECORATORS.md: Choosing the right decorator for STAC operations
GUIDELINES.md: FastMCP architecture and usage patterns
PROMPTS.md: Agentic STAC search reasoning and methodology
RESOURCES.md: STAC catalog discovery and metadata patterns
CONTEXT.md: Context usage for logging and progress tracking
These documents provide guidance for:
AI agents reasoning about STAC catalog searches
Developers implementing STAC MCP features
Understanding the planned FastMCP integration (issues #69, #78)
Additional Documentation
Test Coverage Strategy: Testing approach and coverage goals
STAC Resources
License
Apache 2.0 - see LICENSE file for details.
Available Tools
11 toolsestimate_data_sizeC
Estimate the data size for a STAC query.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | ||
| limit | No | ||
| query | No | ||
| datetime | No | ||
| aoi_geojson | No | ||
| catalog_url | No | ||
| collections | Yes | ||
| output_format | No | text | |
| force_metadata_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits. It only states 'estimate' without saying whether this is a read-only operation, whether it makes network requests, how the estimate is computed, or if it has side effects. This is insufficient for a tool that may execute queries.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff and front-loads the main verb. However, it is so brief that it sacrifices necessary detail, but for pure conciseness it earns a high score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters, no annotations, and an output schema that is not provided in context, the one-sentence description is insufficient. It does not explain return values, output format behavior, or the impact of parameters on the estimate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not discuss any of the 9 parameters. The phrase 'STAC query' implies query parameters but gives no meaning to individual parameters like bbox, datetime, collections, limit, or output_format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'estimate' and identifies the resource as 'data size for a STAC query'. This clearly distinguishes it from sibling search and retrieval tools, though the term 'data size' could be more explicit (e.g., number of items vs total bytes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool vs alternatives like search_items or get_aggregations. The description does not mention prerequisites, exclusions, or typical scenarios for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_aggregationsC
Get aggregations for STAC items.
| Name | Required | Description | Default |
|---|---|---|---|
| bbox | No | ||
| query | No | ||
| datetime | No | ||
| catalog_url | No | ||
| collections | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It states a get operation but doesn't explain what aggregations are, whether any filtering is applied, performance implications, or that it is read-only. The single sentence provides minimal insight beyond the tool's name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that is direct and front-loaded. However, it is under-specified, so the conciseness comes at the cost of clarity. The structure is fine, but the content is minimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists and may cover return values, the description is incomplete for a tool with 5 parameters and no schema coverage. It does not explain the purpose of aggregations, how they relate to STAC items, or any constraints or edge cases, leaving the agent without critical context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention any parameters. There are 5 parameters (collections, bbox, query, datetime, catalog_url) with no explanation of their roles, formats, or how they affect the aggregations. The description offers no compensatory value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb+resource structure ('Get aggregations for STAC items'), indicating a read operation on aggregated data. It is specific enough to distinguish from sibling tools like get_item or search_items, though it doesn't explicitly point out the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as search_items or get_queryables. There is no mention of typical use cases, prerequisites, or conditions under which aggregations would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_capabilitiesA
Return a summary of STAC API capabilities.
Maps conformance classes to human-readable capability names, making it easier for agents to discover what features a catalog supports (e.g., query, sort, fields, aggregations).
| Name | Required | Description | Default |
|---|---|---|---|
| catalog_url | No | Optional catalog URL override. | |
| output_format | No | Output format ("text" or "json"). | text |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of explaining behavior. It discloses that the tool maps conformance classes to human-readable names and provides examples (query, sort, fields, aggregations), but it does not mention any side effects, permissions, or output structure details. This is adequate but not rich, so a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and every sentence adds value. The second sentence enriches the first with concrete examples, containing no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only two optional parameters, an output schema, and a relatively simple purpose. The description provides sufficient overview and context (mapping behavior and examples) to understand when and why to use it. The presence of an output schema lessens the need to describe return values, so a score of 4 is justified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, with clear descriptions for both parameters (catalog_url and output_format). The tool description does not add any additional meaning to these parameters; it only describes the overall capability mapping. Since the schema already fully documents the parameters, the baseline of 3 is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Return a summary of STAC API capabilities.' It also adds specificity by explaining the mapping from conformance classes to human-readable capability names, which distinguishes it from the sibling get_conformance tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'making it easier for agents to discover what features a catalog supports' gives clear usage context. It does not explicitly name alternatives, but the contrast with raw conformance listing is implied, which is sufficient for a guidance score of 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionB
Fetch a single STAC Collection by id.
| Name | Required | Description | Default |
|---|---|---|---|
| catalog_url | No | ||
| collection_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only says 'Fetch' implying a read operation, but provides no details on error handling, authentication, or consequences. This is insufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence, front-loaded with the key information, and contains no filler words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are covered, but the description is minimal. It does not explain the catalog_url parameter or provide usage guidance, making it incomplete 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It clarifies that collection_id is the identifier, but catalog_url is not explained at all. The description adds minimal meaning beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Fetch', the resource 'single STAC Collection', and the scope 'by id', which distinguishes it from sibling tools like search_collections (plural) and get_item (different resource).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a specific collection id is known, but it does not explicitly mention alternatives or exclusions. It lacks guidance on when to choose this tool over search_collections or get_item.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conformanceC
Return server conformance classes.
| Name | Required | Description | Default |
|---|---|---|---|
| check | No | Optional list of conformance URIs to check support for. If provided, returns a boolean for each URI indicating support. | |
| catalog_url | No | Optional catalog URL override. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits itself. 'Return server conformance classes' is minimal; it does not describe the effect of the check parameter returning booleans, the catalog_url override, or any side effects/read-only nature. This falls short of full transparency for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded and free of fluff. It is appropriately sized for a simple tool, though it is quite terse; this balances to a 4.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, 100% schema coverage, and the presence of an output schema, the description provides adequate context for an agent to invoke the tool. However, it lacks any contextual framing about when conformance classes are needed or how they relate to other endpoints, keeping it at a 3.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both check and catalog_url fully documented in the input schema. The description adds no additional parameter semantics, so per the baseline for high schema coverage, this scores a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Return server conformance classes' clearly identifies the action (return) and resource (server conformance classes). It does not explicitly differentiate from siblings like get_capabilities, so it earns a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_capabilities. There is no mention of exclusions or preferred scenarios. The only implied usage is from the tool name itself, which does not constitute clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_itemA
Get a specific STAC Item by collection and item ID.
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | Yes | The item ID. | |
| catalog_url | No | Optional catalog URL override. | |
| sign_assets | No | If True and catalog is Planetary Computer, sign asset URLs for direct access. Requires planetary-computer package. | |
| collection_id | Yes | The collection ID. | |
| output_format | No | Output format ("text" or "json"). | text |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only says 'Get' without specifying whether it's read-only, what happens if the item is not found, whether it requires authentication, or how the response is formatted (though some is in schema). Minimal transparency beyond the basic operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single concise sentence with no redundant words. Front-loads the action and resource. Perfectly sized for the information it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's relative simplicity, an output schema exists, and parameter descriptions are complete, the description is adequate but not rich. It lacks guidance on when to prefer this over search_items or how optional parameters like sign_assets operate, though schema covers mechanics. Somewhat complete but not fully contextual.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all 5 parameters. The description adds no extra meaning beyond naming the two required parameters (collection and item ID). Baseline 3 is appropriate; no additional semantic value provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('specific STAC Item'), and the key identifiers ('collection and item ID'). It distinguishes from sibling tools like search_items (search) and get_collection (collection-level), 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: when you have a known collection ID and item ID. It doesn't explicitly mention alternatives or exclusions, but the word 'specific' and inclusion of both IDs clearly contextualize direct retrieval versus search. No misleading guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_queryablesA
Get the queryable properties for a specific STAC collection by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| catalog_url | No | ||
| collection_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only restates the basic function and implies a read-only action through 'Get', but it does not mention error behavior, collection existence requirements, the nature of the returned queryables, or how the optional catalog_url is used.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that gets straight to the point. It has no filler or redundant phrasing, making it easy to parse and front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, the description omits the optional catalog_url parameter and does not address the array-vs-singular ambiguity in collection_id. For a low-complexity tool this is minimally adequate, but it leaves clear gaps in parameter understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only partially compensates. It clarifies that collection_id identifies the collection, but the schema declares it as an array of strings while the description says 'specific collection' (singular), creating ambiguity. The optional catalog_url parameter is not mentioned at all, leaving its purpose unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('queryable properties') scoped to a specific STAC collection by ID. This clearly distinguishes it from sibling tools such as get_collection, search_items, or search_collections, which deal with different resources or operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the context clear: use this tool when you need queryable properties for one named collection. It doesn't explicitly state alternatives or exclusions, but the sibling list and the phrasing provide enough situational guidance for an agent to choose this tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rootC
Return the STAC root document for a catalog.
| Name | Required | Description | Default |
|---|---|---|---|
| catalog_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It states 'Return,' implying a read-only operation, but it does not explain how catalog_url is used, what happens when it is null, or any network/error behavior. This minimal disclosure is insufficient for full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that immediately communicates the tool's purpose. It contains no filler or redundant content, making it appropriately concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description could still adequately cover usage and parameter semantics. However, it omits any explanation of catalog_url and lacks guidance on when to call this tool relative to siblings. The tool is simple, but the description leaves key gaps, especially regarding the optional parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter, catalog_url, with 0% description coverage, and the tool description does not mention this parameter at all. The phrase 'for a catalog' vaguely hints at its purpose, but the description adds no explicit meaning beyond the parameter name and type in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Return' and the resource 'STAC root document for a catalog,' making the tool's function unambiguous. However, it does not explicitly distinguish itself from sibling tools like get_capabilities, which also return server-level resources, so it earns a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description only states the action and resource, with no mention of prerequisites, exclusions, or when it is appropriate to call get_root over other catalog-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sensor_registry_infoA
Get information about the STAC sensor registry.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral transparency. It only says 'get information' and does not disclose whether the operation is read-only, what the response structure looks like, or any other behavioral traits beyond the obvious read intent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no filler or redundant information. It is front-loaded and directly states the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless getter, the description is minimally adequate, but it lacks context about what the STAC sensor registry is and why a user would invoke this tool. The existence of an output schema mitigates some ambiguity, but the description alone offers no additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool takes zero parameters, so schema description coverage is trivially 100%. The baseline score of 4 applies, and the description appropriately avoids discussing parameters that do not exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves information about the STAC sensor registry, using a specific verb and resource. It distinguishes itself from sibling tools such as get_root, get_conformance, and search_collections, which focus on different API aspects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description simply states what it does, without any context about prerequisites, scenarios, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_collectionsC
Return a page of STAC collections.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| catalog_url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only says 'Return a page,' which implies read-only and pagination, but does not explain pagination behavior, the role of catalog_url, or any output format. The agent is left guessing about side effects and edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is concise and front-loaded, but it is under-specified. It earns its place as a purpose statement but omits necessary details, making the description too thin to be fully useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 parameters, no annotations, and an output schema, the description is incomplete. It fails to explain pagination semantics (limit), the effect of catalog_url, or how this tool fits within the broader STAC API workflow, leaving significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining the parameters. It mentions neither limit nor catalog_url, forcing the agent to infer their meaning solely from names, which is insufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Return') and the resource ('STAC collections'), with a hint at pagination ('a page'). It distinguishes from sibling tools like get_collection (singular) and search_items (items) by focusing on collections as a whole.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. For instance, it doesn't clarify when to prefer search_collections over get_collection or search_items, nor mention any prerequisites or context like catalog_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_itemsC
Search for STAC items.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | List of specific item IDs to retrieve. | |
| bbox | No | Bounding box [west, south, east, north] or GeoJSON geometry. | |
| limit | No | Maximum number of items to return. | |
| query | No | Query filter for properties. | |
| fields | No | List of fields to include/exclude (e.g., ["id", "properties.datetime"]). Prefix with "-" to exclude (e.g., ["-properties.eo:cloud_cover"]). | |
| sortby | No | Sort order (e.g., ["-properties.datetime"] for descending, ["+properties.datetime"] for ascending). | |
| datetime | No | Datetime filter (e.g., "2020-01-01/2020-12-31"). | |
| intersects | No | GeoJSON geometry for spatial intersection query. | |
| catalog_url | No | Optional catalog URL override. | |
| collections | No | One or more collection IDs to search. | |
| sign_assets | No | If True and catalog is Planetary Computer, sign asset URLs for direct access. Requires planetary-computer package. | |
| output_format | No | Output format ("text" or "json"). | text |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 only states the tool searches for items, without mentioning return format, pagination, authentication, or effects of parameters like catalog_url and sign_assets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, but for a tool with 12 parameters and rich filtering capabilities, it underuses the opportunity to summarize key features. It is concise but not informative enough.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema and complex parameters, but the description fails to address usage context, alternatives, or behavioral expectations. This is a minimal description for a complex search tool, leaving significant gaps in understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all 12 parameters. The description adds no additional parameter semantics, but the baseline of 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Search for STAC items' uses a specific verb and resource, clearly indicating the tool's core function. However, it does not differentiate from sibling tools like search_collections or get_item, which also operate on STAC data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. Sibling tools such as search_collections and get_item exist, but no comparative context or exclusions are mentioned.
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 tool update
v6.5.0- Changed
search_items6 fields changed- changed
Input schema / properties / collections / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "string" - } -]New value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / collections / defaultAdded value: +null - added
Input schema / properties / idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "List of specific item IDs to retrieve." +} - added
Input schema / properties / intersectsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "GeoJSON geometry for spatial intersection query." +} - added
Input schema / properties / sortbyAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Sort order (e.g., [\"-properties.datetime\"] for descending,\n [\"+properties.datetime\"] for ascending)." +} - removed
Input schema / requiredRemoved value: -[ - "collections" -]
11 tool updates
v6.3.0- Changed
estimate_data_size1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_aggregations1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
get_capabilities - Changed
get_collection1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Added
get_conformance - Changed
get_item6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / catalog_url / descriptionAdded value: +"Optional catalog URL override." - added
Input schema / properties / collection_id / descriptionAdded value: +"The collection ID." - added
Input schema / properties / item_id / descriptionAdded value: +"The item ID." - added
Input schema / properties / output_format / descriptionAdded value: +"Output format (\"text\" or \"json\")." - added
Input schema / properties / sign_assetsAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If True and catalog is Planetary Computer, sign asset URLs\n for direct access. Requires planetary-computer package." +}
- Changed
get_queryables1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_root1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
get_sensor_registry_info1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
search_collections1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
search_items10 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / bbox / descriptionAdded value: +"Bounding box [west, south, east, north] or GeoJSON geometry." - added
Input schema / properties / catalog_url / descriptionAdded value: +"Optional catalog URL override." - added
Input schema / properties / collections / descriptionAdded value: +"One or more collection IDs to search." - added
Input schema / properties / datetime / descriptionAdded value: +"Datetime filter (e.g., \"2020-01-01/2020-12-31\")." - added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "List of fields to include/exclude (e.g., [\"id\", \"properties.datetime\"]).\n Prefix with \"-\" to exclude (e.g., [\"-properties.eo:cloud_cover\"])." +} - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of items to return." - added
Input schema / properties / output_format / descriptionAdded value: +"Output format (\"text\" or \"json\")." - added
Input schema / properties / query / descriptionAdded value: +"Query filter for properties." - added
Input schema / properties / sign_assetsAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If True and catalog is Planetary Computer, sign asset URLs\n for direct access. Requires planetary-computer package." +}
2 tool updates
v2.3.1- Removed
get_conformance - Changed
get_root1 field changed- added
Input schema / properties / catalog_urlAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
10 tool updates
v1.0.0- Changed
estimate_data_size37 fields changed- added
Input schema / properties / aoi_geojson / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / aoi_geojson / defaultAdded value: +null - removed
Input schema / properties / aoi_geojson / descriptionRemoved value: -"Area of Interest as GeoJSON geometry for clipping (will use smallest bbox between this and bbox parameter)" - removed
Input schema / properties / aoi_geojson / typeRemoved value: -"object" - added
Input schema / properties / bbox / anyOfAdded value: +[ + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / bbox / defaultAdded value: +null - removed
Input schema / properties / bbox / descriptionRemoved value: -"Bounding box [west, south, east, north] in WGS84" - removed
Input schema / properties / bbox / itemsRemoved value: -{ - "type": "number" -} - removed
Input schema / properties / bbox / maxItemsRemoved value: -4 - removed
Input schema / properties / bbox / minItemsRemoved value: -4 - removed
Input schema / properties / bbox / typeRemoved value: -"array" - added
Input schema / properties / catalog_url / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / catalog_url / defaultAdded value: +null - removed
Input schema / properties / catalog_url / descriptionRemoved value: -"STAC catalog URL (optional, defaults to Microsoft Planetary Computer)" - removed
Input schema / properties / catalog_url / typeRemoved value: -"string" - added
Input schema / properties / collections / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } +] - removed
Input schema / properties / collections / descriptionRemoved value: -"List of collection IDs to search within" - removed
Input schema / properties / collections / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / collections / typeRemoved value: -"array" - added
Input schema / properties / datetime / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / datetime / defaultAdded value: +null - removed
Input schema / properties / datetime / descriptionRemoved value: -"Date/time filter (ISO 8601 format, e.g., '2023-01-01/2023-12-31')" - removed
Input schema / properties / datetime / typeRemoved value: -"string" - added
Input schema / properties / force_metadata_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false +} - added
Input schema / properties / limit / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / limit / defaultPrevious value: -100New value: +10 - removed
Input schema / properties / limit / descriptionRemoved value: -"Maximum number of items to analyze for size estimation" - removed
Input schema / properties / limit / maximumRemoved value: -500 - removed
Input schema / properties / limit / minimumRemoved value: -1 - removed
Input schema / properties / limit / typeRemoved value: -"integer" - added
Input schema / properties / output_formatAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "text" +} - added
Input schema / properties / query / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / query / defaultAdded value: +null - removed
Input schema / properties / query / descriptionRemoved value: -"Additional query parameters for filtering items" - removed
Input schema / properties / query / typeRemoved value: -"object" - added
Input schema / requiredAdded value: +[ + "collections" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
get_aggregations - Changed
get_collection6 fields changed- added
Input schema / properties / catalog_url / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / catalog_url / defaultAdded value: +null - removed
Input schema / properties / catalog_url / descriptionRemoved value: -"STAC catalog URL (optional, defaults to Microsoft Planetary Computer)" - removed
Input schema / properties / catalog_url / typeRemoved value: -"string" - removed
Input schema / properties / collection_id / descriptionRemoved value: -"ID of the collection to retrieve" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
get_conformance - Changed
get_item8 fields changed- added
Input schema / properties / catalog_url / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / catalog_url / defaultAdded value: +null - removed
Input schema / properties / catalog_url / descriptionRemoved value: -"STAC catalog URL (optional, defaults to Microsoft Planetary Computer)" - removed
Input schema / properties / catalog_url / typeRemoved value: -"string" - removed
Input schema / properties / collection_id / descriptionRemoved value: -"ID of the collection containing the item" - removed
Input schema / properties / item_id / descriptionRemoved value: -"ID of the item to retrieve" - added
Input schema / properties / output_formatAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "text" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Added
get_queryables - Added
get_root - Added
get_sensor_registry_info - Changed
search_collections10 fields changed- added
Input schema / properties / catalog_url / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / catalog_url / defaultAdded value: +null - removed
Input schema / properties / catalog_url / descriptionRemoved value: -"STAC catalog URL (optional, defaults to Microsoft Planetary Computer)" - removed
Input schema / properties / catalog_url / typeRemoved value: -"string" - added
Input schema / properties / limit / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Input schema / properties / limit / descriptionRemoved value: -"Maximum number of collections to return" - removed
Input schema / properties / limit / maximumRemoved value: -100 - removed
Input schema / properties / limit / minimumRemoved value: -1 - removed
Input schema / properties / limit / typeRemoved value: -"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
- Changed
search_items31 fields changed- added
Input schema / properties / bbox / anyOfAdded value: +[ + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / bbox / defaultAdded value: +null - removed
Input schema / properties / bbox / descriptionRemoved value: -"Bounding box [west, south, east, north] in WGS84" - removed
Input schema / properties / bbox / itemsRemoved value: -{ - "type": "number" -} - removed
Input schema / properties / bbox / maxItemsRemoved value: -4 - removed
Input schema / properties / bbox / minItemsRemoved value: -4 - removed
Input schema / properties / bbox / typeRemoved value: -"array" - added
Input schema / properties / catalog_url / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / catalog_url / defaultAdded value: +null - removed
Input schema / properties / catalog_url / descriptionRemoved value: -"STAC catalog URL (optional, defaults to Microsoft Planetary Computer)" - removed
Input schema / properties / catalog_url / typeRemoved value: -"string" - added
Input schema / properties / collections / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "string" + } +] - removed
Input schema / properties / collections / descriptionRemoved value: -"List of collection IDs to search within" - removed
Input schema / properties / collections / itemsRemoved value: -{ - "type": "string" -} - removed
Input schema / properties / collections / typeRemoved value: -"array" - added
Input schema / properties / datetime / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / datetime / defaultAdded value: +null - removed
Input schema / properties / datetime / descriptionRemoved value: -"Date/time filter (ISO 8601 format, e.g., '2023-01-01/2023-12-31')" - removed
Input schema / properties / datetime / typeRemoved value: -"string" - added
Input schema / properties / limit / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Input schema / properties / limit / descriptionRemoved value: -"Maximum number of items to return" - removed
Input schema / properties / limit / maximumRemoved value: -100 - removed
Input schema / properties / limit / minimumRemoved value: -1 - removed
Input schema / properties / limit / typeRemoved value: -"integer" - added
Input schema / properties / output_formatAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": "text" +} - added
Input schema / properties / query / anyOfAdded value: +[ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "string" + }, + { + "type": "null" + } +] - added
Input schema / properties / query / defaultAdded value: +null - removed
Input schema / properties / query / descriptionRemoved value: -"Additional query parameters for filtering items" - removed
Input schema / properties / query / typeRemoved value: -"object" - added
Input schema / requiredAdded value: +[ + "collections" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "result": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "result" + ], + "type": "object", + "x-fastmcp-wrap-result": true +}
5 tool updates
- First observed
estimate_data_size - First observed
get_collection - First observed
get_item - First observed
search_collections - First observed
search_items
TDQS
Most tools target distinct resources, but get_conformance and get_capabilities overlap in purpose (both describe server capabilities), and get_root also provides discovery metadata. This could cause confusion when an agent needs to determine what a server supports.
Tool names generally follow a verb_noun pattern, but the pluralization is inconsistent (get_collection vs get_queryables, search_items vs get_item). The use of 'search' for listing collections/items is also slightly misleading, as it implies filtering rather than simple listing.
With 11 tools, the set is well-scoped for a STAC API client. It covers discovery, collections, items, search, and additional metadata endpoints without being bloated or too sparse.
The tool set covers the standard read-only STAC API operations: root, conformance, capabilities, collections, items, search, queryables, and aggregations. There are no significant gaps for typical agent workflows, and write operations are not expected for a STAC catalog.
Maintenance
Related MCP Connectors
Search dynamical.org's open STAC catalog of weather & climate datasets (GFS, ECMWF, HRRR).
Geospatial AI MCP server — satellite imagery, embeddings, weather, GNS governance
GIS tools for AI agents: 65 free tools + 8 paid (hazard/site-scouting/GeoJSON export)
Real-world data for agents: air quality, geocoding, quakes, holidays, web search
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with SkyFi's geospatial data services for ordering satellite imagery, searching data catalogs, checking pricing and feasibility, and monitoring areas of interest.11MIT
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI agents to search, order, and monitor satellite and geospatial imagery through SkyFi's API, including archive searches, pricing estimates, and order tracking.-
- FlicenseAqualityDmaintenanceProvides access to the OpenLandMap STAC catalog, offering over 100 global environmental datasets including soil, climate, and vegetation data. It enables AI agents to discover, search, and retrieve Cloud-Optimized GeoTIFFs for global geospatial analysis.27-
- AlicenseAqualityCmaintenanceEnables AI agents to discover and access 800TB+ of public geospatial data from Source Cooperative, with tools for listing organizations, products, files, and fuzzy search.62MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/BnJam/stac-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server