Scholarly research MCP (Crossref, Europe PMC, arXiv) avatar

Scholarly research MCP (Crossref, Europe PMC, arXiv)

Pricing

from $2.00 / 1,000 tool calls

Go to Apify Store
Scholarly research MCP (Crossref, Europe PMC, arXiv)

Scholarly research MCP (Crossref, Europe PMC, arXiv)

Search scholarly metadata and arXiv preprints through MCP, or look up a DOI. Uses Crossref, Europe PMC and arXiv without source API keys.

Pricing

from $2.00 / 1,000 tool calls

Rating

0.0

(0)

Developer

Chee Chiaw Lim

Chee Chiaw Lim

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

Scholarly research MCP

An Apify Standby MCP server for scholarly metadata from Crossref, Europe PMC, and arXiv. It uses public metadata APIs without source API keys. It also runs one tool as a batch Actor.

Connect

Use this Streamable HTTP endpoint in your MCP client.

https://<username>--scholarly-research-mcp.apify.actor/mcp
Authorization: Bearer <APIFY_TOKEN>

Apify authenticates requests to the hosted endpoint. The local Express server relies on that platform authentication when deployed. The Apify MCP server at mcp.apify.com also lists the Actor.

For a local server with no INPUT, run npm start and connect to http://localhost:3000/mcp. Node 20 or later is required. There is no build step. GET / responds to Apify readiness probes. GET and DELETE /mcp return 405 because the MCP transport is stateless.

Tools

All search queries accept 1 to 300 characters. Limits are integers from 1 to 20, default 5. Dates use YYYY-MM-DD. Crossref and Europe PMC abstracts default to hidden.

ToolArguments
search_worksRequired query. source is crossref by default or europepmc. Optional fromDate, untilDate, type for Crossref, openAccessOnly for Europe PMC, limit, includeAbstract.
get_work_by_doiRequired doi, accepting a bare DOI, doi: prefix, or doi.org URL. Optional includeAbstract.
search_preprintsRequired query, using arXiv syntax such as all:transformer. Optional category such as cs.LG, sortBy of relevance, submittedDate, or lastUpdatedDate, and limit. Abstracts are always included.
search_biomedicalRequired query. Optional openAccessOnly, fromDate, untilDate, limit, includeAbstract. Uses Europe PMC.

Each result has tool, query or doi, source, total when supplied by the source, count, and works. A DOI lookup returns a result such as this abbreviated example.

{
"tool": "get_work_by_doi",
"doi": "10.1038/nature12373",
"source": "crossref",
"count": 1,
"works": [{
"source": "crossref",
"id": "10.1038/nature12373",
"doi": "10.1038/nature12373",
"title": "Nanometre-scale thermometry in a living cell",
"url": "https://doi.org/10.1038/nature12373",
"abstract": null
}]
}

Work records also contain up to 20 authors, authorsTruncated, publication date, venue, type, citation count, open access status, licence, and source attribution. Missing values are null. arXiv adds categories and a PDF link. Abstract text has tags removed and is capped at 1500 characters. DOI values are trimmed and lowercased. Crossref open access status is null because a licence URL alone does not establish open access.

Batch mode

Outside Standby, an INPUT runs one tool and exits. Use the Actor input form or save this as storage/key_value_stores/default/INPUT.json before npm start.

{"tool":"search_works","query":"crispr malaria","source":"crossref","limit":5,"includeAbstract":false}

The program also accepts {"tool":"search_works","arguments":{"query":"crispr malaria"}}. Only arguments belonging to the selected tool are mapped from the flat form. Tool validation rejects unsupported source filters and reversed date ranges.

The batch writes works to the default dataset and the result to the OUTPUT key. Successful calls also append a small log item with tool, args, source, count, and calledAt. Dataset rows therefore include call logs as well as works. Logging failures do not fail a successful call. A tool error writes an error to OUTPUT and exits with code 1.

Pricing

Each successful tool call costs $0.002 through the tool-call event. Failed calls, including missing Crossref DOIs, are not charged. An empty successful search counts as a call. A spending limit that prevents charging returns Spending limit reached. Dataset writes carry no event charge. Apify also bills Standby platform usage.

Sources and terms

  • Crossref metadata comes from api.crossref.org. Attribution is Metadata from Crossref (api.crossref.org). Crossref metadata is generally open; abstracts and linked content may have separate copyright. The record preserves the first supplied licence URL without treating it as an open access guarantee. Set CROSSREF_MAILTO to add a contact address to requests.
  • Europe PMC data comes from EMBL-EBI. Attribution is Data from Europe PMC (europepmc.org), EMBL-EBI. The source licence field is preserved when supplied. Open access filtering does not grant reuse rights beyond the work's own licence.
  • arXiv metadata is CC0 1.0, including the returned metadata abstracts. Attribution is Metadata from arXiv.org (CC0). Not affiliated with or endorsed by arXiv. E-print licences are shown on their abstract pages.

Crossref and Europe PMC abstract requests include the notice Abstract may be copyrighted by the publisher or authors; shown for research and discovery only.

The server spaces requests per host by at least 1000 ms for Crossref and Europe PMC, and 3100 ms for arXiv. Requests to a host run serially, including body consumption. Rate limits apply per server process. HTTP 429 and server errors receive bounded retries with backoff and Retry-After support.

The Actor fetches no full text or PDFs and hosts no PDFs. Crossref and Europe PMC abstracts are opt-in. It is not affiliated with Crossref, EMBL-EBI, or arXiv.

Offline verification

Run npm test. Run npm run verify:local to execute all four tools through npm start and inspect their stored outputs. Tests use the captured responses in test/fixtures and never need source network access. With a batch INPUT present, npm run start:offline runs the real Actor entry point with fixture responses. This preload replaces only upstream fetch calls.