pdf-merger について
AIチャットから文書を結合したりページを調整したりするためのローカルPDFツールです。READMEには分割、スタンプ、テキスト抽出などの操作も記載され、ファイルのアップロードは不要です。
主な機能
- 01PDFの結合と分割
- 02ページの抽出、回転、並べ替え
- 03テキストや事業者情報のスタンプ
- 04ページ数とメタデータの確認
- 05PDFテキストの抽出と操作履歴の表示
活用シーン
- 01複数のPDFを1つのファイルに結合
- 02スキャンの指定ページを契約書に追加
- 03表紙を先頭にするためのページ並べ替え
- 04請求書や契約書へのスタンプ
MCP 対応
PDFツール、`pdf://recent` リソース、`mark_invoice_paid` プロンプトをMCPクライアントに公開します。ファイル操作はローカルで行い、PDFは元の場所に保持されます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.zovo.one/mcp/pdf-mergerclaude mcp add --transport http theluckystrike-pdf-merger https://mcp.zovo.one/mcp/pdf-merger{"mcpServers":{"theluckystrike-pdf-merger":{"type":"http","url":"https://mcp.zovo.one/mcp/pdf-merger"}}}Cursor で開く{"servers":{"theluckystrike-pdf-merger":{"type":"http","url":"https://mcp.zovo.one/mcp/pdf-merger"}}}VS Code で開く{"mcpServers":{"theluckystrike-pdf-merger":{"type":"http","url":"https://mcp.zovo.one/mcp/pdf-merger"}}}{"mcpServers":{"theluckystrike-pdf-merger":{"serverUrl":"https://mcp.zovo.one/mcp/pdf-merger"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.zovo.one/mcp/pdf-merger認証が必要ツール
15| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | pdf_upload でアップロードした PDF の名前、またはこのサーバーが以前に作成した PDF の名前 |
詳細
Claude から PDF フォームを結合、分割、入力する
「この請求書に PAID と押印してコピーを保存して」や「このスキャンの 2~6 ページを抜き出して、契約書と結合して」と言うだけで、すべてが自分のマシン上で一瞬で完了します。この MCP サーバーは、ウェブのアップローダーを使うことになりがちなちょっとした PDF 作業をこなします。PDF の結合、ページ範囲による分割、ページの抽出や並べ替え、横向きのスキャンの回転、PAID や DRAFT、お好きなテキストの押印、会社名と VAT ID のフッターへの挿入、フォルダー内のファイルのページ数の集計、PDF のテキストの読み取りに対応しています。アップロードも、アカウントも、ネイティブ依存関係も、オフィスソフトのインストールも不要です。
公式 MCP Registry に掲載されています(io.github.theluckystrike/pdf-merge-split-stamp-extract-pages)。
AI Product Index に掲載されています - mcp.zovo.one/s/pdf にライブのリモートエンドポイントがあり、無料枠を利用できます。登録は不要です。

