
Bibverify
io.github.Hylouis233由 GitHub 账号 Hylouis233 发布v0.3.0更新于 Nov 3, 2026
Verify and repair BibTeX references with DOI-first MCP tools.
概览
Bibverify 依据学术元数据接口核验并修复 BibTeX 参考文献,让助手能校验条目、把 DOI 转成 BibTeX。
- 可以做什么
- 把 DOI 转换为带指定引用键的 BibTeX 条目
- 排序并解释某条参考文献会查询哪些元数据来源
- 说明建议的字段修改及其依据,供应用前审阅
- 核验整个 .bib 文件,生成报告、备份与待复核清单,默认不覆盖原文件
- 适用场景
- 适合助手处理参考文献的场景:确认条目是否真实存在,以及标题、作者、年份、出处和页码是否与 Crossref、OpenAlex、PubMed、arXiv 等来源一致,或把标识符转成 BibTeX 条目。
- 运行要求
- 以本地 Python 包运行(Python 3.11–3.14),可用 uvx、pipx 或 pip 安装,也可通过 npm 启动器、原生包或容器运行。需要能访问已启用的元数据接口,并需要配置文件;可选的 API 密钥和联系邮箱可通过 BIBVERIFY_EMAIL、BIBVERIFY_OPENALEX_API_KEY、BIBVERIFY_SEMANTIC_SCHOLAR_API_KEY、BIBVERIFY_PUBMED_API_KEY、BIBVERIFY_CORE_API_KEY 等环境变量提供。
安装
在 SourceWeft 中
- 打开 控制台中的 Bibverify,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Bibverify
Verify bibliographic existence and metadata consistency without destructive edits.
Chinese · Install · Quick start · MCP · Development
[PyPI] [Python versions] [MIT License] [CI]
Bibverify is a BibTeX metadata verification tool for researchers, editors, automation, and AI assistants. It starts with exact DOI, PMID, PMCID, or arXiv identifiers and then scores candidates from title, author, year, venue, and pagination evidence.
Bibverify evaluates whether a bibliographic record can be located in the queried sources and whether its metadata agrees. It does not prove that research findings are true, data is authentic, or a venue is reputable. A missing database record is not evidence that a reference is fabricated. By default, the source .bib file is never overwritten.
Highlights
- Identifier-first lookup for DOI, PMID, PMCID, and arXiv IDs.
- Crossref, OpenAlex, Semantic Scholar, PubMed, Europe PMC, CORE, DBLP, arXiv, bioRxiv, and more.
- Explainable multi-signal matching across identifiers, title, authors, year, venue, and pages. A resolvable DOI with a materially different title becomes
identifier_conflictinstead of being hidden by title search. - Structured provider outcomes distinguish a genuine no-match from rate limiting, authentication, network, parsing, and provider failures.
- Non-destructive merging preserves
abstract,keywords,file,note, and custom fields that providers do not return; conflicting persistent identifiers are never overwritten automatically. - A shared connection pool with retries, exponential backoff, and
Retry-Aftersupport for429/5xxresponses. - An expiring SQLite cache for successful GET responses; failures are never cached.
- Cross-platform path, encoding, Unicode filename, UTF-8 BOM, and CRLF handling.
- JSON output, stable exit codes, a Python API, and an MCP server built on the official SDK.
- Atomic output writes and byte-preserving backups.
Requirements
- Windows, macOS, or Linux
- Network access to the enabled metadata APIs
- Python 3.11–3.14 when using the Python distribution; npm, containers, and native packages bundle their runtime
GitHub Actions tests all three operating systems across all four supported Python versions.
Install
The current published release is v0.3.0. This branch prepares v0.4.0; commands marked v0.4.0 become usable only after their linked npm, GHCR, or GitHub Release artifact has been published.
Run without a permanent installation:
Starting with v0.4.0, Node.js users can use the zero-dependency npm launcher. It downloads the
matching native release, verifies SHA256SUMS, and forwards every argument and exit code:
For a persistent CLI in an isolated Python environment, use uv tool or pipx:
Inside a virtual environment, regular pip also works:
Each release also provides smoke-tested native packages on GitHub Releases. Beginning with v0.4.0, the release matrix covers Windows x64 plus macOS and glibc 2.28+ Linux on both x64 and ARM64. musl-based Linux users should use the Python package or container image. Windows ARM64 is not published natively yet because an MCP runtime dependency does not currently provide Windows ARM64 wheels; npm automatically uses the tested x64 build under Windows 11 emulation, or you can use the ARM64 container instead.
The same release publishes a multi-architecture container:
Package-manager manifests are generated from the final release bytes, not from unverified build inputs. Homebrew, Scoop, and WinGet are not live catalog entries yet: v0.4.0 will attach submission- ready manifests to GitHub Release, after which each external catalog still requires onboarding or review. See Distribution channels for rollout status.
Quick start
Convert a DOI to BibTeX
For a machine-readable response:
Verify a .bib file
Create a starter configuration:
Place references.bib next to the configuration and run:
You can override the input and output paths from the command line:
Inspect results without writing any file:
After reviewing the report, explicitly apply high-confidence field updates. Bibverify creates a byte-for-byte backup first:
PowerShell example:
The v0.2 forms remain available for compatibility, although new scripts should use subcommands:
Configuration
A minimal configuration looks like this:
See config_template.json for every commonly used option.
Path behavior is intentionally predictable:
- Relative
bib_fileandoutput_dirvalues are resolved from the directory containingconfig.json, not the shell's current directory. - If
output_diris omitted, output is written next to the input bibliography. encoding: "auto"tries UTF-8 with BOM, UTF-8, and GB18030. It does not fall back to Latin-1 and silently turn unknown bytes into mojibake.
API keys and email
Keys can be stored in a local configuration, but environment variables are safer and harder to commit accidentally:
PowerShell:
Bash or Zsh:
Query and matching settings
connect_timeout and read_timeout separately bound connection setup and response reads; the compatibility timeout field remains available. match_threshold controls automatic candidate acceptance, ambiguous_threshold controls which plausible candidates enter review, and auto_update_threshold is an additional gate for field changes. Higher values are more conservative. Relative cache paths are resolved from the config directory.
The official bioRxiv details route does not provide arbitrary title search. Bibverify therefore calls bioRxiv only for an exact 10.1101/... DOI and leaves title-only discovery to providers whose contracts support it, such as Crossref and Europe PMC.
CLI reference
Exit codes:
With --json, stdout contains JSON only. Diagnostics go to stderr, which keeps the command safe for CI and scripts.
Output files
For an input named references.bib, Bibverify may create:
bibverify_report_<timestamp>.<format>: complete states, candidates, provider errors, confidence, and field provenance intxt,json,jsonl, orcsv.references_backup_<timestamp>.bib: byte-for-byte copy of the source.references_updated_<timestamp>.bib: complete bibliography after non-destructive merging; omitted when nothing changes.references_review_<timestamp>.bib: ambiguous, not-found, unavailable-source, identifier-conflict, or invalid entries; omitted when nothing needs review.
The report-level complete value is true only when every entry completed verification. A rate-limited or unreachable provider makes it false even if another source found a candidate. Each field_diffs record includes original/suggested values, source, confidence, normalized equivalence, action, and reason.
Each output can be disabled independently through output_settings. --dry-run overrides those settings and performs zero writes. The default command only writes proposals; only --apply changes the source after a backup.
Provider ranking
Static priority is only the starting point:
- A DOI promotes Crossref and uses its exact endpoint first. A resolvable DOI with a materially different title stops as
identifier_conflict. - PMID, PMCID, or biomedical hints promote PubMed and Europe PMC.
- An arXiv identifier promotes arXiv.
- Computer-science venue hints promote DBLP.
Unpaywall is currently treated as open-access enrichment, not as a primary bibliographic metadata provider. Provider states distinguish matched, no_match, ambiguous, rate_limited, auth_error, network_error, parse_error, provider_error, and skipped.
MCP and AI assistants
Bibverify uses the official MCP Python SDK and supports local stdio and Streamable HTTP transports.
Start a stdio server:
MCP client configuration:
The npm launcher can be used directly by Node-oriented MCP clients:
Containerized stdio MCP keeps the current directory as the only writable workspace:
Start Streamable HTTP:
MCP treats the configuration directory as its workspace root by default. It rejects config or .bib reads outside that root and blocks report, cache, or update writes outside it. Broaden access only by explicitly setting --workspace-root when starting the server. The official MCP SDK handles protocol negotiation, schemas, structured results, progress, and cancellation.
Available tools:
doi_to_bibtexrank_lookup_sourcesexplain_update_diffverify_bib_file
Generate setup files for Codex, Claude, Cursor, or a generic MCP client:
Distribution channels
The npm package is a small launcher rather than a second implementation. The verification engine
remains the same Python codebase across PyPI, npm, native packages, and containers. Release assets
include SHA256SUMS; npm verifies the selected binary before execution, and Homebrew, Scoop, and
WinGet manifests pin the same release hashes.
Python API
from bib_check import BibTeXChecker remains compatible during the 0.3 release line, but new code should use the package import above.
Development
After activating the environment:
Before pushing, run python tools/fix.py. It applies ruff format and import sorting to
exactly the paths CI checks, then runs CI's ruff check and ruff format --check commands
and fails on anything that needs a manual fix. pre-commit install runs the same command
as a commit hook (see .pre-commit-config.yaml).
CI tests Windows, macOS, and Linux on Python 3.11–3.14, including provider fixtures, golden write-safety tests, lint, typing, coverage, the offline benchmark, dependency auditing, Python and npm package builds, a container smoke test, and a CycloneDX SBOM. GitHub Actions are pinned to commit SHAs, while the MCP Publisher is version-pinned and SHA-256 verified. PyPI and npm use Trusted Publishing with provenance attestations, and GHCR publishes multi-architecture images with an SBOM and build provenance.
benchmarks/cases.json is a small offline regression set covering short-title false positives, DOI conflicts, preprint title variants, Unicode/LaTeX, and fabricated author combinations. It is not a complete scientific evaluation and its scores must not be interpreted as real-world performance ceilings. Contributions of broader, redistributable, human-labeled cases are welcome.
Citation
If Bibverify supports your research, please cite:
License
来源:README.md,提交 21009b3
工具
0版本历史
1- v0.3.0最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分