Skip to main content
Glama
Copernicus Earth Observation MCP Server

Copernicus Earth Observation MCP Server

by wb1016

Copernicus Earth Observation MCP Server

An MCP server for Copernicus Sentinel data from the Copernicus Data Space Ecosystem (CDSE): search products and Sentinel-1 SLC bursts, inspect metadata, and download data with background jobs.

  • Missions: Sentinel-1, -2, -3, -5P, -6

  • Python: 3.13+

  • Auth: token-first (refresh token or access token), password grant as fallback

Features

Search & discovery

  • Search by point / bounding box / polygon (GeoJSON or WKT), date range, and mission-specific filters (product type, processing level, satellite, cloud cover, orbit direction, relative orbit, Sentinel-2 tile, S1 mode/swath/ polarisation, or any catalogue attribute)

  • Real server-side filtering (cloud cover and attributes are filtered by the API, not silently dropped)

  • Recent products, temporal coverage analysis, full product metadata with checksums and quicklook URLs

Sentinel-1 SLC bursts

  • Search bursts by parent product, burst/absolute burst id, subswath, polarisation, mode, orbit, datatake, or area + time

  • Download bursts as zip via the CDSE on-demand extraction service (background job)

Downloads

  • Background download jobs (products, S1 native archives, quicklooks, bursts) with status, progress, speed, and cancellation — no more MCP tool timeouts on multi-GB products

  • Resumable downloads (HTTP Range), MD5 checksum verification

  • Quicklooks download synchronously (small, fast previews)

File management

  • List / statistics / cleanup of downloaded files, all confined to the configured download root (dry-run by default)

Related MCP server: GeoCroissant MCP Server

Installation

git clone <repository-url>
cd copernicus-mcp

uv venv -p 3.13          # or 3.14
uv pip install -e ".[dev]"

A free account is required for downloads: https://dataspace.copernicus.eu/

Authentication

Token-based authentication is primary. Configure one of:

Priority

Environment variable

Notes

1

COPERNICUS_ACCESS_TOKEN

Static bearer token, used as-is

2

COPERNICUS_REFRESH_TOKEN

Recommended. Access tokens are minted and renewed automatically

3

COPERNICUS_USERNAME + COPERNICUS_PASSWORD

Password grant (legacy fallback)

Search works without authentication; downloads require a token.

Running the server

copernicus-mcp                          # stdio transport (default)
python -m copernicus_mcp                # equivalent

copernicus-mcp --transport http --host 127.0.0.1 --port 8000
copernicus-mcp --log-level DEBUG --version

MCP client configuration (stdio)

{
  "mcpServers": {
    "copernicus": {
      "command": "copernicus-mcp",
      "env": {
        "COPERNICUS_REFRESH_TOKEN": "<your-refresh-token>"
      }
    }
  }
}

Tools

Search & discovery

Tool

Purpose

search_products

Search Sentinel products (geometry, dates, mission filters, attributes)

get_product_details

Full metadata, checksums, assets and download URLs for one product (by UUID or name)

get_recent_products

Most recent products for an area

check_coverage

Temporal coverage analysis (counts per day/week/month/year)

get_mission_info

Mission capabilities and supported filters

Sentinel-1 SLC bursts

Tool

Purpose

search_bursts

Search bursts (parent product, burst ids, swath, polarisation, orbit, area, time)

get_burst_details

Burst raster metadata (Lines, SamplesPerBurst, ByteOffset, S3Path)

download_burst

Start background on-demand burst extraction (zip)

Downloads

Tool

Purpose

start_download

Start a background job: product, compressed (S1 native $zip) or quicklook

download_quicklook

Synchronous quicklook download (small preview image)

get_download_status

Job status, progress %, bytes, speed, output path

list_download_jobs

All jobs, newest first

cancel_download

Cancel a queued/running job (partial data kept for resume)

File management

Tool

Purpose

list_downloaded_files

List files in the download root

get_download_statistics

Totals and breakdowns by type / mission / month

cleanup_downloads

Delete old or excess files (dry-run by default)

Typical workflow

1. search_products(geometry=[2.29, 48.85, 2.30, 48.86], mission="sentinel-2",
                   start_date="2024-06-01", end_date="2024-06-30",
                   max_cloud_cover=20)
2. get_product_details(image_id="<uuid from results>")
3. download_quicklook(image_id="<uuid>")            # fast preview
4. start_download(image_id="<uuid>", kind="product") # background job
5. get_download_status(job_id="<job_id>")

Configuration

Variable

Default

Purpose

COPERNICUS_DOWNLOAD_DIR

downloads

Download root (all file access is confined to it)

COPERNICUS_MAX_CONCURRENT_DOWNLOADS

3

Parallel background downloads

COPERNICUS_API_TIMEOUT

60

Catalogue request timeout (seconds)

COPERNICUS_DOWNLOAD_TIMEOUT

7200

Download timeout (seconds)

COPERNICUS_API_BASE

CDSE catalogue

Override for testing

Architecture

copernicus_mcp/
├── server.py        # FastMCP wiring + CLI
├── app.py           # service container (built once per process)
├── config.py        # settings from environment
├── auth.py          # token manager (refresh/access token, password)
├── errors.py        # exception hierarchy
├── odata/
│   ├── query.py     # pure query builders (dates, geometry, filters)
│   ├── models.py    # Product / Burst / Asset / Checksum models
│   └── client.py    # async OData client (paging, retries)
├── downloads/
│   ├── manager.py   # streaming, resume, checksums, path confinement
│   ├── jobs.py      # background job manager
│   └── service.py   # executes download jobs
└── tools/           # MCP tool implementations

