Skip to content
SKILLS
MCP ServerPublisher identity verifiedNo findings from static checks

@spboucher/scholarly-mcpv1.0.0

MCP server for scholarly search and citation verification over Crossref, OpenAlex, arXiv and doi.org: checks that a DOI resolves and its metadata matches, audits .bib files, flags retractions, walks the citation graph.

  • downloadable
  • installable
  • executable
Version
1.0.0
Published
Nov 10, 2026
Licence
MIT
Archive
68 kB
Files
23
Transport
stdio
Tools
16

Install

Register the local server

claude mcp add --transport stdio --env SCHOLARLY_ROOT=<value> --env OPENALEX_API_KEY=<value> --env SCHOLARLY_MAILTO=<value> --env SCHOLARLY_TIMEOUT_MS=<value> scholarly-mcp -- node server.mjs
.mcp.json (project scope)
{
  "mcpServers": {
    "scholarly-mcp": {
      "command": "node",
      "args": [
        "server.mjs"
      ],
      "env": {
        "SCHOLARLY_ROOT": "${SCHOLARLY_ROOT}",
        "OPENALEX_API_KEY": "${OPENALEX_API_KEY}",
        "SCHOLARLY_MAILTO": "${SCHOLARLY_MAILTO}",
        "SCHOLARLY_TIMEOUT_MS": "${SCHOLARLY_TIMEOUT_MS}"
      }
    }
  }
}

Environment variables — set locally, never sent to the registry

VariableRequiredPurpose
SCHOLARLY_ROOToptionalOnly directory bibliography files (.bib, .bibtex, .txt, .md) may be read from (default: working directory).
OPENALEX_API_KEYsecretoptionalOptional OpenAlex API key of the operator. Without it, OpenAlex-backed tools share a small daily budget per IP address.
SCHOLARLY_MAILTOoptionalOptional contact address sent to Crossref and OpenAlex (their polite pools). Unset by default: nothing identifying is sent.
SCHOLARLY_TIMEOUT_MSoptionalPer-request timeout in milliseconds (default 20000).
More steps
  1. 1Set the required environment variables locally

    SCHOLARLY_ROOT, OPENALEX_API_KEY, SCHOLARLY_MAILTO, SCHOLARLY_TIMEOUT_MS — configured on your machine only; never sent to the registry.

  2. 2Optional: download the listing's source archive for review

    skills download @spboucher/scholarly-mcp@1.0.0
  • Declared permissions: network, filesystem:read, env.
  • This server runs locally on your machine with your user's privileges. Review the source before running it; the registry does not execute or host it.

Installing only copies or configures. Nothing is executed for you. The Skills CLI verifies the checksum before writing files.

Documentation

scholarly-mcp

An MCP server that lets an agent look references up instead of recalling them: search the scholarly record, check that a citation is real and correctly described, audit a whole bibliography, and spot retracted work. It reads four public services — Crossref, OpenAlex, arXiv and doi.org — and needs no account.

The rule it enforces: a citation is verified when its DOI resolves and the registered title, first author and year agree with what is cited. A DOI that merely exists verifies nothing; a real DOI pasted onto the wrong paper is reported as a mismatch.

Tools

ToolWhat it doesServices
verify_doiDOI resolves and the record matches the citationCrossref, doi.org, arXiv
verify_bibliographyOne status per entry of a .bib file, BibTeX text or reference listCrossref, doi.org, arXiv
resolve_referenceFinds the record of a reference without DOI, or says there is noneCrossref, arXiv
check_retractionsRetractions, expressions of concern, corrections for up to 200 DOIsCrossref, OpenAlex
search_worksSearch by text, title, author, year, typeCrossref (default) or OpenAlex
get_workRegistered metadata of one workCrossref, doi.org, arXiv, OpenAlex
search_arxivSearch or look up preprintsarXiv
get_citationsWorks citing a workOpenAlex
get_referencesWhat a work citesCrossref, OpenAlex
related_worksWorks related by shared conceptsOpenAlex
author_worksWorks of an author by ORCID, id or nameOpenAlex
get_open_accessLegal open copies of a workOpenAlex, arXiv
format_citationAPA, Chicago, MLA, BibTeX, RIS, CSL-JSON from registry metadataas get_work
bibtex_from_doiBibTeX from the registration agency, or generateddoi.org, Crossref
parse_bibtexOffline: entries, missing DOIs, duplicate keys, syntax errorsnone
scholarly_statusConfiguration, counters, OpenAlex budget leftnone

