mcpField
P
PdfPecker

PdfPecker

ローカル
pdfpecker.net生産性11 日前に更新

PdfPecker について

PdfPecker は、HTML と Markdown の PDF 変換や、PDF の内容抽出・レンダリングを行う Python ライブラリ兼 MCP サーバーです。内蔵のネイティブエンジンにより、ブラウザー、ネットワーク接続、Python 依存パッケージなしで動作します。

主な機能

  1. 01HTML と Markdown から PDF への変換
  2. 02PDF ページの画像化
  3. 03PDF のテキストと Markdown の抽出
  4. 04PDF の結合と PDF/A 変換
  5. 05MCP のファイルアクセスを指定フォルダーに制限

活用シーン

  1. 01HTML や Markdown 文書から PDF を作成
  2. 02PDF ページのプレビューと内容の抽出
  3. 03PDF の結合や PDF/A ファイルの作成
  4. 04MCP クライアントによる許可フォルダー内のファイル作成と確認

MCP 対応

パッケージには MCP サーバーが含まれ、stdio 経由で PDF の作成、レンダリング、抽出、結合、変換ツールを提供します。ファイルアクセスは設定したルートフォルダー内に制限されます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"moonwalker1307-pdfpecker": {
"command": "uvx",
"args": [
"pdfpecker"
]
}
}
}
起動コマンドuvx pdfpecker

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypipdfpecker1.23.0

ツール

8

掲載時のツール一覧 · 4 日前に更新

パラメーター型必須説明
htmlstringいいえHTML ドキュメント。これまたは html_path を指定してください。
fontsarrayいいえCSS font-family で指定できるフォントファイルまたはフォルダー(.ttf、.otf、.woff2)。ラテン文字、ギリシャ文字、キリル文字以外の文字には必要です。
titlestringいいえドキュメントのタイトル。デフォルト:HTML <title>。
authorstringいいえ
marginnumberいいえページ余白(単位:ポイント、1インチあたり72ポイント)。デフォルトは36です。@page margin が優先されます。
previewbooleanいいえレイアウト確認用に、先頭ページの画像も返します(最大3ページ、60 dpi)。デフォルトは true です。
languagestringいいえドキュメントの言語(例:en-GB)。
html_pathstringいいえ変換する HTML ファイル。これまたは html を指定してください。
landscapebooleanいいえページを横向きにします。
page_sizestringいいえA3、A4、A5、Letter、Legal(デフォルトはA4)、または mm 単位の WIDTHxHEIGHT(例:100x150)。CSS @page size ルールが優先されます。
conformanceenumいいえアーカイブ用の PDF/A ファイルを作成します。PDF/A-2b | PDF/A-3b | PDF/A-2u | PDF/A-3u | PDF/A-4 | PDF/A-4f
footer_textstringいいえ各ページ下部に表示する1行のテキスト(例:"Page {page} of {pages}")。
header_textstringいいえ各ページ上部に表示する1行のテキスト。{page} と {pages} は置き換えられます。
output_pathstringはい出力する PDF ファイル。
accessibilityenumいいえタグ付き(アクセシブル)PDFを作成します。tagged | PDF/UA-1 | PDF/UA-2
use_system_fontsbooleanいいえこのマシンにインストールされているフォントも使用します。

詳細

Python 向け pdfpecker

Python 用の高速な HTML/Markdown から PDF への変換、および PDF から画像やテキストへの変換ツールです。ブラウザーも依存関係も、インストールが必要な .NET もありません。

pip install pdfpecker
import pdfpecker

pdf = pdfpecker.html_to_pdf("<h1>Invoice 42</h1><p>Total: <b>1,250.00 EUR</b></p>")
pdfpecker.html_file_to_pdf("templates/invoice.html", "invoice.pdf")     # images and CSS resolve next to the file
pdfpecker.markdown_file_to_pdf("README.md", "readme.pdf")

pngs = pdfpecker.pdf_to_images(pdf, dpi=96)        # one PNG per page (or format="jpeg"/"webp")
text = pdfpecker.pdf_to_text(pdf)                  # pages separated by \f
both = pdfpecker.merge_pdfs([pdf, "terms.pdf"])

これは PdfPecker .NET ライブラリを事前コンパイルし、wheel に同梱したネイティブライブラリです。PdfPecker は独自の HTML パーサー、CSS エンジン、レイアウトエンジン、PDF ライター、PDF レンダラーを備えているため、1 ページの請求書なら変換に約 1 ミリ秒しかかからず、ブラウザーを起動することもありません。パッケージのバージョンは、内包するライブラリのバージョンです。PdfPecker のレンダリング内容、CSS のサポート、制限事項については、pdfpecker.net/docs をご覧ください。

プラットフォーム

Linux(glibc 2.28 以降および musl、x86-64 と ARM64)、macOS(Apple Silicon と Intel)、Windows(x64 と ARM64)向けの wheel を提供しています。対応する Python は 3.9 以降です。各 wheel のサイズは約 9 MB で、Python やシステムへの依存関係はありません。

速度

