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
- Install dependencies:
npm install
- Build the project:
npm run build
- (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 endpointGET http://localhost:3001/info- Server informationPOST http://localhost:3001/upload- Upload file to basket (multipart/form-data)GET http://localhost:3001/uploads/:filename- Retrieve uploaded filePOST 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):
- Open
http://localhost:3001/api-docsin your browser - Expand the "POST /upload" endpoint
- Click "Try it out"
- Select a file and click "Execute"
- Copy the returned URL from the response
- Use this URL with the
upload_resource_from_urlMCP tool
How it works:
- Upload a file via
POST /uploadendpoint (or use Swagger UI) - Server stores the file in the
uploads/directory - Server returns a URL:
http://localhost:3001/uploads/filename - Use this URL with `upload_
Tools (5)
search_recordsSearch for metadata records with full Elasticsearch query supportsearch_by_extentFind records by geographic bounding boxget_recordRetrieve detailed metadata for a specific record by UUIDupdate_recordUpdate any field using XPathupload_file_to_recordUpload a file from local filesystem directly to a metadata recordEnvironment Variables
BASE_URLrequiredThe GeoNetwork API endpoint URLCATALOGUE_USERNAMEUsername for authenticated write operationsCATALOGUE_PASSWORDPassword for authenticated write operationsPORTPort for the MCP serverConfiguration
{"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"}}}}