Skip to main content
Glama
introfini

MCP Server Zotero Dev

by introfini

MCP Server Zotero Dev

为您的 AI 助手赋予 Zotero 插件开发的超能力

License: MIT Zotero 7+

架构 · 快速开始 · 可用工具


一个模型上下文协议(MCP)服务器,使 Claude、Cursor 和 Windsurf 等 AI 助手能够构建、测试和调试 Zotero 7、8、9 和 10 插件。截图、DOM 状态、调试日志和 JavaScript 执行为 AI 提供丰富的上下文,帮助其了解正在发生的事情——并提供工具帮助您修复问题。

✨ 功能特性

类别

功能

🎯 UI 检查

截图、DOM 树、元素查找、计算样式

🖱️ UI 交互

点击元素并输入文本(支持 shadow DOM)

💻 JS 执行

在 Zotero 上下文中运行代码、检查 API、测试代码片段

🔧 构建工具

脚手架集成,支持构建、服务、热重载

📋 日志与错误

流式调试输出、错误控制台、监控问题

🗃️ 数据库

对 zotero.sqlite 的只读访问以进行调试

🔌 插件管理

安装、重载、列出插件


Related MCP server: Kaboom Browser AI Devtools MCP

🚀 快速开始

前提条件

  • Node.js 20+ 和 npm

  • Zotero 7+ — 适用于所有 Zotero 7、8、9 和 10 构建版本(正式版、测试版、开发版)

  • 对于插件开发:zotero-plugin-scaffold

1. 安装 MCP 服务器

使用 install-mcp 将服务器添加到您的 AI 助手:

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 或版本号的情况下写入配置,因此上述手动配置是最可靠的方式。

添加配置后,请重启您的 AI 助手。

2. 在 Zotero 中安装 MCP 桥接插件

下载 zotero-mcp-bridge.xpi 并安装:

  1. 在 Zotero 中:工具 → 插件

  2. 点击 ⚙️ → 从文件安装插件

  3. 选择下载的 .xpi 文件

  4. 重启 Zotero

这个轻量级插件会在 Zotero 启动时启用远程调试协议。它只需要安装一次,并且适用于所有 Zotero 7+ 构建版本(正式版、测试版和开发版)。

3. 开始开发!

只需正常打开 Zotero,然后询问您的 AI 助手:

"截取 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/change 事件)。可选 clear 和 pressEnter。

解析时先尝试 light DOM,然后穿透开放的 shadow root(Zotero 的 XUL 自定义元素将内部内容保存在 shadow DOM 中)。限制:无法关闭阻塞性的原生模态对话框(Services.prompt.confirmEx)——其嵌套的模态循环会阻塞这些工具运行的 eval 线程。

工具

描述

zotero_execute_js

在 Zotero 的特权上下文中执行 JavaScript。自动将包含顶层 return 语句的代码包装在 IIFE 中。

zotero_inspect_object

探索 Zotero API - 列出任何对象的方法和属性(例如 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

启动带热重载的开发服务器

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

热重载您的开发插件

zotero_plugin_install

从 XPI 路径安装插件

zotero_plugin_list

列出已安装的插件及其版本/状态

工具

描述

zotero_db_query

在 zotero.sqlite 上执行 SELECT 查询

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 即可,无需特殊标志

  • ✅ 丰富的 AI 上下文 — 截图、DOM 和日志帮助 AI 了解您插件的状态

  • ✅ 热重载 — 与 zotero-plugin-scaffold 集成,实现即时反馈

  • ✅ 完整的 Zotero 访问 — 在特权上下文中执行任何 Zotero API

  • ✅ 跨平台 — 适用于 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 会在本地管道上打开桥接器,而不是 TCP 端口——调试日志会报告成功,但没有任何 MCP 客户端可以连接。

2. 客户端 — 在 MCP 客户端配置中将 ZOTERO_RDP_PORT 设置为相同的值:

{
  "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,这样两个桥接就不会互相干扰。已在 6100 端口上的 9.0.6 版本和 6101 端口上的 10.0-beta.22 版本上验证通过。

需要 MCP Bridge 插件 1.0.5 或更高版本。 在 1.0.4 及更早版本中,extensions.mcp-rdp.port 是从错误的偏好分支读取的,并且会被静默忽略,因此桥接始终停留在 6100 端口,无论你设置什么值。如果你针对旧版本配置了自定义端口,它会被存储为 extensions.zotero.extensions.mcp-rdp.port——这个名称仍然有效,但请优先使用上面的名称。

禁用桥接

在配置编辑器中,将 extensions.mcp-rdp.enabled 设置为 false(布尔值),然后重启 Zotero。插件仍然会安装,但不会打开监听端口,并且在你将其重新设置为 true 之前,任何 MCP 客户端都无法连接到 Zotero。


📸 截图示例

// 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


致谢

Related MCP Connectors

Related MCP Servers