mcpField
P
Paperless-ngx

Paperless-ngx

ローカル
github.com/tobee89ファイル・ストレージ210 週間前に更新

Paperless-ngx について

Paperless-ngxは、Paperless-ngx 3.xをAIクライアントから操作するためのMCPサーバーです。REST API v10をカバーし、ツールセット、読み取り専用モード、レスポンスの縮小でツール範囲とコンテキスト量を調整します。

主な機能

  1. 01REST APIエンドポイントの網羅状況を管理
  2. 02文書の検索・読み取り・アップロード・管理
  3. 03ツールセットによる機能の選択
  4. 04読み取り専用モードで書き込みツールを除外
  5. 05一覧レスポンスの縮小とOCRテキストのページ取得
  6. 06受信箱整理と共有監査のプロンプト

活用シーン

  1. 01文書を検索してOCRテキストを取得
  2. 02必要に応じてメールや管理ツールを有効化
  3. 03読み取り専用で文書アーカイブを閲覧
  4. 04未分類文書の整理や公開共有リンクの確認

MCP 対応

MCPサーバーとして、Paperless-ngxの文書、メタデータ、ワークフロー、システム操作ツールとプロンプトをクライアントに公開します。ツールセットで範囲を絞れ、読み取り専用モードも利用できます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"tobee89-mcp-paperless-ngx": {
"command": "npx",
"args": [
"-y",
"mcp-paperless-ngx"
],
"env": {
"PAPERLESS_URL": "<PAPERLESS_URL>",
"PAPERLESS_TOKEN": "<PAPERLESS_TOKEN>",
"PAPERLESS_PUBLIC_URL": "<PAPERLESS_PUBLIC_URL>",
"PAPERLESS_TOOLSETS": "<PAPERLESS_TOOLSETS>",
"PAPERLESS_READ_ONLY": "<PAPERLESS_READ_ONLY>",
"PAPERLESS_HEADERS": "<PAPERLESS_HEADERS>",
"PAPERLESS_DOWNLOAD_DIR": "<PAPERLESS_DOWNLOAD_DIR>",
"PAPERLESS_MAX_PAGE_SIZE": "<PAPERLESS_MAX_PAGE_SIZE>",
"PAPERLESS_TIMEOUT_MS": "<PAPERLESS_TIMEOUT_MS>",
"PAPERLESS_API_VERSION": "<PAPERLESS_API_VERSION>"
}
}
}
}
起動コマンドnpx -y mcp-paperless-ngx
設定が必要な環境変数
PAPERLESS_URLBase URL of the Paperless-ngx instance
PAPERLESS_TOKENシークレットPaperless-ngx API token
PAPERLESS_PUBLIC_URLURL used when building links, if the instance is reachable under a different name from outside
PAPERLESS_TOOLSETSComma-separated toolsets, or all
PAPERLESS_READ_ONLYExpose only tools that cannot change anything
PAPERLESS_HEADERSExtra request headers; needed behind forward-auth proxies such as Authentik
PAPERLESS_DOWNLOAD_DIRWhere downloaded files are written
PAPERLESS_MAX_PAGE_SIZEHard ceiling on list page sizes
PAPERLESS_TIMEOUT_MSRequest timeout in milliseconds
PAPERLESS_API_VERSIONREST API version sent in the Accept header

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

パッケージ
npmmcp-paperless-ngx0.1.1

ツール

