pdf-mcp

ドキュメント・知識管理#PDF#OCR#縦書き#PyMuPDF#Tesseract#ドキュメント抽出
シェア
最終確認:2026-08-13ライセンス:MIT無料で使えるオープンソースです(商用利用も可)リポジトリ

設定方法

MCP は、お使いの対応アプリ(クライアント)に下記の設定を貼り付けて使います。 タブからアプリを選び、表示された設定をコピーしてください。

Claude Desktop / Claude Code: Claude Desktop(公式デスクトップアプリ)と Claude Code(公式CLI)は同じ JSON を使います。Desktop は設定ファイルに貼り付け、Claude Code は `.mcp.json` に記述するか `claude mcp add` で追加します。

{
  "mcpServers": {
    "pdf": {
      "command": "uvx",
      "args": ["pdf-mcp"]
    }
  }
}

※ Gemini CLI は Claude Desktop と同じ mcpServers 形式のため同一の JSON を表示しています。Codex / VS Code タブの設定は、上記 JSON を各公式スキーマ(Codex=~/.codex/config.toml の TOML 形式 / VS Code=mcp.jsonservers キー)へ 自動変換した参考値です。貼り付け前にお使いのバージョンの公式ドキュメントもご確認ください。

PDF(ファイル形式)とは

PDF は、文書・資料・契約書・論文・スキャン画像などを「どの環境でも同じ見た目」で配布できるファイル形式です。電子契約書・社内マニュアル・営業資料・学術論文・スキャン領収書など、業務文書の事実上の標準形式として使われています。

ただし PDF は「そのままでは AI に読ませにくい」という弱点があります。実際に詰まるのは次のような場面です。

  • スキャンした PDF は画像なので、文字として取り出せない(契約書・領収書・役所の書類に多い)
  • 縦書きの日本語は行が入り乱れて読める形にならない
  • 表やグラフの数値が、ただの文字の羅列や画像になってしまう
  • 何百ページもある資料をまるごと渡すと、AI が読みきれない

pdf-mcp はこれらをまとめて引き受けるために作られた PDF 専門ツールです。

これは公式提供ではなく、有志が作った非公式ツールです。

PDF × AI でできること

この MCP サーバーを導入すると、上で挙げた詰まりどころをそれぞれ解消できます。

🖼️ スキャンした PDF が文字として読めない

「このスキャンした領収書から日付・金額・取引先を読み取って」
→ Tesseract OCR で画像から文字を起こす(日本語は言語指定が必要・後述)

📜 縦書きの日本語が入り乱れる

「この縦書きの資料を読んで要点をまとめて」
→ 文字の配置から本来の順序(右から左・上から下)に組み直して読む

🔍 何百ページもあって渡しきれない

「300 ページの仕様書から API の一覧だけ表にして」
→ 検索で当たりをつけてから、該当ページだけ読み込む

📊 グラフの数値が画像に閉じ込められている

「この折れ線グラフの数値を表にして」
→ 図形として描かれたグラフから座標の値を取り出す

提供される主なツール

pdf-mcp が提供するツールは全 13 種です(v2.1.0 時点)。

機能カテゴリ主なツール
最初に呼ぶpdf_info(ページ数・メタデータ・目次の要約・スキャン判定)/ server_info(OCR や意味検索など、いま使える機能の確認)
読むpdf_read_pages(ページ範囲を指定・OCR も可・表と画像を位置情報つきで返す)/ pdf_read_all(全体を一度に・容量上限あり)
探すpdf_search(キーワードと意味の組み合わせ検索)/ pdf_get_toc(目次が 50 件を超える文書の全目次)
フォルダ横断pdf_corpus_overview(文書ごとの要点カードで一覧把握)/ pdf_corpus_search(フォルダ内を横断検索)/ pdf_corpus_warm(時間を区切って事前読み込み)
画像・グラフpdf_render_pages(ページを画像化して視覚モデルに見せる)/ pdf_extract_chart(グラフから座標の値を表として抽出・確実に読めない場合は画像を返して辞退する)
キャッシュpdf_cache_stats(文書ごとの内訳と合計サイズ)/ pdf_cache_clear(期限切れのみ、または全削除)

まず pdf_info で構造を把握 → pdf_search で関連箇所を絞り込み → pdf_read_pages で該当箇所だけ読む」というフローが、巨大 PDF をコンテキスト溢れなく扱う鍵です。フォルダ単位で扱うときは pdf_corpus_overview で全体を見てから pdf_corpus_search に進みます。

pdf-mcp について

pdf-mcp は、コミュニティメンバー jztan 氏が公開する PDF 処理特化の MCP サーバーです。PyPI pdf-mcp として配布され、uvx コマンドで起動します。PyMuPDF をエンジンとして、AI が大きな PDF をコンテキスト溢れなく扱えるように設計されています。

文書情報の取得(メタデータ / 目次 / スキャン判定)、ページ範囲指定の読み取り、表構造の抽出、グラフからの数値抽出、画像レンダリング、キーワードと意味を組み合わせた検索、フォルダ横断の検索まで、PDF 周りの処理を 1 つの MCP で完結できます。SQLite キャッシュで一度処理した PDF は高速に再アクセス可能。日本語の縦書きは、文字の配置から本来の読み順に組み直したうえで、単語の区切りがない日本語でも検索できるようになっています。

