AXM bibliographic tools — DOI resolution, BibTeX retrieval, paper search & PDF download
Project description
axm-bib — Bibliographic tools: search papers, resolve DOIs, download & extract PDFs
Features
- 🔍 Search — Find papers by title/keywords (6-source fan-out: S2 + CrossRef + DBLP + OpenReview + arXiv + OpenAlex, with source visibility)
- 🏛️ OpenReview — Search papers and browse venue proceedings (NeurIPS, ICLR, ICML) with synthetic BibTeX
- 📦 arXiv — Native BibTeX fetching and Atom XML search with guaranteed open-access PDFs
- 🔗 OpenAlex — Cross-referencing 240M+ works: title → DOI, arXiv ID, MAG ID + citation graph
- 🇫🇷 HAL — French academic publications (CNRS/CCSD) with native BibTeX
- 🎯 Universal Resolver — Auto-detect DOI, arXiv, HAL, DBLP, or OpenReview (
openreview:IDor URL) → BibTeX (ID-only, titles rejected) - 🏷️ Venue Enrichment — arXiv entries auto-enriched with venue metadata from S2/DBLP (e.g.
@misc→@inproceedings{…, booktitle={NeurIPS}}) - 🔀 Multi-Ref Merge — Resolve multiple identifiers for the same paper into a single BibTeX entry with field merging, entry type promotion, and coherence check
- 📊 Citation Graph — S2 citations, references, recommendations + OpenAlex cited-by and referenced-works
- 📥 PDF Pipeline — Download, extract, and organize papers in one command
- 📄 Content Extraction — PDF → Markdown + figure PNGs (PyMuPDF)
- 🪃 OA Fallback — Direct download from arXiv and ACL Anthology when Unpaywall has no URL
- 🪝 Protocol Hook — Automatically extract paper metadata for AXM protocol sessions
- 🤖 MCP Integration — Auto-discovered tools via
axm-mcp
Installation
uv add axm-bib
Quick Start
# Search papers
axm-bib search "attention is all you need"
# Resolve any identifier to BibTeX (DOI, arXiv, HAL, DBLP, OpenReview)
axm-bib resolve "arXiv:1706.03762"
axm-bib resolve "10.1145/363235.363259"
# Merge multiple IDs for the same paper
axm-bib resolve "10.1234/test" "arXiv:2503.18813"
# Download, extract & organize a paper (full pipeline)
axm-bib pdf 10.48550/arXiv.1706.03762
axm-bib pdf arXiv:2503.18813
# Browse citation graph
axm-bib graph 10.1145/363235.363259 --direction citations
Pipeline Output
axm-bib pdf creates a complete paper folder:
~/axm/papers/vaswani2017attention/
├── vaswani2017attention.pdf # downloaded PDF
├── paper.bib # BibTeX entry
├── content.md # extracted Markdown
└── figures/
├── fig_001.png
└── ...
Downloaded: ~/axm/papers/vaswani2017attention
PDF: vaswani2017attention.pdf (1,234,567 bytes)
BibTeX: paper.bib
Markdown: content.md (8,432 words, 45,123 chars, 12 pages)
Figures: 8
CLI Commands
axm-bib search
| Option | Default | Description |
|---|---|---|
QUERY |
required | Search query (title, keywords) |
--limit, -n |
10 | Max results (1–100) |
--abstract/--no-abstract |
True |
Show paper abstracts |
--abstract-len |
0 (full) | Truncate abstracts to N chars |
axm-bib resolve
| Option | Description |
|---|---|
ID [ID ...] |
One or more identifiers: DOI, arXiv ID, HAL ID, DBLP key, or OpenReview URL |
Auto-detects each identifier type and routes to the appropriate client. Multiple IDs for the same paper are merged with coherence check. Titles are rejected — use search instead.
axm-bib graph
| Option | Default | Description |
|---|---|---|
PAPER_ID |
required | Paper ID (DOI, arXiv ID, or S2 paper ID) |
--direction, -d |
citations |
Graph direction: citations, references, or similar |
--limit, -n |
20 | Max results |
--abstract/--no-abstract |
True |
Show paper abstracts |
--abstract-len |
0 (full) | Truncate abstracts to N chars |
axm-bib pdf
| Option | Default | Description |
|---|---|---|
REF |
required | Any identifier (DOI, arXiv ID, HAL ID, etc.) |
--output-dir, -o |
~/axm/papers/ |
Output directory |
Downloads the PDF via multi-source URL chain (S2 OA → arXiv direct → Unpaywall → DOI fallbacks),
extracts Markdown + figures, and writes paper.bib — all in one step.
axm-bib extract
| Option | Default | Description |
|---|---|---|
PDF_PATH |
required | Path to a local PDF file |
--output-dir, -o |
auto | Output directory |
--figures/--no-figures |
True |
Extract figures as PNG |
Standalone extraction for PDFs you already have.
MCP Integration
axm-bib tools are automatically discovered by axm-mcp:
| Tool | Description |
|---|---|
bib_search |
Search papers by keywords |
bib_resolve |
Resolve one or more identifiers to BibTeX (multi-ref merge) |
bib_resolve_batch |
Batch-resolve N papers × M identifiers each |
bib_pdf |
Full pipeline: download + extract + BibTeX (any identifier) |
bib_graph |
Citation graph traversal (S2 + OpenAlex fallback) |
bib_extract |
Extract a local PDF to Markdown + figures |
Configuration
| Variable | Required | Description |
|---|---|---|
UNPAYWALL_EMAIL |
For PDF downloads | Email for Unpaywall API (prompted on first pdf use) |
S2_API_KEY |
No | Semantic Scholar API key for higher rate limits |
# Optional: set S2 API key for higher rate limits
export S2_API_KEY="your-api-key"
Config file: ~/.config/axm-bib/config.toml — see Configuration reference for details.
Development
git clone https://github.com/axm-protocols/axm-bib.git
cd axm-bib
uv sync --all-groups
uv run pytest
uv run ruff check src/ # lint
License
Apache License 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file axm_bib-0.3.0.tar.gz.
File metadata
- Download URL: axm_bib-0.3.0.tar.gz
- Upload date:
- Size: 255.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38c503f8a15490218e17d9b11047782e249466116747532ecc874843a15bef0f
|
|
| MD5 |
08856f9672d144fc9d6a78d65fba8be5
|
|
| BLAKE2b-256 |
efc0501211b692a7ea2bc3392428a9c6490852c76b54339e238467b1908b896a
|
Provenance
The following attestation bundles were made for axm_bib-0.3.0.tar.gz:
Publisher:
publish.yml on axm-protocols/axm-bib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
axm_bib-0.3.0.tar.gz -
Subject digest:
38c503f8a15490218e17d9b11047782e249466116747532ecc874843a15bef0f - Sigstore transparency entry: 1050483770
- Sigstore integration time:
-
Permalink:
axm-protocols/axm-bib@b7a86f05a708902551ee6d6262a2765ac832960c -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/axm-protocols
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b7a86f05a708902551ee6d6262a2765ac832960c -
Trigger Event:
push
-
Statement type:
File details
Details for the file axm_bib-0.3.0-py3-none-any.whl.
File metadata
- Download URL: axm_bib-0.3.0-py3-none-any.whl
- Upload date:
- Size: 68.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
695f85fa5ee0eadd0e0aa7ca2fd2b5fc59db9c2d6acb503e243dee6832e227d1
|
|
| MD5 |
e66c31adfc01132b71ae8b9b8eb1e2f8
|
|
| BLAKE2b-256 |
4c1fa801e339bdefc1d47b23198898964f6be9db96c8f2730968e4c85b4c1c54
|
Provenance
The following attestation bundles were made for axm_bib-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on axm-protocols/axm-bib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
axm_bib-0.3.0-py3-none-any.whl -
Subject digest:
695f85fa5ee0eadd0e0aa7ca2fd2b5fc59db9c2d6acb503e243dee6832e227d1 - Sigstore transparency entry: 1050483772
- Sigstore integration time:
-
Permalink:
axm-protocols/axm-bib@b7a86f05a708902551ee6d6262a2765ac832960c -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/axm-protocols
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b7a86f05a708902551ee6d6262a2765ac832960c -
Trigger Event:
push
-
Statement type: