
NZBridge enables bidirectional sync between Zotero and Google NotebookLM. Push your research library into NotebookLM for AI-powered analysis, then pull your generated notes back into Zotero — all without leaving your browser.
|
|
|
See NZBridge in action — full walkthrough of forward sync, backward sync, and the Zotero plugin installation.
n2z, NotebookLM), notebook name, note type, and custom user tagsBefore installing NZBridge, make sure you have:
On Chrome/Edge 142+, you must allow the extension to reach Zotero on
localhost:chrome://extensions→ NZBridge → Details → Site settings → Local network access → Allow. See Troubleshooting if collections won't load or syncs time out.
Note that it only works if your NotebookLM language settings is set to english.
NZBridge has two components that work together — you need to install both:
| Component | What it does |
|---|---|
| Zotero Plugin | Runs inside Zotero, exposing your collections and items via a local HTTP server |
| Browser Extension | Runs in Chrome/Edge, providing the popup UI and automating sync with NotebookLM |
nz-bridge.xpi file from the Releases page


Select Install Plugin From File...
Browse to the downloaded nz-bridge.xpi file and click Open
NZBridge will appear in the Plugins Manager as enabled — restart Zotero if prompted

The plugin starts a local HTTP server automatically whenever Zotero is running. No additional configuration is needed.
Building from source (optional):
bash cd zotero-plugin npm install npm run buildThe built.xpiwill be atzotero-plugin/.scaffold/build/nz-bridge.xpi
edge://extensions/chrome://extensions/browser-extension/ folder from this repository (unzip the Source code (zip) file in the releases)Note: If you are using an external storage other than Zoteros default, I recommend using ZotMoov to sync your collections across devices. It is also highly recommended to have the PDFs as attachments, as websites may have bot detection and will not render the PDFs.
Upload PDFs and URLs from a Zotero collection as sources in a NotebookLM notebook.





Tip: NotebookLM supports a maximum of 50 sources per notebook. If your collection is larger, split it into sub-collections.
Extract saved notes from NotebookLM's Studio panel and import them into Zotero as document items with child notes.


The child note contains the complete note text with rich formatting, metadata, and tags

Tip: Imported notes are created as Document parent items, making them compatible with sync tools like Notero for Notion integration.
The "Mappings" tab shows all collection-notebook links that NZBridge has created. From here you can: - View which Zotero collection is linked to which NotebookLM notebook - Delete a mapping to unlink them - Use the Reset button in the "To NotebookLM" tab to clear sync history and re-sync items
| Component | Technology | Purpose |
|---|---|---|
| Zotero Plugin | Zotero 7/8 plugin (TypeScript) | HTTP server exposing collections, files, and note import API |
| Browser Extension | Chrome MV3 extension | UI popup + background service worker that orchestrates sync via DOM scripting |
The browser extension communicates with the Zotero plugin via localhost:23119 (Zotero's built-in HTTP server).
activeTab — Interact with the active NotebookLM tabscripting — Inject scripts for DOM automationdebugger — Chrome DevTools Protocol for PDF file uploadstorage — Persist sync state and mappingslocalhost:23119 (Zotero's built-in connector port)cd zotero-plugin
npm install
npm run start # Dev mode with hot reload
npm run build # Production build
No build step required — load browser-extension/ directly as an unpacked extension. Edit files and reload the extension from chrome://extensions/.
| Problem | Solution |
|---|---|
| Red dot (disconnected) in popup | Make sure Zotero is running with NZBridge installed. On Chrome/Edge 142+, also see "Local Network Access" below |
| "Cannot connect to Zotero" error | Check that no firewall is blocking localhost:23119. On Chrome/Edge 142+, see "Local Network Access" below |
| Collections won't load / sync times out | Almost always the "Local Network Access" block below (Chrome/Edge 142+) |
| PDFs not uploading | Ensure the NotebookLM tab is active and the notebook is open |
| No notes found during import | Open the Studio panel in NotebookLM and make sure you have saved notes (not just chat responses) |
| Sources exceed 50 limit | Split your Zotero collection into smaller sub-collections |
Starting with Chrome/Edge 142 (released late 2025), a security feature called Local Network Access (LNA) blocks extensions from reaching localhost (where the Zotero plugin runs) until you grant permission. NZBridge can't request this permission automatically, so you may see the red disconnected dot, empty collection lists, or syncs that fail/time out — even though Zotero is running. This affects all operating systems, not just macOS.
Fix (per user):
chrome://extensions (Edge: edge://extensions)For IT / managed deployments:
Administrators can allow-list the extension without prompting each user via the Chrome/Edge enterprise policy LocalNetworkAccessAllowedForUrls, adding the extension origin:
chrome-extension://<EXTENSION_ID>/*
(Find <EXTENSION_ID> on the chrome://extensions Details page.) As a temporary stopgap, the LocalNetworkAccessRestrictionsTemporaryOptOut policy disables LNA entirely, but it is deprecated and scheduled for removal after Chrome 152 — prefer the allow-list.
AGPL-3.0-or-later
$ claude mcp add NZBridge \
-- python -m otcore.mcp_server <graph>