ResearchMCP
# ResearchMCP - AI-Powered Research Paper Assistant
An MCP (Model Context Protocol) server that helps analyze academic papers by fetching research from OpenAlex's database of 250M+ papers.
## Features
- **Search Papers**: Search for academic papers by topic/keywords with advanced filtering
- **Extract Claims**: Automatically extract key findings and research claims from papers
- **Compare Papers**: Identify contradictions and consensus across multiple papers
- **Citation Analysis**: Explore citation networks to discover related research
- **Research Gap Finder**: Analyze multiple papers to identify gaps and future research opportunities
- Powered by OpenAlex API (millions of papers, no API key needed!)
## Tools
### `search_papers`
Search for academic papers on OpenAlex.
**Parameters:**
- `query` (string, required): Research topic or keywords
- `max_results` (int, optional): Maximum papers to return (default: 5)
- `year_from` (int, optional): Only papers from this year onwards
**Example:** "Search for papers on transformer models in NLP"
### `get_paper_abstract`
Get the full abstract for a specific paper.
**Parameters:**
- `paper_id` (string, required): OpenAlex paper ID from search results
**Example:** "Get abstract for paper W2964027837"
### `extract_claims`
Extract key claims and findings from a paper's abstract.
**Parameters:**
- `paper_id` (string, required): OpenAlex paper ID
**Returns:** Structured extraction of research questions, methodology, findings, and conclusions
**Example:** "Extract claims from paper W2964027837"
### `compare_papers`
Compare claims across multiple papers to find contradictions and consensus.
**Parameters:**
- `paper_ids` (string, required): Comma-separated list of paper IDs (2-5 papers)
**Returns:** Comparative analysis showing agreements, contradictions, and research gaps
**Example:** "Compare these papers: W2964027837, W3177828909, W2123456789"
### `get_citations`
Get citation network for a paper - see what cites it and what it references.
**Parameters:**
- `paper_id` (string, required): OpenAlex paper ID
- `direction` (string, optional): "cited_by", "references", or "both" (default: "both")
- `max_results` (int, optional): Maximum citations per direction (default: 10)
**Returns:** Lists of papers that cite this work and papers it references
**Example:** "Show me the citation network for W2964027837"
### `find_research_gaps`
Analyze multiple papers on a topic to identify research gaps and unanswered questions.
**Parameters:**
- `query` (string, required): Research topic to analyze
- `num_papers` (int, optional): Number of papers to analyze (default: 5, max: 10)
**Returns:** Comprehensive gap analysis including:
- Unanswered research questions
- Methodological limitations
- Understudied areas
- Contradictions requiring further investigation
- Emerging research opportunities
**Example:** "Find research gaps in transformer architecture optimization"
## Installation
### Option 1: Deploy to FastMCP Cloud (Recommended)
1. Clone the repository:
```bash
git clone https://github.com/YOUR_USERNAME/ResearchMCP.git
cd ResearchMCP
```
2. Deploy to FastMCP Cloud:
```bash
fastmcp deploy
```
3. Set the entrypoint as: `src/server.py`
4. Connect to Claude Desktop by adding to your MCP settings
### Option 2: Run Locally
```bash
# Clone the repository
git clone https://github.com/YOUR_USERNAME/ResearchMCP.git
cd ResearchMCP
# Install dependencies
uv sync
# Run the server
uv run src/server.py
```
## Usage with Claude Desktop
Once deployed or running locally, you can use natural language prompts in Claude Desktop:
**Search for papers:**
- "Search for recent papers on quantum computing"
- "Find papers about CRISPR gene editing from 2020 onwards"
**Analyze specific papers:**
- "Extract the key claims from paper W2964027837"
- "Get the abstract for paper W3177828909"
**Compare research:**
- "Compare these papers: W2964027837, W3177828909"
- "What do these papers agree and disagree on?"
**Explore citations:**
- "Show me what papers cite W2964027837"
- "What papers does W2964027837 reference?"
**Find research gaps:**
- "Find research gaps in transformer architecture optimization"
- "What are the unanswered questions in climate change modeling?"
## Architecture
ResearchMCP uses a clean separation of concerns architecture:
- **[server.py](src/server.py)**: MCP server that defines tools available to Claude Desktop
- **[paper_fetcher.py](src/tools/paper_fetcher.py)**: Worker class handling all OpenAlex API interactions
This design pattern ensures:
- Clean code organization
- Easy maintenance and testing
- Separation between tool orchestration and API logic
## Technology Stack
- **FastMCP**: Python framework for building MCP servers
- **OpenAlex API**: Access to 250M+ academic papers with no API key required
- **httpx**: Modern async-capable HTTP client
- **Python 3.12+**: Type hints and modern Python features
## Why MCP over RAG?
Traditional RAG systems require:
- Pre-indexing large document collections
- Vector database setup and maintenance
- Embedding generation costs
- Limited to pre-indexed documents
ResearchMCP with MCP:
- **Live access** to 250M+ papers without pre-indexing
- **No infrastructure** - no vector databases needed
- **Always up-to-date** - accesses latest published research
- **Cost-effective** - no embedding generation costs
- **Tool orchestration** - Claude intelligently chains multiple API calls
## Contributing
Contributions are welcome! Feel free to submit issues or pull requests.
## License
MIT License - feel free to use this project for your research needs!
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose with no overlap: compare_papers analyzes multiple papers for contradictions, extract_claims processes individual paper content, find_research_gaps identifies gaps across papers, get_citations handles citation networks, get_paper_abstract retrieves single paper metadata, and search_papers finds papers by query. The descriptions clearly differentiate their functions, eliminating any ambiguity.
All tool names follow a consistent verb_noun pattern using snake_case: compare_papers, extract_claims, find_research_gaps, get_citations, get_paper_abstract, and search_papers. The verbs (compare, extract, find, get, search) are appropriate and distinct, creating a predictable and readable naming convention throughout the set.
With 6 tools, this server is well-scoped for academic research assistance. Each tool earns its place by covering essential research workflows: searching papers, retrieving abstracts, extracting claims, comparing papers, analyzing gaps, and exploring citations. This count is neither too sparse nor bloated, fitting the domain perfectly.
The tool set covers core research workflows comprehensively, including search, retrieval, analysis, and comparison. Minor gaps exist, such as no tools for saving/bookmarking papers or tracking research progress, but agents can work around these. The surface supports end-to-end research tasks without dead ends.