Copernicus Earth Observation MCP Server
This MCP server lets you search, inspect, and download Copernicus Sentinel satellite imagery (downloads require authentication).
Search images by region (point, polygon, or bbox), mission, satellite, date range, product type, processing level, and cloud-cover bounds.
Fetch a single image's full metadata and all available download links by ID.
Get mission capabilities and info for Sentinel-1/2/3/5P/6, including all missions at once.
List the most recent images over a region within the last N days.
Analyze temporal image coverage for a region, grouped by day/week/month.
Check whether one or more images are available for download.
Download a single image as a full product or a lightweight quicklook.
Batch-download many images concurrently with a configurable concurrency limit.
Search and download the best-matching image in one step.
Manage downloaded files: list them (filter by type), view download statistics, and clean up old/large files (dry-run by default).
Click on "Deploy 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., "@Copernicus Earth Observation MCP Server Find Sentinel-2 images of Paris from last month with less than 10% cloud cover."
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.
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 |
| Static bearer token, used as-is |
2 |
| Recommended. Access tokens are minted and renewed automatically |
3 |
| 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 --versionMCP client configuration (stdio)
{
"mcpServers": {
"copernicus": {
"command": "copernicus-mcp",
"env": {
"COPERNICUS_REFRESH_TOKEN": "<your-refresh-token>"
}
}
}
}Tools
Search & discovery
Tool | Purpose |
| Search Sentinel products (geometry, dates, mission filters, attributes) |
| Full metadata, checksums, assets and download URLs for one product (by UUID or name) |
| Most recent products for an area |
| Temporal coverage analysis (counts per day/week/month/year) |
| Mission capabilities and supported filters |
Sentinel-1 SLC bursts
Tool | Purpose |
| Search bursts (parent product, burst ids, swath, polarisation, orbit, area, time) |
| Burst raster metadata (Lines, SamplesPerBurst, ByteOffset, S3Path) |
| Start background on-demand burst extraction (zip) |
Downloads
Tool | Purpose |
| Start a background job: |
| Synchronous quicklook download (small preview image) |
| Job status, progress %, bytes, speed, output path |
| All jobs, newest first |
| Cancel a queued/running job (partial data kept for resume) |
File management
Tool | Purpose |
| List files in the download root |
| Totals and breakdowns by type / mission / month |
| 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 |
|
| Download root (all file access is confined to it) |
|
| Parallel background downloads |
|
| Catalogue request timeout (seconds) |
|
| Download timeout (seconds) |
| 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 implementationsNotes:
Queries follow the official CDSE OData syntax; see
docs/odata-quickref.mdand the documentation snapshots indocs/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 testsDocker
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 8000API 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_detailsprovides theS3Path/ByteOffset/Lines/SamplesPerBurstvalues 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 toolsbatch_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_product_download_linksB
Get all available download links for a Copernicus satellite image
Inputs: image_id (required). 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
Scored across 13 tools
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.
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.
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.
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
Related MCP Connectors
European Sentinel and Copernicus Contributing Mission archive from the EU's Copernicus Data Space…
Discover, verify, and access NASA Earth science datasets via the Common Metadata Repository (CMR)
Sentinel and Landsat imagery catalogue from Element 84's Earth Search over the AWS Open Data…
Earth-observation imagery catalogue from Microsoft's Planetary Computer — search its open…
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables 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.-
- FlicenseAqualityBmaintenanceEnables discovering and searching Earth observation datasets from STAC catalogs, generating validated GeoCroissant metadata, inspecting document structure, and previewing records for geospatial ML workflows.12-
- AlicenseAqualityBmaintenanceEnables 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.2916Apache 2.0
- AlicenseAqualityBmaintenanceEnables 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.29Apache 2.0