io.github.Hylouis233/bibverify
Provides preprints for reference verification and DOI-free retrieval in arXiv categories.
Computer science bibliography source for verifying and updating references in computer science.
Biomedical literature database for verifying references in biomedical fields.
AI-powered academic search engine for verifying references across multiple disciplines.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@io.github.Hylouis233/bibverifyverify my references.bib file"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bibverify
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.
Related MCP server: academic-mcp
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:
uvx bibverify --versionStarting 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:
npx --yes @hylouis233/bibverify --version
pnpm dlx @hylouis233/bibverify --version
bunx @hylouis233/bibverify --versionFor a persistent CLI in an isolated Python environment, use uv tool or pipx:
uv tool install bibverifypipx install bibverifyInside a virtual environment, regular pip also works:
python -m pip install --upgrade bibverifyEach release also provides smoke-tested native packages on GitHub Releases. Beginning with v0.4.0, the release matrix covers Windows x64 plus macOS and Linux on both x64 and ARM64. 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:
docker run --rm ghcr.io/hylouis233/bibverify:0.4.0 --versionPackage-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
bibverify doi 10.1038/nature12373 --key example2013For a machine-readable response:
bibverify doi 10.1038/nature12373 --jsonVerify a .bib file
Create a starter configuration:
bibverify config initPlace references.bib next to the configuration and run:
bibverify check --config config.jsonYou can override the input and output paths from the command line:
bibverify check references.bib --config config.json --output-dir bibverify-outputInspect results without writing any file:
bibverify check references.bib --dry-run --jsonAfter reviewing the report, explicitly apply high-confidence field updates. Bibverify creates a byte-for-byte backup first:
bibverify check references.bib --applyPowerShell example:
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:
bibverify config.json
bibverify --doi 10.1038/nature12373 --key example2013Configuration
A minimal configuration looks like this:
{
"language": "EN",
"bib_file": "references.bib",
"encoding": "auto",
"output_dir": "bibverify-output",
"user_info": {
"email": "your_email@example.com",
"app_name": "Bibverify"
}
}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:
Environment variable | Used for |
| Crossref polite pool and contact information |
| OpenAlex |
| Semantic Scholar |
| PubMed/NCBI |
| CORE |
PowerShell:
$env:BIBVERIFY_EMAIL = 'you@example.com'
$env:BIBVERIFY_OPENALEX_API_KEY = '...'
bibverify check --config config.jsonBash or Zsh:
export BIBVERIFY_EMAIL='you@example.com'
export BIBVERIFY_OPENALEX_API_KEY='...'
bibverify check --config config.jsonQuery and matching settings
{
"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
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:
Code | Meaning |
| Verification completed and metadata is consistent |
| Runtime error reserved for uncategorized command failures |
| Metadata differences or high-confidence updates exist |
| Ambiguous, not-found, or identifier-conflict entries require review |
| A provider was unavailable and verification is incomplete |
| The 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 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:
bibverify mcp --config config.json --workspace-root .MCP client configuration:
{
"mcpServers": {
"bibverify": {
"command": "bibverify",
"args": ["mcp", "--config", "config.json"]
}
}
}The npm launcher can be used directly by Node-oriented MCP clients:
{
"mcpServers": {
"bibverify": {
"command": "npx",
"args": ["--yes", "@hylouis233/bibverify", "mcp"]
}
}
}Containerized stdio MCP keeps the current directory as the only writable workspace:
docker run --rm -i -v "$PWD:/workspace" ghcr.io/hylouis233/bibverify:0.4.0 \
mcp --workspace-root /workspaceStart Streamable HTTP:
bibverify mcp --transport streamable-http --config config.jsonMCP 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:
bibverify agent init --target codex --output .bibverify-agent --config config.json
bibverify doctor --config config.jsonDistribution channels
Channel | Command or artifact | Availability |
PyPI |
| Published |
uv |
| Published |
pipx |
| Published |
npm |
| Planned for v0.4.0; not published yet |
pnpm / Bun |
| Planned for v0.4.0; not published yet |
GHCR |
| Planned for v0.4.0; not published yet |
Native | Windows x64; macOS and Linux x64/ARM64 | Planned for v0.4.0; not published yet |
Homebrew | Release asset | Submission manifest planned for v0.4.0; catalog not live |
Scoop | Release asset | Submission manifest planned for v0.4.0; catalog not live |
WinGet | Release assets | Submission manifests planned for v0.4.0; catalog not live |
MCP Registry | Published 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
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
git clone https://github.com/Hylouis233/bibverify.git
cd bibverify
python -m venv .venvAfter activating the environment:
python -m pip install -e ".[dev]"
python -m pytest
python -m ruff check src tests tools bib_check.py
python -m ruff format --check src tests tools bib_check.py
python -m mypy
python -m build
python -m twine check dist/*
python -m bibverify benchmark --dataset benchmarks/cases.json
python -m pip_audit . --strict
(cd npm && npm ci && npm test && npm pack --dry-run)
docker build --tag bibverify:dev .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:
@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
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to verify BibTeX citations and URLs against academic databases like Semantic Scholar and DBLP. It allows users to ensure bibliography accuracy and link accessibility directly within their research workflows.1MIT
- AlicenseAqualityCmaintenanceUnified academic search MCP server that searches open literature (arXiv, bioRxiv, medRxiv, PMC), CNKI, and Web of Science, with browser-backed authentication, local paper library, and export to multiple formats.212MIT
- AlicenseBqualityDmaintenanceAutomatically enriches BibTeX citations with missing metadata (DOI, venue, etc.) from arXiv, DBLP, and CrossRef via an MCP server for AI assistants.2MIT
- AlicenseNot gradedqualityDmaintenanceSearches academic references from arXiv, DBLP, Semantic Scholar, and OpenAlex concurrently and generates BibTeX citations.10MIT
Related MCP Connectors
Catch AI-fabricated citations (real DOI + fake title). Retraction, open-access, 10,000+ CSL styles.
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Hylouis233/bibverify'
If you have feedback or need assistance with the MCP directory API, please join our Discord server