Skip to main content
Glama
introfini

MCP Server Zotero Dev

by introfini

MCP Server Zotero Dev

AIアシスタントにZoteroプラグイン開発のスーパーパワーを

License: MIT Zotero 7+

アーキテクチャ · クイックスタート · 利用可能なツール


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-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 を含めてください(-y がないと、npx はインストールプロンプトを待ってハングします)。固定したバージョンを上げてアップグレードするか、@latest を使用して起動時に常に最新を取得します(自動更新されますが、悪いリリースが自動的に実行される可能性があり、起動のたびにレジストリチェックが追加されます)。install-mcp は -y やバージョンなしの設定を書き込む可能性があるため、上記の手動設定が最も堅牢な方法です。

設定追加後、AI アシスタントを再起動してください。

2. Zotero に MCP Bridge プラグインをインストール

zotero-mcp-bridge.xpi をダウンロードしてインストール:

  1. Zotero で: ツール → プラグイン

  2. ⚙️ をクリック → ファイルからプラグインをインストール

  3. ダウンロードした .xpi ファイルを選択

  4. Zotero を再起動

この軽量プラグインは、Zotero 起動時に Remote Debugging Protocol を有効にします。インストールは一度だけで済み、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

入力/テキストエリア/contenteditable にテキストを入力(最初にフォーカスし、input/change を発火)。オプションの clear と pressEnter。

解決は最初に 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 で待ち受けます。変更が必要なのは、2 つの 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 は一方のポートで待機し、クライアントはもう一方のポートにダイヤルし続けます。

実際に 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 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 build、npm run typecheck、npm run lint、npm testを自分で実行し、PRで検証したZoteroのバージョンを明記する


📄 ライセンス

MIT © introfini


謝辞

Related MCP Connectors

Related MCP Servers