Python から、4 コアの Linux クラウド VM でウォームアップ後に計測したドキュメントあたりの中央値です。対象ドキュメントは、PdfPecker リポジトリのベンチマーク用ページです。

請求書、1 ページ機能紹介、5 ページレポート、29 ページ起動から最初の PDF までPDF 1 件あたりのピークメモリ
pdfpecker0.7 ms2.9 ms32 ms57 ms32 MB
Chromium 153 via Playwright24 ms48 ms290 ms735 ms542 MB
xhtml2pdf 0.2.2833 ms209 ms2.9 s453 ms63 MB
WeasyPrint 70.0324 ms797 ms4.2 s1.1 s75 MB

API

すべての関数は、PDFについてバイト列またはパスを受け取り、失敗時にはPdfPeckerErrorのサブクラスを送出します。スレッドセーフで、処理中はGILを解放するため、スレッドで並列に変換できます。

関数戻り値
html_to_pdf(html, **options)HTMLのstrまたはUTF-8のbytesから生成したPDFのバイト列
html_file_to_pdf(path, output=None, **options)PDFのバイト列。outputが指定されている場合はそこにも書き込みます。base_dirはファイルのフォルダーです
markdown_to_pdf(markdown, **options)GitHubのテーブル、タスクリスト、取り消し線、脚注に対応したCommonMarkから生成したPDFのバイト列
markdown_file_to_pdf(path, output=None, **options)html_file_to_pdfと同様です
pdf_to_images(pdf, dpi=150, format="png", pages=None, width=None, height=None, transparent=False, quality=None, password=None)エンコードされた画像のリスト。各ページにつき1枚です
pdf_to_text(pdf, pages=None, password=None)読み取り順のテキスト。ページは\fで区切られます
pdf_to_text_pages(pdf, pages=None, password=None)各ページのテキストを格納したリスト
pdf_to_markdown(pdf, pages=None, include_links=True, include_annotations=True, include_images=False, page_comments=False, max_pages=None, password=None)任意のPDFから、検索インデックスや言語モデル向けに、読み取り順の見出し、リスト、テーブルを含むGitHub Flavored Markdownを生成します
pdf_page_count(pdf, password=None)ページ数
merge_pdfs(pdfs, title=None, author=None, bookmarks=True, creation_date=None)複数のPDFを結合した1つのPDF
pdf_to_pdfa(pdf, output=None, conformance="PDF/A-2b")任意のPDFをPDF/A-2b、-2u、-3b、-3uに変換し、pdf、changes、problems、is_conformantを含むPdfAResultとして返します
library_version()内部のPdfPeckerライブラリのバージョン

pagesには、ページ番号、番号のリスト、または"1-3,5"、"8-"、"last"のような範囲を指定します。ページ番号は1から始まります。 すべての関数で、秒単位のtimeoutも指定できます。

HTML関数とMarkdown関数のオプション:

オプション意味
base_dir相対画像、スタイルシート、フォントのパスの基準となるフォルダーです。指定しない場合、文字列から作成したドキュメントはローカルファイルを読み込みません。
allow_file_accessbase_dirの外にあるファイルもドキュメントから読み込めるようにします。信頼できるHTMLにのみ使用してください。
page_size, landscape"A3"、"A4"(デフォルト)、"A5"、"Letter"、"Legal"、または(width_mm, height_mm)を指定します。CSSの@page { size }ルールが優先されます。
marginポイント単位(1インチあたり72ポイント)で指定します。数値1つ、または(top, right, bottom, left)を指定します。デフォルトは36です。CSSの@page { margin }が優先されます。
scale, shrink_to_fitコンテンツを拡大・縮小します。ページ幅を超えるコンテンツは縮小されます(デフォルトで有効)。
header_text, footer_text上または下の余白に表示するテキスト行です。{page}と{pages}は置き換えられます。CSSのマージンボックス(@top-centerなど)を使うと、さらに多くの設定が可能です。
fonts, use_system_fontsCSSのfont-familyで指定できるTrueType/OpenTypeファイルまたはフォルダーを指定するか、インストール済みフォントからフォントファミリーを検索します。
title, author, subject, keywords, languageドキュメントのプロパティです。
user_style_sheetドキュメント独自のスタイルシートの後に適用するCSSです。
creation_date固定日付(datetime、date、またはUnix秒)を指定すると、実行ごとに出力のバイト列が同一になります。
conformance"PDF/A-2b"、"PDF/A-3b"、"PDF/A-2u"、"PDF/A-3u"、"PDF/A-4"、または"PDF/A-4f"を指定します。
accessibility"tagged"、"PDF/UA-1"、または"PDF/UA-2"を指定します。
compress, bookmarks, max_pagesストリームを圧縮します(有効)。見出しからブックマークを作成します(有効)。指定したページ数を超える処理を停止します(100,000ページ)。

エラー:オプションが無効な場合はPdfPeckerArgumentError(ValueErrorでもあります)、読み取り可能なPDFでない入力にはPdfReadError、パスワードに関するエラーにはPdfPasswordError、max_pagesやサイズ制限に関するエラーにはPdfLimitError、PdfTimeoutError(TimeoutErrorでもあります)、および読み取れないフォントやファイルにはPdfFileError(OSErrorでもあります)が発生します。

