redactpdf について
redactpdfは、ローカルPDFから機密テキストを削除するコマンドラインツール兼MCPサーバーです。一般的な個人情報と任意の語句を検出し、別のマスキング済みコピーを作成して、該当テキストが抽出できないことを確認します。
主な機能
- 01SSN、カード番号、メール、電話番号の検出
- 02大文字・小文字を区別しない任意語句の照合
- 03書き込みなしで一致箇所を確認
- 04別ファイルとしてマスキング済みPDFを作成
- 05削除対象テキストの抽出不可を検証
活用シーン
- 01共有前にPDF内の機密テキストを確認
- 02ローカルレポートの個人情報をマスキング
- 03PDFのコピーから指定語句を削除
MCP 対応
MCPサーバーは、検出結果を報告する`check_pdf`と、ローカルPDFのマスキング済みコピーを作成して検証する`redact_pdf`を公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | このマシン上にある PDF の絶対パス |
| terms | array | いいえ | 照合する文字列(大文字と小文字を区別しない) |
| detect | array | いいえ | ssn、card、email、phone のいずれか。省略するとすべてが対象になります。 |
詳細
redactpdf
PDFを共有するということは、画面上で黒塗りした内容が実際に削除されていると信頼することを意味します。実際にはそうでないことがよくあります。テキストはファイル内に残ったままで、コピーして取り出せてしまうのです。redactpdfは逆の方法を取ります。ローカルPDFのテキストレイヤーから機密テキストを探し、一致した文字をすべて物理的に置き換えたコピーを書き出した後、自身の出力を再読み込みして、削除するよう指定された内容を抽出できなくなったことを検証します。検証に失敗した場合は、ファイルではなくエラーが返されます。
機密テキストは4種類検出されます。社会保障番号はSSA独自の有効性ルール(地域番号001~899。ただし666を除く、グループ番号01~99、シリアル番号0001~9999)を満たす必要があるため、この形式のランダムな数字列は検出されません。決済カード番号は、数字の間に単一のスペースまたはハイフンを含められる13~19桁の数字列で、Luhnチェックに合格する必要があります。メールアドレスと北米の電話番号((ddd) ddd-dddd、ddd-ddd-dddd、ddd.ddd.dddd、または ddd ddd dddd。任意で +1 の接頭辞を指定可能)が、組み込みカテゴリを構成します。さらに、termsを使うと独自のリテラル文字列を指定でき、大文字と小文字を区別せずに照合し、それぞれ専用のキーで集計できます。detectを省略すると、4つすべてのカテゴリが実行されます。
検出は抽出された文字列ごとに実行されます。つまり、プレーンまたはFlateDecodeのコンテンツストリーム内にある、TjとTJ演算子の文字列オペランドが対象です。そのため、2つの文字列オペランドに分割された一致は検出されません。これは、このツールが使用するテキストレイヤーモデルの明示された制限であり、伏せられた制限ではありません。
check_pdfは、何も書き込まずに削除対象を報告します。redact_pdfは、墨消ししたコピーを書き出します。入力ファイルは変更されません。一致した各文字を#に置き換えて文字列の長さを保ち、その後、結果を検証します。10ページまでは無料で処理でき、それを超えると両方のツールでライセンスが必要になります。このビルドのライセンスチェックは形式の確認です。[A-Za-z0-9_-]の文字と.区切りで構成された16~512文字のトークンは、license引数またはBLACKOUT_LICENSE環境変数で渡すと、形式が正しいものとして扱われます。上限を超えた場合のエラーでは、ライセンスがない場合(LICENSE_REQUIRED)と、形式が正しくない場合(LICENSE_INVALID)が区別されます。暗号化されたPDF、xrefまたはオブジェクトストリームを使用して構築されたPDF、形式が不正なファイルは、黙って処理対象から外すのではなく、未対応として報告されます。
両方のツールは、1行の概要、空行、そしてpath、outputPath(check_pdfではnull)、pages、counts、extractableChars(check_pdfでは入力内の検出された一致に含まれる文字数、正常に処理されたredact_pdfでは設計上0)、licenseStateを含むフェンス付きJSONブロックを返します。
CLI
npx @reneturcios/redactpdf check_pdf '{"path":"/abs/path/report.pdf"}'
npx @reneturcios/redactpdf redact_pdf '{"path":"/abs/path/report.pdf","terms":["falcon"]}'
npx @reneturcios/redactpdf --version
redact_pdfは、output_pathで別の場所が指定されない限り、<input>-redacted.pdf(入力パスの.pdf拡張子を置き換えたパス)を書き出します。出力先に入力ファイル自体を指定することはできません。また、既存の出力ファイルが置き換えられるのは、overwriteがtrueの場合のみです。
終了コード:成功時は0、実行時エラー時は1(ツールのエラーテキストが表示されます)、使用方法のエラー時は2です。
MCP サーバー
npx -y @reneturcios/redactpdf mcp
MCP クライアントの設定:
{
"mcpServers": {
"redactpdf": {
"command": "npx",
"args": ["-y", "@reneturcios/redactpdf", "mcp"]
}
}
}
ツール
check_pdf— ローカル PDF から削除される内容を、カテゴリごとの一致件数とともに報告します。ファイルへの書き込みは行いません。path(string、必須)— このマシン上の PDF の絶対パスdetect(string array、任意)—ssn、card、email、phoneのいずれか。すべてを対象にする場合は省略しますterms(string array、任意)— 大文字と小文字を区別せずに照合するリテラル文字列
redact_pdf— 検出された機密テキストを完全に削除し、削除されたことを検証したうえで、ローカル PDF の編集済みコピーを書き出します。入力ファイルは変更しません。path(string、必須)— このマシン上の PDF の絶対パスoutput_path(string、任意)— デフォルトは<input>-redacted.pdfです。入力ファイルと同じパスは指定できませんdetect(string array、任意)—ssn、card、email、phoneのいずれか。すべてを対象にする場合は省略しますterms(string array、任意)— 大文字と小文字を区別せずに照合するリテラル文字列overwrite(boolean、任意、デフォルトは false)— 既存の出力ファイルの置き換えを許可しますlicense(string、任意)— Pro ライセンストークン。指定されていない場合はBLACKOUT_LICENSEを使用します
Docker
docker run -i ghcr.io/cloudcorprecords/redactpdf
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/redactpdf check_pdf '{"path":"/w/report.pdf"}'
開発
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (pure local, no network)
npm run dev # run the CLI from source
ライセンス
MIT — Copyright (c) 2026 Rene Turcios
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。