Bibverify

io.github.Hylouis233由 GitHub 帳號 Hylouis233 發布v0.3.0更新於 Nov 3, 2026

Verify and repair BibTeX references with DOI-first MCP tools.

已驗證STDIO僅桌面知識與記憶開發者工具

概覽

AI 產生的概覽

Bibverify 依學術中介資料 API 核驗並修復 BibTeX 參考文獻,讓助理能檢查條目、把 DOI 轉成 BibTeX。

可以做什麼
  • 把 DOI 轉成可指定引用鍵的 BibTeX 條目
  • 排序並說明某筆參考文獻會查詢哪些中介資料來源
  • 說明建議的欄位變更及其依據,供套用前審閱
  • 核驗整份 .bib 檔案,產出報告、備份與待複核清單,預設不覆寫原始檔
適用情境
適合助理處理參考文獻的情境:確認條目是否真實存在,以及標題、作者、年份、出處與頁碼是否與 Crossref、OpenAlex、PubMed、arXiv 等來源一致,或把識別碼轉成 BibTeX 條目。
執行需求
以本機 Python 套件執行(Python 3.11–3.14),可用 uvx、pipx 或 pip 安裝,也可透過 npm 啟動器、原生套件或容器執行。需要能連線至已啟用的中介資料 API,並需要設定檔;選用的 API 金鑰與聯絡信箱可透過 BIBVERIFY_EMAIL、BIBVERIFY_OPENALEX_API_KEY、BIBVERIFY_SEMANTIC_SCHOLAR_API_KEY、BIBVERIFY_PUBMED_API_KEY、BIBVERIFY_CORE_API_KEY 等環境變數提供。
安裝前請注意
套用更新會寫入檔案,但會先建立逐位元組備份,dry-run 則完全不寫入。選用的來源金鑰與聯絡信箱可能存放在本機設定或環境變數中。查詢會把參考文獻中介資料傳送給第三方學術 API。查無紀錄並不代表該文獻是偽造的,工具也不評斷研究品質。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Bibverify,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

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_conflict instead 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-After support for 429/5xx responses.
  • 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:

bash
uvx bibverify --version

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:

bash
npx --yes @hylouis233/bibverify --versionpnpm dlx @hylouis233/bibverify --versionbunx --bun @hylouis233/bibverify --version

For a persistent CLI in an isolated Python environment, use uv tool or pipx:

bash
uv tool install bibverify
bash
pipx install bibverify

Inside a virtual environment, regular pip also works:

bash
python -m pip install --upgrade bibverify

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:

bash
docker run --rm ghcr.io/hylouis233/bibverify:0.4.0 --version

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

bash
bibverify doi 10.1038/nature12373 --key example2013

For a machine-readable response:

bash
bibverify doi 10.1038/nature12373 --json

Verify a .bib file

Create a starter configuration:

bash
bibverify config init

Place references.bib next to the configuration and run:

bash
bibverify check --config config.json

You can override the input and output paths from the command line:

bash
bibverify check references.bib --config config.json --output-dir bibverify-output

Inspect results without writing any file:

bash
bibverify check references.bib --dry-run --json

After reviewing the report, explicitly apply high-confidence field updates. Bibverify creates a byte-for-byte backup first:

bash
bibverify check references.bib --apply

PowerShell example:

powershell
py -m bibverify check '.\Bibliography\references.bib' --output-dir '.\Verification results'

The v0.2 forms remain available for compatibility, although new scripts should use subcommands:

bash
bibverify config.jsonbibverify --doi 10.1038/nature12373 --key example2013

Configuration

A minimal configuration looks like this:

json
{  "language": "EN",  "bib_file": "references.bib",  "encoding": "auto",  "output_dir": "bibverify-output",  "user_info": {    "email": "[email protected]",    "app_name": "Bibverify"  }}

See config_template.json for every commonly used option.

Path behavior is intentionally predictable:

  • Relative bib_file and output_dir values are resolved from the directory containing config.json, not the shell's current directory.
  • If output_dir is 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:

Environment variableUsed for
BIBVERIFY_EMAILCrossref polite pool and contact information
BIBVERIFY_OPENALEX_API_KEYOpenAlex
BIBVERIFY_SEMANTIC_SCHOLAR_API_KEYSemantic Scholar
BIBVERIFY_PUBMED_API_KEYPubMed/NCBI
BIBVERIFY_CORE_API_KEYCORE

PowerShell:

powershell
$env:BIBVERIFY_EMAIL = '[email protected]'$env:BIBVERIFY_OPENALEX_API_KEY = '...'bibverify check --config config.json

Bash or Zsh:

bash
export BIBVERIFY_EMAIL='[email protected]'export BIBVERIFY_OPENALEX_API_KEY='...'bibverify check --config config.json

Query and matching settings