85

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
pageintegerいいえ
querystringいいえドキュメントの内容とメタデータを全文検索します。Paperless のクエリ構文に対応しています。例:'invoice AND 2024'、'correspondent:telekom'、'created:[2024-01-01 TO 2024-12-31]'。「X に関するドキュメントを探して」といった質問では、こちらを優先してください。
orderingstringいいえ並べ替えフィールドです。降順にするには '-' を先頭に付けます。一般的な値:-created、-added、title、archive_serial_number。
is_taggedbooleanいいえfalse を指定すると、タグがまったく付いていないドキュメント、つまり未仕分けの一覧を返します。
owner__idintegerいいえこのユーザー ID が所有するドキュメントのみを返します。
page_sizeintegerいいえデフォルトは 25 です。
is_in_inboxbooleanいいえtrue を指定すると、受信トレイタグが付いたままのドキュメントを返します。通常、仕分けはここから始めます。
more_like_idintegerいいえこのドキュメント ID に類似するドキュメントを返します。他のフィルターは無視されます。
tags__id__inarrayいいえこれらのタグ ID のうち少なくとも 1 つが付いたドキュメントのみを返します。
extra_filtersobjectいいえドキュメントエンドポイントが受け付ける、Django 形式の追加フィルターを指定します。例:{'content__icontains': 'kündigung', 'created__year': 2024, 'mime_type': 'application/pdf'}。上記にないフィルターに使用してください。
tags__id__allarrayいいえこれらすべてのタグ ID が付いたドキュメントのみを返します。
tags__id__nonearrayいいえこれらのタグ ID のいずれかが付いたドキュメントを除外します。
content_previewintegerいいえ各ドキュメントに含める OCR テキストの文字数です。0 で無効になります。小さな値にしてください。
added__date__gtestringいいえこの日付(YYYY-MM-DD)以降に Paperless に追加されたドキュメント。
added__date__ltestringいいえこの日付以前(当日を含む)に Paperless に追加(YYYY-MM-DD)。
storage_path__idintegerいいえストレージパス ID と完全一致。
title__icontainsstringいいえタイトルのみを対象とした、大文字と小文字を区別しない部分文字列検索。query より効率的で、条件が厳密です。
correspondent__idintegerいいえ通信相手 ID と完全一致。
document_type__idintegerいいえドキュメントタイプ ID と完全一致。
created__date__gtestringいいえこの日付以降(当日を含む)に作成(YYYY-MM-DD)。
created__date__ltestringいいえこの日付以前(当日を含む)に作成(YYYY-MM-DD)。
custom_field_querystringいいえJSON 形式のカスタムフィールドフィルター。例:'["due","range",["2024-08-01","2024-09-01"]]' または '["customer","icontains","acme"]'。演算子の一覧は Paperless API ドキュメントを参照してください。
archive_serial_numberintegerいいえアーカイブ通し番号と完全一致。

詳細

eichner.cloud

mcp-paperless-ngx

Model Context Protocol に対応する Paperless-ngx 3.x 用サーバー
REST API を全面的にカバーし、スキーマを考慮した、トークン効率の高い設計です。

ライセンス:MIT Node 20 以上 Paperless-ngx 3.x REST API v10 エンドポイントのカバー状況 92/92 Glama 品質スコア


REST API バージョン 10 に対応し、次の 3 点で他とは異なる設計になっています。

  • 網羅状況を明示。 ドキュメントに記載されている 92 個すべてのエンドポイントを、ツールとして公開するか、除外する理由を明記したうえで src/tools/coverage.ts に一覧表示しています。これをテストで検証するため、Paperless のリリースでエンドポイントが追加されると、サポートされないまま見過ごされるのではなく、CI が失敗します。
  • トークンを節約。 Paperless のドキュメントには OCR の全文が含まれます。単純なラッパーはデフォルトでこれを返すため、検索を 1 回行っただけでモデルのコンテキストを使い切ることがあります。このサーバーでは、リスト結果を ?fields= によってサーバー側で絞り込み、本文は専用のページネーション対応ツールから取得します。また、リストエンドポイントが生の API レスポンスをそのまま返すことはありません。これもテストで検証されます。コンテキストコストを参照してください。
  • 機能を絞ったインターフェース。 99 個ものツールをモデルのツール一覧に並べると、使い勝手が損なわれます。ツールセットを使えば、各クライアントに必要な機能だけを公開でき、--read-only を指定すると書き込み経路を完全に無効化できます。

Paperless-ngx 2.x はサポート対象外です。API バージョン 10 で追加されたエンドポイント(ネストされたタグ、ドキュメントのバージョン、share_link_bundles、分割された PDF 操作)が存在することを前提としているためです。

クイックスタート

npx -y mcp-paperless-ngx --check   # verify connectivity, then exit
Claude Code
claude mcp add paperless --scope user \
  --env PAPERLESS_URL=https://paperless.example.com \
  --env PAPERLESS_TOKEN=your-api-token \
  -- npx -y mcp-paperless-ngx
Claude Desktop、Cursor、Cline、その他の MCP クライアント
{
  "mcpServers": {
    "paperless": {
      "command": "npx",
      "args": ["-y", "mcp-paperless-ngx"],
      "env": {
        "PAPERLESS_URL": "https://paperless.example.com",
        "PAPERLESS_TOKEN": "your-api-token"
      }
    }
  }
}
API トークンの取得

Paperless のウェブ UI → ユーザー名(右上)→ マイプロフィール → API トークン欄の横にある円形の矢印ボタン。

設定

