MCP Server Zotero Dev
MCP Server Zotero Dev
Dale a tu asistente de IA superpoderes para el desarrollo de plugins de Zotero
Arquitectura · Primeros pasos · Herramientas disponibles
Un servidor Model Context Protocol (MCP) que permite a asistentes de IA como Claude, Cursor y Windsurf crear, probar y depurar plugins de Zotero 7, 8, 9 y 10. Las capturas de pantalla, el estado del DOM, los registros de depuración y la ejecución de JavaScript dan a la IA un contexto rico para entender lo que está sucediendo, y herramientas para ayudarte a solucionarlo.
✨ Características
Categoría | Capacidades |
🎯 Inspección de UI | Capturas de pantalla, árbol DOM, búsqueda de elementos, estilos calculados |
🖱️ Interacción con la UI | Haz clic en elementos y escribe texto (compatible con shadow-DOM) |
💻 Ejecución de JS | Ejecuta código en el contexto de Zotero, inspecciona APIs, prueba fragmentos |
🔧 Herramientas de compilación | Integración de scaffold para build, serve, recarga en caliente |
📋 Registros y errores | Transmite salida de depuración, consola de errores, vigila problemas |
🗃️ Base de datos | Acceso de solo lectura a zotero.sqlite para depuración |
🔌 Gestión de plugins | Instala, recarga, lista plugins |
Related MCP server: Kaboom Browser AI Devtools MCP
🚀 Inicio rápido
Requisitos previos
Node.js 20+ y npm
Zotero 7+ — Funciona en todas las versiones de Zotero 7, 8, 9 y 10 (release, beta, dev)
Para desarrollo de plugins: zotero-plugin-scaffold
1. Instala el servidor MCP
Usa install-mcp para añadir el servidor a tu asistente de IA:
npx -y install-mcp @introfini/mcp-server-zotero-dev --client claude-codeClientes compatibles: 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 windsurfAñade a la configuración de tu cliente MCP:
{
"mcpServers": {
"zotero-dev": {
"command": "npx",
"args": ["-y", "@introfini/mcp-server-zotero-dev@1.1.1"],
"env": {
"ZOTERO_RDP_PORT": "6100"
}
}
}
}Versión y actualizaciones: fija una versión exacta como se muestra arriba. Un
npx <pkg>sin versión seguirá ejecutando lo quenpxhaya cacheado y no recogerá las nuevas versiones, así que incluye siempre una versión y-y(sin-y,npxse queda esperando un aviso de instalación). Sube la versión fijada para actualizar, o usa@latestpara obtener siempre la más reciente al inicio (se actualiza automáticamente, pero una versión mala se ejecutaría automáticamente y añade una comprobación de registro en cada inicio). Ten en cuenta queinstall-mcppuede escribir una configuración sin-yo sin versión, así que la configuración manual de arriba es la vía más robusta.
Reinicia tu asistente de IA después de añadir la configuración.
2. Instala el plugin MCP Bridge en Zotero
Descarga zotero-mcp-bridge.xpi e instálalo:
En Zotero: Herramientas → Plugins
Haz clic en ⚙️ → Instalar plugin desde archivo
Selecciona el archivo
.xpidescargadoReinicia Zotero
Este plugin ligero habilita el Protocolo de Depuración Remota cuando Zotero se inicia. Solo necesita instalarse una vez y funciona en todas las versiones de Zotero 7+ (release, beta y dev).
3. ¡Empieza a desarrollar!
Simplemente abre Zotero normalmente y pide a tu asistente de IA:
"Toma una captura de pantalla de Zotero y lista los plugins instalados"
¡Eso es todo! Sin banderas de lanzamiento especiales, sin configuración. 🎉
🧰 Herramientas disponibles (28 en total)
Herramienta | Descripción |
| Captura capturas de pantalla de ventana, elemento o región |
| Encuentra elementos por selector CSS |
| Obtén la estructura DOM de una ventana/panel |
| Obtén los estilos CSS calculados para un elemento |
| Lista todas las ventanas abiertas de Zotero |
Objetivos de captura: ventana principal, preferencias, lector de PDF, diálogos o cualquier elemento por selector. Usa
highlightSelectorpara añadir un borde rojo antes de la captura.
Herramienta | Descripción |
| Haz clic en un elemento por selector CSS (botón de barra de herramientas/menú, control de preferencias, fila de lista). Atraviesa el shadow DOM; |
| Escribe texto en un input/textarea/contenteditable (lo enfoca primero, dispara input/change). |
La resolución intenta primero el DOM ligero, luego atraviesa las shadow roots abiertas (los elementos personalizados XUL de Zotero mantienen los internos en el shadow DOM). Limitación: no puede descartar un diálogo modal nativo bloqueante (
Services.prompt.confirmEx) — su bucle modal anidado bloquea el hilo de evaluación en el que se ejecutan estas herramientas.
Herramienta | Descripción |
| Ejecuta JavaScript en el contexto privilegiado de Zotero. Envuelve automáticamente el código con sentencias |
| Explora las APIs de Zotero: lista métodos y propiedades de cualquier objeto (p. ej., |
| Abre la ventana de configuración de Zotero, opcionalmente a un panel específico (integrado o plugin) |
| Busca/descubre preferencias por patrón (p. ej., encuentra todas las preferencias que contengan "debug") |
| Obtén el valor de una preferencia |
| Establece el valor de una preferencia |
Ejemplos:
Zotero.Items.getAll(1),Zotero.Prefs.get('export.quickCopy.setting'),ZoteroPane.getSelectedItems()Consejo: usa
zotero_inspect_objectpara explorar las APIs antes de escribir código. Usazotero_search_prefspara descubrir claves de preferencias.
Herramienta | Descripción |
| Compila el plugin (modo dev o producción) |
| Inicia el servidor de desarrollo con recarga en caliente |
| Ejecuta ESLint en el código fuente del plugin |
| Ejecuta la comprobación de tipos de TypeScript |
Herramienta | Descripción |
| Lee la salida de depuración ( |
| Lee las entradas de la consola de errores |
| Transmite registros en tiempo real |
| Limpia el búfer de registros |
Herramienta | Descripción |
| Recarga en caliente tu plugin de desarrollo |
| Instala el plugin desde la ruta XPI |
| Lista los plugins instalados con versión/estado |
Herramienta | Descripción |
| Ejecuta consultas SELECT en zotero.sqlite |
| Obtén información del esquema de tablas |
| Obtén estadísticas de la base de datos (elementos, adjuntos, colecciones, tamaño) |
Nota: el acceso a la base de datos es de solo lectura y requiere que Zotero esté cerrado, o usa una copia de la base de datos.
🏗️ Arquitectura
┌─────────────────────────────────────────────────────────────────┐
│ 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) │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘¿Por qué este enfoque?
✅ Plugin ligero — Solo habilita RDP, Firefox DevTools hace el resto
✅ Cero configuración tras la instalación — Solo abre Zotero normalmente, sin banderas especiales
✅ Contexto rico para la IA — Las capturas de pantalla, el DOM y los registros ayudan a la IA a entender el estado de tu plugin
✅ Recarga en caliente — Se integra con zotero-plugin-scaffold para retroalimentación instantánea
✅ Acceso completo a Zotero — Ejecuta cualquier API de Zotero en el contexto privilegiado
✅ Multiplataforma — Funciona en Linux, Windows, macOS
🔧 Variables de entorno
Variable | Descripción | Valor por defecto |
| Puerto de depuración remota |
|
| Host de depuración |
|
| Ruta al directorio de datos de Zotero | Detección automática |
| Ruta al perfil de Zotero | Detección automática |
🔌 Cambiar el puerto RDP
El puente escucha en el puerto 6100 por defecto. Solo necesitas cambiarlo si ejecutas dos instancias de Zotero al mismo tiempo (un perfil normal y uno de desarrollo, por ejemplo), o si otro proceso ya ocupa el 6100.
El puerto vive en ambos lados del puente, y ambos tienen que estar de acuerdo.
1. Lado de Zotero — establece la preferencia del plugin:
Configuración → Avanzado → Editor de configuración, y acepta la advertencia
Busca
extensions.mcp-rdp.portSi no existe, créala: selecciona Número, nómbrala
extensions.mcp-rdp.port, e introduce tu puertoReinicia Zotero — el listener solo se abre al inicio
Cuidado con el tipo. El Editor de configuración preselecciona Booleano. Crear la preferencia sin cambiar a Número almacena
trueen lugar de un puerto, y Zotero entonces abre el puente en un pipe local en lugar de un puerto TCP — el registro de depuración informa de éxito mientras ningún cliente MCP puede conectarse.
2. Lado del cliente — establece ZOTERO_RDP_PORT al mismo valor en la configuración de tu cliente MCP:
{
"mcpServers": {
"zotero-dev": {
"command": "npx",
"args": ["-y", "@introfini/mcp-server-zotero-dev@1.1.2"],
"env": {
"ZOTERO_RDP_PORT": "6101"
}
}
}
}Cambia ambos o ninguno. Si solo cambias un lado, el puente se desconecta: Zotero escucha en un puerto mientras el cliente sigue marcando el otro.
Ejecutar realmente dos instancias
Al iniciar Zotero por segunda vez, obtienes la ventana que ya tienes: como Firefox, reenvía a la instancia en ejecución en lugar de iniciar otra. Una segunda instancia necesita su propio perfil y -no-remote:
# macOS; adjust the binary path on Windows/Linux
MOZ_NO_REMOTE=1 "/Applications/Zotero.app/Contents/MacOS/zotero" -P <profile-name> -no-remoteDale a ese perfil su propio extensions.mcp-rdp.port y los dos puentes no se estorbarán. Verificado con 9.0.6 en 6100 y 10.0-beta.22 en 6101 al mismo tiempo.
Requiere el plugin MCP Bridge 1.0.5 o posterior. En 1.0.4 y anteriores,
extensions.mcp-rdp.portse leía en la rama de preferencias incorrecta y se ignoraba silenciosamente, por lo que el puente permanecía en 6100 sin importar lo que configuraras. Si configuraste un puerto personalizado con una versión anterior, se almacena comoextensions.zotero.extensions.mcp-rdp.port— ese nombre sigue funcionando, pero prefiere el anterior.
Deshabilitar el puente
Establece extensions.mcp-rdp.enabled en false (Booleano) en el Editor de Configuración y reinicia Zotero. El plugin permanece instalado pero no abre ningún listener, y ningún cliente MCP puede acceder a Zotero hasta que lo vuelvas a poner en true.
📸 Ejemplos de capturas de pantalla
// 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"]' });🧑💻 Desarrollo
# 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📚 Recursos
Arquitectura y aprendizajes técnicos — Inmersión profunda en el protocolo RDP, la jerarquía de actores y los errores comunes
Desarrollo de plugins de Zotero — Documentación oficial
Zotero 10 para desarrolladores — Guía de migración para la última versión principal
Zotero 7 para desarrolladores — Guía de migración
zotero-plugin-scaffold — Herramientas de compilación
zotero-plugin-template — Plantilla inicial
zotero-plugin-toolkit — Ayudantes de API
Protocolo RDP de Firefox — Documentación del protocolo
🤝 Contribuciones
Las contribuciones son bienvenidas. Consulta CONTRIBUTING.md para la configuración, las convenciones de prueba y las reglas específicas del código que vale la pena conocer antes de empezar.
La versión corta:
Sigue los patrones de código existentes
Añade pruebas para nuevas funciones, y omite en lugar de fallar cuando Zotero no está en ejecución
Actualiza la documentación
No hay CI, así que ejecuta
npm run build,npm run typecheck,npm run lintynpm testtú mismo, y menciona en el PR contra qué versión de Zotero lo verificaste
📄 Licencia
MIT © introfini
Agradecimientos
Construido para la comunidad de desarrolladores de plugins de Zotero
Se integra con zotero-plugin-scaffold por @windingwind
Aprovecha el RDP de Firefox DevTools para una comunicación fiable
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