Skip to main content
Glama
introfini

MCP Server Zotero Dev

by introfini

MCP Server Zotero Dev

Verleihen Sie Ihrem KI-Assistenten Superkräfte für die Zotero-Plugin-Entwicklung

License: MIT Zotero 7+

Architektur · Erste Schritte · Verfügbare Tools


Ein Model Context Protocol (MCP)-Server, der KI-Assistenten wie Claude, Cursor und Windsurf in die Lage versetzt, Zotero-Plugins für Version 7, 8, 9 und 10 zu erstellen, zu testen und zu debuggen. Screenshots, DOM-Zustand, Debug-Logs und JavaScript-Ausführung geben der KI reichhaltigen Kontext, um zu verstehen, was passiert – und Tools, um Ihnen bei der Behebung zu helfen.

✨ Funktionen

Kategorie

Fähigkeiten

🎯 UI-Inspektion

Screenshots, DOM-Baum, Elementfindung, berechnete Stile

🖱️ UI-Interaktion

Elemente anklicken und Text eingeben (shadow-DOM-fähig)

💻 JS-Ausführung

Code im Zotero-Kontext ausführen, APIs inspizieren, Snippets testen

🔧 Build-Tools

Scaffold-Integration für Build, Serve, Hot Reload

📋 Logs & Fehler

Debug-Ausgabe streamen, Fehlerkonsole, auf Probleme achten

🗃️ Datenbank

Schreibgeschützter Zugriff auf zotero.sqlite zum Debuggen

🔌 Plugin-Verwaltung

Plugins installieren, neu laden, auflisten


Related MCP server: Kaboom Browser AI Devtools MCP

🚀 Schnellstart

Voraussetzungen

  • Node.js 20+ und npm

  • Zotero 7+ — Funktioniert mit allen Zotero-7-, 8-, 9- und 10-Builds (Release, Beta, Dev)

  • Für die Plugin-Entwicklung: zotero-plugin-scaffold

1. MCP-Server installieren

Verwenden Sie install-mcp, um den Server zu Ihrem KI-Assistenten hinzuzufügen:

npx -y install-mcp @introfini/mcp-server-zotero-dev --client claude-code

Unterstützte Clients: claude-code, cursor, windsurf, vscode, cline, roo-cline, claude, zed, goose, warp, codex

npx -y install-mcp @introfini/mcp-server-zotero-dev --client claude-code
npx -y install-mcp @introfini/mcp-server-zotero-dev --client cursor
npx -y install-mcp @introfini/mcp-server-zotero-dev --client vscode
npx -y install-mcp @introfini/mcp-server-zotero-dev --client windsurf

Fügen Sie Folgendes zu Ihrer MCP-Client-Konfiguration hinzu:

{
  "mcpServers": {
    "zotero-dev": {
      "command": "npx",
      "args": ["-y", "@introfini/mcp-server-zotero-dev@1.1.1"],
      "env": {
        "ZOTERO_RDP_PORT": "6100"
      }
    }
  }
}

Version & Updates: Pinne eine exakte Version an, wie oben gezeigt. Ein bloßes npx <pkg> (ohne Version) verwendet weiterhin das, was npx zwischengespeichert hat, und übernimmt keine neuen Releases. Geben Sie daher immer eine Version und -y an (ohne -y hängt npx und wartet auf eine Installationsaufforderung). Erhöhen Sie die gepinnte Version, um ein Upgrade durchzuführen, oder verwenden Sie @latest, um beim Start immer die neueste Version abzurufen (automatische Updates, aber ein fehlerhaftes Release würde automatisch ausgeführt und es fügt bei jedem Start eine Registry-Überprüfung hinzu). Beachten Sie, dass install-mcp möglicherweise eine Konfiguration ohne -y oder Version schreibt. Die manuelle Konfiguration oben ist daher der robusteste Weg.

Starten Sie Ihren KI-Assistenten neu, nachdem Sie die Konfiguration hinzugefügt haben.

2. MCP-Bridge-Plugin in Zotero installieren

Laden Sie zotero-mcp-bridge.xpi herunter und installieren Sie es:

  1. In Zotero: Extras → Plugins

  2. Klicken Sie auf ⚙️ → Plugin aus Datei installieren

  3. Wählen Sie die heruntergeladene .xpi-Datei aus

  4. Starten Sie Zotero neu

