OpenAIRE MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OpenAIRE MCP ServerFind publications citing 10.21338/NSD-ESS8-2016"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OpenAIRE MCP Server
MCP (Model Context Protocol) server for exploring the OpenAIRE Research Graph and ScholExplorer citation index. Enables AI assistants like Claude to discover citation relationships, find related research outputs, and retrieve comprehensive metadata for publications, datasets, and software.
Table of Contents
Related MCP server: mcp-openaire
Overview
This MCP server provides AI assistants with access to two powerful research discovery APIs:
ScholExplorer: Citation index with 3.6 billion scholarly relationships linking publications, datasets, and software
OpenAIRE Research Graph: Comprehensive metadata aggregator covering millions of research outputs with full abstracts, author affiliations, citation metrics, and funding information
Features
๐ Find all research outputs citing a specific DOI (publications, datasets, software)
๐ Retrieve comprehensive metadata from OpenAIRE Research Graph
๐ค Seamless integration with Claude Desktop and other MCP clients
๐ณ Docker containerization support
๐ Structured JSON logging
โ๏ธ Configuration via environment variables (12-factor app)
Available Tools
find_related_research - Find publications, datasets, and software citing a given DOI
get_metadata - Get detailed metadata for research products from OpenAIRE Graph
Installation
Requirements
Python 3.10 or higher
pip
Install from Source
# Clone the repository
git clone https://github.com/cessda/cessda.ai.mcp.openaire.git
cd cessda.ai.mcp.openaire
# Install in development mode
pip install -e .Verify Installation
mcp-openaire --helpConfiguration
The server follows the 12-factor app methodology and is configured via environment variables.
Environment Variables
Variable | Default | Description |
|
| ScholExplorer API base URL |
|
| OpenAIRE Graph API base URL |
|
| API request timeout (seconds) |
|
| Maximum retry attempts |
|
| Logging level (INFO, WARN, ERROR) |
|
| Default citation result limit |
|
| Maximum citation result limit |
|
| Results per API page request |
Configuration File (Optional)
Create a .env file in your working directory:
OPENAIRE_API_TIMEOUT=60
OPENAIRE_LOG_LEVEL=INFO
OPENAIRE_DEFAULT_LIMIT=100Usage
Claude Desktop Setup
Locate your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Add the MCP server configuration:
{
"mcpServers": {
"openaire": {
"command": "python",
"args": ["-m", "mcp_openaire.server"],
"env": {
"OPENAIRE_LOG_LEVEL": "INFO"
}
}
}
}Or if installed via pip:
{
"mcpServers": {
"openaire": {
"command": "mcp-openaire"
}
}
}Restart Claude Desktop
Verify the server is connected - Look for the MCP icon or check available tools
Available Tools
1. find_related_research
Find publications, datasets, and software that cite a given DOI.
Parameters:
doi(required): DOI to find citations for (e.g., "10.21338/NSD-ESS8-2016")limit(optional): Max results (1-1000, default: 200)
Returns: Citation links from ScholExplorer with:
Total citations found
Array of citing objects with titles, authors, DOIs, publication dates
Relationship types (cites, references)
Object types (publication, dataset, software)
Link providers (OpenCitations, Crossref, DataCite)
2. get_metadata
Get comprehensive metadata for a research product from OpenAIRE Research Graph.
Parameters:
identifier(required): DOI or OpenAIRE ID (e.g., "10.2139/ssrn.3991520")
Returns: Enriched metadata including:
Full title and abstract
Complete author list with affiliations and ORCID IDs
Publication date and publisher
Citation metrics
Access rights and open access status
Funding information
Subject classifications
Access URLs
Example Prompts
Try these prompts in Claude Desktop:
Find citations for a dataset:
"Find all publications citing the European Social Survey dataset 10.21338/NSD-ESS8-2016"
Discover related research:
"Show me the first 50 citations for DOI 10.2139/ssrn.3991520"
Get detailed metadata:
"Get me the full metadata for DOI 10.21338/NSD-ESS8-2016 including abstract and authors"
Explore citation network:
"Find all research citing dataset 10.5281/zenodo.1234567 and show me the top 10 by date"
Combined workflow:
"Find datasets in CESSDA about climate change, then for the first result, find all publications that cite it and get metadata for the most recent one"
Development
Setup Development Environment
# Clone repository
git clone https://github.com/cessda/cessda.ai.mcp.openaire.git
cd cessda.ai.mcp.openaire
# Install with development dependencies
pip install -e ".[dev]"Project Structure
mcp-openaire/
โโโ LICENSE.txt # Apache 2.0 license
โโโ README.md # This file
โโโ pyproject.toml # Python package configuration
โโโ Dockerfile # Container image (STDIO)
โโโ Dockerfile.http # Container image (HTTP/SSE)
โโโ docker-compose.yml # Docker Compose configuration
โโโ src/
โโโ mcp_openaire/
โโโ __init__.py # Package initialization
โโโ server.py # FastMCP STDIO server
โโโ server_http.py # FastMCP HTTP/SSE server
โโโ tools.py # API integration logic
โโโ config.py # Environment configuration
โโโ logging_config.py # Structured JSON loggingCode Standards
Style: PEP 8 (enforced via
blackandruff)Type Hints: Required for all public functions
Documentation: Docstrings for all modules, classes, and functions
Logging: Structured JSON to stdout
Configuration: Environment variables only (no hardcoded values)
Versioning: Semantic versioning (MAJOR.MINOR.PATCH)
Testing
# Run API integration tests
python test_api.py
# Format code
black src/
# Lint code
ruff check src/Operations
Running in Docker
# Build image (STDIO mode)
docker build -t mcp-openaire:0.1.0 .
# Run container (STDIO mode)
docker run -i mcp-openaire:0.1.0
# Build HTTP/SSE image
docker build -f Dockerfile.http -t mcp-openaire-http:0.1.0 .
# Run HTTP server
docker run -d -p 8001:8000 mcp-openaire-http:0.1.0
# Using Docker Compose
docker compose up -d
docker compose logs -f
docker compose downLogging
The server outputs structured JSON logs to stdout:
{
"timestamp": "2025-01-15T10:30:45.123456Z",
"level": "INFO",
"message": "ScholExplorer search completed",
"logger": "mcp_openaire",
"doi": "10.21338/NSD-ESS8-2016",
"total_available": 55,
"results_returned": 55
}Log Levels:
INFO: Informational messages (API requests, results)WARN: Warnings requiring attention (validation issues, limits exceeded)ERROR: Errors requiring investigation (API failures, exceptions)
Monitoring
Monitor the server using:
JSON log aggregation (ELK, Splunk, etc.)
Check for
ERRORandWARNlevel messagesTrack API response times and failure rates
Monitor citation search patterns
Troubleshooting
Issue: Server not appearing in Claude Desktop
Verify configuration file path and JSON syntax
Check server installation:
which mcp-openaireReview Claude Desktop logs for errors
Restart Claude Desktop after configuration changes
Issue: API timeouts
Increase
OPENAIRE_API_TIMEOUTenvironment variableCheck network connectivity to OpenAIRE APIs
Review structured logs for timeout patterns
Reduce
OPENAIRE_DEFAULT_LIMITfor faster responses
Issue: No citations found
Verify the DOI is correct and exists in ScholExplorer
Not all DOIs have citations yet (especially new publications)
Check that the DOI format is correct (starts with "10.")
Try a well-known DOI like "10.21338/NSD-ESS8-2016" to test connectivity
Issue: Metadata not found
Some DOIs may not be in OpenAIRE Graph yet
Try searching ScholExplorer first to get an OpenAIRE ID
Check the identifier format (DOI should start with "10.")
Versioning
This project uses semantic versioning:
MAJOR: Breaking changes to API or configuration
MINOR: New features, backward compatible
PATCH: Bug fixes, backward compatible
Current version: 0.1.0
License
Copyright ยฉ 2025 CESSDA ERIC
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
See LICENSE.txt for full license text.
Links
Contributing
Contributions are welcome! Please open an issue or pull request.
Available Tools
2 toolsget_metadataA
Get comprehensive metadata for a research product from OpenAIRE Research Graph.
This tool retrieves detailed metadata from the OpenAIRE Research Graph, which aggregates information from thousands of repositories worldwide. The Graph provides enriched metadata including abstracts, full author information with institutional affiliations, citation metrics, access rights, and funding details.
IMPORTANT: This tool requires an OpenAIRE dedup ID, not a DOI.
Workflow to get metadata:
First use find_related_research() to find citations for a DOI
Extract the OpenAIRE ID from the results (look for IDScheme: 'openaireIdentifier')
Use this tool with that OpenAIRE ID to get full metadata
Use this tool when you want to:
Get the full abstract and description of a research output
See complete author information with affiliations and ORCID IDs
Check access rights and find open access versions
View citation metrics and impact indicators
Discover funding information and project connections
| Name | Required | Description | Default |
|---|---|---|---|
| openaire_id | Yes | OpenAIRE dedup identifier (e.g., "doi_________::54b6bf0019fbdb3682539bcff4d0ff56") Extract this from ScholExplorer (find_related_research) results at: result['links'][i]['source']['Identifier'] where IDScheme == 'openaireIdentifier' |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description details what data is retrieved but does not explicitly state that the tool is read-only or mention any behavioral traits like rate limits, authentication, or side effects. It lacks disclosure about whether the operation is safe or destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: summary, important note, workflow, and use cases. Every sentence adds value, no redundancy. It is front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description appropriately omits return value details but covers all needed information for tool selection: what it does, how to use it, and prerequisites. It completes the picture for the user.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with only one parameter 'openaire_id'. The description adds significant value beyond schema by explaining the parameter format and giving an extraction workflow from find_related_research results, including an example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves comprehensive metadata from OpenAIRE Research Graph, listing specific use cases like getting abstracts, author information, access rights, etc. It distinguishes itself from the sibling tool 'find_related_research' by noting that it requires an OpenAIRE ID, not a DOI.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit workflow steps: first use find_related_research to get citations, extract OpenAIRE ID, then use this tool. It also lists when to use this tool (for abstracts, authors, etc.), implying when not to use it (when only need citations).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.1.0- First observed
find_related_research - First observed
get_metadata
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: find_related_research discovers citations for a DOI, while get_metadata retrieves detailed metadata using an OpenAIRE dedup ID. The workflow described eliminates any ambiguity.
Both tools use a consistent verb_noun pattern in snake_case: find_related_research and get_metadata. The naming is clear and predictable.
With only two tools, the server feels thin for a domain like OpenAIRE, which could encompass searching by various criteria. The tools cover a specific workflow but the low count borders on inadequate for broader usage.
The tools handle citation discovery and metadata retrieval, but lack direct search by other attributes (e.g., author, title). The surface is limited to a narrow workflow, missing common functions like direct querying.
Maintenance
Related MCP Connectors
Scholarly search: OpenAlex, Crossref, arXiv, OpenCitations and PubMed in one endpoint.
Catch AI-fabricated citations (real DOI + fake title). Retraction, open-access, 10,000+ CSL styles.
Academic literature search, retrieval, and private library management on top of OpenAlex.
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables academic research through the OpenAlex API, allowing users to search for papers, authors, and institutions, retrieve citations, and fetch full-text content when available. Perfect for building intelligent research assistants that can explore academic literature and related works.87MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search and retrieve EU research outputs including publications, datasets, software, and funded projects from OpenAIRE.8 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to search and analyze OpenAlex scholarly database for OSINT research, including works, authors, institutions, funding, citations, and collaboration networks.MIT
- AlicenseAqualityCmaintenanceConnects AI agents to the OpenAlex scholarly database, enabling search and retrieval of works, authors, institutions, and sources via natural language.9MIT