mcpField
S
scholar-citations

scholar-citations

github.com/dsebastienProductivity17117 installsUpdated 28w ago
Repository

About scholar-citations

scholar-citations is a command-line skill for researchers who want to explore a paper’s citation graph using OpenAlex. It retrieves references, citing papers, or both, with filters for year and citation count.

Key features

  1. 01Finds a paper's references and citations
  2. 02Accepts OpenAlex, DOI, arXiv, and PMID identifiers
  3. 03Filters results by year and citation count
  4. 04Returns structured paper metadata and abstracts

Use cases

  1. 01Trace the prior work behind a paper
  2. 02Find recent research citing a study
  3. 03Map citation neighborhoods for review context

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/dsebastien/ai-skill-scholar --skill scholar-citations

After installing, type/scholar-citationsin Claude Code to confirm it loaded.

Bundled filesscripts/scholar_citations.py

Details

From the project README

Scholar Citations

Traverse the citation graph of a research paper via OpenAlex. Two directions:

  • References — what this paper cites (its intellectual ancestry)
  • Citations — what cites this paper (its intellectual descendants)

One subprocess call returns a structured list of papers with titles, abstracts, citation counts, and external IDs.

Usage

# References — what this paper cites
python3 scripts/scholar_citations.py references 2501.11120 --limit 100

# Citations — what cites this paper
python3 scripts/scholar_citations.py citations 2501.11120 --limit 100

# Both at once
python3 scripts/scholar_citations.py both 2501.11120 --limit 50

# Filter to recent, high-impact descendants
python3 scripts/scholar_citations.py citations 1706.03762 \
    --min-year 2024 --min-citations 10 --limit 100

# Accepts many ID formats
python3 scripts/scholar_citations.py citations W4395065622
python3 scripts/scholar_citations.py citations "10.48550/arxiv.2404.14082"
python3 scripts/scholar_citations.py citations "doi:10.48550/arxiv.2404.14082"
python3 scripts/scholar_citations.py citations "https://openalex.org/W4395065622"

Subcommands:

  • references <id> — papers cited by the target
  • citations <id> — papers citing the target
  • both <id> — both directions in one payload

Flags:

  • --limit N — max results per direction (default 100)
  • --min-year YYYY — drop older entries
  • --min-citations N — drop low-impact entries (useful for surfacing important follow-ups)

When to use

  • Tracing an idea backward — given a paper, find the key work it builds on (references + --min-citations 50)
  • Finding follow-ups — see what built on an important paper (citations + --min-year 2024)
  • Gap analysis — intersect references and citations across multiple anchor papers to find unexplored neighborhoods
  • Reviewer context — get the citation neighborhood before reviewing a paper

Data completeness caveat

OpenAlex's reference lists are complete for well-indexed papers (journal articles, conference proceedings, older arxiv submissions) but often sparse for very recent preprints. If references returns empty, it's usually OpenAlex data coverage, not a script bug. For arxiv-only ancestry, fall back to parsing the paper's own reference list via arxiv-analyze with --tier tex.

Workflow

1. Identify the anchor paper

Accept OpenAlex W-id, DOI, arxiv id (auto-converts to arxiv's DOI), PMID (as pmid:<n>), or any OpenAlex/DOI URL. The script auto-normalizes.

2. Pick direction
  • Understanding how a paper emerged? → references
  • Tracking impact or finding new work? → citations
  • Building a full neighborhood view? → both
3. Filter aggressively

Reference and citation lists can be 100-1000 entries. Use --min-citations and --min-year generously — 1000 low-signal entries are worse than 20 high-signal ones.

4. Feed into analysis

For each interesting paper: hand off arxiv_id to arxiv-analyze, or use the open_access_pdf URL directly.

Rate limits

OpenAlex is generous: 10 req/sec anonymous, more in the polite pool (set OPENALEX_EMAIL). Script self-throttles at 5 req/sec.

A single references or citations call with --limit 100 is typically 2-3 API requests (one for the root work, one or two for the batched resolution of related works).

Token efficiency

  • 100 references/citations ≈ 15K-30K tokens (abstracts dominate)
  • For graph exploration where breadth > depth, pipe through jq 'del(.*.abstract)' before feeding to context

Hard rules

  • Don't explode the graph. 100 × 100 references-of-references is 10k papers. If you need n-hop traversal, do it in explicit staged passes with user confirmation.
  • Respect the rate limit. The script's self-throttle is load-bearing.
  • Sparse data is data. If references or citations is empty, report it as empty; don't fabricate.

Requirements

  • Python 3.11+ (stdlib only)
  • Internet access to api.openalex.org
  • Optional: OPENALEX_EMAIL for polite-pool access

Comments

Markdown supported