Model Context Protocol server for CERN Document Server (CDS)
Project description
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.
- Run
which uvxin your terminal to find the path (e.g.,/Users/yourusername/.local/bin/uvx). - Use that absolute path in the
commandfield:
"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
-
Register your application in the CERN Application Portal:
- Create a new OIDC application
- Select "Confidential Client" type
- Note your
Client IDandClient Secret
-
Configure authentication by setting environment variables:
export CERN_CLIENT_ID="your-client-id" export CERN_CLIENT_SECRET="your-client-secret"
-
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
search_cds_documents: Search CDS with various filtersget_cds_document_details: Get detailed information about a specific documentget_cds_document_files: Get file information and download URLsget_cds_experiments: List available CERN experiments for filteringget_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 test_integration.py # Test real CDS API integration
uv run python test_mcp_server.py # Test MCP server functionality
License
MIT License - see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cds_mcp-0.1.1.tar.gz.
File metadata
- Download URL: cds_mcp-0.1.1.tar.gz
- Upload date:
- Size: 22.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a7aacdeefc7c11514bc5da8e7cf24ed6d702875a4e775af564f64644163b2b6
|
|
| MD5 |
27eb8ba0003a3600148c749d990ac485
|
|
| BLAKE2b-256 |
1bf71d418e279da8edd8f0fd58ae314b8beaa433f4dec75d38ecc73a9fb8d2b5
|
Provenance
The following attestation bundles were made for cds_mcp-0.1.1.tar.gz:
Publisher:
release.yml on MohamedElashri/cds-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cds_mcp-0.1.1.tar.gz -
Subject digest:
0a7aacdeefc7c11514bc5da8e7cf24ed6d702875a4e775af564f64644163b2b6 - Sigstore transparency entry: 1203493996
- Sigstore integration time:
-
Permalink:
MohamedElashri/cds-mcp@55fc7cb36d3d560075bf785f99a1fe66535247e0 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/MohamedElashri
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@55fc7cb36d3d560075bf785f99a1fe66535247e0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file cds_mcp-0.1.1-py3-none-any.whl.
File metadata
- Download URL: cds_mcp-0.1.1-py3-none-any.whl
- Upload date:
- Size: 15.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81530abb3e1d48296ffa98cf7fcf48d8ec4a3dea748f35a75c6e957b24385ea6
|
|
| MD5 |
409f64d22fe50eab2ef52d5858280a43
|
|
| BLAKE2b-256 |
37bc4d3f04a2ab10f7db3d2f43832f76cad045c05a3960e0b7956a115063a343
|
Provenance
The following attestation bundles were made for cds_mcp-0.1.1-py3-none-any.whl:
Publisher:
release.yml on MohamedElashri/cds-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cds_mcp-0.1.1-py3-none-any.whl -
Subject digest:
81530abb3e1d48296ffa98cf7fcf48d8ec4a3dea748f35a75c6e957b24385ea6 - Sigstore transparency entry: 1203493998
- Sigstore integration time:
-
Permalink:
MohamedElashri/cds-mcp@55fc7cb36d3d560075bf785f99a1fe66535247e0 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/MohamedElashri
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@55fc7cb36d3d560075bf785f99a1fe66535247e0 -
Trigger Event:
push
-
Statement type: