Multi-source citation verification and reference formatting engine. Verifies every citation against PubMed, CrossRef, Semantic Scholar, and bioRxiv/medRxiv before inclusion. Formats references in Vancouver, APA, AMA, Nature, Chicago, or IEEE style. Trigger phrases include: "verify citations", "format references", "check references", "write references", "citation verification", "verify my reference list", "format bibliography", "check my citations".
This skill manages all citation verification, reference formatting, and bibliography generation for the scientific-paper-writer plugin. Every citation must be verified against at least one authoritative database before inclusion. No citation may ever be fabricated.
Note: All reference verification logic is consolidated in this skill. The v0.2.0
skills/paper-components/directory has been removed.
Citations are verified in a strict, ordered pipeline. Each source is attempted in sequence. The pipeline advances to the next source only when a fallback trigger fires (no results returned, OR metadata missing critical fields: title, authors, year).
Use mcp__plugin_pubmed_PubMed__search_articles or mcp__claude_ai_PubMed__search_articles
to search by title or author+year combination.
Search query: "<article title>"
Alternative: "<last name of first author> <year>"
If a match is found, retrieve full metadata with mcp__plugin_pubmed_PubMed__get_article_metadata
or mcp__claude_ai_PubMed__get_article_metadata. Extract: authors, title, journal,
year, volume, issue, pages, DOI, PMID.
Fallback trigger: No results returned, OR metadata missing title/authors/year. Proceed to Step 2.
Use WebFetch to query the CrossRef API:
URL: https://api.crossref.org/works?query=<URL-encoded-title>&rows=3
Parse the JSON response. For each item in message.items[], extract:
DOI — the DOI stringauthor[] — each entry has given and family fieldstitle[] — article title (first element)container-title[] — journal name (first element)published.date-parts[] — year from first elementvolume — volume numberissue — issue numberpage — page rangeMatch by comparing title similarity (case-insensitive, ignoring punctuation). Accept if title similarity >85%.
Fallback trigger: No results returned, OR title similarity <85% for all results, OR metadata missing title/authors/year. Proceed to Step 3.
Use WebFetch to query the Semantic Scholar API:
URL: https://api.semanticscholar.org/graph/v1/paper/search?query=<URL-encoded-title>&limit=3&fields=title,authors,year,venue,externalIds
Parse the JSON response. For each item in data[], extract:
paperId — Semantic Scholar paper IDtitle — article titleauthors[].name — author namesyear — publication yearvenue — journal or conference nameexternalIds.DOI — DOI (if available)externalIds.PubMed — PMID (if available)Fallback trigger: No results returned, OR metadata missing title/authors/year. Proceed to Step 4.
Use mcp__claude_ai_bioRxiv__search_preprints to search for the article. If found,
retrieve full metadata with mcp__claude_ai_bioRxiv__get_preprint.
Additionally, use mcp__claude_ai_bioRxiv__search_published_preprints to check
whether the preprint has been formally published in a peer-reviewed journal.
Fallback trigger: No results returned across any source. Mark citation as unverified (see Section 6).
After retrieval from any source, normalise all citation metadata into the following standardised fields:
| Field | Format | Example |
|---|---|---|
authors | List of "LastName Initials" | ["Page MJ", "McKenzie JE", "Bossuyt PM"] |
title | Sentence case | The PRISMA 2020 statement: an updated guideline for reporting systematic reviews |
journal | Full name (abbreviate per style) | BMJ / The BMJ |
year | 4-digit integer | 2021 |
volume | String | 372 |
issue | String or null | null |
pages | String with en-dash | n71 |
DOI | Without URL prefix | 10.1136/bmj.n71 |
PMID | String or null | 33782057 |
source_database | Origin of metadata | PubMed / CrossRef / SemanticScholar / bioRxiv |
family + first letter(s) of givenWhen the same paper is found across multiple databases, merge records to produce the most complete metadata set.
Detection criteria (any one is sufficient):
Merge strategy:
When a citation is found on bioRxiv or medRxiv:
mcp__claude_ai_bioRxiv__search_published_preprints with the preprint DOI
or title[NOTE: This preprint has been published as: <full published reference>. Consider updating the citation.][Preprint — not yet peer-reviewed]After all references are formatted, perform a bidirectional audit:
[1], [2], [1-3]), confirm a
corresponding entry exists in the reference list[WARNING: In-text citation [N] has no matching reference][WARNING: Reference N is listed but never cited in-text]When a citation cannot be verified through any of the four pipeline sources:
[UNVERIFIED — not found in PubMed, CrossRef, Semantic Scholar, or bioRxiv. Please check manually]
This flag is appended after the reference entry. The reference is retained exactly as the user provided it, but the flag alerts to manual verification need.
Never fabricate. If the user provides incomplete citation information and no database match is found, do not guess missing fields. Instead:
[year unknown], [volume/pages unknown], [DOI unknown][UNVERIFIED] flagThe citation style is determined by:
citation_style field in PAPER_CONTEXT.md (if present)See references/citation-styles.md for complete formatting rules and examples for
all six supported styles:
| Style | Typical Use |
|---|---|
| Vancouver | Biomedical journals (JAMA, BMJ, Lancet) — default |
| APA | Psychology, social sciences, nursing |
| AMA | American Medical Association journals |
| Nature | Nature family journals |
| Chicago | Humanities-adjacent health sciences, author-date |
| IEEE | Biomedical engineering, health informatics |
/write-references or "write references"/verify-citations or "verify citations"| Error Condition | Action |
|---|---|
| API timeout or rate limit | Wait 2 seconds, retry once. If still fails, note source as unavailable and proceed to next. |
| Malformed API response | Log the error, skip that source, proceed to next. |
| No source materials or text provided | Ask user to provide manuscript text or citation list. |
| Ambiguous citation (multiple close matches) | Present top 2-3 candidates to the user for selection. |
| User-provided citation contradicts database | Flag discrepancy: [DISCREPANCY: user-provided <field> does not match <database>. Please verify.] |
references/citation-styles.md — Full formatting rules for all 6 citation styles