AI エージェントとスキルからの利用

pdfpecker は、エージェントがサンドボックス内で作成して実行するコードに適しています。必要なのは pip install のみで、実行時にダウンロードするものはなく、ブラウザーを起動する必要もありません。エラーには問題の内容が示されます。エージェントには次の点を伝えてください。

  • ドキュメントは CSS を含む HTML として作成し、ページサイズ、余白、ページ番号、柱は @page ルールに記述してください。たとえば、@page { size: A4; margin: 20mm; @bottom-center { content: "Page " counter(page) " of " counter(pages) } } のようにします。
  • JavaScript は使えません。グラフは SVG または画像で作成してください。描画するスクリプトは使えません。
  • 画像、スタイルシート、フォントは base_dir(または data: URI)から読み込みます。ネットワークから読み込むことはありません。
  • 組み込みフォント(Helvetica、Times、Courier。含まれない文字を補うフォントも同梱)は、ラテン文字、ギリシャ文字、キリル文字に対応しています。それ以外の文字体系は疑問符で表示されます。中国語、日本語、アラビア語、ヘブライ語、ヒンディー語、タイ語を使う場合は、その文字体系に対応したフォントを fonts=[...] で指定するか、use_system_fonts=True を設定してください。
  • 結果を確認するには、pdf_to_images(pdf, dpi=60) で PDF を画像に変換して各ページを見るか、pdf_to_text でテキストを読み取ってください。

MCP サーバー

このパッケージには Model Context Protocol サーバーが含まれているため、MCP に対応したチャットアプリやコーディングエージェントで PDF を作成し、ページを確認して、内容を読み取れます。stdio 経由で動作し、このパッケージ以外に必要なものはありません。

claude mcp add pdfpecker -- uvx pdfpecker mcp            # Claude Code

Claude Desktop や mcpServers 設定を読み込むその他のアプリでは、次のように設定します。

{ "mcpServers": { "pdfpecker": { "command": "uvx", "args": ["pdfpecker", "mcp", "--root", "/Users/me/Documents/pdfs"] } } }
ツール説明
html_to_pdfHTML(直接指定またはファイル)を PDF ファイルに変換し、レイアウト確認用に最初の数ページをプレビューします
markdown_to_pdfMarkdown を同様に変換します
render_pdf_pagesモデルが確認できるよう、最大 20 ページを PNG 画像に変換します
pdf_to_textPDF のテキストをページごとに取得します
pdf_to_markdown任意の PDF を Markdown に変換し、結果を返すかファイルに書き込みます
pdf_to_pdfa任意の PDF を PDF/A に変換し、変更点と修正できなかった内容を示します
pdf_infoページ数とファイルサイズを取得します
merge_pdfs複数の PDF ファイルを 1 つにまとめます

ツールは、モデルがパスを指定するため、--root フォルダー(複数指定可能)の内部にあるファイルのみを読み書きします。既定値は現在のフォルダーです。ただし、チャットアプリでよくあるように、サーバーがファイルシステムのルートで起動した場合は ~/PdfPecker が既定値になります。python -m pdfpecker mcp を実行すると、uvx を使わずに同じサーバーを起動できます。

ソースからのビルド

wheel のネイティブライブラリは、PDFPECKER_VERSION で指定されたリリース済み PdfPecker NuGet パッケージからビルドされます。 .NET 10 SDK と NativeAOT の前提条件(Linux では clang、macOS では Xcode、Windows では Visual Studio C++ ツール)が必要です。

ci/build.sh linux-x64 manylinux_2_39_x86_64          # RID and wheel tag; builds, packs and tests the wheel

または、手動で dotnet publish native/PdfPecker.Native.csproj -c Release -r linux-x64 を実行し、pdfpecker_native.so (.dylib、.dll)を src/pdfpecker/ にコピーしてから、pytest を実行します。PDFPECKER_NATIVE_LIB を設定すると、別の場所にあるライブラリをパッケージから参照できます。

C ABI(native/Exports.cs)は、1 つの関数 pdfpecker_invoke(op, input, input_len, options_json, &output, &output_len, &error) に加えて、pdfpecker_free、pdfpecker_version、pdfpecker_abi_version で構成されているため、FFI に対応した他の言語からも同じライブラリを使用できます。

リリース

NuGet で PdfPecker をリリースした後、ここで PDFPECKER_VERSION を変更するプルリクエストを作成します。マージ後、オーナーが v<version> タグを付けて GitHub リリースを公開します。Wheels ワークフローが 8 つの wheel を再度ビルドし、タグと PDFPECKER_VERSION が一致することを確認したうえで、Trusted Publishing を使って PyPI にアップロードします。その後、公式 MCP Registry に MCP サーバーの新バージョン(server.json)を登録します。

ライセンス

MIT です。wheel には .NET ランタイム、zlib-ng、PdfPecker に同梱されているフォントとデータも含まれており、それぞれ独自のライセンスが適用されます。詳しくは THIRD-PARTY-NOTICES.md を参照してください。

コメント

MCP は初めてですか?

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

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