Paperless-NGX MCP Server について
Paperless-NGX MCP Server は、Paperless-NGX API サーバーに接続し、ドキュメント、タグ、取引先、ドキュメントタイプを管理する MCP サーバーです。AI アシスタントからドキュメントアーカイブを操作したい利用者に向いています。
主な機能
- 01ドキュメントの一覧表示、取得、全文検索、ダウンロード
- 02タイトル、タグ、取引先などのメタデータ付きアップロード
- 03結合、分割、ページ回転を含む一括編集
- 04タグ、取引先、ドキュメントタイプの作成と一覧表示
- 05stdio と Streamable HTTP での実行
活用シーン
- 01自然言語によるキーワードやタグを使ったドキュメント検索
- 02複数ドキュメントへのタグ付与やドキュメントタイプの変更
- 03請求書をアップロードして Paperless-NGX に登録
MCP 対応
MCP サーバーとして、Paperless-NGX のドキュメント、タグ、取引先、ドキュメントタイプ関連のツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Paperless-NGX MCP サーバー
Paperless-NGX API サーバーと連携するための MCP(Model Context Protocol)サーバーです。このサーバーは、Paperless-NGX インスタンス内のドキュメント、タグ、連絡先、ドキュメントの種類を管理するツールを提供します。
クイックスタート
インストール
- MCP サーバーをインストールします:
npm install -g paperless-mcp
- Claude の MCP 設定に追加します:
VSCode 拡張機能の場合は、~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json を編集します:
{
"mcpServers": {
"paperless": {
"command": "npx",
"args": ["paperless-mcp", "http://your-paperless-instance:8000", "your-api-token"]
}
}
}
Claude デスクトップアプリの場合は、~/Library/Application Support/Claude/claude_desktop_config.json を編集します:
{
"mcpServers": {
"paperless": {
"command": "npx",
"args": ["paperless-mcp", "http://your-paperless-instance:8000", "your-api-token"]
}
}
}
-
API トークンを取得します:
- Paperless-NGX インスタンスにログインします
- 右上のユーザー名をクリックします
- 「My Profile」を選択します
- 円形の矢印ボタンをクリックして、新しいトークンを生成します
-
MCP 設定のプレースホルダーを置き換えます:
http://your-paperless-instance:8000を Paperless-NGX の URL に置き換えますyour-api-tokenを、先ほど生成したトークンに置き換えます
これで完了です!Claude に Paperless-NGX のドキュメント管理を依頼できるようになります。
使用例
Claude に次のような作業を依頼できます:
- 「『Invoice』タグが付いたドキュメントをすべて表示して」
- 「『tax return』を含むドキュメントを検索して」
- 「色を #FF0000 にして、『Receipts』という新しいタグを作成して」
- 「ドキュメント #123 をダウンロードして」
- 「連絡先をすべて一覧表示して」
- 「『Bank Statement』という新しいドキュメントの種類を作成して」
利用可能なツール
ドキュメント操作
list_documents
すべてのドキュメントのページ分割された一覧を取得します。
パラメーター:
- page(任意):ページ番号
- page_size(任意):1 ページあたりのドキュメント数
list_documents({
page: 1,
page_size: 25
})
get_document
ID を指定して、特定のドキュメントを取得します。
パラメーター:
- id:ドキュメント ID
get_document({
id: 123
})
search_documents
ドキュメントを全文検索します。
パラメーター:
- query:検索クエリ文字列
search_documents({
query: "invoice 2024"
})
download_document
ID を指定して、ドキュメントファイルをダウンロードします。
パラメーター:
- id:ドキュメント ID
- original(任意):true の場合、アーカイブ版ではなく元のファイルをダウンロードします
download_document({
id: 123,
original: false
})
bulk_edit_documents
複数のドキュメントに対して一括操作を実行します。
パラメーター:
- documents:ドキュメント ID の配列
- method:以下のいずれか:
- set_correspondent:ドキュメントの連絡先を設定します
- set_document_type:ドキュメントの種類を設定します
- set_storage_path:ドキュメントの保存先パスを設定します
- add_tag:ドキュメントにタグを追加します
- remove_tag:ドキュメントからタグを削除します
- modify_tags:複数のタグを追加または削除します
- delete:ドキュメントを削除します
- reprocess:ドキュメントを再処理します
- set_permissions:ドキュメントの権限を設定します
- merge:複数のドキュメントを結合します
- split:ドキュメントを複数に分割します
- rotate:ドキュメントのページを回転します
- delete_pages:ドキュメントから指定したページを削除します
- method に応じた追加パラメーター:
- correspondent:set_correspondent 用の ID
- document_type:set_document_type 用の ID
- storage_path:set_storage_path 用の ID
- tag:add_tag/remove_tag 用の ID
- add_tags:modify_tags 用のタグ ID の配列
- remove_tags:modify_tags 用のタグ ID の配列
- permissions:owner、permissions、merge フラグを含む set_permissions 用のオブジェクト
- metadata_document_id:メタデータの取得元を指定する merge 用の ID
- delete_originals:merge/split 用のブール値
- pages:split 用の文字列 "[1,2-3,4,5-7]"、または delete_pages 用の "[2,3,4]"
- degrees:rotate 用の数値(90、180、または 270)
例:
// Add a tag to multiple documents
bulk_edit_documents({
documents: [1, 2, 3],
method: "add_tag",
tag: 5
})
// Set correspondent and document type
bulk_edit_documents({
documents: [4, 5],
method: "set_correspondent",
correspondent: 2
})
// Merge documents
bulk_edit_documents({
documents: [6, 7, 8],
method: "merge",
metadata_document_id: 6,
delete_originals: true
})
// Split document into parts
bulk_edit_documents({
documents: [9],
method: "split",
pages: "[1-2,3-4,5]"
})
// Modify multiple tags at once
bulk_edit_documents({
documents: [10, 11],
method: "modify_tags",
add_tags: [1, 2],
remove_tags: [3, 4]
})
post_document
新しいドキュメントを Paperless-NGX にアップロードします。
パラメーター:
- file:Base64 エンコードされたファイルの内容
- filename:ファイル名
- title(任意):ドキュメントのタイトル
- created(任意):ドキュメントが作成された日時(例:"2024-01-19" または "2024-01-19 06:15:00+02:00")
- correspondent(任意):連絡先の ID
- document_type(任意):ドキュメントの種類の ID
- storage_path(任意):保存先パスの ID
- tags(任意):タグ ID の配列
- archive_serial_number(任意):アーカイブのシリアル番号
- custom_fields(任意):カスタムフィールド ID の配列
post_document({
file: "base64_encoded_content",
filename: "invoice.pdf",
title: "January Invoice",
created: "2024-01-19",
correspondent: 1,
document_type: 2,
tags: [1, 3],
archive_serial_number: "2024-001"
})
タグ操作
list_tags
すべてのタグを取得します。
list_tags()
create_tag
新しいタグを作成します。
パラメーター:
- name:タグ名
- color(任意):16進数のカラーコード(例:「#ff0000」)
- match(任意):照合するテキストパターン
- matching_algorithm(任意):「any」、「all」、「exact」、「regular expression」、「fuzzy」のいずれか
create_tag({
name: "Invoice",
color: "#ff0000",
match: "invoice",
matching_algorithm: "fuzzy"
})
コレスポンデント操作
list_correspondents
すべてのコレスポンデントを取得します。
list_correspondents()
create_correspondent
新しいコレスポンデントを作成します。
パラメーター:
- name:コレスポンデント名
- match(任意):照合するテキストパターン
- matching_algorithm(任意):「any」、「all」、「exact」、「regular expression」、「fuzzy」のいずれか
create_correspondent({
name: "ACME Corp",
match: "ACME",
matching_algorithm: "fuzzy"
})
ドキュメントタイプ操作
list_document_types
すべてのドキュメントタイプを取得します。
list_document_types()
create_document_type
新しいドキュメントタイプを作成します。
パラメーター:
- name:ドキュメントタイプ名
- match(任意):照合するテキストパターン
- matching_algorithm(任意):「any」、「all」、「exact」、「regular expression」、「fuzzy」のいずれか
create_document_type({
name: "Invoice",
match: "invoice total amount due",
matching_algorithm: "any"
})
エラー処理
次の場合、サーバーは明確なエラーメッセージを表示します:
- Paperless-NGX の URL または API トークンが正しくない
- Paperless-NGX サーバーに接続できない
- 要求された操作が失敗した
- 指定されたパラメーターが無効
開発
サーバーへの貢献や変更を行う場合は、以下を確認してください:
- リポジトリをクローンします
- 依存関係をインストールします:
npm install
- server.js に変更を加えます
- ローカルでテストします:
node server.js http://localhost:8000 your-test-token
このサーバーは以下を使用して構築されています:
API ドキュメント
この MCP サーバーは Paperless-NGX REST API のエンドポイントを実装しています。基盤となる API の詳細については、公式ドキュメントを参照してください。
MCP サーバーの実行
MCP サーバーは 2 つのモードで実行できます:
1. stdio(デフォルト)
これがデフォルトのモードです。サーバーは stdio 経由で通信するため、CLI や直接統合に適しています。
npm run start -- <baseUrl> <token>
2. HTTP(Streamable HTTP Transport)
サーバーを HTTP サービスとして実行するには、--http フラグを使用します。--port でポートを指定することもできます(デフォルト:3000)。このモードでは Express のインストールが必要です(依存関係に含まれています)。
npm run start -- <baseUrl> <token> --http --port 3000
- MCP API は、指定したポートの
POST /mcpで利用できます。 - 各リクエストは、StreamableHTTPServerTransport のパターンに従って、ステートレスに処理されます。
/mcpへの GET および DELETE リクエストは 405 Method Not Allowed を返します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。