Every tool is read-only. Statuses returned by the verification tools: verified, doi_missing_found, metadata_mismatch, doi_not_found, doi_invalid, ambiguous, not_found, retracted, unverifiable, error. A registry outage is reported as error, never as not_found.

Install

Node.js 20 or newer.

shell
npm install
node server.mjs        # speaks MCP on stdio

Claude Code:

shell
claude mcp add scholarly -- node /absolute/path/to/scholarly-mcp/server.mjs

Any MCP client:

json
{ "mcpServers": { "scholarly": { "command": "node", "args": ["/absolute/path/to/scholarly-mcp/server.mjs"], "env": { "SCHOLARLY_ROOT": "/path/to/your/papers" } } } }

Configuration

VariableDefaultEffect
SCHOLARLY_ROOTworking directoryOnly directory bibliography files may be read from
OPENALEX_API_KEYunsetYour own OpenAlex key, for a larger allowance on OpenAlex-backed tools
SCHOLARLY_MAILTOunsetContact address sent to Crossref and OpenAlex ("polite pool")
SCHOLARLY_TIMEOUT_MS20000Per-request timeout

What it sends, and what it does not

  • Each request carries the client name scholarly-mcp/1.0 and the query itself (a DOI, a title, an author name). Nothing about the user, the machine or the project is added.
  • No contact address is sent unless you set SCHOLARLY_MAILTO. It then goes to Crossref and OpenAlex only.
  • OPENALEX_API_KEY is sent to OpenAlex only and never appears in tool output.
  • Files: only .bib, .bibtex, .txt and .md inside SCHOLARLY_ROOT, 5 MB at most, symbolic links resolved before the check. The server writes nothing.
  • Registry text (titles, abstracts, notices) is returned as data with a notice that it is untrusted. That reduces the risk of prompt injection through a crafted title; it does not remove it.

Limits you should know

  • OpenAlex without a key shares a small daily allowance among everyone behind the same IP address (0.10 USD on 2026-11-10: roughly a hundred list calls). When it is spent, the OpenAlex-backed tools return rate_limited. Verification tools do not depend on OpenAlex.
  • Coverage. Crossref and arXiv do not list most books, theses, reports and working papers, nor many regional journals. not_found means "not in these registries".
  • Heuristics. Matching rests on title similarity (Sørensen-Dice on normalised words, 0.9 to match, 0.75 to be "close"), family-name comparison and year. Thresholds are in lib/match.mjs; every verdict includes the compared values.
  • Registry errors. Crossref metadata is sometimes wrong. A mismatch says the citation and the registry disagree, not which one is right.
  • Retractions come from Crossref update notices and the OpenAlex flag. Both lag and both have gaps: no_notice is not a guarantee.
  • Open access. get_open_access reports authorised copies only.
  • arXiv allows one request every three seconds; the server queues accordingly, so a bibliography with many arXiv-only entries is slow.
  • It cannot check that a cited work supports the claim citing it.

Tests

shell
npm test             # 17 offline tests, recorded registry answers, no network
npm run test:live    # 10 tests against the real services through the MCP protocol

Live tests need the network and no account. The OpenAlex test skips when the key-less budget is exhausted.

Checked once by hand on 2026-11-10 but not in the automated suite, to spare the shared OpenAlex budget: related_works, author_works (by ORCID and by name), search_works with source openalex, get_references with source openalex, get_open_access for a journal article and a pmid: lookup. Each returned a plausible answer; a later change in OpenAlex would not be caught by npm run test:live.

