mcpField
D
DocsAgent — Zotero, Obsidian & Apple Notes MCP Server

DocsAgent — Zotero, Obsidian & Apple Notes MCP Server

ローカル
github.comメモリ・ナレッジ5784 週間前に更新

DocsAgent — Zotero, Obsidian & Apple Notes MCP Server について

DocsAgent は、Zotero・Obsidian・Apple Notes(macOS のみ)にまたがる個人のナレッジベースを、AI エージェントが検索・読み取り・書き込みできるようにする MCP サーバーです。C++ の検索コアはローカルで動作し、インデックス化された内容は利用者のマシンから外に出ません。ローカルでの情報検索を求める研究者や知識労働者に向いています。

主な機能

  1. 01BM25 による全文検索と段落ランキング
  2. 02Zotero・Obsidian・Apple Notes の横断検索
  3. 03ランク順位に基づくソース間の結果統合
  4. 043 層構成の書き込み安全ゲート
  5. 05stdio と Streamable HTTP の 2 種類のトランスポート

活用シーン

  1. 01AI アシスタントによる Zotero ライブラリ内の段落検索
  2. 02Obsidian ボルトのノートをフォルダーやタグで閲覧
  3. 03Zotero アイテムへのタグ一括付与やコレクション追加

MCP 対応

DocsAgent 自体が MCP サーバーであり、MCP クライアントに 8 つのツールを公開します。内訳は読み取り 5 件と書き込み 3 件で、書き込みツールは既定で無効です。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"docsagent-docsagent": {
"command": "npx",
"args": [
"-y",
"@docsagent/docsagent"
],
"env": {
"DOCSAGENT_CONFIG": "<DOCSAGENT_CONFIG>"
}
}
}
}
起動コマンドnpx -y @docsagent/docsagent
設定が必要な環境変数
DOCSAGENT_CONFIGPath to the shared docsagent config file (default: ~/.docsagent/config.json)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@docsagent/docsagent5.0.1
pypidocsagent-mcp5.0.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

AI エージェント向け DocsAgent MCP — Zotero、Obsidian、Apple Notes 📚⚡

DocsAgent を使うと、AI エージェントは個人のナレッジベースにすぐにプライベートにアクセスできます。 docsagent は仕様駆動型の MCP(Model Context Protocol)サーバーで、Claude Desktop、Cursor、Cline、Qwen Code などのあらゆる AI エージェントや MCP クライアントから、常駐する C++ 検索エンジンを介して Zotero ライブラリ、Obsidian の保管庫、Apple Notes(macOS)を検索、読み取り、書き込みできるようにします。1,000 件以上の PDFを対象にした BM25 全文検索とクエリに基づく順位付けによるパッセージ検索を約 15 msで実行します。すべてローカルで動作するため、RAG 対応のナレッジベースとして利用できます。

  • 🔒 ローカル優先でプライベート — エンジンは Zotero ライブラリ、Obsidian の保管庫、Apple Notes のストアをお使いのマシンから直接読み取ります。ノートや PDF が外部に送信されることはありません。
  • 🗂 3 つのソースを 1 つのクエリで検索 — Zotero のアイテム、注釈、ノート、Obsidian の保管庫、Apple Notes(macOS のみ)を対象に検索します。混合検索では、相互順位を使って 3 つすべての結果を統合します。
  • ⚡ ネイティブ C++ 検索コア — 転置インデックス方式の BM25 とパッセージの順位付けにより、ミリ秒単位で検索できます。メモリ使用量は少なく、論文 1,500 件のライブラリで 160~227 MB です。
  • 🧩 8 つの MCP ツール — 読み取り 5 つ、書き込み 3 つ。JSON スキーマによる引数検証、トークン予算、結果の重複排除、3 層の書き込み安全ゲートを備えています。
  • 🌐 2 つのトランスポート — ローカル MCP クライアント向けの stdio と、リモートデプロイ向けの Streamable HTTP(オリジンチェック、API キー/OAuth 2.0 トークンのイントロスペクション、リクエストごとの RBAC、/health プローブ)に対応しています。
  • 🐍 2 つのシェル、1 つのコア — この TypeScript パッケージと、機能が同等の Python ラッパーは、同じ JSON-RPC コントラクトを通じて同じツールを提供します。

アーキテクチャ

MCP Client (Claude Desktop / Cursor / Cline / Qwen Code / any MCP host)
        │  stdio (local)   or   Streamable HTTP  /mcp  (remote)
        ▼
MCP shell  ← this package (@docsagent/mcp-zotero / docsagent-mcp-zotero)
   · tool schemas (spec-driven), argument validation, token budget, dedup
   · write orchestration via the Zotero local API, write safety gate, RBAC
   · group-library sync via the Zotero Web API
        │  JSON-RPC 2.0 over HTTP ({coreHost}:{httpPort}/rpc, cpp-httplib)
        ▼
DocsAgent Core (resident C++ engine)
   · reads ~/Zotero/zotero.sqlite + storage/, an Obsidian vault, and (macOS) the
     Apple Notes store — directly on your machine
   · builds & serves one index per source (BM25 + passage ranking); mixed search
     (source "all") fuses them by reciprocal rank (RRF, k=60)

