jabref-mcp
A Model Context Protocol server that lets OpenCode (and other MCP clients) work with your JabRef 5.x bibliography:
- Search your library (title / author / year / keywords / DOI / full text)
- Read full records (BibTeX + abstract) and resolve attached PDF paths, so the assistant can read and summarize papers itself
- Add new entries — only through JabRef's official import API, never by editing your
.bibfiles
Why this shape (JabRef 5.x)
JabRef 5.x has no HTTP read API (that arrives in 6.x). So:
| Operation | Mechanism |
|---|---|
| Search / read / list | parse your .bib file(s) locally |
| Add an entry | jabref --importBibtex "<bibtex>" — the exact channel the official browser extension uses. With Remote operation enabled, the running JabRef imports into the currently open library, with its own duplicate detection. |
Requirements
- Python ≥ 3.10 and uv
- JabRef installed, with
jabrefon PATH (orJABREF_MCP_JABREF_BINset) - For adding entries: JabRef running with Listen to remote operation on port enabled (Preferences → Network — the same requirement as the official browser extension)
Configuration (environment variables)
| Variable | Default | Meaning |
|---|---|---|
JABREF_MCP_BIB_FILES |
*.bib in the working directory |
Comma-separated .bib paths |
JABREF_MCP_PDF_ROOT |
— | Optional base dir for resolving relative attached paths |
JABREF_MCP_JABREF_BIN |
jabref / JabRef on PATH |
JabRef executable or command prefix (e.g. flatpak-spawn --host jabref) |
JABREF_MCP_IMPORT_TIMEOUT |
90 |
Import timeout (seconds) |
Run / install
From a checkout (development):
uv sync
uv run jabref-mcp
From PyPI (published releases):
uvx jabref-mcp
Before a release is published, uvx can build straight from the GitHub repo:
uvx --from git+https://github.com/ast0815/jabref-mcp jabref-mcp
Register with OpenCode
A project-level registration is already provided in opencode.jsonc (it runs
uvx jabref-mcp). To use it, start OpenCode from this directory. Alternatively
register globally:
opencode mcp add jabref -- uvx jabref-mcp
(Add --global to make it available in every project; then set
JABREF_MCP_BIB_FILES to your real libraries.) Check the connection with
opencode mcp list — it should report connected. Tools appear under
tools.jabref.*.
Tools
list_libraries— configured libraries and entry countslist_entries— overview of every entrysearch— keyword search with field / author / year / tag filtersget_entry— full BibTeX + resolved attached files for a citation keyget_pdf— absolute paths of the PDFs attached to an entry (feed to the assistant's PDF reader for summarizing)add_entry— import BibTeX via the official JabRef CLI (the only write path)
Notes
- The server reads the
.bibfiles; it never writes to them. Additions go through JabRef. Petty duplicate detection, group assignment, etc. are handled by JabRef itself. - If your library changes in JabRef, re-run
search/get_entry— the files are re-read per call. - JabRef 6.x will (eventually) ship its own REST API; this server is a drop-in
for 5.x and can later be re-pointed at
localhost:23119.
Release files for jabref-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jabref_mcp-0.1.0.tar.gz | 129.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jabref_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 143.1 kB
Release files / jabref_mcp-0.1.0.tar.gz
| Download URL | jabref_mcp-0.1.0.tar.gz |
|---|---|
| Size | 129.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e21d44d5922fc2a4175d2db7b0d554109eaa66b0473d168c9e818e467a62ba7c
|
|
BLAKE2b-256 checksum How to use checksums |
eb1b679c2bee736f1284389f3de7bc556a2fc0c891b20f2194521096da140395
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / jabref_mcp-0.1.0-py3-none-any.whl
| Download URL | jabref_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
53d5ab7855641dee741e159bdd1b29907f61df99fcd432d0cc7d8fd5f94622e8
|
|
BLAKE2b-256 checksum How to use checksums |
ac65f0e88c067b31534eedea511bc3cfc941ae2e7d09ef76f976b8cdd85b59ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log