Not tested: bibliographies above a few dozen entries in one call; references in non-Latin scripts; BibLaTeX constructs such as crossref inheritance; behaviour under a real OpenAlex budget exhaustion (the rate_limited path is tested with a simulated HTTP 429 only).

Companion skill

@spboucher/citation-verification packages the same engine as a command-line tool with the rules for reading its results.

MIT licence.

Tools

16 tools · declared by the publisher
ToolWhat it does
scholarly_statusConfiguration, request counters and remaining OpenAlex budget
search_worksSearch works by text, title, author, year and type
get_workRegistered metadata of one work by DOI, arXiv id, OpenAlex id or PMID
verify_doiCheck that a DOI resolves and its record matches the citation
resolve_referenceFind the record for a reference without a DOI, or say there is none
verify_bibliographyAudit a .bib file or reference list, one status per entry
check_retractionsRetractions, expressions of concern and corrections for a list of DOIs
get_citationsWorks citing a work
get_referencesReference list of a work
related_worksWorks related by shared concepts
author_worksWorks of an author by ORCID, id or name
search_arxivSearch or look up arXiv preprints
get_open_accessLegal open-access copies of a work
format_citationAPA, Chicago, MLA, BibTeX, RIS or CSL-JSON from registry metadata
bibtex_from_doiBibTeX entry for a DOI
parse_bibtexParse BibTeX offline: entries, missing DOIs, duplicate keys, errors

Environment variables

VariableRequiredPurpose
SCHOLARLY_ROOToptionalOnly directory bibliography files (.bib, .bibtex, .txt, .md) may be read from (default: working directory).
OPENALEX_API_KEYsecretoptionalOptional OpenAlex API key of the operator. Without it, OpenAlex-backed tools share a small daily budget per IP address.
SCHOLARLY_MAILTOoptionalOptional contact address sent to Crossref and OpenAlex (their polite pools). Unset by default: nothing identifying is sent.
SCHOLARLY_TIMEOUT_MSoptionalPer-request timeout in milliseconds (default 20000).

Files

23 files · 244 kB unpacked

Select a file to preview it. Files are shown as plain text and never executed.

Security & permissions

Declared permissions

  • network
  • filesystem:read
  • env

Static checks

  • lowscript appears to make network requeststest/offline.test.mjs

Static checks are advisory. They never certify that a package is safe. Compatibility entries are publisher claims unless marked verified.

Compatibility

  • claude-code · claimed
  • codex · claimed
  • cursor · claimed
  • generic-mcp · claimed

Versions

1 release · immutable
VersionPublishedSizeSHA-256State
1.0.0latestNov 10, 202668 kB3be0a7e776e9…published

Publication history

  1. release.publish@spboucher/scholarly-mcp@1.0.0by Simon-Pierre Boucher
  2. artifact.create@spboucher/scholarly-mcpby Simon-Pierre Boucher
  • MCP ServerVerified publisher

    @spboucher/pangram-experiment-mcp

    MCP server for text-revision experiments that record the Pangram detector score as an observed outcome: frozen editorial plan, one submission per step, a real evaluation of every version, preservation checks, full history, chart and report.

    Latest version
    v1.0.0
    Licence
    MIT
    Updated
    2 h ago
  • MCP ServerVerified publisher

    @spboucher/manuscript-audit-mcp

    MCP server for deterministic, offline audits of LaTeX and Markdown manuscripts: citations, cross-references, numbers, statistics reporting, tables, claims, style, replication statements, referee-report scaffold, version comparison.

    Latest version
    v1.0.0
    Licence
    MIT
    Updated
    4 h ago
  • MCP ServerVerified publisher

    @spboucher/xlsx-audit-mcp

    MCP server that audits Excel workbooks without Excel: errors, hard-coded numbers, broken formula patterns, circular references, controls, stale values, comparison with a reference and a rubric-based grading aid. Read-only, dependency-free reader.

    Latest version
    v1.0.0
    Licence
    MIT
    Updated
    4 h ago

↑↓ to navigate · enter to open · esc to close