Mendeley¶
Paperful talks to Mendeley Reference Manager over the cloud REST API
(https://api.mendeley.com). There is no local API. Official behaviour below
is from dev.mendeley.com fetched 2026-09-21.
Lines marked paperful are client rules, not Elsevier’s.
This adapter is seeking testers. Zotero remains the well-tested path. Do not treat a first Mendeley run as proven.
Setup¶
Register an OAuth app at dev.mendeley.com/myapps.html. New apps were still documented as open in 2026. Use the authorization code flow with redirect
http://127.0.0.1:8765/callbackand scopeall.Put the client id and secret in
config.toml(never commit them):manager = "mendeley" [mendeley] client_id = "…" client_secret = "…" # redirect_uri = "http://127.0.0.1:8765/callback"
Environment overrides:
PAPERFUL_MENDELEY_CLIENT_ID/PAPERFUL_MENDELEY_CLIENT_SECRET.On the host (not inside Docker):
uv run paperful session login mendeley. Tokens land instate/mendeley-oauth.json(mode0600).uv run paperful doctorshould show Mendeley API green.
The official Python SDK is unmaintained. Paperful uses httpx.
What the API actually does¶
Topic |
Behaviour |
|---|---|
Auth |
OAuth2 authorization code. Access tokens last one hour. Refresh tokens rotate. |
Versioning |
Every resource needs a vendor |
Pagination |
|
Folders |
Nested via |
Files |
|
Trash |
|
Notes |
Document |
Collection notes |
Mendeley has no standalone notes. |
Duplicate file uploads return 400; paperful treats that as unchanged.
Paperful rules¶
Item keys are UUIDs.
out/folder names keep the hyphens.Folders map to collection paths. There is no Zotero-style
linked_urlPDF.dedupe --applyis refused. Mendeley cannot move a PDF or note onto the keeper.attachmentsreports filename drift and duplicate cloud files (samefilehash, which Mendeley documents as MD5).--fix-broken,--merge-files, and--renamewith--applyupload fromout/and delete the extra cloud file. They do not trash the document.--linkis refused: Mendeley has no linked-file mode. A document with no file row is a missing PDF (run/attach), not a ghost attachment.Docker: headed OAuth must run on the host so the localhost redirect hits the CLI. Do not put client secrets in the image.
Moving a library:
snapshot --pdfs allhere, switchmanager, thenrestore --applyorimporton the other side. The hub isout/.
Commands¶
uv run paperful session login mendeley
uv run paperful doctor
uv run paperful collections
uv run paperful export library.ris --library
uv run paperful import other.bib --apply