-
Notifications
You must be signed in to change notification settings - Fork 0
scholar
scholar-nulis 0.8.0 · 16 tools, or 21 with an Elsevier key · source
Searches seven open scholarly APIs, verifies citations by DOI, finds legal open-access PDFs, downloads them, and reads their text. Five Scopus/ScienceDirect tools switch on if you have Elsevier credentials.
Four situations that come up constantly in real writing, and what you do about them. Every output below is real — copied from an actual run, not illustrative.
The failure mode is specific. Invented references do not look invented; they look ordinary. A plausible author, a plausible year, a plausible journal. Reading them more carefully will not help, because there is nothing on the page to notice.
"Check every DOI in my reference list against Crossref and tell me which ones do not resolve."
A real one comes back with its registered record:
{ "verified": true, "retracted": false,
"paper": { "title": "The PRISMA 2020 statement: an updated guideline for reporting
systematic reviews", "authors": ["Matthew J Page", "Joanne E McKenzie", …] } }An invented one comes back unambiguously:
{ "verified": false,
"doi": "10.1016/j.jclinepi.2023.99999",
"note": "DOI tidak ditemukan di Crossref — tandai [VERIFY]." }That is the whole point of the tool. It converts "this looks fine" into a yes or a no.
Citing retracted work is a serious error, and nothing in the PDF you downloaded will
necessarily tell you. nulis_get_paper_by_doi checks retraction status on every lookup — you do
not have to ask for it:
{ "verified": true,
"retracted": true,
"retraction_evidence": {
"dari_judul": "RETRACTED: Ileal-lymphoid-nodular hyperplasia, non-specific colitis,
and pervasive developmental disorder in children" },
"peringatan": "STUDI INI DICABUT (retracted) … Jangan disintesis. Bila tetap dibahas
karena alasan tertentu, nyatakan statusnya secara eksplisit di teks." }Note what it does not do: it does not delete the reference for you. A retracted study is sometimes cited deliberately — in a paper about research integrity, for instance. It tells you, and leaves the decision where it belongs.
"Find me an open-access PDF for this DOI."
{ "found": true, "via": "unpaywall", "oa_status": "hybrid", "license": "cc-by",
"pdf_url": "https://www.bmj.com/content/bmj/372/bmj.n71.full.pdf" }The license field matters more than it looks: it is the difference between "I may read
this" and "I may redistribute this to my students". Without CONTACT_EMAIL the same lookup
still succeeds through OpenAlex, but returns no licence.
nulis_search_scopus returns the total hit count for the identification box of your PRISMA
diagram, and nulis_scopus_export_csv pages through the whole result set into a screening-ready
file. Because the query is passed through untouched, the number you report and the string
you report agree with each other — see below.
| Tool | Purpose |
|---|---|
nulis_search_arxiv |
Search arXiv |
nulis_search_openalex |
Search OpenAlex (year filter) |
nulis_search_crossref |
Search Crossref |
nulis_search_semantic_scholar |
Search Semantic Scholar |
nulis_search_pubmed |
Search PubMed |
nulis_search_europepmc |
Search Europe PMC |
nulis_search_doaj |
Search open-access journal articles in DOAJ |
All seven work without registration. Setting CONTACT_EMAIL puts you in the Crossref and
OpenAlex polite pool — a more generous quota, and your requests are no longer treated as
anonymous traffic.
| Tool | Purpose |
|---|---|
nulis_get_paper_by_doi |
Verify and retrieve paper metadata by DOI (Crossref) |
nulis_get_open_access_pdf |
Find a legal open-access PDF link for a DOI |
nulis_download_pdf |
Download a PDF from a URL |
nulis_download_arxiv |
Download an arXiv paper's PDF |
nulis_read_arxiv_paper |
Read the full text of an arXiv paper |
nulis_read_pdf |
Extract text from a PDF (URL or local file) |
nulis_pdf_to_text |
Extract a PDF's text and save it as .md under fulltext/
|
nulis_batch_acquire_pdfs |
Attempt PDF downloads for a whole set of studies at once |
nulis_get_paper_by_doi is the most important tool here. It resolves a DOI against Crossref
and returns what is actually registered — authors, title, journal, year. This is the only
way to tell a real citation from a fabricated one: a plausible-looking
author–year–journal combination is the signature pattern of invented references, and no
amount of careful reading substitutes for asking the registrar.
nulis_get_open_access_pdf only points at copies that are genuinely, legally open. It does
not look for pirated copies. It works without CONTACT_EMAIL by going through OpenAlex;
setting the email adds the Unpaywall route, which also reports the licence of the copy
it found — worth having when you need to know whether you may redistribute it.
The five tools below are not registered at all when SCOPUS_API_KEY and
SCIENCEDIRECT_API_KEY are empty. They do not appear and then fail when called; they
simply are not there — tools/list returns 16 instead of 21.
| Tool | Purpose |
|---|---|
nulis_search_scopus |
Search Scopus using its own query syntax, passed through verbatim |
nulis_scopus_abstract |
Full abstract, author keywords, citation count (by DOI or Scopus ID) |
nulis_sciencedirect_fulltext |
ScienceDirect full text by DOI |
nulis_scopus_export_csv |
Run a query, collect every page, save as screening-ready CSV |
nulis_elsevier_status |
Check that keys are present, accepted, and what quota remains |
nulis_search_scopus accepts native Scopus syntax — TITLE-ABS-KEY, AND/OR/NOT, W/n,
PUBYEAR, DOCTYPE, LANGUAGE, SRCTYPE — and does not translate it:
TITLE-ABS-KEY("islamic contract" W/3 freedom) AND PUBYEAR > 2014 AND DOCTYPE(ar)
This is a design decision, not a limitation. The search string you report in Methods must be identical to the one actually executed. The moment some layer silently normalises or "fixes" your query, the reproducibility claim in your manuscript stops being true — and a reviewer re-running your query gets a different number with nothing to explain it.
For the same reason, nulis_search_scopus returns total hits — the number that goes in the
identification box of a PRISMA flow diagram.
Elsevier quota is tied to an institutional subscription and can run out mid-way.
nulis_elsevier_status reports whether the key is read, whether it is actually accepted, and how
much quota is left — far cheaper than discovering it in the middle of a systematic search.
If off-campus access is refused with 401/403, ask your librarian or licence admin for an
insttoken and set ELSEVIER_INSTTOKEN.
Elsevier errors routinely echo the full URL with apiKey= in it. Every error message here
passes through scrub(), which replaces the key and any apiKey=… pattern with
«redacted» before it reaches the caller.
nulis_server_status reports the running version, the folder PDFs will be saved to, and which
optional features are active. It is the right first step when something behaves unexpectedly
— including confirming that Claude Desktop really loaded the version you just installed.
The order used: DOWNLOAD_DIR if set to a valid value → ~/Downloads → the system temp
folder. .md files produced by nulis_pdf_to_text go into a fulltext/ subfolder.
← Back · Installation · zotero · scr-toolkit · FAQ
Knowledge unshared dies. Knowledge shared keeps living.
It grows in hands you will never meet and is carried on in work you will never read — and what never stops living never stops returning to you.
Mubaroq ADB · Akademi Digital Bandung | RPI Institute · mubaroq@digitalbdg.ac.id
Mirror of docs/ — do not edit here; edit in the repository. ·
Cerminan docs/, jangan disunting di sini. · CC BY-NC 4.0
Start
Servers
More