フリーランスの仕事で発生する PDF の雑務を、請求書を預けるのが不安なブラウザータブではなく、チャットからこなせます。
60 秒でインストール
@theluckystrike/mcp-pdf の npm 公開は保留中です。それまでは、ワンクリックの .mcpb バンドルか、クローンしてビルドする方法をご利用ください。
以下の両方の動作を確認済みです。
ワンクリック(.mcpb):最新リリースから pdf.mcpb をダウンロードし、Claude Desktop でダブルクリックします:
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": {
"pdf": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-pdf"]
}
}
}
Claude Code:
claude mcp add pdf -- npx -y @theluckystrike/mcp-pdf
(.cursor/mcp.json):
{
"mcpServers": {
"pdf": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-pdf"]
}
}
}
上記の npx 形式は、パッケージの公開と同時に利用できるようになります。それまでは、上記の .mcpb バンドルを使うか、
次の 3 つのコマンドだけでソースからビルドしてください:
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/pdf
その後、クライアントの command に node を指定し、引数として servers/pdf/dist/index.js の絶対パスを 1 つ渡します。
Pro モードで実行するには、同じ設定ブロックで MCP_LICENSE_KEY を設定するか、キーを指定して license_activate を一度呼び出してください。
ツール
| ツール | 機能 |
|---|---|
pdf_info | ページ数、各ページのサイズ(ポイントおよびミリメートル単位)、用紙名(A4、Letter、カスタム)、各ページに設定済みの回転、メタデータ(タイトル、作成者、生成ソフト、日付)、ファイルが暗号化されているかどうかを表示します |
pdf_count | 任意の数の PDF ファイルについて、ファイルごとのページ数と合計数を表示します。読み取れないファイルはファイルごとに報告され、ほかのファイルの集計は続行されます |
pdf_merge | 指定した順序で PDF を 1 つに結合します。ページサイズはそのまま維持され、サイズが混在する結合ファイルはその旨が示されます |
pdf_split | 範囲ごとに新しいファイルを作成します。"1-3,5,7-" は 1~3 ページ、5 ページ、7 ページから末尾までを指定します。out_path_pattern では {n}、{range}、{name} を使用できます |
pdf_pages | 選択したページを、指定した順序で 1 つの新しい PDF に抽出します。"5,1,1" は 5 ページ目を先頭にし、1 ページ目を 2 回含めます |
pdf_rotate | ページを 90 度単位で回転します。既にページに設定されている回転に加算されるため、横向きのスキャンに適しています |
pdf_stamp | ページにテキストを描画します。PAID と DRAFT のプリセット、または任意のテキスト、色、位置、不透明度、サイズを指定できます。中央のスタンプは 45 度の対角線上に配置されます |
pdf_watermark_business | 共有プロフィールから、すべてのページのフッターに会社名と VAT ID を挿入します。mcp-invoice と mcp-docx がこのプロフィールを書き込みます |
pdf_text | ページのコンテンツストリームから、可能な範囲でテキストを抽出します。下記の注意事項をご覧ください |
pdf_reorder | ページを新しい順序に並べた PDF を作成します。誤ってページが抜けないよう、すべてのページをそれぞれ 1 回ずつ指定する必要があります |
license_status | Free モードまたは Pro モードを表示します |
license_activate | Pro キーを有効化します(オフラインで検証) |
リソース:pdf://recent は、直近の 25 件の操作を新しい順に返します。入力内容、書き込まれたファイル、実行日時が含まれます。
プロンプト:mark_invoice_paid は、mcp-invoice の invoice_get に続けて pdf_stamp PAID を実行し、押印したコピーを元のファイルと同じ場所に保存します。
できること
| 指示 | ツール |
|---|---|
| 「請求書 INV-2026-0007 を支払い済みにしてください。」 | mark_invoice_paid プロンプトの後に pdf_stamp |
| 「送付する前に、この契約書全体に DRAFT の透かしを入れてください。」 | pdf_stamp |
| 「この3つのPDFを1つのファイルに結合してください。」 | pdf_merge |
| 「このスキャンを分割してください。1~3ページは請求書、4ページ目以降は領収書です。」 | pdf_split |
| 「このPDFから2~6ページを抜き出して、別々に保存してください。」 | pdf_pages |
| 「このスキャンは横向きです。回転してください。」 | pdf_rotate |
| 「これらすべてのPDFは何ページありますか?」 | pdf_count |
| 「このPDFの1ページ目には何と書かれていますか?」 | pdf_text |
| 「フッターに会社名とVAT番号を入れてください。」 | pdf_watermark_business |
| 「表紙を先頭に移動してください。」 | pdf_reorder |
使用例
You: Stamp PAID on ~/invoices/INV-2026-0007.pdf and save a copy.
pdf_stamp {
path: "~/invoices/INV-2026-0007.pdf",
text: "PAID",
position: "center",
out_path: "~/invoices/INV-2026-0007-paid.pdf"
}
-> Stamped "PAID" on 1 page
-> ~/invoices/INV-2026-0007-paid.pdf, 0.9 MB
スタンプは平坦化された画像ではなく、描画されたテキストです。選択や検索が可能で、プリセットの緑色で45度の斜め方向に描画されます。元のファイルはバイト単位で変更されません。
Free と Pro
| Free | Pro | |
|---|---|---|
pdf_info、pdf_count、pdf_text | 無制限 | 無制限 |
pdf_merge | 1回あたり最大5ファイル | ファイル数無制限 |
pdf_split、pdf_pages、pdf_rotate | 30ページ以下のファイル | ページ数無制限 |
pdf_stamp | プリセットカラーの PAID と DRAFT のプリセット | 任意のテキスト、色、サイズ |
pdf_watermark_business | - | フッターに会社名とVAT番号を追加 |
pdf_reorder | - | 利用可能 |
プランの制限に達した場合も、それはエラーではなく回答として通知されます。呼び出しが拒否された場合、何も書き込まれません。
Pro は買い切りで $19、またはコレクション内のすべてのサーバーを対象に $39 です。
pdf_text はベストエフォートです。その意味を正確に説明します
PDF はテキストを保存しません。描画演算子を保存し、表示されるテキストはフォントに渡されたバイト列です。このサーバーは node:zlib を使って各ページの FlateDecode コンテンツストリームを展開し、4つのテキスト表示演算子(Tj、TJ、'、")と、行を終わらせる位置指定演算子を読み取ります。これは約200行のコードで独自に実装したパーサーで、pdfjs もネイティブモジュールも使っていません。現実的な制限が3つあり、ツールは呼び出しのたびにその回答で明示します。
- スキャンにはテキストがありません。 画像のみのページにはテキスト演算子がないため、何も返りません。ここにOCRはなく、今後も追加されません。説明のない空文字列を返すのではなく、スキャンである可能性が高いと回答します。
- カスタムエンコーディングやCIDエンコーディングでは、文字ではなくグリフインデックスが返ります。 サブセット埋め込みフォントやCJKフォントは、パーサーが読み取らないテーブルを使って、バイト列をグリフ番号に対応付けます。読み取り可能な文字が出力されない場合は、その原因がフォントにあると回答します。
- 読み取り順は描画順です。 段組みの検出もレイアウトの再構築も行いません。単語間のスペースは、
TJ配列でスペースに使用される大きな負のカーニング値から復元します。そのため、単語ごとに個別に位置指定されているPDFでは、単語がつながった状態で返ることがあります。
ワープロ、請求書作成ツール、レポート生成ツールで作成されたPDFや、標準フォントまたは完全に埋め込み済みのフォントを使うPDFは、きれいに読み取れます。それ以外の場合は、読み取れなかった理由が示されます。
暗号化されたPDFは推測で処理せず、拒否します
pdf-lib では復号できません。また、暗号化を無視して暗号化されたファイルを読み込むと、ページが文字化けし、そのまま出力に書き込まれてしまいます。そのため、トレーラーに /Encrypt 辞書が記載されたファイルは、書き込みを行うすべてのツールで拒否されます。メッセージには理由と解決方法が示されます。パスワードを使ってリーダーで開き、新しいPDFとしてエクスポートまたは印刷し、そのファイルを使用してください。pdf_info はレポートが唯一の役割なので、encrypted: true として引き続き回答します。また、pdf_count はそのファイルを読み取り不可のファイル1件として報告し、残りのファイルは引き続きカウントします。
既存のファイルは上書きされず、入力も変更されません
各ツールは新しいファイルを書き込み、入力をバイト単位でそのまま保持します。意図的に、インプレースモードはありません。
すでに存在する out_path は拒否されます。
Error: /path/merged.pdf already exists and nothing was written.
Pass overwrite: true to replace it, or give a different out_path.
パスは存在確認ではなく排他的な作成によって確保されるため、2つのプロセスが同じ out_path に同時に書き込もうとしても、一方だけが成功し、もう一方は拒否されて何も書き込みません。pdf_split は、いずれかを書き込む前にすべての出力パスを確保します。そのため、3番目のパートで衝突しても、分割が途中まで行われて1番目と2番目のパートだけが残ることはありません。また、確保は解放されるため、ディスク上に空のファイルも残りません。
ファイルを置き換える場合は、overwrite: true を指定してください。
overwrite: true を指定しても、出力を入力にすることはできません。操作結果を自身のソースの1つに上書きすると、そのソースが破壊されます。ページはすでにメモリ上にあり、元のファイルに書き戻されるため、3ページのファイルが抽出した1ページだけのファイルになり、その後そのパスを読み取るたびに、気付かないまま誤った結果になります。そのため、同じ呼び出しのいずれかの入力と同じ場所を指す(または inode を共有する)out_path は、処理を始める前に拒否されます。
Error: out_path /path/scan.pdf is also an input of this operation, so writing it would destroy the source.
Nothing was written. Write beside it instead - /path/scan-out.pdf - and, if the result really is meant to
take the original's place, rename it yourself once you have checked it.
制限事項
- 100 MB を超える入力は拒否されます。PDF の書き換えには、その数倍のメモリが必要です。
%PDF-で始まらないファイルは、何も読み込む前に拒否されます。- 回転はページメタデータとして90度単位で記録されます。これはこの形式で使える単位です。描画し直すことはありません。
- スタンプのテキストには、WinAnsi とその256個のコードポイントを含む組み込み PDF フォントが使われます。この範囲外の文字は、明確なラテン文字の形がある場合は音訳されます。たとえば、ポーランド語の
OPŁACONEのスタンプはOPLACONEになり、その旨と実際に描画された内容が回答に示されます。該当する形がない文字は削除され、数が記録されるため、CJK のスタンプは作成できません。改行は単語の区切りとして扱われ、削除されません。 font_sizeは1~1600ポイントの範囲で指定する必要があります。このサーバーが使用する最小サイズでも収まらない長さのスタンプも描画され、端からどれだけはみ出すかが回答に示されるため、テキストを短くできます。pdf_textは1回の回答を200,000文字までに制限し、続きから取得するためのpages引数を示します。ファイルから何かが欠落するわけではありません。切り取られるのは回答であり、読み取りではありません。- ページ番号の追加、署名、墨消し、圧縮には対応していません。このサーバーはページ単位の処理を行うもので、PDF エディターではありません。PDF/A の書き込みには対応していません。
pdf_infoはファイル自身のpdfa_claimを報告し、書き込みを行う各ツールは、出力がその宣言を維持しなくなることを明示します。 - フォームは読み取るだけで、入力はしません。
pdf_textは AcroForm のフィールド値を出力します。これらの値はページコンテンツストリームではなくフィールド内にあるため、ページテキストには含まれません。 - OCR には対応していません。
pdf_textのセクションを参照してください。
データの保存方法
保存されるのは、実行した操作の記録だけです。${XDG_DATA_HOME:-~/.local/share}/mcp-servers/pdf/operations.json に、直近500件の操作がプレーンな JSON として保存されます。PDF は指定した場所にそのまま残ります。記録への書き込みはすべて .../pdf/.lock のアドバイザリロック内で行われるため、同じデータディレクトリを使う2つのクライアントが記録を失うことはありません。また、一時ファイルに保存してから、所定の場所にリネームします。
記録が読み取れない場合や有効な JSON でない場合も、「空」として扱うことはありません。operations.json.corrupt-<timestamp> としてバイト単位でそのまま別の場所に移動し、その隣にマーカーを置きます。依頼された PDF は引き続き書き込まれ、記録に手を加える前にディスク上に保存されます。また、履歴を更新できなかったことが回答で通知されます。
業務用フッターには、スイート全体で共通のプロファイル ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json が使われます。これは mcp-invoice または mcp-docx の business_set によって書き込まれます。内容を捏造することはありません。名前が保存されていない場合、pdf_watermark_business は拒否し、実行すべきツールを案内します。
プライバシー
すべてのデータはローカルに保存されます。サーバーはお使いのマシン上のファイルを読み書きし、いかなるネットワークリクエストも行いません。 ライセンス認証のため(キーはオフラインで検証されます)でも、フォントのためでも、テレメトリーのためでもありません。スタンプを押した PDF がどこかにアップロードされることはありません。それこそが、このツールを作った理由です。
組み合わせて使えるツール
- mcp-invoice:送信した請求書に「支払い済み」のスタンプを押します。
mark_invoice_paidプロンプトでは、invoice_getの結果をpdf_stampに渡します。 - mcp-docx:提案書を
.docxで作成して PDF に変換し、ここでスタンプを押したり、結合したり、分割したりできます。 - mcp-resume:履歴書、カバーレター、ポートフォリオを、応募フォームで受け付けられる 1 つのファイルにまとめます。
- office-suite:1 回のインストールで複数のサーバーを利用でき、設定エントリも 1 つです。
トラブルシューティング
npxがハングする、またはパッケージが見つからない:このパッケージの npm 公開は保留中です。公開されるまでは、上記の.mcpbバンドルか、クローンしてビルドする方法を使ってください。- 「暗号化されているため拒否されました」:ファイルがパスワードまたは権限で保護されています。PDF リーダーで開き、新しい PDF にエクスポートするか印刷してから、そのコピーにツールを実行してください。このサーバーがパスワードを推測したり、削除したりすることはありません。
pdf_textが何も返さない:ページがスキャン画像であるか、フォントがカスタムエンコーディングを使用しています。どちらに該当するかは回答に記載されます。OCR 機能はありません。- スタンプが小さすぎる、または大きすぎる:デフォルトでは、ページ幅に収まるようにサイズが調整されます。正確なポイントサイズを指定するには
font_sizeを渡し、opacityには 0 から 1 の値を指定してください。 - 「すでに存在するため、何も書き込まれませんでした」:
overwrite: trueを渡すか、別のout_pathを指定してください。 - Node のバージョン:Node >= 18 が必要です。
node -vで確認してください。
MIT ライセンスです。サポート:[email protected]
theluckystrike が作成しました。
よくある質問
PDF を結合・分割できる MCP サーバーはありますか?
はい。mcp.zovo.one の pdf サーバーは、フォームフィールドを保持したまま、PDF の結合、分割、回転、PDF フォームへの入力を行います。分割、ページ操作、回転の各操作では、1 ファイルあたり 30 ページまで無料で利用できます。リモートエンドポイントでホストされており、インストールは不要です。
MCP サーバーを使って Claude で PDF フォームに入力できますか?
はい。https://mcp.zovo.one/mcp/pdf に接続し、フォームのフィールドへの入力や複数の PDF の結合を Claude に依頼できます。出力ではフォームが保持されるため、入力したフィールドを引き続き編集できます。
これらのドキュメントを MCP サーバーとして使う
任意の MCP クライアント(Claude、Cursor、Windsurf、VS Code)から、インストールせずに GitMCP 経由でこのリポジトリのドキュメントを直接読み取れます:
- ドキュメント用 MCP URL:https://gitmcp.io/theluckystrike/mcp-pdf
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。