Notes:

  • Queries follow the official CDSE OData syntax; see docs/odata-quickref.md and the documentation snapshots in docs/reference/.

  • Background jobs are in-memory: they do not survive a server restart (partial files stay on disk and are resumed on retry).

Development

uv pip install -e ".[dev]"
pytest                 # unit + tool tests (no network; httpx.MockTransport)
ruff check copernicus_mcp tests

Docker

docker build -t copernicus-mcp .
docker run -i --rm -e COPERNICUS_REFRESH_TOKEN=<token> copernicus-mcp   # stdio
docker run --rm -e COPERNICUS_REFRESH_TOKEN=<token> \
  -v $PWD/downloads:/data/downloads -e COPERNICUS_DOWNLOAD_DIR=/data/downloads \
  copernicus-mcp --transport http --host 0.0.0.0 --port 8000

API notes and limitations

  • Scope: Sentinel collections only (SENTINEL-1/2/3/5P/6). Other CDSE collections (CCM, CLMS, COP-DEM, Landsat, ...) exist in the catalogue but are not exposed here.

  • Native archives (compressed): Sentinel-1 RAW/GRD/SLC, one month after publication only.

  • Burst downloads use the CDSE on-demand extraction service and may take a while; if the service is unavailable, get_burst_details provides the S3Path/ByteOffset/Lines/SamplesPerBurst values needed for GDAL-based extraction (see the Sentinel-1 SLC Bursts documentation).

  • Full products can be several GB — prefer quicklooks for previews.

License

LGPL-3.0-or-later (see LICENSE).

Acknowledgments

  • ESA and the Copernicus programme

  • The Copernicus Data Space Ecosystem for API access

Available Tools

13 tools
batch_download_imagesA

Download multiple Copernicus satellite images concurrently. Requires authentication. WARNING: Full product batch downloads can take HOURS. Use download_type='quicklook' for testing.

Inputs: image_ids (required), mission, download_type, output_dir, +1 more. Returns: object

check_coverageC

Check satellite image coverage for a region over time

Inputs: geometry (required), start_date (required), end_date (required), geometry_type, +2 more. Returns: object

check_download_availabilityC

Check if Copernicus satellite images are available for download

Inputs: image_ids (required). Returns: object

cleanup_downloadsC

Clean up downloaded files based on criteria

Inputs: download_dir, older_than_days, max_size_mb, file_type, +1 more. Returns: object

download_imageA

Download a Copernicus satellite image by ID. Requires COPERNICUS_USERNAME and COPERNICUS_PASSWORD environment variables. WARNING: Full product downloads can take hours. Use download_type='quicklook' for testing.

Inputs: image_id (required), mission, download_type, output_dir. Returns: object

get_download_statisticsB

Get statistics about downloaded Copernicus satellite images

Inputs: download_dir. Returns: object

get_image_detailsC

Get comprehensive metadata for a specific satellite image including download URL

Inputs: image_id (required), mission. Returns: object

get_mission_infoC

Get detailed information about Copernicus satellite missions

Inputs: mission. Returns: object

get_recent_imagesC

Get the most recent satellite images for a region

Inputs: geometry (required), geometry_type, mission, days_back, +1 more. Returns: object

list_downloaded_filesC

List downloaded Copernicus satellite image files

Inputs: download_dir, file_type, limit. Returns: object

search_and_downloadA

Search for Copernicus satellite images and download the best match. WARNING: Full product downloads can take HOURS. Use download_type='quicklook' for testing.

Inputs: geometry (required), geometry_type, mission, start_date, +5 more. Returns: object

search_copernicus_imagesB

Search for Copernicus satellite images for a given region

Inputs: geometry (required), geometry_type, mission, processing_level, +7 more. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 13 tools

    Disambiguation3/5

    Most tools have distinct purposes, but there is significant overlap between search_copernicus_images and search_and_download, and between download_image and batch_download_images, which could cause confusion. However, descriptions clarify differences like batch vs. single downloads.

    Naming Consistency5/5

    All tool names follow a consistent snake_case pattern with clear verb_noun structures (e.g., check_coverage, download_image, get_image_details). There are no deviations in naming conventions.

    Tool Count5/5

    With 13 tools, the count is well-scoped for an Earth observation server, covering search, download, metadata, and file management without being overwhelming. Each tool serves a specific role in the workflow.

    Completeness4/5

    The toolset provides comprehensive coverage for satellite image workflows, including search, download, metadata retrieval, and file management. Minor gaps might include advanced filtering or real-time monitoring, but core operations are well-covered.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • -
      license
      Not graded
      quality
      Not graded
      maintenance
      Enables satellite imagery analysis through Google Earth Engine, allowing users to search datasets, calculate vegetation indices like NDVI, filter collections by location and date, and export imagery to cloud storage. Supports major satellite datasets including Sentinel-2, Landsat, and MODIS for applications like agriculture monitoring and deforestation tracking.
      -
    • F
      license
      A
      quality
      B
      maintenance
      Enables discovering and searching Earth observation datasets from STAC catalogs, generating validated GeoCroissant metadata, inspecting document structure, and previewing records for geospatial ML workflows.
      12
      -
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to autonomously discover, stream, and compute satellite analytics from free government Earth-observation catalogs such as Sentinel-2, Landsat, and Copernicus DEM, with zero API keys or configuration. It supports place-name geocoding, STAC scene search, cloud-native COG streaming for spectral indices, elevation profiles, SAR flood detection, and sandboxed custom geospatial scripts.
      29
      16
      Apache 2.0
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to autonomously discover, stream, and compute satellite analytics from free government Earth observation archives. Provides tools for STAC search, spectral indices, elevation profiles, SAR water detection, and sandboxed geospatial scripting.
      29
      Apache 2.0