Dieses schlanke Plugin aktiviert das Remote-Debugging-Protokoll beim Start von Zotero. Es muss nur einmal installiert werden und funktioniert mit allen Zotero-7+-Builds (Release, Beta und Dev).

3. Entwickeln Sie los!

Öffnen Sie einfach Zotero normal und fragen Sie Ihren KI-Assistenten:

„Machen Sie einen Screenshot von Zotero und listen Sie installierte Plugins auf"

Das war's! Keine speziellen Startflags, keine Konfiguration. 🎉


🧰 Verfügbare Tools (insgesamt 28)

Tool

Beschreibung

zotero_screenshot

Fenster-, Element- oder Bereichs-Screenshots erfassen

zotero_inspect_element

Elemente per CSS-Selektor finden

zotero_get_dom_tree

DOM-Struktur eines Fensters/Bereichs abrufen

zotero_get_styles

Berechnete CSS-Stile für Element abrufen

zotero_list_windows

Alle offenen Zotero-Fenster auflisten

Screenshot-Ziele: Hauptfenster, Einstellungen, PDF-Reader, Dialoge oder jedes Element per Selektor. Verwenden Sie highlightSelector, um vor der Aufnahme einen roten Rahmen hinzuzufügen.

Tool

Beschreibung

zotero_click_element

Klickt ein Element per CSS-Selektor an (Toolbar-/Menüschaltfläche, Einstellungssteuerung, Listenzeile). Durchdringt Shadow DOM; index wählt bei mehreren Treffern aus; mouseEvents erzeugt eine vollständige Maussequenz.

zotero_send_keys

Text in ein Eingabefeld/Textarea/contenteditable eingeben (fokussiert es zuerst, löst input/change aus). Optional clear und pressEnter.

Die Auflösung versucht zuerst das Light DOM, dann durchdringt sie offene Shadow-Roots (die XUL-Custom-Elemente von Zotero halten Interna im Shadow DOM). Einschränkung: Ein blockierendes natives modales Dialogfeld (Services.prompt.confirmEx) kann nicht geschlossen werden – seine verschachtelte modale Schleife blockiert den Eval-Thread, auf dem diese Tools laufen.

Tool

Beschreibung

zotero_execute_js

JavaScript im privilegierten Kontext von Zotero ausführen. Umschließt Code mit Top-Level-return-Anweisungen automatisch in IIFE.

zotero_inspect_object

Zotero-APIs erkunden – Methoden und Eigenschaften eines beliebigen Objekts auflisten (z. B. Zotero.Items)

zotero_open_preferences

Das Einstellungsfenster von Zotero öffnen, optional zu einem bestimmten Bereich (integriert oder Plugin)

zotero_search_prefs

