MCP Connector

Disambiguate Authors and Retrieve Academic Works

MCP server for OpenAlex author disambiguation and works retrieval, with three streamlined tools tuned for AI agent consumption.

Works with openalex

Maintainer of this project? Claim this page to edit the listing.


90
Spark score
out of 100
Updated 11 months ago
Version 4.8.2
Models
universal

Add to Favorites

Why it matters

Leverage the OpenAlex API to resolve author ambiguity and retrieve comprehensive academic research data. Optimized for AI agents, this asset simplifies complex author searches and provides structured data for analysis.

Outcomes

What it gets done

01

Perform advanced author disambiguation with ORCID integration.

02

Retrieve academic works with advanced filtering by publication year and type.

03

Analyze author affiliations and career transitions.

04

Extract citation metrics and impact data.

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/vb-openalex-org-mcp | bash

Capabilities

Tools your agent gets

autocomplete_authors

Retrieves multiple author candidates using the OpenAlex autocomplete API for intelligent disambiguation.

search_authors

Search for authors with simplified output for AI agents, including filtering by institution and top results.

retrieve_author_works

Retrieves works for a given author with advanced filtering capabilities, including publication year filtering.

Overview

OpenAlex.org MCP Server

An MCP server for OpenAlex-based author disambiguation and research retrieval, exposing three tools: ranked author-candidate autocomplete, filterable author search, and filterable author-works retrieval, all with streamlined output for AI agent consumption. Use when an AI agent needs to disambiguate an author across name variations or career transitions, or retrieve filtered publication and citation data. Requires an OPENALEX_MAILTO email for API access.

What it does

An MCP server for author disambiguation and academic research built on the OpenAlex.org API, purpose-designed with streamlined data structures for AI agent consumption rather than exposing OpenAlex's full raw API responses.

Three tools are documented. autocomplete_authors uses OpenAlex's autocomplete endpoint to return multiple ranked author candidates for a name, optionally scoped by a free-text context string (e.g. institution plus field) to disambiguate common names, with a configurable candidate limit (1-10, default 5); it responds in roughly 200ms and returns an institution hint, works count, citation count, and external ID (ORCID) per candidate - built specifically so an AI agent can pick the right match from institutional context rather than a single ambiguous result. search_authors runs a broader author search with the same streamlined output philosophy, filterable by institution, research topic, and country code, with a limit of 1-25 (default 20); results include ORCID, alternative display-name spellings, affiliation history with year ranges, citation count, h-index and i10-index, and top research concepts with relevance scores. retrieve_author_works fetches a given author's publications by OpenAlex author ID with enhanced filtering: result limit (1-50, default 20), ordering by date or citation count, publication-year filter, work-type filter (e.g. journal-article), institution filter, a retracted-works filter, and an open-access filter; output includes title, DOI, publication year, type, citation count, the full authorship list with institutions, publication venue, and open-access status.

git clone https://github.com/drAbreu/alex-mcp.git
cd alex-mcp
pip install -e .
export OPENALEX_MAILTO=your-email@domain.com

The server also documents integration patterns for OpenAI's Agents SDK (via MCPServerStdio) and multi-agent collaboration examples, such as building a co-author collaboration network by chaining search_authors into retrieve_author_works and aggregating the authorship lists returned.

When to use - and when NOT to

Use this connector when an AI agent needs to disambiguate an author name across career transitions or name variations, look up an author's affiliation and citation metrics, or retrieve and filter a researcher's publication history - especially when the ambiguity of common names makes a single-result search unreliable and ranked candidates with institutional hints are needed instead. It is not a general bibliographic search tool beyond OpenAlex's author-and-works scope, and it requires an email address configured via OPENALEX_MAILTO for OpenAlex's API courtesy policy.

Capabilities

Ranked author-candidate disambiguation via autocomplete; broader author search filterable by institution, topic, and country; author-works retrieval filterable by type, year, institution, retraction status, and open-access status; citation and h-index/i10-index metrics throughout; and configurable rate limiting (OPENALEX_RATE_PER_SEC, OPENALEX_RATE_PER_DAY) for respectful API usage.

How to install

