mcpField
P
pdf-merger

pdf-merger

リモート
mcp.zovo.one生産性21 日前に更新
リポジトリ公式サイト

pdf-merger について

AIチャットから文書を結合したりページを調整したりするためのローカルPDFツールです。READMEには分割、スタンプ、テキスト抽出などの操作も記載され、ファイルのアップロードは不要です。

主な機能

  1. 01PDFの結合と分割
  2. 02ページの抽出、回転、並べ替え
  3. 03テキストや事業者情報のスタンプ
  4. 04ページ数とメタデータの確認
  5. 05PDFテキストの抽出と操作履歴の表示

活用シーン

  1. 01複数のPDFを1つのファイルに結合
  2. 02スキャンの指定ページを契約書に追加
  3. 03表紙を先頭にするためのページ並べ替え
  4. 04請求書や契約書へのスタンプ

MCP 対応

PDFツール、`pdf://recent` リソース、`mark_invoice_paid` プロンプトをMCPクライアントに公開します。ファイル操作はローカルで行い、PDFは元の場所に保持されます。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://mcp.zovo.one/mcp/pdf-merger
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

すべてのエンドポイント
Streamable HTTPhttps://mcp.zovo.one/mcp/pdf-merger認証が必要
パッケージ
mcpbpdf.mcpb0.22.0

ツール

15
パラメーター型必須説明
pathstringはい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 のデモ

フリーランスの仕事で発生する 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_statusFree モードまたは Pro モードを表示します
license_activatePro キーを有効化します(オフラインで検証)

リソース: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

FreePro
pdf_info、pdf_count、pdf_text無制限無制限
pdf_merge1回あたり最大5ファイルファイル数無制限
pdf_split、pdf_pages、pdf_rotate30ページ以下のファイルページ数無制限
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 は初めてですか?

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

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