MCPcopy Index your code
hub / github.com/Rafael-Silva-Oliveira/NZBridge

github.com/Rafael-Silva-Oliveira/NZBridge @v0.4.2

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.4.2 ↗ · + Follow
237 symbols 535 edges 26 files 39 documented · 16% updated 20d agov0.4.2 · 2026-06-18★ 76
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

NZBridge — NotebookLM Zotero Bridge

GitHub all releases Latest release Latest release downloads Buy Me a Coffee


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.

Demo

Watch the demo on YouTube NZBridge star history over time

See NZBridge in action — full walkthrough of forward sync, backward sync, and the Zotero plugin installation.

Features

Forward Sync (Zotero -> NotebookLM)

  • Selective sync — After selecting a collection, choose exactly which PDFs and URLs to upload before syncing
  • PDF upload — Local PDF attachments are uploaded directly to NotebookLM as sources
  • URL sources — Items without local files are synced as web sources using their best available URL
  • Batch processing — Multiple URLs are pasted in a single operation
  • Auto-naming — New notebooks are automatically named after the Zotero collection
  • Duplicate detection — Already-synced items are skipped (per collection-notebook pair)
  • 50-source limit — Warns if a collection exceeds NotebookLM's per-notebook limit

Backward Sync (NotebookLM -> Zotero)

  • Note extraction — Scrapes saved notes from NotebookLM's Studio panel
  • Rich content — Captures full note body text, not just titles
  • Smart navigation — Clicks into each note's detail view, scrapes content, then navigates back
  • Parent items — Creates proper Zotero document items (compatible with Notion sync using tools such as Notero)
  • Tags — Automatically adds default tags (n2z, NotebookLM), notebook name, note type, and custom user tags
  • Overwrite support — Re-importing updates existing notes instead of creating duplicates

Robust UI

  • Collapsed layout support — Works on both wide (3-column) and narrow/vertical (tabbed) NotebookLM layouts
  • Collection browser — Hierarchical collection tree with item counts
  • Real-time progress — Live progress bar with per-file status and item counter during sync
  • Progress persistence — If you close and reopen the popup mid-sync, progress resumes automatically
  • Select/deselect notes — Choose which notes to import
  • Mapping management — View and manage collection-notebook mappings
  • Reset sync state — Clear sync history to re-sync items

Requirements

Before installing NZBridge, make sure you have:

  • Zotero 7.0 or later — Download from zotero.org
  • Google Chrome or Microsoft Edge (version 116+) — Manifest V3 support is required
  • A Google account with access to NotebookLM

On Chrome/Edge 142+, you must allow the extension to reach Zotero on localhost: chrome://extensions → NZBridge → DetailsSite settingsLocal network accessAllow. 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.

Installation

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

Step 1 — Install the Zotero Plugin

  1. Download the latest nz-bridge.xpi file from the Releases page

The nz-bridge.xpi file

  1. Open Zotero and go to Tools > Plugins

Zotero menu — Tools > Plugins

  1. In the Plugins Manager, click the gear icon (⚙) in the top-right corner

Gear icon menu

  1. Select Install Plugin From File...

  2. Browse to the downloaded nz-bridge.xpi file and click Open

  3. NZBridge will appear in the Plugins Manager as enabled — restart Zotero if prompted

NZBridge installed in Plugins Manager

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 build The built .xpi will be at zotero-plugin/.scaffold/build/nz-bridge.xpi

Step 2 — Install the Browser Extension

Option A: From the store

Option B: Load unpacked (useful when new updates are released on github, but yet to be published in Edge Add-ons Store - This can take 7 days to be updated on the store)

  1. Download or clone this repository
  2. Open your browser and navigate to the extensions page:
  3. Edge: edge://extensions/
  4. Chrome: chrome://extensions/
  5. Enable Developer mode
  6. Click Load unpacked
  7. Select the browser-extension/ folder from this repository (unzip the Source code (zip) file in the releases)
  8. The NZBridge icon will appear in your toolbar — pin it for easy access

Usage

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.

Forward Sync — Push sources from Zotero to NotebookLM

Upload PDFs and URLs from a Zotero collection as sources in a NotebookLM notebook.

  1. Make sure Zotero is running with the NZBridge plugin installed
  2. Open NotebookLM in your browser and create or open a notebook
  3. Click the NZBridge extension icon in your toolbar
  4. In the "To NotebookLM" tab, select a Zotero collection from the dropdown
  5. Review the item list — PDFs and URLs are shown in separate groups. Uncheck any items you don't want to upload

NZBridge popup — collection selected, ready to sync

  1. Click "Sync to NotebookLM" — a live progress bar shows each file being uploaded

