Enables inspection of UI elements within Zotero windows to retrieve their computed CSS styles and DOM structure.
Integrates with Zotero plugin development workflows to run ESLint on the source code for static analysis.
Allows for executing JavaScript code within Zotero's privileged context and exploring internal APIs through object inspection.
Provides read-only access to the Zotero SQLite database, allowing users to execute SELECT queries, inspect table schemas, and view database statistics.
Supports Zotero plugin development by providing tools to run TypeScript type checking on the source code.
Enables comprehensive Zotero plugin development by providing tools for UI inspection, privileged JavaScript execution, and plugin lifecycle management.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Server Zotero Devtake a screenshot of Zotero and list all installed plugins"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Server Zotero Dev
Give your AI assistant superpowers for Zotero plugin development
Architecture · Getting Started · Available Tools
A Model Context Protocol (MCP) server that enables AI assistants like Claude, Cursor, and Windsurf to build, test, and debug Zotero 7/8 plugins. Screenshots, DOM state, debug logs, and JavaScript execution give the AI rich context to understand what's happening—and tools to help you fix it.
✨ Features
Category | Capabilities |
🎯 UI Inspection | Screenshots, DOM tree, element finding, computed styles |
💻 JS Execution | Run code in Zotero context, inspect APIs, test snippets |
🔧 Build Tools | Scaffold integration for build, serve, hot reload |
📋 Logs & Errors | Stream debug output, error console, watch for issues |
🗃️ Database | Read-only access to zotero.sqlite for debugging |
🔌 Plugin Management | Install, reload, list plugins |
🚀 Quick Start
Prerequisites
Node.js 20+ and npm
Zotero 7+ — Works on all Zotero 7 and 8 builds (release, beta, dev)
For plugin development: zotero-plugin-scaffold
1. Install MCP Server
Use install-mcp to add the server to your AI assistant:
Supported clients: claude-code, cursor, windsurf, vscode, cline, roo-cline, claude, zed, goose, warp, codex
Add to your MCP client config:
Restart your AI assistant after adding the configuration.
2. Install MCP Bridge Plugin in Zotero
Download zotero-mcp-bridge.xpi and install:
In Zotero: Tools → Plugins
Click ⚙️ → Install Plugin From File
Select the downloaded
.xpifileRestart Zotero
This lightweight plugin enables the Remote Debugging Protocol when Zotero starts. It only needs to be installed once and works on all Zotero 7+ builds (release, beta, and dev).
3. Start Developing!
Just open Zotero normally and ask your AI assistant:
"Take a screenshot of Zotero and list installed plugins"
That's it! No special launch flags, no configuration. 🎉
🧰 Available Tools (25 total)
Tool | Description |
| Capture window, element, or region screenshots |
| Find elements by CSS selector |
| Get DOM structure of a window/panel |
| Get computed CSS styles for element |
| List all open Zotero windows |
Screenshot Targets: Main window, preferences, PDF reader, dialogs, or any element by selector. Use
highlightSelectorto add a red border before capture.
Tool | Description |
| Execute JavaScript in Zotero's privileged context. Auto-wraps code with top-level |
| Explore Zotero APIs - list methods and properties of any object (e.g., |
| Search/discover preferences by pattern (e.g., find all prefs containing "debug") |
| Get a preference value |
| Set a preference value |
Examples:
Zotero.Items.getAll(1),Zotero.Prefs.get('export.quickCopy.setting'),ZoteroPane.getSelectedItems()Tip: Use
zotero_inspect_objectto explore APIs before writing code. Usezotero_search_prefsto discover preference keys.
Tool | Description |
| Build plugin (dev or production mode) |
| Start dev server with hot reload |
| Run ESLint on plugin source |
| Run TypeScript type checking |
Tool | Description |
| Read debug output (Zotero.debug) |
| Read error console entries |
| Stream logs in real-time |
| Clear log buffer |
Tool | Description |
| Hot reload your dev plugin |
| Install plugin from XPI path |
| List installed plugins with version/status |
Tool | Description |
| Execute SELECT query on zotero.sqlite |
| Get table schema information |
| Get database statistics (items, attachments, collections, size) |
Note: Database access is read-only and requires Zotero to be closed, or uses a copy of the database.
🏗️ Architecture
Why this approach?
✅ Lightweight plugin — Just enables RDP, Firefox DevTools does the rest
✅ Zero-config after install — Just open Zotero normally, no special flags
✅ Rich AI context — Screenshots, DOM, and logs help the AI understand your plugin's state
✅ Hot reload — Integrates with zotero-plugin-scaffold for instant feedback
✅ Full Zotero access — Execute any Zotero API in the privileged context
✅ Cross-platform — Works on Linux, Windows, macOS
🔧 Environment Variables
Variable | Description | Default |
| Remote debugging port |
|
| Debugging host |
|
| Path to Zotero data directory | Auto-detect |
| Path to Zotero profile | Auto-detect |
📸 Screenshot Examples
🧑💻 Development
📚 Resources
Architecture & Technical Learnings — Deep dive into RDP protocol, actor hierarchy, and common pitfalls
Zotero Plugin Development — Official docs
Zotero 7 for Developers — Migration guide
zotero-plugin-scaffold — Build tooling
zotero-plugin-template — Starter template
zotero-plugin-toolkit — API helpers
Firefox RDP Protocol — Protocol docs
🤝 Contributing
Contributions are welcome! Please:
Follow existing code patterns
Add tests for new features
Update documentation
Ensure
npm testandnpm run lintpass
📄 License
MIT © introfini
Acknowledgments
Built for the Zotero plugin developer community
Integrates with zotero-plugin-scaffold by @windingwind
Leverages Firefox DevTools RDP for reliable communication