GnistAI GnistAI
Log in

Getting Started with Academic Research

Unified academic paper search across Crossref, OpenAlex, PubMed, and Semantic Scholar — deduplicated by DOI with merged metadata.

All Tutorials   |   Overview   |   Playground   |   MCP   |   REST API   |   Home
Science

Data source: Crossref, OpenAlex, PubMed, Semantic Scholar

Overview

Academic Research searches across 4 data sources (Crossref, OpenAlex, PubMed, Semantic Scholar) in a single query. It deduplicates and normalizes results, saving you from building 4 separate integrations. This tutorial walks through all 4 tools with working code examples.

Prerequisites

  1. Sign up at https://context.gnist.ai/signup for a free API key (100 calls/day).
  2. Choose your integration method: MCP protocol or REST API.

Connect via MCP

Add to your MCP client config (Claude Desktop, Cursor, etc.):

MCP Config
{
  "mcpServers": {
    "gnist-academic-research": {
      "url": "https://context.gnist.ai/mcp/academic-research/",
      "headers": {
        "Gnist-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Tools (4)

search_papers

Search for academic papers across Crossref, OpenAlex, PubMed, and Semantic Scholar. Results are deduplicated by DOI and enriched with metadata from all sources that found a match. Sorted by citation count (most cited first). Examples: search_papers(query="transformer attention mechanism") search_papers(query="CRISPR gene editing", year_from=2020, max_results=20) search_papers(query="climate change economic impact", year_from=2018, year_to=2024)

ParameterTypeRequiredDescription
querystringrequiredSearch query — keywords, title, topic, or author name.
max_resultsintegeroptionalMaximum number of results. (default: 10)
year_fromanyoptionalEarliest publication year.
year_toanyoptionalLatest publication year.
curl -X POST "https://context.gnist.ai/mcp/academic-research/" \
  -H "Content-Type: application/json" \
  -H "Gnist-API-Key: YOUR_API_KEY" \
  -d '{"jsonrpc": "2.0", "method": "tools/call", "id": 1, "params": {"name": "search_papers", "arguments": {"query": "renewable energy"}}}'
import httpx

resp = httpx.post(
    "https://context.gnist.ai/mcp/academic-research/",
    headers={"Gnist-API-Key": "YOUR_API_KEY"},
    json={'id': 1,
 'jsonrpc': '2.0',
 'method': 'tools/call',
 'params': {'arguments': {'query': 'renewable energy'},
            'name': 'search_papers'}},
)
print(resp.json())

get_paper

Resolve a DOI across all four academic sources and return merged metadata. Queries Crossref, OpenAlex, PubMed, and Semantic Scholar in parallel, then merges the results into a single enriched paper object with the best available data from each source. Examples: get_paper(doi="10.1038/nature12373") get_paper(doi="10.1126/science.aax2342")

ParameterTypeRequiredDescription
doistringrequiredDigital Object Identifier (e.g. '10.1038/nature12373').
curl -X POST "https://context.gnist.ai/mcp/academic-research/" \
  -H "Content-Type: application/json" \
  -H "Gnist-API-Key: YOUR_API_KEY" \
  -d '{"jsonrpc": "2.0", "method": "tools/call", "id": 1, "params": {"name": "get_paper", "arguments": {"doi": "'10.1038/nature12373'"}}}'
import httpx

resp = httpx.post(
    "https://context.gnist.ai/mcp/academic-research/",
    headers={"Gnist-API-Key": "YOUR_API_KEY"},
    json={'id': 1,
 'jsonrpc': '2.0',
 'method': 'tools/call',
 'params': {'arguments': {'doi': "'10.1038/nature12373'"}, 'name': 'get_paper'}},
)
print(resp.json())

list_academic_sources

List all registered academic data sources and their status. Shows which sources are available and whether they are currently enabled. Examples: list_academic_sources()

curl -X POST "https://context.gnist.ai/mcp/academic-research/" \
  -H "Content-Type: application/json" \
  -H "Gnist-API-Key: YOUR_API_KEY" \
  -d '{"jsonrpc": "2.0", "method": "tools/call", "id": 1, "params": {"name": "list_academic_sources", "arguments": {}}}'
import httpx

resp = httpx.post(
    "https://context.gnist.ai/mcp/academic-research/",
    headers={"Gnist-API-Key": "YOUR_API_KEY"},
    json={'id': 1,
 'jsonrpc': '2.0',
 'method': 'tools/call',
 'params': {'arguments': {}, 'name': 'list_academic_sources'}},
)
print(resp.json())

report_feedback

Report a bug, feature request, or general feedback for this data source. Use this when something doesn't work as expected, when you'd like a new feature, or when you have suggestions for improvement. Args: feedback: Describe the issue or suggestion. feedback_type: One of 'bug', 'feature_request', or 'general'.

ParameterTypeRequiredDescription
feedbackstringrequired
feedback_typestringoptional (default: general)
curl -X POST "https://context.gnist.ai/mcp/academic-research/" \
  -H "Content-Type: application/json" \
  -H "Gnist-API-Key: YOUR_API_KEY" \
  -d '{"jsonrpc": "2.0", "method": "tools/call", "id": 1, "params": {"name": "report_feedback", "arguments": {"feedback": "example"}}}'
import httpx

resp = httpx.post(
    "https://context.gnist.ai/mcp/academic-research/",
    headers={"Gnist-API-Key": "YOUR_API_KEY"},
    json={'id': 1,
 'jsonrpc': '2.0',
 'method': 'tools/call',
 'params': {'arguments': {'feedback': 'example'}, 'name': 'report_feedback'}},
)
print(resp.json())

Common Patterns

Search then retrieve
Use search_papers to find items, then get_paper to get full details. This two-step pattern is common for exploring data before drilling down.
Pagination
Several tools support limit, offset, or page parameters. Start with small limits during development, then increase for production queries.

FAQ

What data does Academic Research provide?

Unified academic paper search across Crossref, OpenAlex, PubMed, and Semantic Scholar — deduplicated by DOI with merged metadata. It exposes 4 tools: search_papers, get_paper, list_academic_sources, report_feedback.

What do I need to get started?

A Gnist API key (free tier: 100 calls/day). Sign up at https://context.gnist.ai/signup.

What format does the Academic Research API return?

JSON, via either MCP protocol (JSON-RPC 2.0) or REST API.

Which data sources does Academic Research aggregate?

Crossref, OpenAlex, PubMed, Semantic Scholar. Results are deduplicated and normalized into a consistent format.

Next Steps

Related Tutorials