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 and other BibTeX fields)
- Read full records (BibTeX + abstract) and resolve attached PDF paths, so the assistant can read and summarize papers itself
- Add new entries through JabRef's command-line import, never by editing your
.bibfiles
Why this shape (JabRef 5.x)
JabRef 5.x does not expose a supported HTTP read API for this project, so:
| Operation | Mechanism |
|---|---|
| Search / read / list | parse your .bib file(s) locally |
| Add an entry | jabref --importBibtex "<bibtex>" through JabRef's command-line interface. When JabRef's single-instance/remote-operation feature is enabled, the command can be forwarded to the running instance and its currently open library. |
The MCP transport is stdio: the server is launched as a local process and does not listen on a network port. JabRef's remote-operation setting is a separate JabRef feature.
Requirements
- Python ≥ 3.10 and uv
- JabRef 5.x installed, with
jabrefon PATH (orJABREF_MCP_JABREF_BINset) - To add entries to an already-running JabRef instance, enable Enforce single JabRef instance (and allow remote operations) under Preferences → General. In older JabRef 5.x releases this option may be under Network.
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
uv run jabref-mcp, i.e. the code in this checkout). 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, which handles duplicate detection and library updates.add_entryreturns after dispatching the import; JabRef may still require you to accept it and save the library. After saving, verify withsearchusing stable metadata such as title, DOI, or author because JabRef may replace the submitted citation key. - Configured
.bibfiles are cached, but checked for changes before every read. After JabRef saves a library, the next MCP read automatically reparses only the changed file; restarting the MCP is not required. - This project targets JabRef 5.x. JabRef 6.x has a different CLI/API surface and is not claimed to be supported.
Release files for jabref-mcp 0.2.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.2.0.tar.gz | 135.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jabref_mcp-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 151.5 kB
Release files / jabref_mcp-0.2.0.tar.gz
| Download URL | jabref_mcp-0.2.0.tar.gz |
|---|---|
| Size | 135.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f2fbb26e0ef1ccbd5924d369df280b63d80c20e3babc66cb6104cf61c06b2313
|
|
BLAKE2b-256 checksum How to use checksums |
29d939b7499efa1cb782f31d394b478d9dba2fa2387b198419f482c055e6058e
|
| 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 25, 2026.
Transparency logRelease files / jabref_mcp-0.2.0-py3-none-any.whl
| Download URL | jabref_mcp-0.2.0-py3-none-any.whl |
|---|---|
| Size | 15.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c47942ba2b9cfe371509518b2675d4405805b26cdcd3bc8fdd0db6050d5348a6
|
|
BLAKE2b-256 checksum How to use checksums |
5f65ff66ffa6a4b799a34105759c03c6f308e53e94fa1b26ac327cba044f692b
|
| 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 25, 2026.
Transparency log