Requires Python 3.10+, an MCP-compatible client (e.g. Claude Desktop), and an email address for OPENALEX_MAILTO. Clone the repository, create a virtual environment, pip install -e ., set OPENALEX_MAILTO, then run ./run_alex_mcp.sh or the installed alex-mcp CLI - or launch directly via uvx --from git+https://github.com/drAbreu/alex-mcp.git@4.1.0 alex-mcp. Register it with Claude Desktop through an mcpServers entry pointing at the run script with the OPENALEX_MAILTO environment variable set.

Who it's for

Academic researchers and AI agent developers building research-assistant workflows that need reliable author disambiguation across name variations and career transitions, plus structured access to OpenAlex's author and works data for citation analysis or collaboration-network mapping.

Source README
OpenAlex MCP Server

OpenAlex Author Disambiguation MCP Server

MCP
Python
OpenAlex
License
Optimized

A streamlined Model Context Protocol (MCP) server for author disambiguation and academic research using the OpenAlex.org API. Specifically designed for AI agents with optimized data structures and enhanced functionality.


๐ŸŽฏ Key Features

๐Ÿ” Core Capabilities

  • Advanced Author Disambiguation: Handles complex career transitions and name variations
  • Institution Resolution: Current and past affiliations with transition tracking
  • Academic Work Retrieval: Journal articles, letters, and research papers
  • Citation Analysis: H-index, citation counts, and impact metrics
  • ORCID Integration: Highest accuracy matching with ORCID identifiers

๐Ÿš€ AI Agent Optimized

  • Streamlined Data: Focused on essential information for disambiguation
  • Fast Processing: Optimized data structures for rapid analysis
  • Smart Filtering: Enhanced filtering options for targeted queries
  • Clean Output: Structured responses optimized for AI reasoning

๐Ÿค– Agent Integration

  • Multiple Candidates: Ranked results for automated decision-making
  • Structured Responses: Clean, parseable output optimized for LLMs
  • Error Handling: Graceful degradation with informative messages
  • Enhanced Filtering: Journal-only, citation thresholds, and temporal filters

๐Ÿ›๏ธ Professional Grade

  • MCP Best Practices: Built with FastMCP following official guidelines
  • Tool Annotations: Proper MCP tool annotations for optimal client integration
  • Resource Management: Efficient HTTP client management and cleanup
  • Rate Limiting: Respectful API usage with proper delays

๐Ÿš€ Quick Start

Prerequisites

  • Python 3.10 or higher
  • MCP-compatible client (e.g., Claude Desktop)
  • Email address (for OpenAlex API courtesy)

Installation

For detailed installation instructions, see INSTALL.md.

  1. Clone the repository:

    git clone https://github.com/drAbreu/alex-mcp.git
    cd alex-mcp
    
  2. Create a virtual environment:

    python3 -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    
  3. Install the package:

    pip install -e .
    
  4. Configure environment:

    export OPENALEX_MAILTO=your-email@domain.com
    
  5. Run the server:

    ./run_alex_mcp.sh
    # Or, if installed as a CLI tool:
    alex-mcp
    

โš™๏ธ MCP Configuration

Claude Desktop Configuration

Add to your Claude Desktop configuration file:

{
  "mcpServers": {
    "alex-mcp": {
      "command": "/path/to/alex-mcp/run_alex_mcp.sh",
      "env": {
        "OPENALEX_MAILTO": "your-email@domain.com"
      }
    }
  }
}

Replace /path/to/alex-mcp with the actual path to the repository on your system.


๐Ÿค– Using with AI Agents

OpenAI Agents Integration

You can load this MCP server in your OpenAI agent workflow using the agents.mcp.MCPServerStdio interface:

from agents.mcp import MCPServerStdio

async with MCPServerStdio(
    name="OpenAlex MCP For Author disambiguation and works",
    cache_tools_list=True,
    params={
        "command": "uvx",
        "args": [
            "--from", "git+https://github.com/drAbreu/alex-mcp.git@4.1.0",
            "alex-mcp"
        ],
        "env": {
            "OPENALEX_MAILTO": "your-email@domain.com"
        }
    },
    client_session_timeout_seconds=10
) as alex_mcp:
    await alex_mcp.connect()
    tools = await alex_mcp.list_tools()
    print(f"Available tools: {[tool.name for tool in tools]}")

Academic Research Agent Integration

