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