変数必須デフォルト用途
PAPERLESS_URLはい—サーバーが接続するベース URL です。
PAPERLESS_TOKENはい—API トークンです。PAPERLESS_API_KEY も使用できます。
PAPERLESS_PUBLIC_URLいいえPAPERLESS_URL外部から別の名前でインスタンスにアクセスする場合に、ユーザー向けリンクの生成に使用する URL です。
PAPERLESS_TOOLSETSいいえ下記参照カンマ区切りのツールセット、または all を指定します。
PAPERLESS_READ_ONLYいいえfalse変更を行わないツールのみを公開します。
PAPERLESS_HEADERSいいえ—JSON({"X-Auth":"…"})または Name: value, Name: value 形式の追加リクエストヘッダーです。Authentik や Authelia などのフォワード認証プロキシの背後で必要です。
PAPERLESS_DOWNLOAD_DIRいいえシステムの一時ディレクトリダウンロードしたファイルの保存先です。
PAPERLESS_MAX_PAGE_SIZEいいえ100モデルの指定にかかわらず適用される、リストのページサイズ上限です。
PAPERLESS_TIMEOUT_MSいいえ60000リクエストのタイムアウトです。
PAPERLESS_API_VERSIONいいえ10Accept ヘッダーで送信する REST API のバージョンです。

CLI フラグ --url、--token、--public-url、--toolsets、--read-only は環境変数より優先されます。--check は接続を確認し、--list-tools は有効なツールを出力します。

ツールセット

ツールセットデフォルト内容
documentson検索、読み取り、更新、削除、アップロード、ダウンロード、メモ、一括操作、PDF 操作
metadataonタグ、連絡先、ドキュメントの種類、保存先パス
customfieldsonカスタムフィールドの定義
viewson保存済みビュー
sharingon共有リンクと共有リンクバンドル
workflowson自動化ルール、トリガー、アクション
systemon全体検索、統計、ステータス、タスク、ゴミ箱
mailoffIMAP アカウント、メールルール、処理済みメール
adminoffユーザー、グループ、プロフィール、設定、ログ(読み取り専用)

ほとんどのセッションで必要になることはなく、ツールを追加するたびにリクエストごとのコンテキストコストが増えるため、mail と admin はデフォルトでオフになっています。明示的に有効にしてください。

PAPERLESS_TOOLSETS=documents,metadata,system,mail
PAPERLESS_TOOLSETS=all

コンテキストコスト

API を言語モデル向けにラップすると、API 自体にはないコストが発生します。モデルが目にするものはすべて、リクエストのたびにコストがかかります。特に影響が大きい 2 つの箇所と、このサーバーでの対処方法を紹介します。

レスポンス。 Paperless では、次の 3 種類のレスポンスはコストが高く、意図せず返してしまいがちです。

ソース問題対処
ドキュメント一覧すべてのドキュメントに、完全な OCR テキストが content として含まれます?fields= でサーバー側のレスポンスを制限します。get_document_content ではテキストを別途ページ分割して返します
/api/search/すべてのオブジェクトタイプにわたり、OCR テキストを含む水和済みの Document オブジェクトを返しますドキュメントは要約し、その他のタイプは id + name に縮約します
ワークフロー、メールルール、グループ、タスクオブジェクトごとに 27~34 個のフィールドがあり、ネストされたトリガー/アクション定義もインラインで含まれます識別に必要なフィールドだけに要約し、ネストされたリストは件数に縮約します。full: true を指定するとすべて返します

ツール定義。 こちらのほうがコストが大きく、見落とされがちです。ツール名、説明、JSON スキーマは、ツールを呼び出すかどうかにかかわらず、すべてのリクエストに含まれます。

ツールセットツール数リクエストあたりのおおよそのコスト
all99約 20,500 トークン
default85約 18,500 トークン
documents,metadata49約 12,900 トークン

このコストをなくす方法はありません。モデルが推測せずに使えるツールの対価です。 ただし、意識して選ぶ価値はあります。セッションで行うのがドキュメントの検索と整理だけなら、PAPERLESS_TOOLSETS=documents,metadata を設定することで、レスポンスをどれだけ削減するよりも多くのコンテキストを節約できます。

安全性

このサーバーは破壊的操作を公開しています。それらがなければドキュメント管理ツールとして十分に機能しないためです。適切な操作かどうかを推測することはしません。その判断はクライアントとユーザーに委ねられます。代わりに、次の対策を行っています。

  • 破壊的操作を行うツールには destructiveHint: true の注釈を付け、MCP クライアントが確認を必須にできるようにしています。
  • ツールの説明では、元に戻せない操作(empty_trash、delete_custom_field、delete_originals)を明記し、呼び出す前に確認するよう求めています。
  • --read-only を指定すると、書き込みツールは呼び出し時に拒否されるのではなく、すべて一覧から除外されます。
  • 一括操作のエンドポイントでは、フィルターに一致するすべての項目に適用するモードをサポートしています。このサーバーでは公開していません。一括操作ツールは明示的な ID リストを受け取るため、誤ったフィルターによってアーカイブ全体に気付かないまま影響が及ぶことはありません。
  • create_share_link は誰でもアクセスできる URL を生成します。その説明で明記しており、すでに公開されている内容を確認するために audit_sharing プロンプトを用意しています。

