EEA GeoNetwork MCP Server

Local setup required. This server has to be cloned and prepared on your machine before you register it in Claude Code.
1

Set the server up locally

Run this once to clone and prepare the server before adding it to Claude Code.

Run in terminal
npm install
npm run build
2

Register it in Claude Code

After the local setup is done, run this command to point Claude Code at the built server.

Run in terminal
claude mcp add -e "BASE_URL=${BASE_URL}" eea-geonetwork -- node "<FULL_PATH_TO_EEA_GEONETWORK_MCP>/dist/index.js"

Replace <FULL_PATH_TO_EEA_GEONETWORK_MCP>/dist/index.js with the actual folder you prepared in step 1.

Required:BASE_URL+ 3 optional
README.md

Interact with the European Environment Agency GeoNetwork Catalogue API

EEA GeoNetwork MCP Server

A Model Context Protocol (MCP) server that provides tools to interact with the European Environment Agency (EEA) GeoNetwork Catalogue API (GeoNetwork 4.4.9).

Features

This MCP server provides 20 tools for interacting with the EEA GeoNetwork Catalogue:

Search & Discovery

  • search_records - Search for metadata records with full Elasticsearch query support
  • search_by_extent - Find records by geographic bounding box
  • get_record - Retrieve detailed metadata for a specific record by UUID
  • get_record_by_id - Retrieve a record by its internal numeric ID
  • get_related_records - Find related records (parent, children, services, datasets)

Data Export & Management

  • get_record_formatters - List available export formats for a record
  • export_record - Export metadata in various formats (XML, PDF, etc.)
  • duplicate_record - Duplicate an existing metadata record (requires authentication)

Record Editing (Requires Authentication)

  • update_record - Update any field using XPath (supports ISO 19139 and ISO 19115-3)
  • update_record_title - Simplified tool to update a record's title (auto-detects schema)
  • add_record_tags - Add tags/categories to a record
  • delete_record_tags - Remove tags/categories from a record

Resource/Attachment Management

  • upload_file_to_record - Upload a file from local filesystem directly to a metadata record (requires authentication)
  • get_attachments - List all attachments/resources for a metadata record
  • delete_attachment - Delete a specific attachment from a record (requires authentication)

Catalogue Information

  • get_site_info - Get catalogue configuration and site information
  • get_sources - List catalogue sources and sub-portals
  • list_groups - List all user groups
  • get_tags - Get available tags/categories
  • get_regions - Get geographic regions/extents

Installation

Option 1: Docker (Recommended)

The easiest way to run the server is using Docker:

# Build and start the container
docker-compose up -d

# Check logs
docker-compose logs -f

# Stop the container
docker-compose down

The server will be available at http://localhost:3001

Environment Variables: You can customize the configuration by creating a .env file or editing the docker-compose.yml:

environment:
  - PORT=3001
  - BASE_URL=https://galliwasp.eea.europa.eu/catalogue/srv/api
  - CATALOGUE_USERNAME=your_username
  - CATALOGUE_PASSWORD=your_password

Option 2: Manual Installation

  1. Install dependencies:
npm install
  1. Build the project:
npm run build
  1. (Optional) Configure environment variables:
# Create a .env file in the project root
PORT=3001
BASE_URL=https://galliwasp.eea.europa.eu/catalogue/srv/api
MAX_SEARCH_RESULTS=20

# Authentication for write operations (duplicate, update)
CATALOGUE_USERNAME=your_username
CATALOGUE_PASSWORD='your_password'

# Rate limiting
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100

Note: For passwords containing special characters ($, #, etc.), wrap the value in single quotes.

Usage

Streamable HTTP Server (MCP Transport)

The server uses the official MCP Streamable HTTP transport with Server-Sent Events (SSE).

Start the server:

npm start

The server will start on port 3001 (or the port specified in the PORT environment variable).

Available endpoints:

  • GET http://localhost:3001/health - Health check endpoint
  • GET http://localhost:3001/info - Server information
  • POST http://localhost:3001/upload - Upload file to basket (multipart/form-data)
  • GET http://localhost:3001/uploads/:filename - Retrieve uploaded file
  • POST http://localhost:3001/ - MCP message endpoint (standard JSON-RPC)
  • GET http://localhost:3001/ - MCP SSE stream endpoint (for server-initiated messages)

Testing the server:

# Check if server is running
curl http://localhost:3001/health

# Should return: {"status":"ok","service":"eea-geonetwork-mcp"}

# Upload a file to the basket
curl -X POST http://localhost:3001/upload -F "file=@myfile.pdf"

# Returns: {"success":true,"file":{"url":"http://localhost:3001/uploads/myfile-123456789.pdf",...}}

Upload Basket

The server includes a built-in upload basket for temporary file storage. This allows you to upload files first, then attach them to metadata records using the URL.

Swagger UI (Easiest Method):

  1. Open http://localhost:3001/api-docs in your browser
  2. Expand the "POST /upload" endpoint
  3. Click "Try it out"
  4. Select a file and click "Execute"
  5. Copy the returned URL from the response
  6. Use this URL with the upload_resource_from_url MCP tool

How it works:

  1. Upload a file via POST /upload endpoint (or use Swagger UI)
  2. Server stores the file in the uploads/ directory
  3. Server returns a URL: http://localhost:3001/uploads/filename
  4. Use this URL with `upload_

Tools (5)

search_recordsSearch for metadata records with full Elasticsearch query support
search_by_extentFind records by geographic bounding box
get_recordRetrieve detailed metadata for a specific record by UUID
update_recordUpdate any field using XPath
upload_file_to_recordUpload a file from local filesystem directly to a metadata record

Environment Variables

BASE_URLrequiredThe GeoNetwork API endpoint URL
CATALOGUE_USERNAMEUsername for authenticated write operations
CATALOGUE_PASSWORDPassword for authenticated write operations
PORTPort for the MCP server

Configuration

claude_desktop_config.json
{"mcpServers": {"eea-geonetwork": {"command": "node", "args": ["/path/to/eea-geonetwork-mcp/build/index.js"], "env": {"BASE_URL": "https://galliwasp.eea.europa.eu/catalogue/srv/api"}}}}

Try it

Search for all metadata records related to air quality in Europe.
Find geographic records within the bounding box of the Mediterranean region.
Get the detailed metadata for the record with UUID 12345-abcde.
Update the title of the record with UUID 67890-fghij to 'Updated Environmental Report 2024'.

Frequently Asked Questions

What are the key features of EEA GeoNetwork?

Full Elasticsearch query support for metadata discovery. Geographic bounding box spatial searching. Authenticated record updates using XPath. Built-in upload basket for managing file attachments. Support for multiple metadata export formats.

What can I use EEA GeoNetwork for?

Automating the update of metadata records for environmental datasets. Discovering spatial data layers for GIS analysis projects. Managing and auditing metadata attachments for EEA catalogue entries. Exporting metadata records into standardized formats for reporting.

How do I install EEA GeoNetwork?

Install EEA GeoNetwork by running: docker-compose up -d

What MCP clients work with EEA GeoNetwork?

EEA GeoNetwork works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep EEA GeoNetwork docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Need the old visual installer? Open Conare IDE.
Open Conare