Skip to main content

CDS MCP Server

A Model Context Protocol (MCP) server for integrating with CERN Document Server (CDS), built on the Invenio digital library framework.

Features

  • Search CDS documents with filters for experiments, document types, and date ranges
  • Get detailed document information including full abstracts, authors, and metadata
  • Access document files with download URLs and file metadata
  • Browse experiments and document types for better search filtering

Installation

Requires Python 3.10+.

Quickstart (recommended)

No installation needed, just use uvx to run directly:

uvx cds-mcp

From PyPI

pip install cds-mcp

From source

git clone https://github.com/MohamedElashri/cds-mcp
cd cds-mcp
uv sync

Usage

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "cds": {
      "command": "uvx",
      "args": ["cds-mcp"],
      "env": {
        "CERN_CLIENT_ID": "your-client-id",
        "CERN_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

For public access only, omit the authentication environment variables:

{
  "mcpServers": {
    "cds": {
      "command": "uvx",
      "args": ["cds-mcp"]
    }
  }
}

Note for macOS users: If you see an error about uvx not being found, you may need to provide the absolute path. Claude Desktop does not support ~ or $HOME expansion.

  1. Run which uvx in your terminal to find the path (e.g., /Users/yourusername/.local/bin/uvx).
  2. Use that absolute path in the command field:
"command": "/Users/yourusername/.local/bin/uvx"

Claude Code

Project-specific (default) — installs in the current directory's configuration:

claude mcp add cds-mcp -- uvx cds-mcp

Global — installs for your user account (works in all projects):

claude mcp add --scope user cds-mcp -- uvx cds-mcp

To include authentication, add the CERN credentials before the --:

# Example: Global installation with CERN SSO authentication
claude mcp add --scope user -e CERN_CLIENT_ID=your_client_id -e CERN_CLIENT_SECRET=your_client_secret cds-mcp -- uvx cds-mcp

Manual Configuration — you can also manually edit your global config at ~/.claude.json (on Linux/macOS) or %APPDATA%\Claude\claude.json (on Windows):

{
  "mcpServers": {
    "cds": {
      "command": "uvx",
      "args": ["cds-mcp"],
      "env": {
        "CERN_CLIENT_ID": "your_client_id",
        "CERN_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

GitHub Copilot

Add to your VS Code settings.json:

{
  "mcp": {
    "servers": {
      "cds": {
        "command": "uvx",
        "args": ["cds-mcp"],
        "env": {
          "CERN_CLIENT_ID": "your_client_id",
          "CERN_CLIENT_SECRET": "your_client_secret"
        }
      }
    }
  }
}

Or add a .vscode/mcp.json to your project:

{
  "servers": {
    "cds": {
      "command": "uvx",
      "args": ["cds-mcp"],
      "env": {
        "CERN_CLIENT_ID": "your_client_id",
        "CERN_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

Gemini CLI

Add to your ~/.gemini/settings.json:

{
  "mcpServers": {
    "cds": {
      "command": "uvx",
      "args": ["cds-mcp"],
      "env": {
        "CERN_CLIENT_ID": "your_client_id",
        "CERN_CLIENT_SECRET": "your_client_secret"
      }
    }
  }
}

Direct usage

# Run with uvx (no install needed)
uvx cds-mcp

# Or if installed from PyPI
cds-mcp

# Or from source
uv run cds-mcp

# With CERN SSO authentication
CERN_CLIENT_ID=your_client_id CERN_CLIENT_SECRET=your_client_secret uvx cds-mcp

Authentication & Access Control

CERN SSO Authentication (Recommended)

The CDS MCP server now supports proper CERN SSO authentication using OAuth2/OIDC for accessing restricted content.

Setup Instructions

  1. Register your application in the CERN Application Portal:

    • Create a new OIDC application
    • Select "Confidential Client" type
    • Note your Client ID and Client Secret
  2. Configure authentication by setting environment variables:

    export CERN_CLIENT_ID="your-client-id"
    export CERN_CLIENT_SECRET="your-client-secret"
    
  3. Use with MCP clients - the server will automatically handle token acquisition and refresh.

Supported Access Levels

  • Public Records: Available without authentication
  • Restricted Collections: Requires CERN SSO authentication and appropriate experiment membership
    • ATLAS: Internal Notes, Communications, Conference Slides
    • CMS: Internal Notes, Analysis Notes
    • LHCb: Internal Notes, Analysis Notes
    • ALICE: Internal Notes, Analysis Notes

Tools

  1. search_cds_documents: Search CDS with various filters
  2. get_cds_document_details: Get detailed information about a specific document
  3. get_cds_document_files: Get file information and download URLs
  4. get_cds_experiments: List available CERN experiments for filtering
  5. get_cds_document_types: List available document types for filtering

Development

git clone https://github.com/MohamedElashri/cds-mcp
cd cds-mcp
uv sync
uv run python tests/test_integration.py  # Test real CDS API integration
uv run python tests/test_mcp_server.py   # Test MCP server functionality

License

MIT License - see LICENSE for details.

Metadata

Release files for cds-mcp 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for cds-mcp 0.1.2
File Size Uploaded
cds_mcp-0.1.2.tar.gz 23.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cds-mcp 0.1.2
File Interpreter ABI Platform
cds_mcp-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 40.5 kB

Release files / cds_mcp-0.1.2.tar.gz

Download URL cds_mcp-0.1.2.tar.gz
Size 23.6 kB
Tags Source
SHA-256 checksum
How to use checksums
7abeb18225434059392e2cecd348f673e34a96cae7311d3279f545a0ee38f979
BLAKE2b-256 checksum
How to use checksums
36a2bf60acfe40f4aaa087e821b2ee91ca61dd6bc55564b14046fc88a165846b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 9, 2026.

Transparency log

Release files / cds_mcp-0.1.2-py3-none-any.whl

Download URL cds_mcp-0.1.2-py3-none-any.whl
Size 16.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9ae48282c4145f66452d47a35c145fd0eb5269b855e6a75f257e61346c767d65
BLAKE2b-256 checksum
How to use checksums
dbc4f4fce87a4b288e022e31c690f2af993bade9506aead732dfbbc5a2f1fdd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 9, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page