MCP Server Zotero Dev
MCP Server Zotero Dev
AIアシスタントにZoteroプラグイン開発のスーパーパワーを
Model Context Protocol (MCP) サーバーです。Claude、Cursor、Windsurf などの AI アシスタントが Zotero 7、8、9、10 のプラグインをビルド、テスト、デバッグできるようにします。スクリーンショット、DOM 状態、デバッグログ、JavaScript 実行により、AI は何が起きているかを理解するための豊富なコンテキストを得られ、修正に役立つツールも利用できます。
✨ 機能
カテゴリ | 機能 |
🎯 UI 検査 | スクリーンショット、DOM ツリー、要素検索、計算済みスタイル |
🖱️ UI 操作 | 要素のクリックとテキスト入力(shadow-DOM 対応) |
💻 JS 実行 | Zotero コンテキストでコードを実行、API を調査、スニペットをテスト |
🔧 ビルドツール | ビルド、サーブ、ホットリロードのための scaffold 統合 |
📋 ログとエラー | デバッグ出力のストリーム、エラーコンソール、問題の監視 |
🗃️ データベース | デバッグ用の 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 windsurfMCP クライアント設定に追加:
{
"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 Bridge プラグインをインストール
zotero-mcp-bridge.xpi をダウンロードしてインストール:
Zotero で: ツール → プラグイン
⚙️ をクリック → ファイルからプラグインをインストール
ダウンロードした
.xpiファイルを選択Zotero を再起動
この軽量プラグインは、Zotero 起動時に Remote Debugging Protocol を有効にします。インストールは一度だけで済み、Zotero 7+ のすべてのビルド(リリース、ベータ、開発版)で動作します。
3. 開発を始めましょう!
Zotero を通常どおり開いて、AI アシスタントに次のように頼むだけです:
「Zotero のスクリーンショットを撮って、インストール済みプラグインを一覧表示して」
これだけです! 特別な起動フラグも設定も不要です。🎉
🧰 利用可能なツール(全 28 個)
ツール | 説明 |
| ウィンドウ、要素、または領域のスクリーンショットを取得 |
| CSS セレクターで要素を検索 |
| ウィンドウ/パネルの DOM 構造を取得 |
| 要素の計算済み CSS スタイルを取得 |
| 開いているすべての Zotero ウィンドウを一覧表示 |
スクリーンショットの対象: メインウィンドウ、設定、PDF リーダー、ダイアログ、またはセレクターによる任意の要素。
highlightSelectorを使用して、キャプチャ前に赤い枠を追加できます。
ツール | 説明 |
| CSS セレクターで要素をクリック(ツールバー/メニューボタン、設定コントロール、リスト行)。shadow DOM を貫通します。 |
| 入力/テキストエリア/contenteditable にテキストを入力(最初にフォーカスし、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 で待ち受けます。変更が必要なのは、2 つの 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 は一方のポートで待機し、クライアントはもう一方のポートにダイヤルし続けます。
実際に 2 つのインスタンスを実行する場合
Zoteroを2回目に起動すると、既に開いているウィンドウが表示されます。Firefoxと同様に、新しいインスタンスを起動する代わりに実行中のインスタンスに転送されます。2つ目のインスタンスには独自のプロファイルと-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を設定すれば、2つのブリッジが互いに干渉しません。9.0.6を6100で、10.0-beta.22を6101で同時に実行して検証済みです。
MCP Bridgeプラグイン1.0.5以降が必要です。 1.0.4以前では、
extensions.mcp-rdp.portが誤った設定ブランチで読み取られ、静かに無視されたため、何を設定してもブリッジは6100のままでした。古いビルドでカスタムポートを設定した場合、extensions.zotero.extensions.mcp-rdp.portとして保存されています。この名前でも動作しますが、上記の名前を使用することをお勧めします。
ブリッジの無効化
Config Editorで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📚 リソース
Architecture & Technical Learnings — RDPプロトコル、アクターヒエラルキー、よくある落とし穴への深掘り
Zotero Plugin Development — 公式ドキュメント
Zotero 10 for Developers — 最新メジャー版への移行ガイド
Zotero 7 for Developers — 移行ガイド
zotero-plugin-scaffold — ビルドツール
zotero-plugin-template — スターターテンプレート
zotero-plugin-toolkit — APIヘルパー
Firefox RDP Protocol — プロトコルドキュメント
🤝 コントリビューション
コントリビューションを歓迎します。セットアップ、テスト規約、開始前に知っておくべきコードベース固有のルールについては、**CONTRIBUTING.md**を参照してください。
簡単にまとめると:
既存のコードパターンに従う
新機能にはテストを追加し、Zoteroが実行されていない場合は失敗ではなくスキップする
ドキュメントを更新する
CIはないため、
npm run build、npm run typecheck、npm run lint、npm testを自分で実行し、PRで検証したZoteroのバージョンを明記する
📄 ライセンス
MIT © introfini
謝辞
Zoteroプラグイン開発者コミュニティのために構築
信頼性の高い通信のために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.-