This MCP server is specifically optimized for academic research workflows:

# Optimized for academic research workflows
from alex_agent import run_author_research

# Enhanced functionality with streamlined data
result = await run_author_research(
    "Find J. Abreu at EMBO with recent publications"
)

# Clean, structured output for AI processing
print(f"Success: {result['workflow_metadata']['success']}")
print(f"Quality: {result['research_result']['metadata']['result_analysis']['quality_score']}/100")

Direct Launch with uvx

# Standard launch
uvx --from git+https://github.com/drAbreu/alex-mcp.git@4.1.0 alex-mcp

# With environment variables
OPENALEX_MAILTO=your-email@domain.com uvx --from git+https://github.com/drAbreu/alex-mcp.git@4.1.0 alex-mcp

๐Ÿ› ๏ธ Available Tools

1. autocomplete_authors โญ NEW

Get multiple author candidates using OpenAlex autocomplete API for intelligent disambiguation.

Parameters:

  • name (required): Author name to search (e.g., "James Briscoe", "M. Ralser")
  • context (optional): Context for disambiguation (e.g., "Francis Crick Institute developmental biology")
  • limit (optional): Maximum candidates (1-10, default: 5)

Key Features:

  • โšก Fast: ~200ms response time
  • ๐ŸŽฏ Smart: Multiple candidates with institutional hints
  • ๐Ÿง  AI-Ready: Perfect for context-based selection
  • ๐Ÿ“Š Rich: Works count, citations, institution info

Streamlined Output:

{
  "query": "James Briscoe",
  "context": "Francis Crick Institute",
  "total_candidates": 3,
  "candidates": [
    {
      "openalex_id": "https://openalex.org/A5019391436",
      "display_name": "James Briscoe",
      "institution_hint": "The Francis Crick Institute, UK",
      "works_count": 415,
      "cited_by_count": 24623,
      "external_id": "https://orcid.org/0000-0002-1020-5240"
    }
  ]
}

Usage Pattern:

# Get multiple candidates for disambiguation
candidates = await autocomplete_authors(
    "James Briscoe", 
    context="Francis Crick Institute developmental biology"
)

# AI selects best match based on institutional context
# Much more accurate than single search result!

2. search_authors

Search for authors with streamlined output for AI agents.

Parameters:

  • name (required): Author name to search
  • institution (optional): Institution name filter
  • topic (optional): Research topic filter
  • country_code (optional): Country code filter (e.g., "US", "DE")
  • limit (optional): Maximum results (1-25, default: 20)

Streamlined Output:

{
  "query": "J. Abreu",
  "total_count": 3,
  "results": [
    {
      "id": "https://openalex.org/A123456789",
      "display_name": "Jorge Abreu-Vicente",
      "orcid": "https://orcid.org/0000-0000-0000-0000",
      "display_name_alternatives": ["J. Abreu-Vicente", "Jorge Abreu Vicente"],
      "affiliations": [
        {
          "institution": {
            "display_name": "European Molecular Biology Organization",
            "country_code": "DE"
          },
          "years": [2023, 2024, 2025]
        }
      ],
      "cited_by_count": 316,
      "works_count": 25,
      "summary_stats": {
        "h_index": 9,
        "i10_index": 5
      },
      "x_concepts": [
        {
          "display_name": "Astrophysics",
          "score": 0.8
        },
        {
          "display_name": "Machine Learning", 
          "score": 0.6
        }
      ]
    }
  ]
}

Features: Clean structure optimized for AI reasoning and disambiguation


2. retrieve_author_works

Retrieve works for a given author with enhanced filtering capabilities.

Parameters:

  • author_id (required): OpenAlex author ID
  • limit (optional): Maximum results (1-50, default: 20)
  • order_by (optional): "date" or "citations" (default: "date")
  • publication_year (optional): Filter by specific year
  • type (optional): Work type filter (e.g., "journal-article")
  • authorships_institutions_id (optional): Filter by institution
  • is_retracted (optional): Filter retracted works
  • open_access_is_oa (optional): Filter by open access status

Enhanced Output:

{
  "author_id": "https://openalex.org/A123456789",
  "total_count": 25,
  "results": [
    {
      "id": "https://openalex.org/W123456789",
      "title": "A platform for the biomedical application of large language models",
      "doi": "10.1038/s41587-024-02534-3",
      "publication_year": 2025,
      "type": "journal-article",
      "cited_by_count": 42,
      "authorships": [
        {
          "author": {
            "display_name": "Jorge Abreu-Vicente"
          },
          "institutions": [
            {
              "display_name": "European Molecular Biology Organization"
            }
          ]
        }
      ],
      "locations": [
        {
          "source": {
            "display_name": "Nature Biotechnology",
            "type": "journal"
          }
        }
      ],
      "open_access": {
        "is_oa": true
      },
      "primary_topic": {
        "display_name": "Biomedical Engineering"
      }
    }
  ]
}

Features: Comprehensive work data with flexible filtering for targeted queries


๐Ÿ“Š Data Optimization

Focused Information Architecture

This MCP server provides focused, structured data specifically designed for AI agent consumption:

Author Data Features

  • Identity Resolution: Names, ORCID, alternatives for disambiguation
  • Affiliation Tracking: Current and historical institutional connections
  • Impact Metrics: Citation counts, h-index, and scholarly impact
  • Research Context: Fields, concepts, and domain expertise
  • Career Analysis: Temporal affiliation changes and transitions

Work Data Features

  • Publication Metadata: Title, DOI, venue, and publication details
  • Impact Assessment: Citation counts and scholarly influence
  • Access Information: Open access status and availability
  • Authorship Details: Complete author lists and institutional affiliations
  • Research Classification: Topics, concepts, and domain categorization

Enhanced Filtering

# Target high-impact journal articles
works = await retrieve_author_works(
    author_id="https://openalex.org/A123456789",
    type="journal-article",      # Focus on journal publications
    open_access_is_oa=True,      # Open access only
    order_by="citations",        # Most cited first
    limit=15
)

# Career transition analysis
authors = await search_authors(
    name="J. Abreu",
    institution="EMBO",          # Current institution
    topic="Machine Learning",    # Research focus
    limit=10
)

๐Ÿงช Example Usage

Author Disambiguation

from alex_mcp.server import search_authors_core

# Comprehensive author search
results = search_authors_core(
    name="J Abreu Vicente",
    institution="EMBO",
    topic="Machine Learning",
    limit=20
)

print(f"Found {results.total_count} candidates")
for author in results.results:
    print(f"- {author.display_name}")
    if author.affiliations:
        current_inst = author.affiliations[0].institution.display_name
        print(f"  Institution: {current_inst}")
    print(f"  Metrics: {author.cited_by_count} citations, h-index {author.summary_stats.h_index}")
    if author.x_concepts:
        fields = [c.display_name for c in author.x_concepts[:3]]
        print(f"  Research: {', '.join(fields)}")

Academic Work Analysis

from alex_mcp.server import retrieve_author_works_core

# Comprehensive work retrieval
works = retrieve_author_works_core(
    author_id="https://openalex.org/A5058921480",
    type="journal-article",      # Academic focus
    order_by="citations",        # Impact-based ordering
    limit=20
)

print(f"Found {works.total_count} publications")
for work in works.results:
    print(f"- {work.title}")
    if work.locations:
        journal = work.locations[0].source.display_name
        print(f"  Published in: {journal} ({work.publication_year})")
    print(f"  Impact: {work.cited_by_count} citations")
    if work.open_access and work.open_access.is_oa:
        print("  โœ“ Open Access")

Institution and Field Analysis

# Analyze career transitions
def analyze_career_path(author_result):
    affiliations = author_result.affiliations
    if len(affiliations) > 1:
        print("Career path:")
        for aff in sorted(affiliations, key=lambda x: min(x.years)):
            years = f"{min(aff.years)}-{max(aff.years)}"
            print(f"  {years}: {aff.institution.display_name}")
    
    # Research evolution
    if author_result.x_concepts:
        print("Research areas:")
        for concept in author_result.x_concepts[:5]:
            print(f"  {concept.display_name} (score: {concept.score:.2f})")

# Usage
results = search_authors_core("Jorge Abreu Vicente")
if results.results:
    analyze_career_path(results.results[0])

๐Ÿ”ง Configuration Options

Environment Variables

# Required
export OPENALEX_MAILTO=your-email@domain.com