json
{  "query_settings": {    "delay_between_requests": 0.5,    "timeout": 10,    "connect_timeout": 3.05,    "read_timeout": 20,    "max_retries": 3,    "backoff_factor": 0.5,    "stop_on_first_match": true,    "match_threshold": 0.86,    "ambiguous_threshold": 0.68,    "auto_update_threshold": 0.92,    "cache_enabled": true,    "cache_ttl_hours": 168,    "cache_path": ".bibverify-cache.sqlite3"  }}

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

text
bibverify check [BIB_FILE] [--config PATH] [--output-dir DIR] [--format txt|json|jsonl|csv] [--dry-run|--apply] [--json]bibverify doi DOI [--key KEY] [--config PATH] [--json]bibverify config init [--output PATH] [--force]bibverify doctor [--config PATH] [--json]bibverify providers list [--json]bibverify cache clear [--config PATH]bibverify benchmark [--dataset PATH]bibverify mcp [--config PATH] [--workspace-root DIR] [--transport stdio|streamable-http]bibverify agent init [--target generic|codex|claude|cursor] [--output PATH]bibverify skill export [--target ...]

Exit codes:

CodeMeaning
0Verification completed and metadata is consistent
1Runtime error reserved for uncategorized command failures
2Metadata differences or high-confidence updates exist
3Ambiguous, not-found, or identifier-conflict entries require review
4A provider was unavailable and verification is incomplete
5The input file, configuration, or entry is invalid

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 in txt, json, jsonl, or csv.
  • 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:

  1. A DOI promotes Crossref and uses its exact endpoint first. A resolvable DOI with a materially different title stops as identifier_conflict.
  2. PMID, PMCID, or biomedical hints promote PubMed and Europe PMC.
  3. An arXiv identifier promotes arXiv.
  4. 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:

bash
bibverify mcp --config config.json --workspace-root .

MCP client configuration:

json
{  "mcpServers": {    "bibverify": {      "command": "bibverify",      "args": ["mcp", "--config", "config.json"]    }  }}

The npm launcher can be used directly by Node-oriented MCP clients:

json
{  "mcpServers": {    "bibverify": {      "command": "npx",      "args": ["--yes", "@hylouis233/bibverify", "mcp"]    }  }}

Containerized stdio MCP keeps the current directory as the only writable workspace:

bash
docker run --rm -i -v "$PWD:/workspace" ghcr.io/hylouis233/bibverify:0.4.0 \  mcp --workspace-root /workspace

Start Streamable HTTP:

bash
bibverify mcp --transport streamable-http --config config.json

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_bibtex
  • rank_lookup_sources
  • explain_update_diff
  • verify_bib_file

Generate setup files for Codex, Claude, Cursor, or a generic MCP client:

bash
bibverify agent init --target codex --output .bibverify-agent --config config.jsonbibverify doctor --config config.json

Distribution channels

ChannelCommand or artifactAvailability
PyPIpython -m pip install bibverifyPublished
uvuvx bibverify or uv tool install bibverifyPublished
pipxpipx install bibverifyPublished
npmnpx --yes @hylouis233/bibverifyPlanned for v0.4.0; not published yet
pnpm / Bunpnpm dlx @hylouis233/bibverify / bunx --bun @hylouis233/bibverifyPlanned for v0.4.0; not published yet
GHCRdocker pull ghcr.io/hylouis233/bibverify:0.4.0Planned for v0.4.0; not published yet
NativeWindows x64; macOS and glibc 2.28+ Linux x64/ARM64Planned for v0.4.0; not published yet
HomebrewRelease asset bibverify.rbSubmission manifest planned for v0.4.0; catalog not live
ScoopRelease asset bibverify.jsonSubmission manifest planned for v0.4.0; catalog not live
WinGetRelease assets Hylouis233.Bibverify*.yamlSubmission manifests planned for v0.4.0; catalog not live
MCP Registryio.github.Hylouis233/bibverifyPublished discovery metadata; install through one of the package entries above

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

python
from bibverify.checker import BibTeXChecker
checker = BibTeXChecker("config.json")summary = checker.run()print(summary["counts"])

from bib_check import BibTeXChecker remains compatible during the 0.3 release line, but new code should use the package import above.

Development

bash
git clone https://github.com/Hylouis233/bibverify.gitcd bibverifypython -m venv .venv

After activating the environment:

bash
python -m pip install -e ".[dev]"python -m pytestpython -m ruff check src tests tools bib_check.pypython -m ruff format --check src tests tools bib_check.pypython -m mypypython -m buildpython -m twine check dist/*python -m bibverify benchmark --dataset benchmarks/cases.jsonpython -m pip_audit . --strict(cd npm && npm ci && npm test && npm pack --dry-run)docker build --tag bibverify:dev .

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:

bibtex
@software{bibverify2025,  title = {Bibverify: A Multi-Platform BibTeX Reference Verification Tool},  author = {Hong Liu},  year = {2025},  url = {https://github.com/Hylouis233/bibverify},  doi = {10.5281/zenodo.17338090}}

License

MIT License

來源:README.md,提交 21009b3

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.3.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分