NA

NASA PDS MCP Server for Planetary Data Discovery

Discover NASA planetary data with the MCP server and access PDS data products from the 1960s to today.

Quick Install
npx -y @NASA-PDS/pds-mcp-server

Overview

The NASA PDS MCP Server implements the Model Context Protocol (MCP) to make Planetary Data System (PDS) products discoverable and accessible via a consistent HTTP API. The server indexes PDS archive metadata (PDS4 labels and other catalog metadata) and exposes it so clients and applications can discover data products, explore collections, and retrieve access URLs across missions from the 1960s to the present.

For developers, the MCP server provides a lightweight, API-first way to query PDS holdings without having to crawl or parse label files directly. It is useful for building search UIs, analytics pipelines, data brokers, or automated ingest systems that need programmatic access to planetary science data. The repository, tools, and example configuration make it straightforward to run locally, in containers, or as part of a cloud deployment.

Features

  • Implements the Model Context Protocol (MCP) API for PDS data discovery
  • Indexing of PDS4 labels and product metadata across missions and instruments
  • HTTP API for collections, products, and metadata search
  • Docker-friendly and suitable for cloud deployment
  • Open-source: repository and issue tracking on GitHub
  • Pluggable configuration for index sources, caching, and authentication
  • Swagger/OpenAPI schema and example clients for quick integration

Installation / Configuration

Prerequisites:

  • Docker (recommended) or a JVM runtime if running a native build (see project docs)
  • Git

Clone the repository:

git clone https://github.com/NASA-PDS/pds-mcp-server.git
cd pds-mcp-server

Run with Docker (recommended):

# Build the image (optional if images are published)
docker build -t pds-mcp-server:latest .

# Run the server, exposing port 8080 and mounting a local data directory
docker run -d \
  --name pds-mcp \
  -p 8080:8080 \
  -v $(pwd)/data:/var/lib/pds-mcp/data \
  -e MCP_PORT=8080 \
  pds-mcp-server:latest

Run locally (development mode)

# If the project uses a language-specific build tool, replace with the appropriate command.
# Example (if Java + Maven):
# mvn spring-boot:run

# Or invoke the executable/jar:
java -jar target/pds-mcp-server.jar --config=config.yml

Basic configuration (example config.yml)

server:
  port: 8080

index:
  dataDirs:
    - /var/lib/pds-mcp/data
  refreshIntervalMinutes: 60

logging:
  level: INFO

Common environment variables / configuration options

Variable / KeyPurpose
MCP_PORT / server.portHTTP port for the MCP API (default: 8080)
index.dataDirsPaths (or mounted volumes) containing PDS index files / labels
index.refreshIntervalMinutesHow often to refresh the index from source files
logging.levelLog verbosity (DEBUG, INFO, WARN, ERROR)

See the repository README and config examples for the full set of options and advanced configuration (authentication, storage backends).

Available Resources

  • Source code and issue tracker: https://github.com/NASA-PDS/pds-mcp-server
  • API schema / OpenAPI: look for openapi.yaml or /openapi.json in the repo or served by the running service (commonly at /swagger or /openapi.json)
  • Sample data and test fixtures: repository contains sample index/label files to exercise the server
  • Client examples: language snippets (curl, Python, JavaScript) are often included in the repo or API docs

Use Cases

  1. Search for products by instrument and time range (curl)
curl "http://localhost:8080/search?instrument=MISSIONS:INSTRUMENT_NAME&start=1990-01-01&end=2000-12-31" \
  -H "Accept: application/json"

This returns metadata records matching the instrument and temporal constraints, including product IDs and access URLs.

  1. List collections for a mission (curl)
curl "http://localhost:8080/collections?mission=MARS_ORBITER" -H "Accept: application/json"

Use the collections endpoint to enumerate logical groupings of products (e.g., mission, instrument, data level).

  1. Integrate with a Python client
import requests

base = "http://localhost:8080"
resp = requests.get(f"{base}/products/PRODUCT_ID")
resp.raise_for_status()
product = resp.json()
print(product["label_uri"], product["download_url"])

This pattern allows downstream pipelines to fetch metadata and then download data files for processing.

  1. Build a web-based discovery UI
  • Use the MCP API endpoints as the backing API for an interactive search interface (filters, faceting, time sliders).
  • The OpenAPI/Swagger schema can drive autogenerated client code or API explorers.
  1. Automate bulk retrieval
  • Query for products matching search criteria, then iterate product access URLs in a script to download archives or stage data into cloud storage.

Tips for Developers

  • Start with the provided sample index files so you can exercise the API without needing a full PDS archive.
  • Use Docker mounts for index directories to update files without rebuilding the container.
  • Check the OpenAPI schema served by the running server to discover exact endpoints and request/response formats.
  • Monitor logs and increase logging verbosity while configuring indexing and data-source paths.

For full implementation details and advanced configuration, consult the repository: https://github.com/NASA-PDS/pds-mcp-server.