pdf-mcp
- 最終確認:
- 2026-05-25
- ライセンス:
- MIT
PDF(ファイル形式)とは
PDF は、文書・資料・契約書・論文・スキャン画像などを「どの環境でも同じ見た目」で配布できるファイル形式です。電子契約書・社内マニュアル・営業資料・学術論文・スキャン領収書など、業務文書の事実上の標準形式として使われています。
ただし PDF は「そのままでは AI に読ませにくい」という弱点があります。テキスト埋め込み済み・スキャン画像・表・図など中身が雑多で、特に何百ページにも及ぶ巨大 PDF を AI のコンテキストに全部入れるのはトークン消費・処理時間の両面で現実的ではありません。pdf-mcp はこの問題を解決するために設計された PDF 専門ツールです。
PDF × AI でできること
この MCP サーバーを導入すると、巨大 PDF も AI が部分的に読み・検索し・抽出できます。
🔍 関連箇所だけ抽出
「300 ページ仕様書から API エンドポイントだけ表にして」
→ 検索 + 該当ページ読み込み
🖼️ スキャン PDF を OCR
「スキャン領収書 PDF から日付・金額・取引先を抽出して」
→ Tesseract OCR + 構造化抽出
📑 章単位アクセス
「論文の第 3 章だけ読んで要約して」
→ 目次取得 + 該当ページ範囲アクセス
🧠 セマンティック検索
「この技術書から transformer の章を探して」
→ pdf-mcp[semantic] でハイブリッド検索(BM25 + ベクトル)
提供される主なツール
pdf-mcp が公式に提供するツール(server.py の @mcp.tool() デコレータから逐語抽出した 8 ツール):
| ツール名 | 役割 |
|---|---|
pdf_info | PDF のメタデータ・ページ数・目次を取得(まず最初に呼ぶことが公式推奨) |
pdf_read_pages | ページ範囲を指定してテキスト・画像を読み込み(OCR 対応) |
pdf_read_all | PDF 全体を読み込み(小さい PDF 専用・大きい PDF は pdf_read_pages 推奨) |
pdf_render_pages | PDF ページを画像レンダリング(vision モデルに直接見せたいとき) |
pdf_search | PDF 内テキスト検索(pdf-mcp[semantic] 拡張で BM25 + ベクトルのハイブリッド検索に発展) |
pdf_get_toc | 目次(ブックマーク)を取得 |
pdf_cache_stats | キャッシュ統計の確認(削除はしない) |
pdf_cache_clear | キャッシュ削除(既定は期限切れエントリのみ。expired_only=False 指定で全削除) |
「まず pdf_info で構造を把握 → pdf_search で関連箇所を絞り込み → pdf_read_pages で該当箇所だけ読む」というフローが、巨大 PDF をコンテキスト溢れなく扱う鍵です。
pdf-mcp について
pdf-mcp は、コミュニティメンバー jztan 氏が公開する PDF 処理特化の MCP サーバーです。PyPI pdf-mcp として配布され、uvx コマンドで起動します。PyMuPDF をエンジンとして、AI が大きな PDF をコンテキスト溢れなく扱えるように設計されています。
文書情報の取得(メタデータ / トークン推定 / OCR 候補判定)、ページ範囲指定の読み取り、表構造の抽出、画像レンダリング、ハイブリッド検索(BM25 + セマンティック)まで、PDF 周りの処理を 1 つの MCP で完結できます。SQLite キャッシュで一度処理した PDF は高速に再アクセス可能。OCR やセマンティック検索はオプショナル拡張のため、軽量起動も可能です。
スペック
- 配布形態: PyPI パッケージ(
pdf-mcp)+uvxランナー(Python 3.10+) - 認証: 不要(ローカルファイル / URL いずれも。URL 取得は HTTPS 限定・SSRF 対策あり)
- 提供元: コミュニティ実装(jztan/pdf-mcp)/ MIT
- 対応範囲: PDF テキスト・表・画像抽出 / OCR / 検索 / セマンティック検索 / キャッシュ
- オプション:
pdf-mcp[semantic](ハイブリッド検索・fastembed + numpy 約 67MB) / システム Tesseract(OCR) - 公式リポジトリ: github.com/jztan/pdf-mcp
クラウド OCR との使い分け: ローカルで完結させたい・機密文書を扱う場合は本 MCP(Tesseract)、大量 / 複雑レイアウト / 多言語混在の場合は Mistral OCR MCP(クラウド・高精度)が適しています。
導入手順
前提条件
- uv または Python 3.10+
- (任意)Tesseract — OCR を使う場合のみ・システムレベルでインストール
- macOS:
brew install tesseract - Linux:
sudo apt-get install tesseract-ocr - Windows: UB-Mannheim 公式インストーラ
- macOS:
- (任意)日本語 OCR を使う場合は
tesseract-ocr-jpn言語パック
ステップ
- ページ上部のタブから使用環境(Claude Desktop / Cursor / Cline)を選択し、JSON 設定をコピー
- コピーした JSON を設定ファイルに追記して保存
- クライアントを再起動
uvx pdf-mcp が初回実行時に PyPI からパッケージを取得・起動します。
セマンティック検索を使う場合: 設定の args を ["pdf-mcp[semantic]"] に変更するか、pip install 'pdf-mcp[semantic]' を実行(約 67MB の fastembed + numpy が追加)。
注意事項
- 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を追加してください。 - 本サーバーはコミュニティ実装(jztan 氏)です。サポート契約等はありません(OSS としての MIT ライセンス提供)。
設定方法
MCP は、お使いの対応アプリ(クライアント)に下記の設定を貼り付けて使います。 タブからアプリを選び、表示された設定をコピーしてください。
Claude Desktop: Anthropic 公式のデスクトップ版 Claude アプリ
{
"mcpServers": {
"pdf": {
"command": "uvx",
"args": ["pdf-mcp"]
}
}
}
Cursor: AI 機能を内蔵したコードエディタ
{
"mcpServers": {
"pdf": {
"command": "uvx",
"args": ["pdf-mcp"]
}
}
}
Cline: VS Code に追加する AI アシスタント拡張
{
"mcpServers": {
"pdf": {
"command": "uvx",
"args": ["pdf-mcp"]
}
}
}
主なユースケース
- 「この 300 ページの仕様書 PDF から API エンドポイントだけ抜き出して表にして」と頼むだけで、必要な箇所をピンポイント抽出できる
- 「スキャン PDF の領収書から日付・金額・取引先を抽出して」と OCR 機能で画像化された PDF からテキスト化してくれる
- 「論文 PDF の第 3 章だけ読んで要約して」と目次取得 + 章単位アクセスで効率的に読める
- 「この技術書から `transformer` の章を探して」とハイブリッド検索(`pdf-mcp[semantic]`)で意味検索もできる
プラットフォーム別の注意事項
- Windows:PowerShell からの `uvx` 実行に追加設定は不要です。OCR を使う場合は別途 Tesseract(システムレベル)のインストールが必要です([公式インストーラ](https://github.com/UB-Mannheim/tesseract/wiki))。
- :OCR 機能はオプショナルでシステム Tesseract が必要。日本語 PDF を OCR したい場合は `tesseract-ocr-jpn` 言語パックを併せてインストールしてください(README には逐語記載なし / Tesseract の標準フローに準拠)。
- :ハイブリッド検索を使うなら `pdf-mcp[semantic]` 拡張をインストール(fastembed + numpy 約 67MB)。