MCP Server Zotero Dev
MCP Server Zotero Dev
Дайте вашему ИИ-ассистенту суперспособности для разработки плагинов Zotero
Архитектура · Быстрый старт · Доступные инструменты
Сервер Model Context Protocol (MCP), который позволяет ИИ-ассистентам, таким как Claude, Cursor и Windsurf, собирать, тестировать и отлаживать плагины Zotero 7, 8, 9 и 10. Скриншоты, состояние DOM, журналы отладки и выполнение JavaScript дают ИИ богатый контекст для понимания происходящего — и инструменты, которые помогут вам это исправить.
✨ Возможности
Категория | Возможности |
🎯 Инспекция интерфейса | Скриншоты, DOM-дерево, поиск элементов, вычисленные стили |
🖱️ Взаимодействие с интерфейсом | Клики по элементам и ввод текста (с учётом shadow DOM) |
💻 Выполнение JavaScript | Запуск кода в контексте Zotero, изучение API, проверка фрагментов кода |
🔧 Инструменты сборки | Интеграция со scaffold для сборки, запуска сервера и горячей перезагрузки |
📋 Журналы и ошибки | Потоковый отладочный вывод, консоль ошибок, отслеживание проблем |
🗃️ База данных | Доступ только для чтения к zotero.sqlite для отладки |
🔌 Управление плагинами | Установка, перезагрузка, список плагинов |
Related MCP server: Kaboom Browser AI Devtools MCP
🚀 Быстрый старт
Предварительные требования
Node.js 20+ и npm
Zotero 7+ — работает на всех сборках Zotero 7, 8, 9 и 10 (release, beta, dev)
Для разработки плагинов: zotero-plugin-scaffold
1. Установите MCP-сервер
Используйте install-mcp, чтобы добавить сервер в вашего ИИ-ассистента:
npx -y install-mcp @introfini/mcp-server-zotero-dev --client claude-codeПоддерживаемые клиенты: claude-code, cursor, windsurf, vscode, cline, roo-cline, claude, zed, goose, warp, codex
npx -y install-mcp @introfini/mcp-server-zotero-dev --client claude-codenpx -y install-mcp @introfini/mcp-server-zotero-dev --client cursornpx -y install-mcp @introfini/mcp-server-zotero-dev --client vscodenpx -y install-mcp @introfini/mcp-server-zotero-dev --client windsurfДобавьте в конфигурацию вашего MCP-клиента:
{
"mcpServers": {
"zotero-dev": {
"command": "npx",
"args": ["-y", "@introfini/mcp-server-zotero-dev@1.1.1"],
"env": {
"ZOTERO_RDP_PORT": "6100"
}
}
}
}Версия и обновления: указывайте точную версию, как показано выше. Голый
npx <pkg>(без версии) продолжает запускать то, что закэшировалnpx, и не подхватывает новые релизы, поэтому всегда включайте версию и-y(без-ynpxзависнет в ожидании запроса на установку). Увеличьте зафиксированную версию, чтобы обновиться, или используйте@latest, чтобы при каждом запуске получать самую свежую версию (автообновления, но неудачный релиз запустится автоматически, а при каждом старте добавляется проверка реестра). Учтите, чтоinstall-mcpможет записать конфигурацию без-yили версии, поэтому ручная настройка выше — самый надёжный путь.
Перезапустите вашего ИИ-ассистента после добавления конфигурации.
2. Установите MCP Bridge Plugin в Zotero
Скачайте zotero-mcp-bridge.xpi и установите:
В Zotero: Сервис → Плагины
Нажмите ⚙️ → Установить плагин из файла
Выберите скачанный файл
.xpiПерезапустите Zotero
Этот лёгкий плагин включает Remote Debugging Protocol при запуске Zotero. Его нужно установить только один раз, и он работает на всех сборках Zotero 7+ (release, beta и dev).
3. Начинайте разработку!
Просто откройте Zotero как обычно и попросите вашего ИИ-ассистента:
«Сделай скриншот Zotero и перечисли установленные плагины»
Вот и всё! Никаких специальных флагов запуска и никакой настройки. 🎉
🧰 Доступные инструменты (всего 28)
Инструмент | Описание |
| Создание скриншотов окна, элемента или области |
| Поиск элементов по CSS-селектору |
| Получение DOM-структуры окна или панели |
| Получение вычисленных CSS-стилей элемента |
| Список всех открытых окон Zotero |
Цели скриншотов: главное окно, настройки, программа просмотра PDF, диалоги или любой элемент по селектору. Используйте
highlightSelector, чтобы перед захватом добавить красную рамку.
Инструмент | Описание |
| Клик по элементу по CSS-селектору (кнопка панели/меню, элемент управления настройки, строка списка). Проникает в shadow DOM; |
| Ввод текста в input/textarea/contenteditable (сначала фокусируется на элементе, вызывает события input/change). Опциональные параметры |
Поиск сначала идёт по обычному (light) DOM, затем проникает в открытые shadow root'ы (внутренности XUL-кастомных элементов Zotero хранятся в shadow DOM). Ограничение: нельзя закрыть блокирующий нативный модальный диалог (
Services.prompt.confirmEx) — его вложенный модальный цикл блокирует поток eval, на котором работают эти инструменты.
Инструмент | Описание |
| Выполнение JavaScript в привилегированном контексте Zotero. Автоматически оборачивает код с |
| Изучение API Zotero — список методов и свойств любого объекта (например, |
| Открытие окна настроек Zotero, опционально на конкретной панели (встроенной или плагина) |
| Поиск настроек по шаблону (например, найти все настройки, содержащие «debug») |
| Получение значения настройки |
| Установка значения настройки |
Примеры:
Zotero.Items.getAll(1),Zotero.Prefs.get('export.quickCopy.setting'),ZoteroPane.getSelectedItems()Совет: используйте
zotero_inspect_object, чтобы изучить API перед написанием кода. Используйтеzotero_search_prefs, чтобы находить ключи настроек.
Инструмент | Описание |
| Сборка плагина (режим разработки или продакшена) |
| Запуск dev-сервера с горячей перезагрузкой |
| Запуск ESLint для исходного кода плагина |
| Проверка типов TypeScript |
Инструмент | Описание |
| Чтение отладочного вывода (Zotero.debug) |
| Чтение записей консоли ошибок |
| Потоковый вывод журналов в реальном времени |
| Очистка буфера журнала |
Инструмент | Описание |
| Горячая перезагрузка вашего dev-плагина |
| Установка плагина из пути к XPI-файлу |
| Список установленных плагинов с версией/статусом |
Инструмент | Описание |
| Выполнение SELECT-запроса к zotero.sqlite |
| Получение информации о схеме таблиц |
| Получение статистики базы данных (элементы, вложения, коллекции, размер) |
Примечание: доступ к базе данных — только для чтения; требует закрытого Zotero либо используется копия базы данных.
🏗️ Архитектура
┌─────────────────────────────────────────────────────────────────┐
│ 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) │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘Почему такой подход?
✅ Лёгкий плагин — просто включает RDP, остальное делает Firefox DevTools
✅ Без настройки после установки — просто открывайте Zotero как обычно, без специальных флагов
✅ Богатый контекст для ИИ — скриншоты, DOM и журналы помогают ИИ понять состояние вашего плагина
✅ Горячая перезагрузка — интеграция с zotero-plugin-scaffold для мгновенной обратной связи
✅ Полный доступ к Zotero — выполнение любого API Zotero в привилегированном контексте
✅ Кроссплатформенность — работает на Linux, Windows, macOS
🔧 Переменные окружения
Переменная | Описание | По умолчанию |
| Порт удалённой отладки |
|
| Хост отладки |
|
| Путь к каталогу данных Zotero | Автоопределение |
| Путь к профилю Zotero | Автоопределение |
🔌 Изменение порта RDP
Мост по умолчанию слушает порт 6100. Менять его нужно, только если вы запускаете два экземпляра Zotero одновременно (например, обычный профиль и профиль для разработки) или если порт 6100 уже занят другим процессом.
Порт задан на обеих сторонах моста, и обе стороны должны совпадать.
1. Сторона Zotero — задайте настройку плагина:
Настройки → Дополнительно → Редактор конфигурации и примите предупреждение
Найдите
extensions.mcp-rdp.portЕсли её нет, создайте: выберите Число, назовите её
extensions.mcp-rdp.portи введите ваш портПерезапустите Zotero — слушатель открывается только при запуске
Следите за типом. Редактор конфигурации по умолчанию выбирает Логическое. Если создать настройку, не переключившись на Число, вместо порта будет сохранено
true, и Zotero откроет мост на локальном канале (pipe), а не на TCP-порту, — журнал отладки сообщит об успехе, но ни один MCP-клиент не сможет подключиться.
2. Сторона клиента — задайте ZOTERO_RDP_PORT с тем же значением в конфигурации вашего MCP-клиента:
{
"mcpServers": {
"zotero-dev": {
"command": "npx",
"args": ["-y", "@introfini/mcp-server-zotero-dev@1.1.2"],
"env": {
"ZOTERO_RDP_PORT": "6101"
}
}
}
}Меняйте обе стороны или не меняйте ни одной. Если изменить только одну сторону, мост разорвётся: Zotero слушает один порт, а клиент продолжает подключаться к другому.
Если вы действительно запускаете два экземпляра
Запуск Zotero во второй раз возвращает вам уже открытое окно — как и Firefox, он перенаправляет на запущенный экземпляр, а не запускает новый. Второму экземпляру нужен собственный профиль и -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Задайте для этого профиля собственный extensions.mcp-rdp.port, и два моста не будут мешать друг другу. Проверено одновременно с 9.0.6 на порту 6100 и 10.0-beta.22 на порту 6101.
Требуется плагин MCP Bridge 1.0.5 или новее. В версиях 1.0.4 и ранее
extensions.mcp-rdp.portсчитывался в неправильной ветке настроек и молча игнорировался, поэтому мост оставался на 6100, что бы вы ни указали. Если вы настраивали нестандартный порт для более старой сборки, он хранится какextensions.zotero.extensions.mcp-rdp.port— такое имя по-прежнему работает, но лучше использовать указанное выше.
Отключение моста
Установите extensions.mcp-rdp.enabled в значение false (Boolean) в Config Editor и перезапустите Zotero. Плагин остаётся установленным, но не открывает порт для прослушивания, и ни один MCP-клиент не сможет подключиться к Zotero, пока вы не вернёте значение true.
📸 Примеры скриншотов
// 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"]' });🧑💻 Разработка
# 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 devmcp-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📚 Ресурсы
Architecture & Technical Learnings — Подробный разбор протокола RDP, иерархии акторов и типичных ошибок
Zotero Plugin Development — Официальная документация
Zotero 10 for Developers — Руководство по миграции для последней мажорной версии
Zotero 7 for Developers — Руководство по миграции
zotero-plugin-scaffold — Инструменты сборки
zotero-plugin-template — Стартовый шаблон
zotero-plugin-toolkit — Вспомогательные API-функции
Firefox RDP Protocol — Документация по протоколу
🤝 Участие
Вклад приветствуется. О настройке, соглашениях о тестировании и специфических для кодовой базы правилах, которые стоит знать перед началом работы, читайте в CONTRIBUTING.md.
Краткая версия:
Следуйте существующим образцам кода
Добавляйте тесты для новых функций; если Zotero не запущен, тесты должны пропускаться, а не падать
Обновляйте документацию
CI нет, поэтому самостоятельно запустите
npm run build,npm run typecheck,npm run lintиnpm testи укажите в PR, с какой версией Zotero вы проверяли
📄 Лицензия
MIT © introfini
Благодарности
Создано для сообщества разработчиков плагинов Zotero
Интегрируется с zotero-plugin-scaffold от @windingwind
Использует Firefox DevTools RDP для надёжной связи
This server cannot be installed
Maintenance
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
- AlicenseNot gradedqualityBmaintenanceA Chrome DevTools Protocol-based MCP server that enables AI coding assistants to control browsers for JavaScript debugging, reverse engineering, web scraping, and API debugging.3,2841Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server for browser debugging, inspection, and verification that streams console logs, network errors, and user actions into AI coding assistants.65AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server for browser automation and console log capture via a Chrome extension, enabling AI-driven DOM interaction, navigation, and screenshot capabilities.2MIT
- FlicenseNot gradedqualityDmaintenanceA lightweight MCP server that enables AI assistants to control Chrome DevTools via CDP for debugging tasks like navigation, screenshots, and JavaScript execution.
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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