スペック

  • 配布形態: PyPI パッケージ(pdf-mcp)+ uvx ランナー(Python 3.10+)
  • 認証: 不要(ローカルファイル / URL いずれも。URL 取得は HTTPS 限定・SSRF 対策あり)
  • 提供元: コミュニティ実装(jztan/pdf-mcp)/ MIT
  • 対応範囲: テキスト・表・画像・グラフの抽出 / OCR / 縦書きと CJK の読み取り / 検索 / フォルダ横断 / キャッシュ
  • オプション: pdf-mcp[multicolumn](段組みの読み取り順序) / システム Tesseract(OCR)
  • 別の使い方: 手元のパソコンで動かす通常の方式に加え、pdf-mcp-http でサーバーとして立てる方式もあります(プロセスを起動できないクライアント向け・認証トークン必須)
  • 公式リポジトリ: github.com/jztan/pdf-mcp

クラウド OCR との使い分け: ローカルで完結させたい・機密文書を扱う場合は本 MCP(Tesseract)、大量 / 複雑レイアウト / 多言語混在の場合は Mistral OCR MCP(クラウド・高精度)が適しています。

導入手順

前提条件

  • uv(Python パッケージマネージャー)— 設定例の uvx はこれに含まれるコマンドです
  • (任意)Tesseract — OCR を使う場合のみ・システムレベルでインストール
  • (任意)日本語 OCR を使う場合は tesseract-ocr-jpn 言語パック

uv のインストール

設定例の uvx は uv に含まれるコマンドのため、先に uv を入れておく必要があります。ターミナル(Windows は PowerShell)で次の 1 行を実行してください。

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows(PowerShell)
irm https://astral.sh/uv/install.ps1 | iex

ステップ

  1. ページ上部のタブから使用環境を選択し、JSON 設定をコピー
  2. コピーした JSON を設定ファイルに追記して保存
  3. クライアントを再起動

uvx pdf-mcp が初回実行時に PyPI からパッケージを取得・起動します。

意味での検索は既定で使えます(v2 系から同梱。初回利用時に約 67MB の埋め込みモデルを取得します)。段組みの多い PDF で読み取り順序を正したい場合のみ、args を ["pdf-mcp[multicolumn]"] に変更してください。

注意事項

  • Python 3.10+ が必要です。
  • OCR 機能はオプショナルです。スキャン PDF を扱わない場合は Tesseract のインストール不要で軽量に起動できます。
  • 環境変数 PDF_MCP_CACHE_DIR(デフォルト ~/.cache/pdf-mcp)と PDF_MCP_CACHE_TTL(デフォルト 24 時間)でキャッシュ挙動を制御可能。
  • 表抽出pdf_read_pages の table extraction)は構造化データ(header + rows)として返されます。
  • 日本語 PDF(テキスト埋め込み済み)は PyMuPDF が直接読み取りますが、スキャン画像 PDF を日本語 OCR するには Tesseract に jpn.traineddata を追加してください。
  • OCR の言語指定の初期値は英語です(ocr_lang の既定値が eng)。日本語のスキャン PDF をそのまま読ませると文字化けします(編集部が 2026-06-12 に実機確認)。AI への依頼に「日本語の書類なので OCR は日本語(jpn)で」と一言添えるか、ocr_lang="jpn" を指定してください。同検証では数字の細部の誤読(「8,234」→「8.234」のカンマ誤読)も確認しており、金額・日付を使う際は原本確認をおすすめします。
  • 縦書きの日本語は、文字の配置から本来の読み順(右から左・上から下)に組み直して読み取ります。雑誌のように密なレイアウトでは記事単位の切り分けも行い、文字化けは除去されます。
  • 段組みの多い PDF は、pdf-mcp[multicolumn] を入れない場合、位置による並べ替えのみになるため段が混ざることがあります。
  • グラフの数値抽出は、図形として描かれたグラフが対象です。写真やスキャン画像のグラフは対象外で、確実に読み取れない場合はツール側が数値を返さず画像を返します。
  • 人間には見えない文字が埋め込まれた PDF を検出して印を付けます(白い文字・極小の文字・ページ外など)。検出しても中身は消さず、「そのまま信用しない方がよい」という印が付く仕様です。
  • Intel 版 macOS で Python 3.14 以降、および Alpine / musl 環境では、同梱される onnxruntime に対応する配布物がありません。Python 3.13 以下をお使いください。
  • 本サーバーはコミュニティ実装(jztan 氏)です。サポート契約等はありません(OSS としての MIT ライセンス提供)。

主なユースケース

  • 「このスキャンした領収書 PDF から日付・金額・取引先を読み取って」と頼めば、画像だけの PDF でも文字として取り出せる
  • 「この縦書きの資料を読んで要点をまとめて」と、行が入り乱れがちな縦書きの日本語 PDF も本来の順序で読み取れる
  • 「300 ページの仕様書から API の一覧だけ表にして」と、巨大な PDF でも必要な箇所だけ抜き出せる
  • 「このフォルダの PDF 全部から、値上げに触れている箇所を探して」とフォルダ単位で横断検索できる

プラットフォーム別の注意事項

  • WindowsPowerShell からの `uvx` 実行に追加設定は不要です。OCR を使う場合は別途 Tesseract(システムレベル)のインストールが必要です([公式インストーラ](https://github.com/UB-Mannheim/tesseract/wiki))。

セットアップ・利用上の注意

  • 導入・前提OCR 機能はオプショナルでシステム Tesseract が必要。日本語 PDF を OCR したい場合は `tesseract-ocr-jpn` 言語パックを併せてインストールしてください(README には記載なし / Tesseract の標準フローに準拠)。意味検索は v2 系から既定で同梱されており、初回利用時に約 67MB の埋め込みモデルを取得します。段組みの多い PDF で読み取り順序を正したい場合のみ `pdf-mcp[multicolumn]` を追加してください。

このツールを使ったガイド