GnistAI GnistAI
Log in

Getting Started with Crossref

Academic publication metadata — DOI lookup, citation data, and journal articles.

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

Data source: Crossref

Overview

Crossref wraps Crossref, handling authentication, pagination, and rate limits for you. This tutorial covers all 5 tools with working code examples you can copy and run.

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-crossref": {
      "url": "https://context.gnist.ai/mcp/crossref/",
      "headers": {
        "Gnist-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Tools (5)

resolve_doi

Resolve a DOI to full bibliographic metadata via Crossref. Crossref is the authoritative DOI registry covering ~140M scholarly works: journal articles, books, conference papers, datasets, and preprints. Args: doi: The DOI to resolve. Accepts bare DOI (e.g. "10.1038/nature12373") or full URL form (e.g. "https://doi.org/10.1038/nature12373"). Returns: Dict with doi, title, authors (given/family/orcid/affiliation), publication_date, type, journal, issn, publisher, abstract (JATS tags stripped), citation_count, reference_count, url, and subject list.

ParameterTypeRequiredDescription
doistringrequiredThe DOI to resolve. Accepts bare DOI (e.g. "10.1038/nature12373") or full URL form (e.g. "https://doi.org/10.1038/nature12373").
curl -X POST "https://context.gnist.ai/mcp/crossref/" \
  -H "Content-Type: application/json" \
  -H "Gnist-API-Key: YOUR_API_KEY" \
  -d '{"jsonrpc": "2.0", "method": "tools/call", "id": 1, "params": {"name": "resolve_doi", "arguments": {"doi": "10.1038/nature12373"}}}'
import httpx

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

search_works

Search Crossref for scholarly publications by keyword. Args: query: Full-text search query (e.g. "CRISPR gene editing", "climate change tipping points"). filter_type: Limit to a Crossref work type. Common values: "journal-article", "book-chapter", "proceedings-article", "dataset", "posted-content" (preprints). filter_issn: Limit to a specific journal by ISSN (e.g. "0028-0836" for Nature). filter_funder: Limit to works funded by a Crossref Funder ID (e.g. "10.13039/100000001" for NSF). date_from: Only include works published on or after this date (YYYY-MM-DD or YYYY). date_to: Only include works published on or before this date (YYYY-MM-DD or YYYY). limit: Number of results to return (1–50, default 10). Returns: Dict with 'count' (returned), 'total_results' (total matches), and 'works' list. Each work includes doi, title, authors, publication_date, type, journal, citation_count, and abstract where available.

ParameterTypeRequiredDescription
querystringrequiredFull-text search query (e.g. "CRISPR gene editing", "climate change tipping points").
filter_typeanyoptionalLimit to a Crossref work type. Common values: "journal-article", "book-chapter", "proceedings-article", "dataset", "posted-content" (preprints).
filter_issnanyoptionalLimit to a specific journal by ISSN (e.g. "0028-0836" for Nature).
filter_funderanyoptionalLimit to works funded by a Crossref Funder ID (e.g. "10.13039/100000001" for NSF).
date_fromanyoptionalOnly include works published on or after this date (YYYY-MM-DD or YYYY).
date_toanyoptionalOnly include works published on or before this date (YYYY-MM-DD or YYYY).
limitintegeroptionalNumber of results to return (1–50, default 10). (default: 10)
curl -X POST "https://context.gnist.ai/mcp/crossref/" \
  -H "Content-Type: application/json" \
  -H "Gnist-API-Key: YOUR_API_KEY" \
  -d '{"jsonrpc": "2.0", "method": "tools/call", "id": 1, "params": {"name": "search_works", "arguments": {"query": "CRISPR gene editing"}}}'
import httpx

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

get_journal

Fetch metadata for a journal by ISSN. Args: issn: The journal ISSN (e.g. "0028-0836" for Nature, "1476-4687" for Nature online). Returns: Dict with issn list, title, publisher, subjects, works_count (total DOIs indexed), and coverage_from (earliest year in Crossref index).

ParameterTypeRequiredDescription
issnstringrequiredThe journal ISSN (e.g. "0028-0836" for Nature, "1476-4687" for Nature online).
curl -X POST "https://context.gnist.ai/mcp/crossref/" \
  -H "Content-Type: application/json" \
  -H "Gnist-API-Key: YOUR_API_KEY" \
  -d '{"jsonrpc": "2.0", "method": "tools/call", "id": 1, "params": {"name": "get_journal", "arguments": {"issn": "0028-0836"}}}'
import httpx

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

get_funder

Fetch metadata for a research funder by Crossref Funder ID. Common funder IDs: - "10.13039/100000001" — US National Science Foundation (NSF) - "10.13039/100000002" — US National Institutes of Health (NIH) - "10.13039/501100000269" — UK Research and Innovation (UKRI) - "10.13039/501100000780" — European Commission Use search_works with filter_funder to find works funded by a specific funder. Args: funder_id: Crossref Funder Registry ID (e.g. "10.13039/100000001"). Returns: Dict with id, name, alt_names, location, and works_count.

ParameterTypeRequiredDescription
funder_idstringrequiredCrossref Funder Registry ID (e.g. "10.13039/100000001").
curl -X POST "https://context.gnist.ai/mcp/crossref/" \
  -H "Content-Type: application/json" \
  -H "Gnist-API-Key: YOUR_API_KEY" \
  -d '{"jsonrpc": "2.0", "method": "tools/call", "id": 1, "params": {"name": "get_funder", "arguments": {"funder_id": "10.13039/100000001"}}}'
import httpx

resp = httpx.post(
    "https://context.gnist.ai/mcp/crossref/",
    headers={"Gnist-API-Key": "YOUR_API_KEY"},
    json={'id': 1,
 'jsonrpc': '2.0',
 'method': 'tools/call',
 'params': {'arguments': {'funder_id': '10.13039/100000001'},
            'name': 'get_funder'}},
)
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/crossref/" \
  -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/crossref/",
    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_works to find items, then get_journal 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.
Date range filtering
Use date range parameters to narrow results to a specific time window. Dates are typically in YYYY-MM-DD format.

FAQ

What data does Crossref provide?

Academic publication metadata — DOI lookup, citation data, and journal articles. It exposes 5 tools: resolve_doi, search_works, get_journal, get_funder, 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 Crossref API return?

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

Next Steps

Related Tutorials