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
- Sign up at https://context.gnist.ai/signup for a free API key (100 calls/day).
- Choose your integration method: MCP protocol or REST API.
Connect via MCP
Add to your MCP client config (Claude Desktop, Cursor, etc.):
{
"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.
| Parameter | Type | Required | Description |
|---|---|---|---|
doi | string | required | The 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | required | Full-text search query (e.g. "CRISPR gene editing", "climate change tipping points"). |
filter_type | any | optional | Limit to a Crossref work type. Common values: "journal-article", "book-chapter", "proceedings-article", "dataset", "posted-content" (preprints). |
filter_issn | any | optional | Limit to a specific journal by ISSN (e.g. "0028-0836" for Nature). |
filter_funder | any | optional | Limit to works funded by a Crossref Funder ID (e.g. "10.13039/100000001" for NSF). |
date_from | any | optional | Only include works published on or after this date (YYYY-MM-DD or YYYY). |
date_to | any | optional | Only include works published on or before this date (YYYY-MM-DD or YYYY). |
limit | integer | optional | Number 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).
| Parameter | Type | Required | Description |
|---|---|---|---|
issn | string | required | The 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
funder_id | string | required | Crossref 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'.
| Parameter | Type | Required | Description |
|---|---|---|---|
feedback | string | required | |
feedback_type | string | optional | (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
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.Several tools support
limit, offset, or page parameters. Start with small limits during development, then increase for production queries.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.