paperless-mcp
Paperless-NGX MCP Server
Paperless-NGX APIサーバーと連携するためのMCP(Model Context Protocol)サーバーです。このサーバーは、Paperless-NGXインスタンス内のドキュメント、タグ、取引先、ドキュメントタイプを管理するためのツールを提供します。
クイックスタート
インストール
以下をMCP設定ファイルに追加してください:
// STDIOモード(ローカルまたはCLIでの使用に推奨)
"paperless": {
"command": "npx",
"args": [
"-y",
"@baruchiro/paperless-mcp@latest",
],
"env": {
"PAPERLESS_URL": "http://your-paperless-instance:8000",
"PAPERLESS_API_KEY": "your-api-token",
"PAPERLESS_PUBLIC_URL": "https://your-public-domain.com"
}
}// HTTPモード(Dockerまたはリモートでの使用に推奨)
"paperless": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/baruchiro/paperless-mcp:latest",
],
"env": {
"PAPERLESS_URL": "http://your-paperless-instance:8000",
"PAPERLESS_API_KEY": "your-api-token",
"PAPERLESS_PUBLIC_URL": "https://your-public-domain.com"
}
}APIトークンを取得します:
Paperless-NGXインスタンスにログインします
右上のユーザー名をクリックします
「My Profile」を選択します
円形の矢印ボタンをクリックして新しいトークンを生成します
MCP設定内のプレースホルダーを置き換えます:
http://your-paperless-instance:8000をPaperless-NGXのURLに置き換えますyour-api-tokenを生成したばかりのトークンに置き換えますhttps://your-public-domain.comを公開用のPaperless-NGX URLに置き換えます(任意。指定しない場合はPAPERLESS_URLにフォールバックします)
環境変数
変数 | 必須 | デフォルト | 説明 |
| はい | — | Paperless-NGXインスタンスのベースURL |
| はい | — | Paperless-NGXプロフィールのAPIトークン |
| いいえ |
| ドキュメントリンク用の公開URL |
| いいえ |
| Paperless-ngx REST APIのバージョン。 |
| いいえ | — |
|
これで完了です!あとはClaudeにPaperless-NGXドキュメントの管理を手伝ってもらうだけです。
使用例
Claudeに依頼できる操作の例:
「'Invoice'というタグが付いたすべてのドキュメントを表示して」
「'tax return'を含むドキュメントを検索して」
「#FF0000の色で'Receipts'という新しいタグを作成して」
「ドキュメント#123をダウンロードして」
「すべての取引先を一覧表示して」
「'Bank Statement'という新しいドキュメントタイプを作成して」
Related MCP server: paperless-mcp
利用可能なツール
ドキュメント操作
list_documents
シンプルなフィルターを使用して、ページ分割されたドキュメントのリストを取得します。単純な一覧表示タスクに使用してください。全文クエリ、構造化されたカスタムフィールドフィルタリング、または高度なPaperlessフィルターが必要な場合は、query_documentsを使用してください。
パラメータ:
page (optional): ページ番号
page_size (optional): 1ページあたりのドキュメント数
search (optional): シンプルなPaperless検索語
correspondent (optional): 取引先ID
document_type (optional): ドキュメントタイプID
tag (optional): タグID
storage_path (optional): ストレージパスID
created__date__gte (optional): YYYY-MM-DD以降に作成された日付
created__date__lte (optional): YYYY-MM-DD以前に作成された日付
ordering (optional): Paperlessの並び順フィールド
archive_serial_number (optional): アーカイブ整理番号
archive_serial_number__isnull (optional): アーカイブ整理番号が空かどうか
custom_field_query (optional): JSONエンコードされた生のPaperlessカスタムフィールドクエリ文字列
custom_fields__icontains (optional): カスタムフィールド値に対する大文字小文字を区別しない部分一致
list_documents({
page: 1,
page_size: 25
})query_documents
標準のドキュメントクエリツールです。全文クエリ、シンプルなPaperless検索、カスタムフィールドフィルター、およびドキュメント化された/api/documents/ Paperlessクエリパラメータをサポートします。
パラメータ:
page (optional): ページ番号
page_size (optional): 1ページあたりのドキュメント数
ordering (optional): Paperlessの並び順フィールド
query (optional): 全文クエリ文字列
search (optional): シンプルなPaperless検索語
more_like_id (optional): このドキュメントIDに類似したドキュメントを検索
correspondent (optional): 取引先ID
document_type (optional): ドキュメントタイプID
tag (optional): タグID
storage_path (optional): ストレージパスID
created__date__gte (optional): YYYY-MM-DD以降に作成された日付
created__date__lte (optional): YYYY-MM-DD以前に作成された日付
custom_field_query (optional):
[field_name_or_id, operator, value]リーフまたは["AND" | "OR", [clause1, clause2]]グループを使用した構造化Paperlessカスタムフィールドクエリpaperless_filters (optional): キーと値のペアとして渡される、ドキュメント化された追加の
/api/documents/Paperlessクエリパラメータ
// Full-text query
query_documents({
query: "invoice 2024"
})
// Simple search term
query_documents({
search: "acme"
})
// Custom field exact match
query_documents({
custom_field_query: ["Invoice Number", "exact", "12345"]
})
// Custom field empty
query_documents({
custom_field_query: ["OR", [
["Invoice Number", "isnull", true],
["Invoice Number", "exact", ""]
]]
})
// Custom field missing
query_documents({
custom_field_query: ["Invoice Number", "exists", false]
})
// Combined filters
query_documents({
query: "invoice",
tag: 5,
created__date__gte: "2024-01-01",
custom_field_query: ["Invoice Number", "exists", true]
})
// One documented Paperless filter that is not a first-class argument
query_documents({
paperless_filters: {
id__in: [101, 202, 303]
}
})get_document
IDを指定して特定のドキュメントを取得します。
パラメータ:
id: ドキュメントID
get_document({
id: 123
})search_documents
全文検索用の非推奨の互換ラッパーです。新しい統合ではquery_documents({ query: ... })を使用してください。
パラメータ:
query: 検索クエリ文字列
search_documents({
query: "invoice 2024"
})download_document
IDを指定してドキュメントファイルをダウンロードします。
パラメータ:
id: ドキュメントID
original (optional): trueの場合、アーカイブ版ではなく元のファイルをダウンロードします
download_document({
id: 123,
original: false
})get_document_thumbnail
IDを指定してドキュメントのサムネイル(画像プレビュー)を取得します。サムネイルをbase64エンコードされたWebP画像リソースとして返します。
パラメータ:
id: ドキュメントID
get_document_thumbnail({
id: 123
})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: ドキュメントから特定のページを削除
メソッドに応じた追加パラメータ:
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の配列
set_permissions: set_permissions用のオブジェクト。閲覧/変更のユーザーとグループを指定します(
{"view": {"users": [], "groups": []}, "change": {...}})。省略されたアクション/リストは変更されませんowner: set_permissions用のユーザーID(削除する場合はnull)。mergeがtrueでない限り、ownerを省略すると現在の所有者がクリアされます
merge: set_permissions用のブール値 — trueの場合は既存の権限に追加し、所有者を維持します。false(デフォルト)の場合は指定されたユーザー/グループを置き換えます
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]
})
// Modify custom fields
bulk_edit_documents({
documents: [12, 13],
method: "modify_custom_fields",
add_custom_fields: [
{ field: 2, value: "year" }
],
remove_custom_fields: []
})
// Set an empty custom field value, e.g. a date field used as a pending marker
bulk_edit_documents({
documents: [14],
method: "modify_custom_fields",
add_custom_fields: [
{ field: 9, value: "" }
],
remove_custom_fields: []
})post_document
新しいドキュメントをPaperless-NGXにアップロードします。
2つのアップロードモード:
Base64モード(従来型):
file(base64エンコードされたコンテンツ)+filenameを指定しますファイルシステムモード(効率的):
file_path(サーバー上の絶対パス)を指定します
セキュリティに関する注意: file_pathを使用する場合は、PAPERLESS_MCP_UPLOAD_PATHS環境変数(許可するディレクトリのコロン区切りリスト)を設定して、アップロードを特定の場所に制限してください。これがないと、サーバーのファイルシステム上の任意のファイルがアップロードされる可能性があります。
パラメータ:
file (optional): base64エンコードされたファイルコンテンツ。
fileまたはfile_pathのいずれかが必要です。file_path (optional): サーバーのファイルシステム上のファイルへの絶対パス。
fileまたはfile_pathのいずれかが必要です。filename (optional): ファイル名。
fileの場合は必須、file_pathの場合は任意(パスから派生します)。title (optional): ドキュメントのタイトル
created (optional): ドキュメントが作成された日時(例:"2024-01-19"または"2024-01-19 06:15:00+02:00")
correspondent (optional): 取引先のID
document_type (optional): ドキュメントタイプのID
storage_path (optional): ストレージパスのID
tags (optional): タグIDの配列
archive_serial_number (optional): アーカイブ整理番号
custom_fields (optional): カスタムフィールドIDの配列
ファイルサイズ制限: 両モードとも100MB
// Base64 mode (traditional)
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",
custom_fields: [1, 2]
})
// Filesystem mode (more efficient for large files)
post_document({
file_path: "/var/uploads/invoice.pdf",
title: "January Invoice",
correspondent: 1,
document_type: 2,
tags: [1, 3]
})ドキュメントメモ
list_document_notes
ドキュメントに添付されたすべてのメモを一覧表示します。
パラメータ:
id: ドキュメントID
list_document_notes({
id: 123
})create_document_note
ドキュメントにメモを追加します。ドキュメントのメモの全リストを返します。
パラメータ:
id: ドキュメントID
note: 追加するメモのテキスト
create_document_note({
id: 123,
note: "Invoice paid on 2026-06-30 from Commerzbank account."
})delete_document_note
⚠️ メモIDを指定して、ドキュメントから単一のメモを削除します。この操作は元に戻せません。
パラメータ:
id: ドキュメントID
note_id: 削除するメモのID
confirm: この破壊的操作を確認するには
trueを指定する必要があります
delete_document_note({
id: 123,
note_id: 5,
confirm: true
})タグ操作
list_tags
すべてのタグを取得します。
list_tags()create_tag
新しいタグを作成します。
パラメータ:
name: タグ名
color (optional): 16進数のカラーコード(例:"#ff0000")
match (optional): 一致させるテキストパターン
matching_algorithm (optional): 0から6までの数値: 0 - なし 1 - 任意の単語 2 - すべての単語 3 - 完全一致 4 - 正規表現 5 - あいまい単語 6 - 自動
create_tag({
name: "Invoice",
color: "#ff0000",
match: "invoice",
matching_algorithm: 5
})取引先操作
list_correspondents
すべての取引先を取得します。
list_correspondents()create_correspondent
新しい取引先を作成します。
パラメータ:
name: 取引先名
match (optional): 一致させるテキストパターン
matching_algorithm (optional): 0から6までの数値: 0 - なし 1 - 任意の単語 2 - すべての単語 3 - 完全一致 4 - 正規表現 5 - あいまい単語 6 - 自動
create_correspondent({
name: "ACME Corp",
match: "ACME",
matching_algorithm: 5
})ドキュメントタイプ操作
list_document_types
すべてのドキュメントタイプを取得します。
list_document_types()create_document_type
新しいドキュメントタイプを作成します。
パラメータ:
name: ドキュメントタイプ名
match (任意): 照合するテキストパターン
matching_algorithm (任意): 0〜6の数値: 0 - なし 1 - 任意の単語 2 - すべての単語 3 - 完全一致 4 - 正規表現 5 - あいまい単語 6 - 自動
create_document_type({
name: "Invoice",
match: "invoice total amount due",
matching_algorithm: 1
})カスタムフィールド操作
list_custom_fields
すべてのカスタムフィールドを取得します。
list_custom_fields()get_custom_field
IDで特定のカスタムフィールドを取得します。
パラメータ:
id: カスタムフィールドID
get_custom_field({
id: 1
})create_custom_field
新しいカスタムフィールドを作成します。
パラメータ:
name: カスタムフィールド名
data_type: "string"、"url"、"date"、"boolean"、"integer"、"float"、"monetary"、"documentlink"、"select"のいずれか
extra_data (任意): セレクトオプションなど、カスタムフィールドの追加データ
create_custom_field({
name: "Invoice Number",
data_type: "string"
})update_custom_field
既存のカスタムフィールドを更新します。
パラメータ:
id: カスタムフィールドID
name (任意): 新しいカスタムフィールド名
data_type (任意): 新しいデータ型
extra_data (任意): カスタムフィールドの追加データ
update_custom_field({
id: 1,
name: "Updated Invoice Number",
data_type: "string"
})delete_custom_field
カスタムフィールドを削除します。
パラメータ:
id: カスタムフィールドID
delete_custom_field({
id: 1
})bulk_edit_custom_fields
複数のカスタムフィールドに対して一括操作を実行します。
パラメータ:
custom_fields: カスタムフィールドIDの配列
operation: "delete"のいずれか
bulk_edit_custom_fields({
custom_fields: [1, 2, 3],
operation: "delete"
})メール操作
Paperlessのメールアカウントと、自動メール取り込みを駆動するメールルールを管理するためのツールです。アカウントのパスワード/トークンが公開されることは決してありません。すべてのツール応答で伏せられています。
list_mail_accounts
メールルールを作成する際に必要なアカウントIDを選択できるよう、メールアカウントを一覧表示します。パスワードは伏せられています。
パラメータ:
page (任意): ページ番号
page_size (任意): 1ページあたりの結果数
list_mail_accounts()get_mail_account
IDで単一のメールアカウントを取得します。パスワード/トークンフィールドは伏せられています。
パラメータ:
id: メールアカウントID
get_mail_account({
id: 1
})process_mail_account
1つのアカウントについて、Paperlessのメール処理を手動でトリガーします。アカウントで有効なメールルールに従って、一致するメールを取り込むことができます。
パラメータ:
id: メールアカウントID
process_mail_account({
id: 1
})list_mail_rules
メールルールをオプションのページネーション付きで一覧表示します。
パラメータ:
page (任意): ページ番号
page_size (任意): 1ページあたりの結果数
list_mail_rules()get_mail_rule
IDで単一のメールルールを取得します。
パラメータ:
id: メールルールID
get_mail_rule({
id: 1
})create_mail_rule
メールルールを作成します。最初にlist_mail_accountsを使用してアカウントを選択してください。
必須パラメータ:
name: ルール名
account: メールアカウントID
folder: スキャンするIMAPフォルダ(例: "INBOX")
一般的な任意パラメータ:
enabled (デフォルト true): ルールが有効かどうか
filter_from / filter_to / filter_subject / filter_body: 受信メールの照合条件
maximum_age: この日数より新しいメールのみ処理
action: 1=削除、2=フォルダへ移動、3=既読にする、4=フラグ、5=タグ
action_parameter: 選択したアクションの対象フォルダ/タグ
assign_title_from: 1=件名、2=添付ファイル名、3=割り当てない
assign_tags / assign_correspondent / assign_document_type: 適用するメタデータ
assign_correspondent_from: 1=なし、2=メールアドレス、3=送信者名、4=assign_correspondentを使用
attachment_type: 1=添付ファイルのみ、2=インラインを含むすべてのファイル
consumption_scope: 1=添付ファイルのみ、2=メール全体を.emlとして、3=両方
pdf_layout: 0=システムデフォルト、1=テキスト+HTML、2=HTML+テキスト、3=HTMLのみ、4=テキストのみ
create_mail_rule({
name: "Invoices",
account: 1,
folder: "INBOX",
filter_subject: "invoice",
action: 3,
attachment_type: 1
})update_mail_rule
既存のメールルールをパッチ更新します。指定したフィールドのみが変更されます。
パラメータ:
id: メールルールID
...更新する
create_mail_ruleの任意のフィールド
update_mail_rule({
id: 1,
enabled: false
})delete_mail_rule
メールルールを削除します。明示的な確認フラグが必要です。これは今後のメール取り込み動作を変更しますが、既存のドキュメントは削除しません。
パラメータ:
id: メールルールID
confirm: 削除を確認するには
trueである必要があります
delete_mail_rule({
id: 1,
confirm: true
})エラーハンドリング
サーバーは、以下の場合に明確なエラーメッセージを表示します:
Paperless-NGXのURLまたはAPIトークンが正しくない
Paperless-NGXサーバーに到達できない
要求された操作が失敗する
指定されたパラメータが無効である
テスト
ユニットテスト
ユニットテストスイートを実行します(外部依存関係は不要です):
npm testE2Eテスト
E2Eスイートは、空のPaperless-ngxインスタンスを起動し、コンパイル済みのMCPサーバーを実行して、tools/callリクエストを通じて決定的な直列シナリオを駆動します。タグ、correspondent(取引先)、ドキュメントタイプを作成し、PDFをアップロードしてから、同じドキュメントに対してlist / get / search / download / thumbnail / bulk-editを実行します。LLMもMCP外部のPaperless RESTクライアントも使用しません。
前提条件: Docker、Docker Compose、およびjq。
# 1. Build the MCP server
npm run build
# 2. Start Paperless-ngx
docker compose -f docker-compose.e2e.yml up -d
# 3. Wait for Paperless to be ready, then get a token
TOKEN=$(curl -s -X POST http://localhost:8000/api/token/ \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin123"}' | jq -r '.token')
# 4. Start the MCP server
node build/index.js --http --port 3001 \
--baseUrl http://localhost:8000 --token "$TOKEN" &
MCP_PID=$!
# 5. Run the E2E tests
MCP_URL=http://localhost:3001/mcp \
PAPERLESS_URL=http://localhost:8000 \
PAPERLESS_TOKEN="$TOKEN" \
npm run test:e2e
# 6. Cleanup
kill "$MCP_PID"
docker compose -f docker-compose.e2e.yml down -vE2Eテストは、すべてのプルリクエストとmainへのプッシュ時にCIでも自動的に実行され、build/index.js CLIと公開済みのDockerイメージの両方を対象とします。
開発
サーバーに貢献したい、または変更したい場合は、知っておくべきことは次のとおりです:
リポジトリをクローンする
依存関係をインストールする:
npm installserver.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 3000MCP APIは、指定されたポートの
POST /mcpで利用可能になります。各リクエストは、StreamableHTTPServerTransportパターンに従ってステートレスに処理されます。
/mcpへのGETおよびDELETEリクエストは、405 Method Not Allowedを返します。
リクエストごとのAPIトークン(HTTP/Dockerモード)
HTTPモードでは、クライアントは標準のAuthorizationヘッダーを介してPaperless-NGX APIトークンを提供することで認証します:
Authorization: Bearer <paperless-ngx-api-token>トークンはそのままPaperless-NGXに渡されるため、各クライアント自身のPaperless権限がエンドツーエンドで適用されます。これにより、単一のサーバーインスタンスで、それぞれ独自のトークンを持つ複数のユーザーにサービスを提供できます。同じ動作が/mcpと/sseの両方のエンドポイントに適用されます。
⚠️ v2.0.0での破壊的変更 — HTTPモードはデフォルトで認証が必要になりました。
以前は、
Authorizationヘッダーのないリクエストはサーバー設定のPAPERLESS_API_KEYに暗黙的にフォールバックしており、ポートに到達できる人なら誰でもHTTPエンドポイントを利用できました。v2.0.0以降、Bearerトークンのないリクエストは401 Unauthorizedで拒否されます。サーバートークンは、--no-authで明示的にオプトインしない限り、認証されていないリクエストに決して使用されません。
シナリオ |
|
|
クライアントが |
|
|
ヘッダーなし、 |
| サーバートークン |
ヘッダーなし、サーバートークンなし |
|
|
v1.xからの移行: 以前のフォールバック(トークンを送信しないクライアントに対して単一の共有PAPERLESS_API_KEYを使用する)に依存していた場合は、2つのオプションがあります:
推奨: 各クライアントに
Authorization: Bearer <paperless-token>を送信させます。以前の動作を復元する(信頼できるローカルネットワークのみ):
--no-authフラグを付けてサーバーを起動します。例: Dockerのcommand/argsまたはCLI呼び出しに追加します。これにはサーバートークン(PAPERLESS_API_KEYまたは--token)の設定が必要です。
MCPサーバーはDockerとDocker Composeを使用してデプロイできます。Dockerイメージは、ポート3000でSSE(Server-Sent Events)サポート付きのHTTPモードで自動的に実行されます。
Docker Compose設定
docker-compose.ymlファイルを作成します:
services:
paperless-mcp:
container_name: paperless-mcp
image: ghcr.io/baruchiro/paperless-mcp:latest
environment:
- PAPERLESS_URL=http://your-paperless-ngx-server:8000
- PAPERLESS_API_KEY=your-paperless-api-key
- PAPERLESS_PUBLIC_URL=https://paperless-ngx.yourpublicurl.com
ports:
- "3000:3000"
restart: unless-stopped次に実行します:
docker-compose up -dContinue VS Code拡張機能での使用
Continue VS Code拡張機能を使用している場合、SSEを介してDocker化されたMCPサーバーを使用するように設定できます。
ワークスペースのルートに.continue/mcpServers/paperless-mcp.yamlを作成または編集します:
name: Paperless
version: 0.0.1
schema: v1
mcpServers:
- name: Paperless
type: sse
url: http://localhost:3000/sse注記:
リモートサーバーで実行している場合は、
localhostをDockerホストのIPアドレスまたはホスト名に置き換えてくださいDockerコンテナは環境変数によって認証を処理するため、Continue設定に資格情報は不要です
SSEエンドポイントは、設定されたポート(デフォルト: 3000)の
/sseで利用可能です
クレジット
このプロジェクトはnloui/paperless-mcpのフォークです。原作者の作業に感謝します。貢献や改善はアップストリームに還元される場合があります。
デバッグ
VS CodeでMCPサーバーをデバッグするには、次の起動構成を使用します:
{
"type": "node",
"request": "launch",
"name": "Debug Paperless MCP (HTTP, ts-node ESM)",
"program": "${workspaceFolder}/node_modules/ts-node/dist/bin.js",
"args": [
"--esm",
"src/index.ts",
"--http",
"--baseUrl",
"http://your-paperless-instance:8000",
"--token",
"your-api-token",
"--port",
"3002"
],
"env": {
"NODE_OPTIONS": "--loader ts-node/esm",
},
"console": "integratedTerminal",
"skipFiles": [
"<node_internals>/**"
]
}重要: デバッグする前に、src/index.tsの次の行(175行目あたり)のコメントを解除してください:
// await new Promise((resolve) => setTimeout(resolve, 1000000));これにより、サーバーがすぐに終了するのを防ぎ、ブレークポイントを設定してコードをデバッグできるようになります。
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityBmaintenanceA privacy-first MCP server for Paperless-ngx that lets an LLM agent search, organize, tag, and reference documents without exposing full text unless explicitly requested.13
- FlicenseAqualityCmaintenanceMCP server for Paperless-ngx document management. Enables AI models to search, retrieve, update documents and manage metadata.7
- AlicenseNot gradedqualityAmaintenanceA read-only and write MCP server for Paperless-ngx, enabling document listing, metadata retrieval, and creation of tags, correspondents, document types, and sorting workflows via natural language.MIT
- FlicenseNot gradedqualityCmaintenanceMCP server for Paperless-ngx document management, enabling search, OCR content access, metadata updates, tag/correspondent/type management, and duplicate detection via natural language.
Related MCP Connectors
MCP server for the PDFGate API. Generate PDFs, manage documents and handle e-signatures.
PandaDoc MCP server for creating, sending, signing, and tracking PandaDoc documents.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/baruchiro/paperless-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server