About digest-paper
digest-paper is a research workflow skill for recording a paper in a SOTA project. It guides researchers through MCP-based source checks, full-text reading, citation records, and validation, with an all-or-nothing rule that prevents partial digests.
Key features
- 01MCP capability preflight
- 02Resolve paper identity and version
- 03Fetch and read the full-text PDF
- 04Create synthesis and BibTeX records
- 05Record citations and index entries
- 06Run project validation
Use cases
- 01Add a paper to an existing SOTA
- 02Check scholarly sources before digestion
- 03Create a traceable paper synthesis
- 04Validate completed paper records
MCP support
Requires the arxiv MCP server for full text and at least one of semantic-scholar, dblp, or openalex for bibliographic data. Uses MCP lookups for citations and paper metadata, and stops when the required capabilities are unavailable.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ vincenzoimp/ academic-research-skills --skill digest-paperAfter installing, type/digest-paperin Claude Code to confirm it loaded.
Bundled filesreferences/bibliography-rules.md
Details
From the project READMEDigest Paper
Digest one paper end-to-end into sota/papers/<citekey>/. This is the
atomic unit of SOTA work: it either completes fully or it does not happen.
Never leave a partial digest.
Read First
sota/README.md— synthesis format and digestion rules (the scaffold owns the format)references/bibliography-rules.md— citekeys, version resolution, cross-validation
MCP Preflight (hard gate)
Before anything else, probe the scholarly MCP servers with one trivial query each (e.g., search a known title). The gate is by capability, never by API key — a missing key only throttles, it never blocks:
- Required:
arxiv(full text) must respond, AND at least one bibliographic source —semantic-scholar,dblp, oropenalex— must respond. - If those required capabilities are unavailable: STOP, report which servers failed, and ask the user to fix the MCP setup.
- If a reachable source is down but the gate is met, proceed and note the reduced cross-check in the synthesis.
Never fall back to model memory, web search, or scraping. A citation exists only if an MCP lookup produced it.
Procedure
- Resolve identity: from the given title/DOI/arXiv/PDF, find the paper via semantic-scholar (and dblp for CS work). Ask the user only if the match is genuinely ambiguous.
- Resolve the most authoritative version: published venue > latest arXiv
revision > other preprint, per
references/bibliography-rules.md. Record both DOI and arXiv id when both exist. - Choose the citekey (
<firstauthor><year><topicword>, lowercase) and check it is unused: not inreferences.bib, nosota/papers/<citekey>/folder. - Create
sota/papers/<citekey>/and fetch the full-text PDF aspaper.pdfthrough the fallback pipeline, most-authoritative/legal first: (1) arxiv MCP for arXiv papers; (2) otherwise paper-search, which falls back publisher/DOI open-access → Unpaywall → green-OA repositories (Europe PMC/PMC, CORE, OpenAIRE, Zenodo, HAL, SSRN, …) → Sci-Hub as the last resort. Record the resulting URL inmetadata.yaml(pdf_source). The PDF is only the reading copy: the citation and the authoritative version always come from the scholarly MCPs (reconciled by DOI), never from where the PDF was fetched. If even the last resort yields nothing, stop, remove the folder, and record the candidate insota/queue.mdwith decisionunresolvable-via-mcp. Abstract-only digestion is forbidden. - Read the full paper — the PDF, cover to cover, not the abstract.
- Write
synthesis.mdfollowing the exact section order insota/README.md. Verify every exact number and quotation against the PDF. - Write the BibTeX entry into the SOTA section of
references.bib, built from MCP-sourced fields cross-checked perreferences/bibliography-rules.md. Never write a field from memory. - Fetch citations via semantic-scholar: outgoing references and incoming
citations. Select the relevant ones, not all. Write
metadata.yamlwith every field from the schema insota/README.md, including the mandatoryverified:block. Use citekeys for papers already in the SOTA, external ids otherwise. - Append the row to
sota/index.mdwith statusdigested. - Add in-scope leads from
cites/cited_byand the synthesis "Citation leads" section tosota/queue.mdaspending, with provenance. - Run
make checkfrom the project root and fix anything it reports.
Rules
- All-or-nothing: if any step cannot complete, revert the partial folder
and record the paper in
queue.mdinstead. - One paper = one folder = one bib entry = one index row (1:1:1).
- While digesting, the only edit allowed in other papers' folders is
upgrading an external id to a citekey in their
cites/cited_bylists.
Done When
sota/papers/<citekey>/haspaper.pdf,synthesis.md,metadata.yamlreferences.bibandsota/index.mdeach gained exactly one entrymake checkpasses