シェルはツール呼び出し時にコアを起動することはなく、ソースファイルにも触れません。コアはバックグラウンドサービスとして実行され、MCP クライアントを再起動しても利用できます。 ツールのスキーマとエラーコードについては、spec/ を参照してください。


クイックスタート

1. コアを起動する
npx @docsagent/docsagent start           # spawn the bundled core for your platform
npx @docsagent/docsagent status          # pid / endpoint / version

Python シェル(同じ動詞を core サブコマンドの下で使用):

pip install ./python                      # build the wheel locally (PyPI upload pending)
docsagent-mcp core start

(core stop と core restart も利用できます。コアは、設定済みのすべてのソース、つまり Zotero のデータディレクトリ、Obsidian の保管庫、(macOS の場合)Apple Notes をインデックス化し、http://0.0.0.0:23120/rpc で JSON-RPC を提供します。)

2. MCP クライアントを設定する

Claude Desktop/Cursor/Cline/Qwen Code(mcpServers):

{
  "mcpServers": {
    "docsagent": {
      "command": "npx",
      "args": ["-y", "@docsagent/docsagent"]
    }
  }
}

Python シェル(同じツール、同じコントラクト。このリポジトリからインストール)— mcpServers:

{
  "mcpServers": {
    "docsagent-zotero-py": {
      "command": "docsagent-mcp"
    }
  }
}

まず Python パッケージをインストールし(手順 1)、docsagent-mcp が PATH 上にある状態にしてください。

起動時にシェルはコアに接続し、ソースを読み込み、インデックスの状態を確認します。コアが実行されていない場合は、起動手順を表示してすぐにエラー終了します。何かを起動することはありません。


MCP ツール(外部 API)

ツールは 8 つで、読み取り 5 つ、書き込み 3 つです。スキーマは spec/tools/*.json に一元管理されたコントラクトであり、両方のパッケージに反映されています。ハンドラーの実行前に引数が検証され、エラーは型付きの docsagent エラーコードに対応付けられます。

list_sources

検索可能な各ソースの機能、サポートされるターゲット/対象範囲/参照モード、フィルター、ドキュメント件数を返します。最初に呼び出してください。

現在のソース:zotero(ターゲットは items、annotations、notes。コレクション/タグを参照可能)、obsidian(保管庫。ノートをアイテムとして扱い、フォルダー/タグを参照可能)、apple-notes(macOS のみ。それ以外のプラットフォームではエンジンがソースを省略します)。保管庫は ~/Documents/Obsidian Vault にあり(DOCSAGENT_OBSIDIAN_VAULT で変更できます)、Apple Notes はシステムの Notes ストアから読み取ります(DOCSAGENT_APPLE_NOTES_DB で変更できます)。

search

1つのソースを横断して検索します(アイテム、注釈、ノート)。

パラメーター型説明
query文字列通常のキーワードまたはフレーズ。mode=grep でない場合は必須です
moderelevance | grepデフォルトは BM25 による関連度検索です。grep はトークン化やランキングを行わず、リテラルパターンを検索します
pattern文字列。mode=grep の場合は必須検索するリテラル文字列
caseSensitive、wholeWord、maxMatchesmode=grep 専用:ASCII の大文字・小文字の折りたたみ、[A-Za-z0-9_] の単語境界、合計ヒット数の上限
target"items" | "annotations" | "notes" または配列デフォルトは items です
depthids | snippets | fullデフォルトはスニペット(BM25 でランキングされた抜粋)です
filtersオブジェクトtags、yearFrom/yearTo、itemType、authors、colors、containerId、titleContains
k、snippetsPerResult、max_tokens数値ランキングの深さとトークン予算(mode=grep の場合は最大ドキュメント数、ドキュメントあたりのヒットウィンドウ数)

results[] として、グローバル ID(zotero:KEY、obsidian:<path>、apple-notes:<uuid>)、 タイトル、関連度、スニペットを返します。複数のターゲットを検索した場合、 結果はターゲットごとにグループ化されます。mode=grep では、各結果に matchCount と ヒットウィンドウを示す snippets[](line/column/offset を含む hits[] と、 field でタグ付けされたメタデータのヒット)が含まれます。relevance は 0 となり、 レスポンスには totalMatches が追加されます。結果は重複排除(ID、次に正規化されたタイトル+年)され、 トークン予算内に収まるようにまとめられます。

search は config.defaultSource(デフォルトは zotero)に対して実行されます。複数ソース検索は中核機能です。コアの search / grep メソッドに source: "all" を渡すと、各ソースが個別にランキングされた後、逆順位融合(k=60)によって統合されます。各ヒットにはソースがタグ付けされます。コーパス間で BM25 スコアを比較できないため、統合には順位を使用します。

get_content

1つのエントリーを読み取ります。mode=passages(クエリでランキングされた抜粋、k)または mode=fulltext (nextOffset を使ったオフセットページネーション)を指定します。ノートの場合は、タグとメタデータとともに本文を返します。

get_metadata

include:metadata、abstract、annotations、notes、citation(bibtex / csljson / citationFormat/citationStyle による書式設定)。ノートはトークン予算内に収まるようにまとめられます。

list_library

閲覧モード:collections(parentId で絞り込み)、items(containerId で指定)、 tags、saved_searches、standalone_notes。閲覧モードはソースごとに異なります。Zotero では これらすべてを利用できますが、Obsidian と Apple Notes では folders(絞り込み)/tags/items を利用できます。

書き込みツール(3層のセーフティゲート)
ツール機能主な引数
import_itemローカルの PDF をインポートするか、DOI / ISBN / arXiv ID を解決します(Zotero translation server 経由)。オプションの autoClassify でコレクションを提案しますpaths | identifiers、containerId、autoClassify、confirmed
add_note孤立状態の検証とロールバック機能を備え、アイテムに Markdown の子ノートを追加します(Zotero のノート HTML に変換)id、content、tags、confirmed
batch_modify最大 200 件のアイテムを50件ずつのバッチで一括処理し、add_to_collection / remove_from_collection / add_tags / remove_tags を実行しますaction、ids、containerId、tags、confirmed

書き込みツールの対象は Zotero ソースのみです。Obsidian と Apple Notes のソースは読み取り専用です。

書き込みセーフティゲート(spec/algorithms/write-gate.md):レイヤー1 enableWrites=true でない場合、書き込みツールは登録されません。レイヤー2 confirmed=false の場合はプレビューを返し、レート制限の枠を消費しません。レイヤー3 確定済みの書き込みでは、1時間あたりのレート制限(デフォルトは30/h)の枠を消費します。batch_modify で20件を超えるアイテムを処理する場合、プレビューに requiresConfirmation も報告されます。

エンジンのパフォーマンス

C++ エンジンは PapersGPT を支えています。この MCP サーバーにも、同じインデックス作成と検索のスタックが組み込まれています。実際の Zotero インストール環境でのベンチマーク結果は以下のとおりです(詳細なレポート)。

指標Mac(Intel i9)Windows VM(4C8G)
ライブラリのサイズ1,506 件の PDF(ディスク上で 4.5 GB)500 件以上の PDF
インデックスの作成時間141 秒数秒
メモリ(エージェントプロセス)227 MB160 MB
平均検索レイテンシ約 15 ms約 15 ms
  • インデックス作成のコストはライブラリのサイズに対しておおむね線形に増加しますが、検索レイテンシは一定です。論文 10,000 件のライブラリ(約 30 GB)は約 15〜20 分でインデックス化でき、日常的な検索は約 15 msで行えます。
  • 比較として、一般的なウェブページの読み込みには 1,000〜3,000 ms、まばたきには 100〜150 ms かかります。PapersGPT は完全オフラインで、約 15 ms で回答します。
  • プライバシー:ライブラリがマシンの外部に送信されることはありません。

設定

設定ファイルは ~/.docsagent/config.json(または $DOCSAGENT_CONFIG)にあります。JS シェル、Python ラッパー、C++ コアで共有される単一のファイルです。spec/config.json に照らして検証されます。

キーデフォルト説明
coreHost0.0.0.0コアがバインドし、シェルが接続するアドレス
httpPort23120コアの HTTP ポート(POST /rpc)
coreBinary""コアバイナリの明示的なパス(任意)
zoteroDataDir~/ZoteroZotero のデータディレクトリ
zoteroApiUrlhttp://localhost:23119/apiZotero のローカル API(書き込みのオーケストレーション)
zoteroGroups[]zotero.org から同期するグループライブラリ
enableWritesfalse3 つの書き込みツールを登録するかどうか
writeRateLimitPerHour30確認済み書き込みのレート制限
maxTokensPerTool4000ツール結果ごとのトークン予算
defaultSourcezoteroシェルが検索し、ID の接頭辞を解決するソース(zotero、obsidian、apple-notes)
transportstdiostdio または streamable-http
httpListenAddr0.0.0.0:8080streamable-http のリッスンアドレス(/mcp)
authMode / authConfignoneapi-key または oauth2(RFC 7662)と allowedOrigins
rbacRoles{}ロール → 許可されるツール名(HTTP でリクエストごとに RBAC を適用)
logLevelinfodebug / info / warn / error

配布

チャネルパッケージ同梱コアサイズ
npm(JS/TS シェル)@docsagent/docsagentbin/ に全プラットフォーム用のバイナリ約 70 MB の tarball
PyPI(Python シェル)docsagent-mcp(pip install ./python)wheel に同じバイナリを同梱約 65 MB の wheel

同梱コアの対応プラットフォーム:macOS ユニバーサル(Intel + Apple Silicon)、Windows x64(x86_64)、Linux x64(x86_64)。Linux ARM は非対応です。ソースの対応状況:Zotero と Obsidian はすべてのプラットフォームで利用できます。Apple Notes は macOS のみで利用でき(それ以外では list_sources に表示されません)。

どちらのシェルも同じ設定を読み込み、同じコアと通信します。MCP の配布チャネルとして、どちらか一方、または両方を選べます。コアのライフサイクル(start / stop / restart / status)は、どちらの CLI からも操作できます。

リンク

ライセンス

Apache-2.0

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。