# Optional settings
export OPENALEX_MAX_AUTHORS=100             # Maximum authors per query
export OPENALEX_USER_AGENT=research-agent-v1.0
export ALEX_MCP_VERSION=4.1.0

# Rate limiting (respectful usage)
export OPENALEX_RATE_PER_SEC=10
export OPENALEX_RATE_PER_DAY=100000

Performance Tuning

# For comprehensive research applications
config = {
    "max_authors_per_query": 25,     # Detailed author analysis
    "max_works_per_author": 50,      # Complete publication history
    "enable_all_filters": True,      # Full filtering capabilities
    "detailed_affiliations": True,   # Complete institutional data
    "research_concepts": True        # Detailed concept analysis
}

๐Ÿง‘โ€๐Ÿ’ป Development & Testing

Project Structure

alex-mcp/
โ”œโ”€โ”€ src/alex_mcp/
โ”‚   โ”œโ”€โ”€ server.py              # Main MCP server
โ”‚   โ”œโ”€โ”€ data_objects.py        # Data models and structures
โ”‚   โ””โ”€โ”€ utils.py               # Utility functions
โ”œโ”€โ”€ examples/
โ”‚   โ”œโ”€โ”€ basic_usage.py         # Simple examples
โ”‚   โ”œโ”€โ”€ advanced_queries.py    # Complex query examples
โ”‚   โ””โ”€โ”€ integration_demo.py    # AI agent integration
โ”œโ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ test_server.py         # Server functionality tests
โ”‚   โ””โ”€โ”€ test_integration.py    # Integration tests
โ””โ”€โ”€ docs/
    โ””โ”€โ”€ api_reference.md       # Detailed API documentation

Running Tests

# Install test dependencies
pip install -e ".[test]"

# Run functionality tests
pytest tests/test_server.py -v

# Test with real queries
python examples/basic_usage.py

# Test AI agent integration
python examples/integration_demo.py

Development Examples

# Test author disambiguation
python examples/basic_usage.py --query "J. Abreu" --institution "EMBO"

# Test work retrieval
python examples/advanced_queries.py --author-id "A123456789" --type "journal-article"

# Test integration patterns
python examples/integration_demo.py --workflow "career-analysis"

๐Ÿ“ˆ Integration Examples

Academic Research Workflows

Perfect integration with AI-powered research analysis:

# Enhanced academic research agent
from alex_agent import AcademicResearchAgent

agent = AcademicResearchAgent(
    mcp_servers=[alex_mcp],  # Streamlined data processing
    model="gpt-4.1-2025-04-14"
)

# Complex research queries with structured data
result = await agent.research_author(
    "Find J. Abreu at EMBO with machine learning publications"
)

# Rich, structured output for AI reasoning
print(f"Quality Score: {result.quality_score}/100")
print(f"Author disambiguation: {result.confidence}")
print(f"Research fields: {result.research_domains}")

Multi-Agent Systems

# Collaborative research analysis
async def research_collaboration_network(seed_author):
    # Find primary author
    authors = await alex_mcp.search_authors(seed_author)
    primary = authors['results'][0]
    
    # Get their works
    works = await alex_mcp.retrieve_author_works(
        primary['id'], 
        type="journal-article"
    )
    
    # Analyze co-authors and build network
    collaborators = set()
    for work in works['results']:
        for authorship in work.get('authorships', []):
            collaborators.add(authorship['author']['display_name'])
    
    return {
        'primary_author': primary,
        'publication_count': len(works['results']),
        'collaborator_network': list(collaborators),
        'research_impact': sum(w['cited_by_count'] for w in works['results'])
    }

๐Ÿค Contributing

We welcome contributions to improve functionality and add new features:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/enhanced-filtering
  3. Add tests: Ensure your changes maintain data quality and structure
  4. Submit a pull request: Include examples and documentation

Development Priorities

  • Enhanced filtering capabilities
  • Additional data enrichment
  • Performance optimizations
  • Integration examples
  • Documentation improvements

๐Ÿ“„ License

This project is licensed under the MIT License. See LICENSE for details.


๐ŸŒ Links

FAQ

Common questions

Discussion

Questions & comments ยท 0

Sign In Sign in to leave a comment.