MCP Server Zotero Dev
MCP Server Zotero Dev
为您的 AI 助手赋予 Zotero 插件开发的超能力
一个模型上下文协议(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-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(没有-y,npx会挂起等待安装提示)。升级时请提升固定的版本号,或使用@latest在启动时始终获取最新版本(自动更新,但错误版本也会自动运行,并且每次启动都会增加注册表检查)。请注意,install-mcp可能会在未指定-y或版本号的情况下写入配置,因此上述手动配置是最可靠的方式。
添加配置后,请重启您的 AI 助手。
2. 在 Zotero 中安装 MCP 桥接插件
下载 zotero-mcp-bridge.xpi 并安装:
在 Zotero 中:工具 → 插件
点击 ⚙️ → 从文件安装插件
选择下载的
.xpi文件重启 Zotero
这个轻量级插件会在 Zotero 启动时启用远程调试协议。它只需要安装一次,并且适用于所有 Zotero 7+ 构建版本(正式版、测试版和开发版)。
3. 开始开发!
只需正常打开 Zotero,然后询问您的 AI 助手:
"截取 Zotero 的屏幕截图并列出已安装的插件"
就是这样!无需特殊的启动标志,无需配置。🎉
🧰 可用工具(共 28 个)
工具 | 描述 |
| 捕获窗口、元素或区域截图 |
| 通过 CSS 选择器查找元素 |
| 获取窗口/面板的 DOM 结构 |
| 获取元素的计算 CSS 样式 |
| 列出所有打开的 Zotero 窗口 |
截图目标:主窗口、首选项、PDF 阅读器、对话框或任何通过选择器指定的元素。使用
highlightSelector在捕获前添加红色边框。
工具 | 描述 |
| 通过 CSS 选择器点击元素(工具栏/菜单按钮、首选项控件、列表行)。可穿透 shadow DOM; |
| 在输入框/文本域/可编辑内容中输入文本(先聚焦,触发 input/change 事件)。可选 |
解析时先尝试 light DOM,然后穿透开放的 shadow root(Zotero 的 XUL 自定义元素将内部内容保存在 shadow DOM 中)。限制:无法关闭阻塞性的原生模态对话框(
Services.prompt.confirmEx)——其嵌套的模态循环会阻塞这些工具运行的 eval 线程。
工具 | 描述 |
| 在 Zotero 的特权上下文中执行 JavaScript。自动将包含顶层 |
| 探索 Zotero API - 列出任何对象的方法和属性(例如 |
| 打开 Zotero 的设置窗口,可选择跳转到特定窗格(内置或插件) |
| 按模式搜索/发现首选项(例如,查找所有包含 "debug" 的首选项) |
| 获取首选项值 |
| 设置首选项值 |
示例:
Zotero.Items.getAll(1)、Zotero.Prefs.get('export.quickCopy.setting')、ZoteroPane.getSelectedItems()提示:在编写代码前使用
zotero_inspect_object探索 API。使用zotero_search_prefs发现首选项键。
工具 | 描述 |
| 构建插件(开发或生产模式) |
| 启动带热重载的开发服务器 |
| 在插件源代码上运行 ESLint |
| 运行 TypeScript 类型检查 |
工具 | 描述 |
| 读取调试输出(Zotero.debug) |
| 读取错误控制台条目 |
| 实时流式传输日志 |
| 清除日志缓冲区 |
工具 | 描述 |
| 热重载您的开发插件 |
| 从 XPI 路径安装插件 |
| 列出已安装的插件及其版本/状态 |
工具 | 描述 |
| 在 zotero.sqlite 上执行 SELECT 查询 |
| 获取表结构信息 |
| 获取数据库统计信息(条目、附件、集合、大小) |
注意:数据库访问是只读的,需要关闭 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 数据目录路径 | 自动检测 |
| Zotero 配置文件路径 | 自动检测 |
🔌 更改 RDP 端口
桥接器默认监听 6100 端口。仅当您同时运行两个 Zotero 实例(例如,一个普通配置文件和一个开发配置文件)或另一个进程已占用 6100 端口时,才需要更改它。
该端口位于桥接器的两侧,并且两侧必须一致。
1. Zotero 端 — 设置插件首选项:
设置 → 高级 → 配置编辑器,并接受警告
搜索
extensions.mcp-rdp.port如果不存在,请创建:选择数字,将其命名为
extensions.mcp-rdp.port,然后输入您的端口重启 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 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📚 资源
架构与技术细节 —— 深入探讨 RDP 协议、actor 层级结构和常见陷阱
Zotero 插件开发 —— 官方文档
Zotero 10 开发者指南 —— 最新主要版本的迁移指南
Zotero 7 开发者指南 —— 迁移指南
zotero-plugin-scaffold —— 构建工具
zotero-plugin-template —— 入门模板
zotero-plugin-toolkit —— API 辅助工具
Firefox RDP 协议 —— 协议文档
🤝 贡献
欢迎贡献。请参阅 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 deployed
Maintenance
Related MCP Connectors
Zotero MCP server for Claude and ChatGPT: search, citations, safe writes, PDF passages and pages.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Chrome DevTools Protocol-based MCP server that enables AI coding assistants to control browsers for JavaScript debugging, reverse engineering, web scraping, and API debugging.1,347 npm1Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server for browser debugging, inspection, and verification that streams console logs, network errors, and user actions into AI coding assistants.66AGPL 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.-