Sync in progress

  1. NZBridge will automatically:
  2. Name the notebook after your Zotero collection (if untitled)
  3. Upload local PDFs via drag-and-drop
  4. Paste URLs as web sources in batch
  5. Skip any items already synced

Sync complete — 3 items synced

  1. Your sources now appear in NotebookLM, ready for AI-powered analysis

Sources uploaded in NotebookLM

  1. You can start chatting with your sources right away

NotebookLM Chat with uploaded sources

Tip: NotebookLM supports a maximum of 50 sources per notebook. If your collection is larger, split it into sub-collections.

Backward Sync — Pull notes from NotebookLM to Zotero

Extract saved notes from NotebookLM's Studio panel and import them into Zotero as document items with child notes.

  1. Open a NotebookLM notebook that has saved notes in the Studio panel
  2. Click the NZBridge extension icon
  3. Go to the "To Zotero" tab
  4. Select a target Zotero collection from the dropdown
  5. Optionally add custom tags (comma-separated)
  6. Click "Find Text Notes" — NZBridge will scan the Studio panel for saved notes
  7. Select or deselect individual notes as needed

Found notes in the "To Zotero" tab

  1. Click "Import Selected"
  2. Each note appears in Zotero as a Document parent item with a child note containing the full content

Imported document item in Zotero library

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

    Full note content in Zotero

Tip: Imported notes are created as Document parent items, making them compatible with sync tools like Notero for Notion integration.

Managing Mappings

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

Architecture

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).

Permissions

Browser Extension

  • activeTab — Interact with the active NotebookLM tab
  • scripting — Inject scripts for DOM automation
  • debugger — Chrome DevTools Protocol for PDF file upload
  • storage — Persist sync state and mappings

Zotero Plugin

  • Runs an HTTP server on localhost:23119 (Zotero's built-in connector port)
  • Read access to collections, items, and file attachments
  • Write access to create/update note items

Development

Zotero Plugin

cd zotero-plugin
npm install
npm run start    # Dev mode with hot reload
npm run build    # Production build

Browser Extension

No build step required — load browser-extension/ directly as an unpacked extension. Edit files and reload the extension from chrome://extensions/.

Troubleshooting

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

Chrome/Edge 142+ blocks the Zotero connection (Local Network Access)

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):

  1. Open chrome://extensions (Edge: edge://extensions)
  2. Find NZBridge and click Details
  3. Scroll to Site settings and set Local network access to Allow
  4. Reopen the NZBridge popup — the dot should turn green

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.

License

AGPL-3.0-or-later


Buy Me A Coffee

Extension points exported contracts — how you extend this code

CollectionInfo (Interface)
(no doc)
zotero-plugin/src/modules/collection.ts
Prefs (Interface)
(no doc)
zotero-plugin/typings/prefs.d.ts
LibraryTree (Interface)
(no doc)
zotero-plugin/src/modules/collection.ts
ExportableItem (Interface)
(no doc)
zotero-plugin/src/modules/collection.ts
FileData (Interface)
(no doc)
zotero-plugin/src/modules/collection.ts
TagInfo (Interface)
(no doc)
zotero-plugin/src/modules/collection.ts

Core symbols most depended-on inside this repo

getCleanText
called by 32
browser-extension/background.js
sendMessage
called by 22
browser-extension/popup/popup.js
zoteroRequest
called by 18
browser-extension/background.js
sleep
called by 18
browser-extension/background.js
error
called by 17
zotero-plugin/src/modules/server.ts
success
called by 14
zotero-plugin/src/modules/server.ts
escapeHtml
called by 10
browser-extension/popup/popup.js
resolveNotebookLMTab
called by 9
browser-extension/background.js

Shape

Function 189
Class 24
Method 13
Interface 11

Languages

TypeScript100%

Modules by API surface

browser-extension/background.js60 symbols
browser-extension/popup/popup.js55 symbols
zotero-plugin/src/modules/server.ts35 symbols
zotero-plugin/src/modules/collection.ts20 symbols
zotero-plugin/src/modules/mappingStore.ts10 symbols
browser-extension/noteExtractor.js9 symbols
zotero-plugin/src/modules/noteSyncer.ts7 symbols
zotero-plugin/src/utils/ztoolkit.ts6 symbols
zotero-plugin/addon/bootstrap.js6 symbols
zotero-plugin/src/utils/locale.ts5 symbols
zotero-plugin/src/hooks.ts5 symbols
zotero-plugin/src/modules/menuUI.ts4 symbols

For agents

$ claude mcp add NZBridge \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page