Einstellungen per Muster suchen/entdecken (z. B. alle Einstellungen mit „debug" finden)

zotero_get_pref

Einen Einstellungswert abrufen

zotero_set_pref

Einen Einstellungswert festlegen

Beispiele: Zotero.Items.getAll(1), Zotero.Prefs.get('export.quickCopy.setting'), ZoteroPane.getSelectedItems()

Tipp: Verwenden Sie zotero_inspect_object, um APIs zu erkunden, bevor Sie Code schreiben. Verwenden Sie zotero_search_prefs, um Einstellungsschlüssel zu entdecken.

Tool

Beschreibung

zotero_scaffold_build

Plugin erstellen (Entwicklungs- oder Produktionsmodus)

zotero_scaffold_serve

Dev-Server mit Hot Reload starten

zotero_scaffold_lint

ESLint auf Plugin-Quellcode ausführen

zotero_scaffold_typecheck

TypeScript-Typüberprüfung ausführen

Tool

Beschreibung

zotero_read_logs

Debug-Ausgabe lesen (Zotero.debug)

zotero_read_errors

Fehlerkonsole-Einträge lesen

zotero_watch_logs

Logs in Echtzeit streamen

zotero_clear_logs

Log-Puffer leeren

Tool

Beschreibung

zotero_plugin_reload

Dev-Plugin per Hot Reload neu laden

zotero_plugin_install

Plugin aus XPI-Pfad installieren

zotero_plugin_list

Installierte Plugins mit Version/Status auflisten

Tool

Beschreibung

zotero_db_query

SELECT-Abfrage auf zotero.sqlite ausführen

zotero_db_schema

Tabellenschema-Informationen abrufen

zotero_db_stats

Datenbankstatistiken abrufen (Elemente, Anhänge, Sammlungen, Größe)

Hinweis: Der Datenbankzugriff ist schreibgeschützt und erfordert, dass Zotero geschlossen ist, oder verwendet eine Kopie der Datenbank.


🏗️ Architektur

┌─────────────────────────────────────────────────────────────────┐
│                        AI Assistant                             │
│                  (Claude, Cursor, Windsurf)                     │
└─────────────────────────┬───────────────────────────────────────┘
                          │ MCP Protocol (stdio)
                          ▼
┌─────────────────────────────────────────────────────────────────┐
│                  MCP Server (Node.js/TypeScript)                │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────────────┐   │
│  │   Scaffold   │  │     RDP      │  │      Database        │   │
│  │  Integration │  │    Client    │  │      Reader          │   │
│  └──────────────┘  └──────┬───────┘  └──────────────────────┘   │
└─────────────────────────────┼───────────────────────────────────┘
                              │ Firefox RDP (port 6100)
                              ▼
┌─────────────────────────────────────────────────────────────────┐
│                      Zotero Application                         │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │            MCP Bridge for Zotero                         │   │
│  │         Starts DevToolsServer on launch                  │   │
│  └──────────────────────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │              Firefox DevTools Server (built-in)          │   │
│  │           JS Execution • DOM • Console • Screenshots     │   │
│  └──────────────────────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │                   Your Plugin (dev)                      │   │
│  └──────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────┘

Warum dieser Ansatz?

  • Schlankes Plugin — Aktiviert nur RDP, Firefox DevTools erledigt den Rest

  • Null-Konfiguration nach der Installation — Öffnen Sie Zotero einfach normal, keine speziellen Flags

  • Reichhaltiger KI-Kontext — Screenshots, DOM und Logs helfen der KI, den Zustand Ihres Plugins zu verstehen

  • Hot Reload — Integration mit zotero-plugin-scaffold für sofortiges Feedback

  • Voller Zotero-Zugriff — Jede Zotero-API im privilegierten Kontext ausführen

  • Plattformübergreifend — Funktioniert unter Linux, Windows, macOS


🔧 Umgebungsvariablen

Variable

Beschreibung

Standard

ZOTERO_RDP_PORT

Remote-Debugging-Port

6100

ZOTERO_RDP_HOST

Debugging-Host

127.0.0.1

ZOTERO_DATA_DIR

Pfad zum Zotero-Datenverzeichnis

Automatische Erkennung

ZOTERO_PROFILE_PATH

Pfad zum Zotero-Profil

Automatische Erkennung


🔌 Den RDP-Port ändern

Die Bridge lauscht standardmäßig auf Port 6100. Sie müssen ihn nur ändern, wenn Sie zwei Zotero-Instanzen gleichzeitig ausführen (z. B. ein normales Profil und ein Entwicklungsprofil) oder wenn ein anderer Prozess bereits 6100 belegt.

Der Port liegt auf beiden Seiten der Bridge, und beide müssen sich darauf einigen.

1. Zotero-Seite — die Plugin-Einstellung festlegen:

  1. Einstellungen → Erweitert → Konfigurationseditor und die Warnung akzeptieren

  2. Nach extensions.mcp-rdp.port suchen

  3. Wenn sie nicht existiert, erstellen Sie sie: Zahl auswählen, sie extensions.mcp-rdp.port nennen und Ihren Port eingeben

  4. Zotero neu starten — der Listener öffnet nur beim Start

Achten Sie auf den Typ. Der Konfigurationseditor wählt standardmäßig Boolean aus. Wenn Sie die Einstellung erstellen, ohne auf Zahl zu wechseln, wird true statt eines Ports gespeichert, und Zotero öffnet die Bridge dann über eine lokale Pipe statt über einen TCP-Port – das Debug-Log meldet Erfolg, während kein MCP-Client eine Verbindung herstellen kann.

2. Client-Seite — setzen Sie ZOTERO_RDP_PORT in Ihrer MCP-Client-Konfiguration auf denselben Wert:

{
  "mcpServers": {
    "zotero-dev": {
      "command": "npx",
      "args": ["-y", "@introfini/mcp-server-zotero-dev@1.1.2"],
      "env": {
        "ZOTERO_RDP_PORT": "6101"
      }
    }
  }
}

Ändern Sie beide oder keinen. Wenn Sie nur eine Seite ändern, wird die Bridge getrennt: Zotero lauscht auf einem Port, während der Client weiterhin den anderen anwählt.

Tatsächlich zwei Instanzen ausführen

Wenn Sie Zotero ein zweites Mal starten, erhalten Sie das Fenster, das Sie bereits haben – wie Firefox leitet es an die laufende Instanz weiter, anstatt eine weitere zu starten. Eine zweite Instanz benötigt ein eigenes Profil und -no-remote:

# macOS; adjust the binary path on Windows/Linux
MOZ_NO_REMOTE=1 "/Applications/Zotero.app/Contents/MacOS/zotero" -P <profile-name> -no-remote

Geben Sie diesem Profil einen eigenen extensions.mcp-rdp.port und die beiden Bridges bleiben sich aus dem Weg. Verifiziert mit 9.0.6 auf 6100 und 10.0-beta.22 auf 6101 gleichzeitig.

Erfordert MCP Bridge Plugin 1.0.5 oder neuer. In 1.0.4 und früher wurde extensions.mcp-rdp.port unter dem falschen Präferenzzweig gelesen und stillschweigend ignoriert, sodass die Bridge unabhängig von Ihrer Einstellung auf 6100 blieb. Wenn Sie einen benutzerdefinierten Port für einen älteren Build konfiguriert haben, wird er als extensions.zotero.extensions.mcp-rdp.port gespeichert – dieser Name funktioniert weiterhin, aber bevorzugen Sie den obigen.

Deaktivieren der Bridge

Setzen Sie extensions.mcp-rdp.enabled auf false (Boolean) im Config Editor und starten Sie Zotero neu. Das Plugin bleibt installiert, öffnet aber keinen Listener, und kein MCP-Client kann Zotero erreichen, bis Sie es wieder auf true setzen.


📸 Screenshot-Beispiele

// Capture main Zotero window
await zotero_screenshot({ target: 'main-window' });

// Capture your plugin's panel with highlight
await zotero_screenshot({
  target: 'element',
  selector: '#my-plugin-panel',
  highlightSelector: '#my-plugin-button'
});

// Capture a specific window by ID (use zotero_list_windows to find IDs)
await zotero_screenshot({
  target: 'window',
  windowId: 12345
});

// Capture element after triggering UI action
await zotero_execute_js({ code: 'document.querySelector("#menu").click()' });
await zotero_screenshot({ target: 'element', selector: 'menupopup[state="open"]' });

🧑💻 Entwicklung

# Clone and install
git clone https://github.com/introfini/mcp-server-zotero-dev.git
cd mcp-server-zotero-dev
npm install

# Build everything
npm run build

# Build individual packages
npm run build:server
npm run build:plugin

# Run tests
npm test

# Development mode (watch)
npm run dev
mcp-server-zotero-dev/
├── packages/
│   ├── mcp-server/               # MCP server (npm package)
│   │   ├── src/
│   │   │   ├── index.ts          # MCP server entry
│   │   │   ├── rdp/              # RDP client
│   │   │   ├── tools/            # Tool implementations
│   │   │   └── prompts/          # Slash commands
│   │   └── package.json
│   │
│   └── zotero-plugin-mcp-rdp/    # Tiny Zotero plugin (.xpi)
│       ├── src/
│       │   └── bootstrap.js      # Starts RDP server (shipped verbatim)
│       ├── addon/
│       │   └── manifest.json
│       └── package.json
│
├── docs/                         # Documentation
└── package.json                  # Monorepo root

📚 Ressourcen


🤝 Mitwirken

Beiträge sind willkommen. Siehe CONTRIBUTING.md für Einrichtung, Testkonventionen und die codebasespezifischen Regeln, die Sie vor dem Start kennen sollten.

Die Kurzfassung:

  1. Befolgen Sie bestehende Codemuster

  2. Fügen Sie Tests für neue Funktionen hinzu und überspringen Sie sie, anstatt sie fehlschlagen zu lassen, wenn Zotero nicht läuft

  3. Aktualisieren Sie die Dokumentation

  4. Es gibt kein CI, führen Sie also npm run build, npm run typecheck, npm run lint und npm test selbst aus und geben Sie im PR an, welche Zotero-Version Sie getestet haben


📄 Lizenz

MIT © introfini


Danksagungen

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
4hResponse time
5wRelease cycle
6Releases (12mo)
Commit activity
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/introfini/mcp-server-zotero-dev'

If you have feedback or need assistance with the MCP directory API, please join our Discord server