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-codecursorwindsurfvscodeclineroo-clineclaudezedgoosewarpcodex

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(没有 -ynpx 会挂起等待安装提示)。升级时请提升固定的版本号,或使用 @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 事件)。可选 clearpressEnter

解析时先尝试 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 buildnpm run typechecknpm run lintnpm test,并在 PR 中说明你验证过的 Zotero 版本


📄 许可证

MIT © introfini


致谢

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