pubmed-verifier
Reference checker for AI-fabricated citations: batch-verify PMIDs against PubMed and catch the hallucination existence checks miss — a REAL PMID pointing to a DIFFERENT paper. Five-state citation verification (correct / mismatch / partial / invalid / unknown), citation-context parsing, Crossref DOI cross-check, retraction detection (capped at partial), correct-PMID suggestion, arXiv ID verification, plain-text reference list parsing, formatted reference lists (GB/T 7714 / Vancouver / APA / AMA), OpenAlex DOI fallback for non-Crossref registries, Chinese-reference title search, CSV/JSON claims, HTML/JSON/text reports. Four data sources: NCBI, Europe PMC fallback, Crossref, OpenAlex. Network failures are honestly reported as unverified, never as "not found". Zero dependencies, runs fully local. Triggers: verify PMIDs, check citations, citation audit, reference check, PMID check, batch verify references, AI hallucination detection, verify DOI, DOI check, citation formatting, reference formatter, GB/T 7714.
Rank
62
Safety
84
Downloads
2.0k
Updated
Oct 9, 2026
Version
4.1.0
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 2K downloads reported by the source. Last updated 10/9/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 9, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 9, 2026
- Adoption signal
- 2K downloadsadoption · observed Oct 9, 2026
- Latest release
- 4.1.0release · observed Oct 9, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17dagtwyk21qs6vpz98bzcrh1853t29:pubmed-verifier- Install using `clawhub skill install s17dagtwyk21qs6vpz98bzcrh1853t29:pubmed-verifier` in an isolated environment before connecting it to live workloads.
- No published capability contract is available yet, so validate auth and request/response behavior manually.
- Review the upstream CLAWHUB listing at https://clawhub.ai/docsor1212/pubmed-verifier before using production credentials.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-docsor1212-pubmed-verifier/snapshot"
Documentation
CLAWHUB
155,671 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
--- name: pubmed-verifier license: MIT-0 version: 4.1.0 description: >- Reference checker for AI-fabricated citations: batch-verify PMIDs against PubMed and catch the hallucination existence checks miss — a REAL PMID pointing to a DIFFERENT paper. Five-state citation verification (correct / mismatch / partial / invalid / unknown), citation-context parsing, Crossref DOI cross-check, retraction detection (capped at partial), correct-PMID suggestion, arXiv ID verification, plain-text reference list parsing, formatted reference lists (GB/T 7714 / Vancouver / APA / AMA), OpenAlex DOI fallback for non-Crossref registries, Chinese-reference title search, CSV/JSON claims, HTML/JSON/text reports. Four data sources: NCBI, Europe PMC fallback, Crossref, OpenAlex. Network failures are honestly reported as unverified, never as "not found". Zero dependencies, runs fully local. Triggers: verify PMIDs, check citations, citation audit, reference check, PMID check, batch verify references, AI hallucination detection, verify DOI, DOI check, citation formatting, reference formatter, GB/T 7714. --- # PubMed Citation Verifier v4.1.0 Batch verification of PMID citations via the PubMed E-utilities API. Not just "does this PMID exist" — **does this PMID point to the paper you claim?** Zero dependencies, pure standard library, fully local. ## When to use this skill Invoke it whenever citation truth matters: - "Verify / check these PMIDs / this reference list" (before submission or release) - Auditing citations in AI-generated text (fabricated or mismatched references) - Spot-checking a systematic review's bibliography - "Does PMID 12345678 really say X?" — point-of-doubt verification - Batch QA of a knowledge base's PMID/DOI citations - Automatic invocation: trigger this skill whenever the user asks to "verify/check/audit" citations, PMIDs, DOIs, arXiv preprints or references — no flags needed for a first pass; add `--claims-file` when they supply the expected titles. **Trigger priority & tool choice** — explicit "verify / check / audit citations, references, PMIDs, DOIs" requests invoke this skill first. cite-holmes is for deep research with machine-verified citations; when a request mixes research and verification, run the research first, then this tool for the final reference audit. ## The five-state verdict | Verdict | Meaning | |---------|---------| | ✅ Correct | PMID exists AND matches the claimed paper | | ⚠️ Mismatch | PMID exists but points to a **different** paper (the most common AI hallucination!) | | 🔶 Partial | Some metadata matches (e.g. author+journal but title differs) | | ❌ Invalid | PMID does not exist in PubMed | | ❓ Unknown | Not enough claimed metadata to cross-check — or both data sources unreachable (never misreported as invalid) | **Why existence checks are not enough:** a large share of fabricated citations use REAL PMIDs that point to a different paper from the same year/journal/field — in one of our o
examples/README.txt
claims.sample.csv — reference format for --claims-file - pmid column: PubMed pipeline (full five-state verification) - rows with only arxiv_id (+title): arXiv pipeline (official API check) - doi column: DOI-splice cross-check against the PubMed-registered DOI (PMID rows) / version-of-record pairing check (arXiv rows, v3.3.0) / full five-state verdicts (doi-only rows, v3.4.0) - title: required for verdicts beyond existence-check - expected verdicts (as of v3.4.0): the 31018962 row carries a deliberately inexact title → partial (title mismatch, everything else matches — demonstrates the partial rung, not a data error); the 1706.03762 row → correct; the doi-only 10.1371 row → correct (its second author "Other" is a synthetic placeholder; v3.8.0's mis-attribution cap means a wrong author set would drop it to partial); the 24476887 row (STAP cells) is RETRACTED on purpose → RETRACTED flag with a partial cap — it demonstrates retraction detection, not a data error Run: python3 scripts/verify_pmids.py --claims-file examples/claims.sample.csv Lint first (offline, v3.5.0): python3 scripts/verify_pmids.py --lint-claims examples/claims.sample.csv Bibliography (v3.6.0): refs.sample.bib audits a .bib file directly — python3 scripts/verify_pmids.py --bibliography examples/refs.sample.bib RIS (v3.7.0): refs.sample.ris audits Zotero/EndNote/Mendeley exports — python3 scripts/verify_pmids.py --bibliography examples/refs.sample.ris
README.md
# PubMed Citation Verifier 🔬 [](https://github.com/docsor1212/pubmed-verifier/stargazers) Batch-verify PMID citations against PubMed API. Built for researchers, medical writers, and evidence-based medicine teams. ## 简介(中文) **PubMed 文献引用批量验证工具**——把引用列表交给它,逐条核验 PMID/DOI/arXiv ID 是否真实存在、是否指向你声称的那篇论文(AI 幻觉引用最常见的形态就是「真 PMID 指向别的论文」)。五态判定(正确/不匹配/部分匹配/无效/待确认),撤稿检测全覆盖,网络故障如实标注「未判定」、绝不误报「不存在」。零依赖、纯本地运行。 - **中文文献**:GB/T 7714 格式参考文献可解析(`……标题[J]. 刊名, 年… PMID: xxx`);`--parse-text` 粘贴即核验整张文献表——行内 PMID/DOI 精确路由,中文条目经 OpenAlex 标题检索判定(无编号 ID 也能核) - **参考文献格式化**:`--format-references --citation-style gbt`(另支持 Vancouver/APA/AMA),先验证后排版,只排已验真的条目 - **四数据源**:NCBI PubMed、Europe PMC 自动兜底、Crossref、OpenAlex(DataCite/Zenodo 等非 Crossref 注册的 DOI 也可判定) - **投稿就绪判定 + 审计底稿**:每份报告自带证据链,`--export-audit` 输出可复放的 JSON 工作底稿 ## Why? Academic projects routinely contain hundreds of PMID citations. Manual verification is tedious and error-prone. During our own 225-reference audit, we found 3 invalid PMIDs and 6 cross-domain mismatches — errors that would have undermined the entire project. ## Features - **Batch verification** — Scan entire project directories, extract all PMIDs, verify against PubMed in one run - **Mismatch detection** — Five-state verdicts catch a REAL PMID pointing to a DIFFERENT paper (the most common AI hallucination) - **Metadata validation** — Title, authors, journal and date fuzzy-compared against your claims (DOI cross-checked via Crossref with `--verify-doi`) - **Dual sources** — NCBI E-utilities primary, Europe PMC automatic fallback when NCBI is unreachable - **Network hardening** — Optional NCBI API key (3x faster batches), Crossref polite pool, 429 Retry-After backoff, UA rotation, per-host circuit breaker - **Content matching** — Keyword overlap scoring flags potentially irrelevant citations - **Three citation types in one audit** — PMIDs, DOIs and arXiv IDs (preprints) verified in a single scan; arXiv IDs checked against the official API (nonexistent = fabrication signal); claims rows keyed by DOI get full verdicts, and preprints surface their published version of record - **Claims lint** — `--lint-claims file.csv` validates a claims file offline (ID shapes, missing titles, unknown columns, duplicates) before any verification run - **Bibliography audit** — `--bibliography refs.bib` / `refs.ris` verifies BibTeX and RIS files directly (Zotero/EndNote/Mendeley exports; entries route by PMID > DOI > arXiv with full cross-checks); round-trips with `--export-bibtex` / `--export-ris` - **Plain-text reference list parsing** — `--parse-text refs.txt` verifies a reference list copied straight out of a manuscript draft: numbered entries (`[1]`, `1.`) split cleanly, inline PMID/DOI/arXiv IDs route exactly, and a title-only entry resolves via PubMed title search (honestly labeled `resolved_by: title_search`, never a mismatch source) - **Formatted reference list
_meta.json
{
"ownerId": "kn7b6sjwend7cwwmhf7mdg1wzx82dfbf",
"slug": "pubmed-verifier",
"version": "4.1.0",
"publishedAt": 1791564939147
}references/api_examples.md
# PubMed E-utilities API Quick Reference
## esummary — Article Metadata
```bash
# Single PMID
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=31018962&retmode=json"
# Batch (comma-separated)
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=31018962,22213727&retmode=json"
```
Response fields: `title`, `authors[].name`, `source` (journal), `pubdate`, `volume`, `pages`, `elocationid` (DOI).
Invalid PMID → `{"result": {"pmid": {"error": "cannot get document summary"}}}` (the exact string has varied over time — the verifier only checks for the presence of an `error` key).
## esearch — Find Articles by Query
```bash
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=Gattorno+classification+autoinflammatory&retmode=json&retmax=5"
```
Returns `esearchresult.idlist` → array of PMIDs.
## efetch — Full Abstracts
```bash
# efetch supports TEXT and XML only — retmode=json is NOT valid for efetch
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=37635643&rettype=abstract&retmode=text"
```
## Deep Research Workflow (Systematic PubMed Search)
When the user needs comprehensive medical literature research beyond simple PMID verification:
### Step 1: esearch → keyword search → get PMIDs
```bash
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=<keywords>&retmax=10&sort=relevance" | grep -oP '<Id>\K\d+'
```
### Step 2: esummary → metadata summaries (fast, compact)
```bash
PMIDS="pmid1,pmid2,pmid3"
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=pubmed&id=$PMIDS&retmode=json" > /tmp/pubmed-results.json
python3 -c "
import json
data = json.load(open('/tmp/pubmed-results.json'))
for uid, art in data.get('result', {}).items():
if uid == 'uids': continue
authors = ', '.join([a.get('name','') for a in art.get('authors',[])[:6]])
print(f'PMID {uid}: {art.get(\"title\",\"\")}')
print(f' {art.get(\"fulljournalname\",\"\")} {art.get(\"pubdate\",\"\")};{art.get(\"volume\",\"\")}:{art.get(\"pages\",\"\")}')
print(f' DOI: {art.get(\"elocationid\",\"\")}')
print()
"
```
### Step 3: efetch → full abstracts for key papers
```bash
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=$PMIDS&rettype=abstract&retmode=text"
```
### Pitfalls
- **efetch has no JSON mode** — use `retmode=text` (or XML) only
- **esearch may return unrelated results** — always cross-check with esummary titles
- **Rate limit**: 3 req/s without API key. Add `sleep 0.5` between batches
- **Large author lists**: esummary `authors` array can be 50+ — truncate to first 6 for display
## Rate Limits
- Without API key: 3 requests/second
- With API key (`&api_key=YOUR_KEY`): 10 requests/second
- API key obtained from NCBI Settings page
- Etiquette params: `&tool=pubmed-verifier&[email protected]` (added automatically with `--mailto`)
## Europe PMC (fallback source,AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/docsor1212/skills/pubmed-verifier",
"sourceUrl": "https://clawhub.ai/docsor1212/skills/pubmed-verifier",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T20:21:50.745Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-docsor1212-pubmed-verifier/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-docsor1212-pubmed-verifier/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-09T20:21:50.745Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "2K downloads",
"href": "https://clawhub.ai/docsor1212/pubmed-verifier",
"sourceUrl": "https://clawhub.ai/docsor1212/pubmed-verifier",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T20:21:50.745Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "4.1.0",
"href": "https://clawhub.ai/docsor1212/pubmed-verifier",
"sourceUrl": "https://clawhub.ai/docsor1212/pubmed-verifier",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-10-09T16:55:39.147Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-docsor1212-pubmed-verifier/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-docsor1212-pubmed-verifier/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 4.1.0",
"description": "OpenAlex is now the fourth metadata source: a DOI that Crossref reports 404 gets a second look at OpenAlex before any verdict — DataCite/Zenodo/Chinese-registry DOIs become fully decidable (only unknown-in-BOTH-registries keeps the 404 semantics). Chinese references without any ID are now verifiable: parse-text CJK entries search OpenAlex by their title-shaped segment (verbatim-substring + year gates, resolved_by=openalex_cjk_search, never a mismatch source). --check-net probes five sources; docs add output-shape samples and three worked FAQ scenarios; README gains a Chinese intro. 212 offline + 31 real-network tests green. 觉得有用的话,欢迎 Star(GitHub)或收藏(SkillHub 技能页)。",
"href": "https://clawhub.ai/docsor1212/pubmed-verifier",
"sourceUrl": "https://clawhub.ai/docsor1212/pubmed-verifier",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-10-09T16:55:39.147Z",
"isPublic": true
}
]
}Record generated Oct 9, 2026.