認証情報に関連するエンドポイント(トークンの生成、TOTP の登録、他人の第 2 要素認証の無効化)は、意図的に公開していません。一覧とその理由については、EXCLUDED_ENDPOINTS を参照してください。

プロンプト

MCP プロンプトをサポートするクライアントでは、スラッシュコマンドとして登録されます。

プロンプト内容
triage_inbox未仕分けのドキュメントを確認し、既存のエントリーを優先してメタデータを提案します。ユーザーが承認するまで何も適用しません。
find_document曖昧な説明からドキュメントを探します。まず低コストの検索を行い、その後、検索範囲を広げます。
audit_sharingすべての公開共有リンクを確認し、有効期限のないリンクにフラグを付けます。

テスト

異なる点を確認するため、3 つのレイヤーがあります。

npm test                                        # logic — no network
PAPERLESS_URL=… PAPERLESS_TOKEN=… \
  node scripts/smoke-test.mjs                   # all 55 read-only tools, live
PAPERLESS_URL=… PAPERLESS_TOKEN=… \
  node scripts/write-test.mjs                   # writes, live — see the warning

npm test は、このサーバー自体の処理を確認します。エンドポイントの網羅状況、スキーマに対する列挙値の一致、一覧取得ツールが未加工の API オブジェクトを漏らさないこと、読み取り専用モードで書き込み機能が実際に削除されることを検証します。

smoke-test.mjs は、Paperless に関する前提を確認します。実際のインスタンスに対してすべての読み取り専用ツールを呼び出し、ID をハードコードせずに一覧取得の結果から解決し、応答サイズを表示して、コストの高いツールを把握できるようにします。何も書き込みません。

write-test.mjs は、それ以外を網羅します。アップロードと消費、あらゆるフィールド型の更新、メモ、一括タグ編集、共有リンク、回転、ゴミ箱への移動と復元を確認します。

このテストが操作するのは、テスト自身が作成したオブジェクトだけです。 作成するものにはすべて zz-mcp-test のプレフィックスを付け、最後に削除します。また、自分がアップロードしていないドキュメントを 変更することもありません。実行が中断された場合は、このプレフィックスが付いた残りのオブジェクトを安全に削除できます。 お持ちであれば、テスト用インスタンスを使うことをおすすめします。

Paperless の変更への対応

PAPERLESS_URL=… PAPERLESS_TOKEN=… node scripts/sync-schema.mjs
npm test

sync-schema.mjs は、独自のインスタンスの OpenAPI ドキュメントから schema/endpoints.json を再生成します。 その後、テストスイートが、公開も明示的な除外もされていないエンドポイントを報告します。これがメンテナンスのすべてです。より新しい Paperless を指定すれば、変更点をテストが教えてくれます。

開発

npm install
npm start          # run from source
npm run build      # compile to build/
npm test           # unit tests + coverage checks
npm run inspect    # build, then open the MCP inspector

先行事例

Paperless-ngx 向けの MCP サーバーはいくつかあり、特に活発な 2 つはいずれも 3.x に対応しています。 cubinet-code/paperless-ngx-mcp は 2.x と 3.x の違いを自動で吸収し、baruchiro/paperless-mcp では API バージョン(PAPERLESS_API_VERSION、デフォルトは 9)を選べます。1 つのインストールで両方のメジャーバージョンに対応する必要がある場合は、どちらかをお使いください。

このサーバーは、逆の方針を取っています。API バージョン 10 のみを前提とし、それ以前のバージョンには対応しません。これにより、3.x で導入されたエンドポイント(ネストされたタグ、ドキュメントのバージョン、share_link_bundles、独立した PDF 操作)を利用でき、文書化された 92 個すべてのエンドポイントが網羅されていることをテストで確認できます。また、サーバー側で ?fields= を使って一覧の応答を絞り込むため、デフォルトでは OCR テキストも含まれません。

ライセンス

MIT。LICENSE をご覧ください。


eichner.cloud が開発 — セルフホスト可能で、かなり気に入っています。

コメント

MCP は初めてですか?

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

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