Skip to main content
Glama
introfini

MCP Server Zotero Dev

by introfini

MCP Server Zotero Dev

Дайте вашему ИИ-ассистенту суперспособности для разработки плагинов Zotero

License: MIT Zotero 7+

Архитектура · Быстрый старт · Доступные инструменты


Сервер 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-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

Добавьте в конфигурацию вашего 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 (без -y npx зависнет в ожидании запроса на установку). Увеличьте зафиксированную версию, чтобы обновиться, или используйте @latest, чтобы при каждом запуске получать самую свежую версию (автообновления, но неудачный релиз запустится автоматически, а при каждом старте добавляется проверка реестра). Учтите, что install-mcp может записать конфигурацию без -y или версии, поэтому ручная настройка выше — самый надёжный путь.

Перезапустите вашего ИИ-ассистента после добавления конфигурации.

2. Установите MCP Bridge Plugin в Zotero

Скачайте zotero-mcp-bridge.xpi и установите:

  1. В Zotero: Сервис → Плагины

  2. Нажмите ⚙️ → Установить плагин из файла

  3. Выберите скачанный файл .xpi

  4. Перезапустите Zotero

Этот лёгкий плагин включает Remote Debugging Protocol при запуске Zotero. Его нужно установить только один раз, и он работает на всех сборках Zotero 7+ (release, beta и dev).

3. Начинайте разработку!

Просто откройте Zotero как обычно и попросите вашего ИИ-ассистента:

«Сделай скриншот Zotero и перечисли установленные плагины»

Вот и всё! Никаких специальных флагов запуска и никакой настройки. 🎉


🧰 Доступные инструменты (всего 28)

Инструмент

Описание

zotero_screenshot

Создание скриншотов окна, элемента или области

zotero_inspect_element

Поиск элементов по CSS-селектору

zotero_get_dom_tree

Получение DOM-структуры окна или панели

zotero_get_styles

Получение вычисленных CSS-стилей элемента

zotero_list_windows

Список всех открытых окон Zotero

Цели скриншотов: главное окно, настройки, программа просмотра PDF, диалоги или любой элемент по селектору. Используйте highlightSelector, чтобы перед захватом добавить красную рамку.

Инструмент

Описание

zotero_click_element

Клик по элементу по CSS-селектору (кнопка панели/меню, элемент управления настройки, строка списка). Проникает в shadow DOM; index выбирает среди нескольких совпадений; mouseEvents синтезирует полную последовательность событий мыши.

zotero_send_keys

Ввод текста в input/textarea/contenteditable (сначала фокусируется на элементе, вызывает события input/change). Опциональные параметры clear и pressEnter.

Поиск сначала идёт по обычному (light) DOM, затем проникает в открытые shadow root'ы (внутренности XUL-кастомных элементов Zotero хранятся в shadow DOM). Ограничение: нельзя закрыть блокирующий нативный модальный диалог (Services.prompt.confirmEx) — его вложенный модальный цикл блокирует поток eval, на котором работают эти инструменты.

Инструмент

Описание

zotero_execute_js

Выполнение JavaScript в привилегированном контексте Zotero. Автоматически оборачивает код с return верхнего уровня в IIFE.

zotero_inspect_object

Изучение API Zotero — список методов и свойств любого объекта (например, Zotero.Items)

zotero_open_preferences

Открытие окна настроек Zotero, опционально на конкретной панели (встроенной или плагина)

zotero_search_prefs

Поиск настроек по шаблону (например, найти все настройки, содержащие «debug»)

zotero_get_pref

Получение значения настройки

zotero_set_pref

Установка значения настройки

Примеры: Zotero.Items.getAll(1), Zotero.Prefs.get('export.quickCopy.setting'), ZoteroPane.getSelectedItems()

Совет: используйте zotero_inspect_object, чтобы изучить API перед написанием кода. Используйте zotero_search_prefs, чтобы находить ключи настроек.

Инструмент

Описание

zotero_scaffold_build

Сборка плагина (режим разработки или продакшена)

zotero_scaffold_serve

Запуск dev-сервера с горячей перезагрузкой

zotero_scaffold_lint

Запуск ESLint для исходного кода плагина

zotero_scaffold_typecheck

Проверка типов TypeScript

Инструмент

Описание

zotero_read_logs

Чтение отладочного вывода (Zotero.debug)

zotero_read_errors

Чтение записей консоли ошибок

zotero_watch_logs

Потоковый вывод журналов в реальном времени

zotero_clear_logs

Очистка буфера журнала

Инструмент

Описание

zotero_plugin_reload

Горячая перезагрузка вашего dev-плагина

zotero_plugin_install

Установка плагина из пути к XPI-файлу

zotero_plugin_list

Список установленных плагинов с версией/статусом

Инструмент

Описание

zotero_db_query

Выполнение SELECT-запроса к zotero.sqlite

zotero_db_schema

Получение информации о схеме таблиц

zotero_db_stats

Получение статистики базы данных (элементы, вложения, коллекции, размер)

Примечание: доступ к базе данных — только для чтения; требует закрытого 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_RDP_PORT

Порт удалённой отладки

6100

ZOTERO_RDP_HOST

Хост отладки

127.0.0.1

ZOTERO_DATA_DIR

Путь к каталогу данных Zotero

Автоопределение

ZOTERO_PROFILE_PATH

Путь к профилю Zotero

Автоопределение


🔌 Изменение порта RDP

Мост по умолчанию слушает порт 6100. Менять его нужно, только если вы запускаете два экземпляра Zotero одновременно (например, обычный профиль и профиль для разработки) или если порт 6100 уже занят другим процессом.

Порт задан на обеих сторонах моста, и обе стороны должны совпадать.

1. Сторона Zotero — задайте настройку плагина:

  1. Настройки → Дополнительно → Редактор конфигурации и примите предупреждение

  2. Найдите extensions.mcp-rdp.port

  3. Если её нет, создайте: выберите Число, назовите её extensions.mcp-rdp.port и введите ваш порт

  4. Перезапустите 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 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

📚 Ресурсы


🤝 Участие

Вклад приветствуется. О настройке, соглашениях о тестировании и специфических для кодовой базы правилах, которые стоит знать перед началом работы, читайте в CONTRIBUTING.md.

Краткая версия:

  1. Следуйте существующим образцам кода

  2. Добавляйте тесты для новых функций; если Zotero не запущен, тесты должны пропускаться, а не падать

  3. Обновляйте документацию

  4. CI нет, поэтому самостоятельно запустите npm run build, npm run typecheck, npm run lint и npm test и укажите в PR, с какой версией Zotero вы проверяли


📄 Лицензия

MIT © introfini


Благодарности

  • Создано для сообщества разработчиков плагинов Zotero

  • Интегрируется с zotero-plugin-scaffold от @windingwind

  • Использует Firefox DevTools RDP для надёжной связи

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