編集の要約なし |
|||
| (同じ利用者による、間の4版が非表示) | |||
| 1行目: | 1行目: | ||
== 概要 == | == 概要 == | ||
本ページでは、AIアシスタントがPDFファイルの読み取り、解析、操作を可能にする2つのMCPサーバについて記述する。<br> | |||
<br> | |||
* PDF Reader MCPサーバ | |||
*: PDFファイルからのテキスト抽出、メタデータ取得、ページ操作等の読み取りに特化したMCPサーバである。 | |||
* PDF-Tools MCPサーバ | |||
*: PDFの読み取りに加えて、フォーム入力 (fill)、CSV一括入力、プロファイル管理、バリデーション等の書き込み系の機能を持つMCPサーバである。 | |||
<br> | |||
読み取り専用の用途にはPDF Reader MCPサーバ、フォーム入力や比較が必要な用途にはPDF-Tools MCPサーバを使用する。<br> | |||
両サーバはStandard I/O (STDIO) トランスポートを使用してローカル環境で動作し、Claude Desktop、Claude Code、Cursor等のMCPクライアントと統合することができる。<br> | |||
<br> | |||
<center> | |||
{| class="wikitable" | |||
|+ 2つのMCPサーバの比較 | |||
|- | |||
! 機能 !! PDF Reader MCP !! PDF-Tools MCP | |||
|- | |||
| テキスト抽出 || Yes || Yes | |||
|- | |||
| メタデータ取得 || Yes || No | |||
|- | |||
| キーワード検索 || Yes || No | |||
|- | |||
| テーブルデータ抽出 || Yes (一部実装) || Yes | |||
|- | |||
| フォームフィールド読み取り || No || Yes | |||
|- | |||
| フォーム入力 (fill) || No || Yes | |||
|- | |||
| CSVからの一括フォーム入力 || No || Yes | |||
|- | |||
| プロファイル管理 || No || Yes | |||
|- | |||
| フォームバリデーション || No || Yes | |||
|- | |||
| PDFデータのCSV出力 || No || Yes | |||
|- | |||
| ドキュメント比較 || No || Yes | |||
|- | |||
| パスワード保護PDF対応 || No || Yes | |||
|- | |||
| OCR対応 || No || Yes | |||
|- | |||
| ページ数取得 || Yes || No | |||
|- | |||
| ブックマーク構造取得 || Yes || No | |||
|} | |||
</center> | |||
<br><br> | |||
= PDF Reader MCPサーバ = | |||
==== PDF Reader MCPの概要 ==== | |||
PDF Reader MCPサーバは、AIアシスタントがPDFファイルの読み取り、解析、操作を可能にするMCP (Model Context Protocol) サーバである。<br> | PDF Reader MCPサーバは、AIアシスタントがPDFファイルの読み取り、解析、操作を可能にするMCP (Model Context Protocol) サーバである。<br> | ||
このMCPを使用することにより、Claude等のLLMがPDFドキュメントのテキスト抽出、メタデータ取得、ページ操作等を実行することができる。<br> | このMCPを使用することにより、Claude等のLLMがPDFドキュメントのテキスト抽出、メタデータ取得、ページ操作等を実行することができる。<br> | ||
| 13行目: | 64行目: | ||
PDF Reader MCPサーバは、Standard I/O (STDIO) トランスポートを使用してローカル環境で動作する。<br> | PDF Reader MCPサーバは、Standard I/O (STDIO) トランスポートを使用してローカル環境で動作する。<br> | ||
これにより、Claude Desktop、Claude Code、Cursor等のMCPクライアントと統合することができる。<br> | これにより、Claude Desktop、Claude Code、Cursor等のMCPクライアントと統合することができる。<br> | ||
<br> | |||
==== PDF Reader MCPの機能 ==== | |||
== PDF Reader MCPの機能 == | ===== テキスト抽出 ===== | ||
==== テキスト抽出 ==== | |||
* PDFドキュメント全体からのテキスト抽出 | * PDFドキュメント全体からのテキスト抽出 | ||
* 指定ページ範囲からのテキスト抽出 | * 指定ページ範囲からのテキスト抽出 | ||
| 23行目: | 73行目: | ||
* レイアウト解析 | * レイアウト解析 | ||
<br> | <br> | ||
==== メタデータ処理 ==== | ===== メタデータ処理 ===== | ||
* ドキュメントタイトル | * ドキュメントタイトル | ||
* 著者情報 | * 著者情報 | ||
| 32行目: | 82行目: | ||
* ファイルサイズ | * ファイルサイズ | ||
<br> | <br> | ||
==== ページ操作 ==== | ===== ページ操作 ===== | ||
* 個別ページへのアクセス | * 個別ページへのアクセス | ||
* ページ範囲指定 | * ページ範囲指定 | ||
| 38行目: | 88行目: | ||
* ページサイズ情報 | * ページサイズ情報 | ||
<br> | <br> | ||
==== 高度な機能 ==== | ===== 高度な機能 ===== | ||
* テーブルデータの抽出 | * テーブルデータの抽出 | ||
* 画像情報の取得 | * 画像情報の取得 | ||
* リンクとアノテーションの解析 | * リンクとアノテーションの解析 | ||
* ブックマーク構造の取得 | * ブックマーク構造の取得 | ||
<br> | |||
==== PDF Reader MCPの動作要件 ==== | |||
== | ===== システム要件 ===== | ||
==== システム要件 ==== | |||
* Node.js 18以上 | * Node.js 18以上 | ||
* Python 3.8以上 (Pythonを使用するの場合) | * Python 3.8以上 (Pythonを使用するの場合) | ||
<br> | <br> | ||
==== 必須ライブラリ ==== | ===== 必須ライブラリ ===== | ||
Node.jsを使用する場合 | Node.jsを使用する場合<br> | ||
* pdf-parse >= 1.1.1 | * pdf-parse >= 1.1.1 | ||
* pdf-lib >= 1.17.1 | * pdf-lib >= 1.17.1 | ||
* pdfjs-dist >= 3.0.0 | * pdfjs-dist >= 3.0.0 | ||
<br> | <br> | ||
Pythonを使用する場合 | Pythonを使用する場合<br> | ||
* PyPDF2 >= 3.0.0 | * PyPDF2 >= 3.0.0 | ||
* pdfplumber >= 0.9.0 | * pdfplumber >= 0.9.0 | ||
* PyMuPDF (fitz) >= 1.22.0 | * PyMuPDF (fitz) >= 1.22.0 | ||
* fastmcp >= 0.1.0 | * fastmcp >= 0.1.0 | ||
<br> | |||
==== PDF Reader MCPのインストール ==== | |||
== | ===== Linux ===== | ||
==== | ====== 依存関係のインストール ====== | ||
まず、必要な環境をインストールする。<br> | まず、必要な環境をインストールする。<br> | ||
# RHEL | # RHEL | ||
sudo dnf install curl wget git gcc-c++ make python3 python3-pip nodejs npm | sudo dnf install curl wget git gcc-c++ make python3 python3-pip nodejs npm unzip | ||
# SUSE | # SUSE | ||
sudo zypper install curl wget git gcc-c++ make python3 python3-pip nodejs npm | sudo zypper install curl wget git gcc-c++ make python3 python3-pip nodejs npm unzip | ||
# Debian | # Debian | ||
sudo apt install curl wget git build-essential python3 python3-pip nodejs npm | sudo apt install curl wget git build-essential python3 python3-pip nodejs npm unzip | ||
<br> | <br> | ||
====== Node.jsのインストール ====== | |||
Node.jsの最新版をインストールする場合は、NodeSourceリポジトリを使用する。<br> | Node.jsの最新版をインストールする場合は、NodeSourceリポジトリを使用する。<br> | ||
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - | curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - | ||
| 87行目: | 137行目: | ||
sudo apt install nodejs | sudo apt install nodejs | ||
<br> | <br> | ||
====== Bunのインストール ====== | |||
Bunをインストールする。<br> | |||
curl -fsSL https://bun.com/install | bash | |||
<br> | |||
~/.profileファイル等に、環境変数 <code>PATH</code> を設定する。<br> | |||
<syntaxhighlight lang="sh"> | |||
export PATH="$BUN_INSTALL/bin:$PATH" | |||
</syntaxhighlight> | |||
<br> | |||
または、下記のURLからバンドル版をダウンロードする。<br> | |||
* https://github.com/oven-sh/bun/releases/latest/download/bun-linux-x64.zip | |||
<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
必要ならば、解凍したファイルを任意のディレクトリに配置する。<br> | |||
unzip bun-linux-x64.zip | |||
mv bun-linux-x64 <任意のディレクトリ> | |||
<br> | |||
~/.profileファイル等に、環境変数 <code>PATH</code> を設定する。<br> | |||
<syntaxhighlight lang="sh"> | |||
export PATH="/<Bunのインストールディレクトリ>/bin:$PATH" | |||
</syntaxhighlight> | |||
<br> | |||
====== PDF Reader MCPのインストール ====== | |||
PDF Reader MCPをダウンロードする。<br> | PDF Reader MCPをダウンロードする。<br> | ||
git clone https://github.com/SylphxAI/pdf-reader-mcp.git | git clone https://github.com/SylphxAI/pdf-reader-mcp.git | ||
| 93行目: | 166行目: | ||
Node.jsを使用する場合、依存関係をインストールする。<br> | Node.jsを使用する場合、依存関係をインストールする。<br> | ||
npm install | npm install | ||
# エラーが表示される場合 | |||
rm -rf node_modules package-lock.json | |||
npm install --ignore-scripts | |||
npm run build | |||
# または | |||
npm install -g @sylphx/pdf-reader-mcp | |||
<br> | <br> | ||
Pythonを使用する場合、仮想環境を作成して依存関係をインストールする。<br> | Pythonを使用する場合、仮想環境を作成して依存関係をインストールする。<br> | ||
| 101行目: | 182行目: | ||
# Fishの場合 | # Fishの場合 | ||
source venv/bin/activate. | source venv/bin/activate.fish | ||
# 依存関係のインストール | # 依存関係のインストール | ||
pip install -r requirements.txt | pip install -r requirements.txt | ||
<br> | <br> | ||
==== Windows ==== | ===== Windows ===== | ||
[https://nodejs.org/ Node.jsの公式Webサイト]からNode.jsをダウンロードしてインストールする。<br> | [https://nodejs.org/ Node.jsの公式Webサイト]からNode.jsをダウンロードしてインストールする。<br> | ||
<br> | <br> | ||
| 117行目: | 198行目: | ||
PDF Reader MCPの依存関係をインストールする。<br> | PDF Reader MCPの依存関係をインストールする。<br> | ||
npm install | npm install | ||
<br> | |||
==== PDF Reader MCPのプロジェクト構造 ==== | |||
== | |||
PDF Reader MCPサーバのプロジェクト構造を以下に示す。<br> | PDF Reader MCPサーバのプロジェクト構造を以下に示す。<br> | ||
<br> | <br> | ||
| 159行目: | 239行目: | ||
├── USAGE.md | ├── USAGE.md | ||
└── TROUBLESHOOTING.md | └── TROUBLESHOOTING.md | ||
<br> | |||
==== PDF Reader MCPのクライアント接続設定 ==== | |||
== | ===== Claude Desktopからの接続 ===== | ||
==== Claude Desktopからの接続 ==== | |||
Claude Desktopの設定ファイルを編集する。<br> | Claude Desktopの設定ファイルを編集する。<br> | ||
<br> | <br> | ||
| 183行目: | 262行目: | ||
"NODE_ENV": "production" | "NODE_ENV": "production" | ||
} | } | ||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
または、<code>npm install -g @sylphx/pdf-reader-mcp</code> コマンドを実行してインストールした場合は、以下に示す設定を行う。<br> | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"mcpServers": { | |||
"pdf-reader": { | |||
"command": "npx", | |||
"args": ["@sylphx/pdf-reader-mcp"] | |||
} | } | ||
} | } | ||
| 218行目: | 309行目: | ||
Claude Desktopを再起動して、PDF Reader MCPサーバが利用可能であることを確認する。<br> | Claude Desktopを再起動して、PDF Reader MCPサーバが利用可能であることを確認する。<br> | ||
<br> | <br> | ||
===== Clineからの接続 ===== | |||
==== Clineからの接続 ==== | |||
Clineの設定ファイルを編集する。<br> | Clineの設定ファイルを編集する。<br> | ||
# Linux | # Linux | ||
| 229行目: | 319行目: | ||
設定内容はClaude Desktopと同じフォーマットを使用する。<br> | 設定内容はClaude Desktopと同じフォーマットを使用する。<br> | ||
<br> | <br> | ||
==== Cursorからの接続 ==== | ===== Cursorからの接続 ===== | ||
Cursorのグローバル設定ファイルを編集する。<br> | Cursorのグローバル設定ファイルを編集する。<br> | ||
# Linux | # Linux | ||
| 237行目: | 327行目: | ||
%USERPROFILE%\.cursor\mcp.json | %USERPROFILE%\.cursor\mcp.json | ||
# | # MacOS | ||
~/.cursor/mcp.json | ~/.cursor/mcp.json | ||
<br> | <br> | ||
| 258行目: | 348行目: | ||
または、プロジェクト固有の設定として .cursor/mcp.jsonファイルをプロジェクトディレクトリに配置する。<br> | または、プロジェクト固有の設定として .cursor/mcp.jsonファイルをプロジェクトディレクトリに配置する。<br> | ||
<br> | <br> | ||
==== Claude Codeからの接続 ==== | ===== Claude Codeからの接続 ===== | ||
Claude Codeは、カレントディレクトリ内のMCPサーバを自動的に検出するため、追加の設定は不要である。<br> | Claude Codeは、カレントディレクトリ内のMCPサーバを自動的に検出するため、追加の設定は不要である。<br> | ||
<br> | |||
==== PDF Reader MCPの利用可能なツール ==== | |||
== | ===== read_pdf ===== | ||
==== read_pdf ==== | |||
PDFファイル全体または指定ページ範囲からテキストを抽出する。<br> | PDFファイル全体または指定ページ範囲からテキストを抽出する。<br> | ||
<br> | <br> | ||
| 298行目: | 387行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== get_pdf_metadata ==== | ===== get_pdf_metadata ===== | ||
PDFファイルのメタデータを取得する。<br> | PDFファイルのメタデータを取得する。<br> | ||
<br> | <br> | ||
| 330行目: | 419行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== get_pdf_page_count ==== | ===== get_pdf_page_count ===== | ||
PDFファイルの総ページ数を取得する。<br> | PDFファイルの総ページ数を取得する。<br> | ||
<br> | <br> | ||
| 354行目: | 443行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== extract_pdf_table ==== | ===== extract_pdf_table ===== | ||
PDFファイルからテーブルデータを抽出する。(定義により利用可能性が異なる) | PDFファイルからテーブルデータを抽出する。<br> | ||
(定義により利用可能性が異なる)<br> | |||
<br> | <br> | ||
<center> | <center> | ||
| 374行目: | 464行目: | ||
*: <pre>「/path/to/document.pdf」の3ページ目からテーブルを抽出してください。</pre> | *: <pre>「/path/to/document.pdf」の3ページ目からテーブルを抽出してください。</pre> | ||
<br> | <br> | ||
==== search_pdf ==== | ===== search_pdf ===== | ||
PDFファイル内でキーワードを検索する。<br> | PDFファイル内でキーワードを検索する。<br> | ||
<br> | <br> | ||
| 412行目: | 502行目: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | |||
=== PDF Reader MCPの使用例 === | |||
== | ===== 基本的なPDF読み取り ===== | ||
==== 基本的なPDF読み取り ==== | |||
* 「~/Documents/report.pdf」を読み取ってください。 | * 「~/Documents/report.pdf」を読み取ってください。 | ||
* 「/home/user/papers/research.pdf」の1ページから5ページまでを読み取ってください。 | * 「/home/user/papers/research.pdf」の1ページから5ページまでを読み取ってください。 | ||
<br> | <br> | ||
==== メタデータ取得 ==== | ===== メタデータ取得 ===== | ||
* 「~/Documents/manual.pdf」のメタデータを取得してください。 | * 「~/Documents/manual.pdf」のメタデータを取得してください。 | ||
* 「~/Downloads/invoice.pdf」のページ数を教えてください。 | * 「~/Downloads/invoice.pdf」のページ数を教えてください。 | ||
<br> | <br> | ||
==== キーワード検索 ==== | ===== キーワード検索 ===== | ||
* 「~/Documents/thesis.pdf」から「機械学習」というキーワードを検索してください。 | * 「~/Documents/thesis.pdf」から「機械学習」というキーワードを検索してください。 | ||
* 「~/papers/article.pdf」で「neural network」を大文字小文字を区別して検索してください。 | * 「~/papers/article.pdf」で「neural network」を大文字小文字を区別して検索してください。 | ||
<br> | <br> | ||
==== テーブル抽出 ==== | ===== テーブル抽出 ===== | ||
* 「~/Documents/financial_report.pdf」の3ページ目からテーブルを抽出してください。 | * 「~/Documents/financial_report.pdf」の3ページ目からテーブルを抽出してください。 | ||
* 「~/data/statistics.pdf」からすべてのテーブルを抽出してください。 | * 「~/data/statistics.pdf」からすべてのテーブルを抽出してください。 | ||
<br> | <br> | ||
==== 複数ファイルの処理 ==== | ===== 複数ファイルの処理 ===== | ||
* 以下のPDFファイルを全て読み取って、内容を要約してください。 | * 以下のPDFファイルを全て読み取って、内容を要約してください。 | ||
*: - ~/Documents/chapter1.pdf | *: - ~/Documents/chapter1.pdf | ||
*: - ~/Documents/chapter2.pdf | *: - ~/Documents/chapter2.pdf | ||
*: - ~/Documents/chapter3.pdf | *: - ~/Documents/chapter3.pdf | ||
<br> | |||
==== PDF Reader MCPのトラブルシューティング ==== | |||
== | ===== PDFファイルの読み込みに失敗する ===== | ||
==== PDFファイルの読み込みに失敗する ==== | |||
* ファイルが存在しないエラー | * ファイルが存在しないエラー | ||
* 読み込み権限エラー | * 読み込み権限エラー | ||
| 454行目: | 542行目: | ||
*: <pre>gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.7 -o output.pdf input.pdf</pre> | *: <pre>gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.7 -o output.pdf input.pdf</pre> | ||
<br> | <br> | ||
==== テキスト抽出が正しく動作しない ==== | ===== テキスト抽出が正しく動作しない ===== | ||
* 空のテキストが返される | * 空のテキストが返される | ||
* 文字化けが発生する | * 文字化けが発生する | ||
| 475行目: | 563行目: | ||
また、エンコーディングの問題を確認する<br> | また、エンコーディングの問題を確認する<br> | ||
<br> | <br> | ||
==== メモリ不足エラー ==== | ===== メモリ不足エラー ===== | ||
* 大きなPDFファイルで処理が停止する | * 大きなPDFファイルで処理が停止する | ||
* メモリエラーが発生する | * メモリエラーが発生する | ||
| 484行目: | 572行目: | ||
* ストリーミング処理を使用する | * ストリーミング処理を使用する | ||
* Python環境のメモリ制限を増やす | * Python環境のメモリ制限を増やす | ||
<br> | |||
==== PDF Reader MCPのパフォーマンスの最適化 ==== | |||
== | ===== ページ単位の処理 ===== | ||
==== ページ単位の処理 ==== | |||
大規模なPDFファイルを処理する場合、ページ単位で処理することでメモリ使用量を削減できる。<br> | 大規模なPDFファイルを処理する場合、ページ単位で処理することでメモリ使用量を削減できる。<br> | ||
<br> | <br> | ||
| 494行目: | 581行目: | ||
"""ストリーミング方式でPDFを読み込む""" | """ストリーミング方式でPDFを読み込む""" | ||
path = Path(file_path).resolve() | path = Path(file_path).resolve() | ||
with pdfplumber.open(str(path)) as pdf: | with pdfplumber.open(str(path)) as pdf: | ||
total_pages = len(pdf.pages) | |||
for start in range(0, total_pages, page_size): | |||
end = min(start + page_size, total_pages) | |||
batch_text = [] | |||
for page_num in range(start, end): | |||
page = pdf.pages[page_num] | |||
text = page.extract_text() | |||
if text: | |||
batch_text.append(text) | |||
yield { | |||
"text": "\n\n".join(batch_text), | |||
"pages": f"{start + 1}-{end}", | |||
"total_pages": total_pages | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== キャッシング ==== | ===== キャッシング ===== | ||
頻繁にアクセスされるPDFファイルのメタデータをキャッシュする。<br> | 頻繁にアクセスされるPDFファイルのメタデータをキャッシュする。<br> | ||
<br> | <br> | ||
| 547行目: | 634行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== 並列処理 ==== | ===== 並列処理 ===== | ||
複数のPDFファイルを同時に処理する場合、並列処理を使用する。<br> | 複数のPDFファイルを同時に処理する場合、並列処理を使用する。<br> | ||
<br> | <br> | ||
| 579行目: | 666行目: | ||
return results | return results | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | |||
==== PDF Reader MCPの高度な機能 ==== | |||
== | ===== OCR統合 ===== | ||
==== OCR統合 ==== | |||
スキャンされたPDFファイルからテキストを抽出する場合、OCR機能を統合する。<br> | スキャンされたPDFファイルからテキストを抽出する場合、OCR機能を統合する。<br> | ||
<br> | <br> | ||
| 604行目: | 690行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== PDF分割 ==== | ===== PDF分割 ===== | ||
大きなPDFファイルを分割する機能を追加する。<br> | 大きなPDFファイルを分割する機能を追加する。<br> | ||
<br> | <br> | ||
| 629行目: | 715行目: | ||
writer = PdfWriter() | writer = PdfWriter() | ||
end = min(start + pages_per_file, total_pages) | end = min(start + pages_per_file, total_pages) | ||
for page_num in range(start, end): | for page_num in range(start, end): | ||
writer.add_page(reader.pages[page_num]) | writer.add_page(reader.pages[page_num]) | ||
output_file = output_path / f"split_{file_count + 1}.pdf" | output_file = output_path / f"split_{file_count + 1}.pdf" | ||
with open(output_file, 'wb') as output: | with open(output_file, 'wb') as output: | ||
writer.write(output) | writer.write(output) | ||
file_count += 1 | file_count += 1 | ||
return { | return { | ||
"files_created": file_count, | "files_created": file_count, | ||
"output_directory": str(output_path) | "output_directory": str(output_path) | ||
} | } | ||
except Exception as e: | except Exception as e: | ||
return {"error": f"分割エラー: {str(e)}"} | return {"error": f"分割エラー: {str(e)}"} | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== PDF結合 ==== | ===== PDF結合 ===== | ||
複数のPDFファイルを結合する機能を追加する。<br> | 複数のPDFファイルを結合する機能を追加する。<br> | ||
<br> | <br> | ||
| 678行目: | 764行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== PDFブックマーク抽出 ==== | ===== PDFブックマーク抽出 ===== | ||
PDFファイルのブックマーク構造を取得する。<br> | PDFファイルのブックマーク構造を取得する。<br> | ||
<br> | <br> | ||
| 715行目: | 801行目: | ||
<br><br> | <br><br> | ||
== 外部リンク == | = PDF-Tools MCPサーバ = | ||
* [https://github.com/SylphxAI/pdf-reader-mcp | ==== PDF-Tools MCPの概要 ==== | ||
PDF-Tools MCPサーバは、AIアシスタントがPDFフォームの入力、解析、比較、データ抽出を可能にするMCP (Model Context Protocol) サーバである。<br> | |||
このMCPを使用することにより、Claude等のLLMがPDFフォームへのデータ入力、CSVからの一括入力、プロファイル管理、フォームバリデーション等を実行することができる。<br> | |||
<br> | |||
PDF-Tools MCPサーバは、以下に示すような機能を提供する。<br> | |||
* PDFドキュメントの解析 (300ページ以上に対応) | |||
* PDFフォームフィールドの読み取りとデータ入力 | |||
* CSVファイルからのPDFフォーム一括入力 | |||
* プロファイルの保存と再利用 | |||
* 契約書等のPDF比較 | |||
* フォームバリデーション (必須フィールドのチェック) | |||
* パスワード保護されたPDFの操作 | |||
* OCRによるスキャンドキュメントのテキスト抽出 | |||
* PDFデータのCSV出力 | |||
<br> | |||
PDF-Tools MCPサーバは、Standard I/O (STDIO) トランスポートを使用してローカル環境で動作する。<br> | |||
これにより、Claude Desktop、Cursor等のMCPクライアントと統合することができる。<br> | |||
<br> | |||
==== PDF-Tools MCPの機能 ==== | |||
===== ドキュメント解析 ===== | |||
* PDFドキュメント全体のテキスト抽出と解析 | |||
* テーブル、テキスト、構造化データの抽出 | |||
* スキャンドキュメントのOCR対応 | |||
* 300ページ以上の大規模PDFに対応 | |||
<br> | |||
===== フォーム操作 ===== | |||
* PDFフォームフィールドの一覧取得 | |||
* フォームフィールドへのデータ入力 | |||
* CSVファイルからの一括フォーム入力 | |||
* フォームバリデーション (必須フィールドのチェック) | |||
* パスワード保護されたPDFフォームの操作 | |||
<br> | |||
===== プロファイル管理 ===== | |||
* フォームデータのプロファイル保存 | |||
* 保存済みプロファイルの読み込み | |||
* プロファイル一覧の表示 | |||
* プロファイルを使用したフォーム入力 | |||
<br> | |||
===== データ入出力 ===== | |||
* PDFデータのCSV出力 | |||
* CSVデータからのPDF一括入力 | |||
* 契約書等のドキュメント比較 | |||
<br> | |||
==== PDF-Tools MCPの動作要件 ==== | |||
===== システム要件 ===== | |||
* Node.js 18以上 | |||
* npm (Node.jsに付属) | |||
<br> | |||
===== 必須ライブラリ ===== | |||
* @modelcontextprotocol/sdk (MCP SDK) | |||
* pdf-lib (PDF操作) | |||
<br> | |||
==== PDF-Tools MCPのインストール ==== | |||
===== Linux ===== | |||
====== リポジトリのクローン ====== | |||
PDF-Tools MCPサーバのリポジトリをクローンする。<br> | |||
cd ~/Program/MCP_Server/ | |||
git clone https://github.com/Open-Document-Alliance/PDF-Tools.git | |||
cd PDF-Tools | |||
<br> | |||
====== 依存関係のインストール ====== | |||
npmを使用して、依存関係をインストールする。<br> | |||
npm install | |||
<br> | |||
====== ESモジュールエラーの修正 ====== | |||
Node.js v22以降の環境では、<u>package.json</u> ファイルに <code>"type": "module"</code> が設定されているが、<br> | |||
<u>server/index.js</u> がCommonJS形式の <code>require</code> 関数を使用しているため、以下に示すエラーが発生する場合がある。<br> | |||
<br> | |||
ReferenceError: require is not defined in ES module scope, you can use import instead | |||
<br> | |||
この場合、<u>package.json</u> ファイルから <code>"type": "module"</code> の行を削除する。<br> | |||
# sedコマンドで該当行を削除する | |||
sed -i '/"type": "module"/d' package.json | |||
<br> | |||
または、テキストエディタで <u>package.json</u> ファイルを開いて、<code>"type": "module"</code> の行を手動で削除する。<br> | |||
<br> | |||
<u>削除後、前の行末にカンマが残ってJSONが壊れないように注意すること。</u><br> | |||
<br> | |||
====== 動作確認 ====== | |||
MCP経由のstdio通信で動作するため、以下に示すコマンドで起動して即時エラーが発生しなければ正常である。<br> | |||
node server/index.js | |||
<br> | |||
===== Windows ===== | |||
[https://nodejs.org/ Node.jsの公式Webサイト]からNode.jsをダウンロードしてインストールする。<br> | |||
<br> | |||
[https://git-scm.com/ Git for Windowsの公式Webサイト]からインストーラをダウンロードしてインストールする。<br> | |||
<br> | |||
PowerShellまたはコマンドプロンプトを開いて、PDF-Tools MCPをダウンロードする。<br> | |||
git clone https://github.com/Open-Document-Alliance/PDF-Tools.git | |||
cd PDF-Tools | |||
<br> | |||
PDF-Tools MCPの依存関係をインストールする。<br> | |||
npm install | |||
<br> | |||
ESモジュールエラーが発生する場合は、テキストエディタで <u>package.json</u> ファイルを開いて、<code>"type": "module"</code> の行を削除する。<br> | |||
<br> | |||
== PDF-Tools MCPのプロジェクト構造 == | |||
PDF-Tools MCPサーバのプロジェクト構造を以下に示す。<br> | |||
<br> | |||
PDF-Tools/ | |||
├── README.md # プロジェクトドキュメント | |||
├── package.json # Node.js依存関係 | |||
├── manifest.json # Claude Desktop Extension メタデータ | |||
├── manifest.mcpb.json # MCPB パッケージメタデータ | |||
├── icon.png # 拡張機能アイコン | |||
├── index.html # 拡張機能ページ | |||
├── server/ # MCPサーバ実装 | |||
│ └── index.js # メインエントリーポイント (12ツール定義) | |||
├── pdf-toolkit-mcp-share/ # Cursor用共有パッケージ | |||
├── docs/ # ドキュメント | |||
│ ├── MAINTAINERS.md | |||
│ ├── RELEASE.md | |||
│ └── SUPPORT.md | |||
├── package-for-friend.js # Cursor用インストーラ生成スクリプト | |||
├── pdf-toolkit-mcp.mcpb # Claude Desktop用パッケージ | |||
└── pdf-toolkit-mcp.zip # Cursor用配布パッケージ | |||
<br> | |||
==== PDF-Tools MCPのクライアント接続設定 ==== | |||
===== Claude Desktopからの接続 ===== | |||
Claude Desktopの設定ファイルを編集する。<br> | |||
<br> | |||
設定ファイルの場所は、以下の通りである。<br> | |||
* Linux | |||
*: ~/.config/Claude/claude_desktop_config.json | |||
* Windows | |||
*: %APPDATA%\Claude\claude_desktop_config.json | |||
<br> | |||
設定内容を以下に示す。<br> | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"mcpServers": { | |||
"pdf-tools": { | |||
"command": "node", | |||
"args": [ | |||
"/<PDF-Toolsのインストールディレクトリ>/PDF-Tools/server/index.js" | |||
] | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
Linux環境の設定例を以下に示す。<br> | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"mcpServers": { | |||
"pdf-tools": { | |||
"command": "node", | |||
"args": [ | |||
"/home/suse/Program/MCP_Server/PDF-Tools/server/index.js" | |||
] | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
Windows環境の場合、パスを適切に変更する。<br> | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"mcpServers": { | |||
"pdf-tools": { | |||
"command": "node", | |||
"args": [ | |||
"C:\\<PDF-Toolsのインストールディレクトリ>\\PDF-Tools\\server\\index.js" | |||
] | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
Claude Desktopを再起動して、PDF-Tools MCPサーバが利用可能であることを確認する。<br> | |||
正常にインストールされた場合、12個のツールが有効になる。<br> | |||
<br> | |||
===== Cursorからの接続 ===== | |||
Cursorのグローバル設定ファイルを編集する。<br> | |||
# Linux | |||
~/.cursor/mcp.json | |||
# Windows | |||
%USERPROFILE%\.cursor\mcp.json | |||
# MacOS | |||
~/.cursor/mcp.json | |||
<br> | |||
設定内容を以下に示す。<br> | |||
<syntaxhighlight lang="json"> | |||
{ | |||
"mcpServers": { | |||
"pdf-filler": { | |||
"command": "node", | |||
"args": [ | |||
"/<PDF-Toolsのインストールディレクトリ>/PDF-Tools/server/index.js" | |||
] | |||
} | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
または、Cursor用のインストーラを使用する場合は、以下の手順で行う。<br> | |||
# [https://github.com/Open-Document-Alliance/PDF-Tools/releases/latest Releases]からpdf-toolkit-mcp.zipをダウンロードする。 | |||
# ダウンロードしたファイルを解凍する。 | |||
# ターミナルで<code>./smart-install.sh</code>を実行する。 | |||
# Cursorを再起動する。 | |||
<br> | |||
==== PDF-Tools MCPの利用可能なツール ==== | |||
===== list_pdfs ===== | |||
指定されたディレクトリ内のPDFファイルを一覧表示する。<br> | |||
<br> | |||
* 使用例 | |||
*: <pre>「~/Documents」フォルダ内のPDFファイルを一覧表示してください。</pre> | |||
<br> | |||
===== read_pdf_fields ===== | |||
PDFファイルのフォームフィールド情報を抽出する。パスワード保護されたPDFにも対応する。<br> | |||
<br> | |||
* 使用例 | |||
*: <pre>「~/Documents/application.pdf」のフォームフィールドを読み取ってください。</pre> | |||
<br> | |||
===== fill_pdf ===== | |||
PDFフォームに指定されたデータを入力する。パスワード保護されたPDFにも対応する。<br> | |||
<br> | |||
* 使用例 | |||
*: <pre>「~/Documents/w9.pdf」にJohn Doeという名前を入力して保存してください。</pre> | |||
<br> | |||
===== bulk_fill_from_csv ===== | |||
CSVファイルのデータを使用して、複数のPDFフォームを一括入力する。<br> | |||
<br> | |||
* 使用例 | |||
*: <pre>「template.pdf」に「employees.csv」のデータを一括入力してください。</pre> | |||
<br> | |||
===== save_profile ===== | |||
フォームデータを再利用可能なプロファイルとして保存する。<br> | |||
<br> | |||
* 使用例 | |||
*: <pre>名前をJohn Doe、肩書をSoftware Engineerとして「work」プロファイルに保存してください。</pre> | |||
<br> | |||
===== load_profile ===== | |||
保存済みのプロファイルを読み込む。<br> | |||
<br> | |||
===== list_profiles ===== | |||
保存されているプロファイルの一覧を表示する。<br> | |||
<br> | |||
===== fill_with_profile ===== | |||
保存済みプロファイルを使用してPDFフォームに入力する。パスワード保護されたPDFにも対応する。<br> | |||
<br> | |||
* 使用例 | |||
*: <pre>「application.pdf」を「work」プロファイルを使って入力してください。</pre> | |||
<br> | |||
===== extract_to_csv ===== | |||
PDFファイルからデータを抽出してCSVファイルに出力する。<br> | |||
<br> | |||
* 使用例 | |||
*: <pre>入力済みのPDFファイルからデータを抽出して「summary.csv」に保存してください。</pre> | |||
<br> | |||
===== validate_pdf ===== | |||
PDFフォームの必須フィールドが入力されているかチェックする。パスワード保護されたPDFにも対応する。<br> | |||
<br> | |||
* 使用例 | |||
*: <pre>「application.pdf」の必須フィールドがすべて入力されているか確認してください。</pre> | |||
<br> | |||
===== read_pdf_content ===== | |||
PDFファイルの内容を読み取って解析する。<br> | |||
テキストベースのPDFとスキャンされたPDFの両方に自動対応する。<br> | |||
<br> | |||
* 使用例 | |||
*: <syntaxhighlight lang="text"> | |||
# PDFの内容を読み取る | |||
「/path/to/document.pdf」を読み取ってください。 | |||
# PDFの内容を要約する | |||
「/path/to/contract.pdf」の支払い条件について教えてください。 | |||
</syntaxhighlight> | |||
<br> | |||
===== get_pdf_resource_uri ===== | |||
ローカルPDFファイルのリソースURIを生成する。<br> | |||
ClaudeがResources APIを通じてPDFを取り込むために使用する。<br> | |||
<br> | |||
==== PDF-Tools MCPの使用例 ==== | |||
===== 基本的なPDF読み取り ===== | |||
* 「~/Documents/report.pdf」の内容を読み取ってください。 | |||
* 「~/Documents/contract.pdf」をMarkdown形式に変換してください。 | |||
<br> | |||
===== フォームフィールドの確認と入力 ===== | |||
* 「~/Documents/w9.pdf」のフォームフィールドを表示してください。 | |||
* 「~/Documents/w9.pdf」に会社名をCompany Name LLC、住所を123 Main St、Tax IDを12-3456789として入力してください。 | |||
<br> | |||
===== CSVからの一括入力 ===== | |||
* 「template.pdf」に「employees.csv」のデータを一括入力して、「~/filled-forms/」に保存してください。 | |||
* ファイル名には「employee_name」カラムの値を使用してください。 | |||
<br> | |||
===== プロファイルの活用 ===== | |||
* 名前をJohn Doe、肩書をSoftware Engineer、会社をTech Corpとして「work」プロファイルに保存してください。 | |||
* 「application.pdf」を「work」プロファイルを使って入力してください。 | |||
<br> | |||
===== パスワード保護されたPDF ===== | |||
* パスワード「mypassword123」を使って、暗号化されたPDFのフィールドを読み取ってください。 | |||
* パスワード「secure456」を使って、保護されたPDFにデータを入力してください。 | |||
<br> | |||
==== PDF-Tools MCPのトラブルシューティング ==== | |||
===== ESモジュールエラーが発生する ===== | |||
以下に示すようなエラーメッセージが表示される場合がある。<br> | |||
ReferenceError: require is not defined in ES module scope, you can use import instead | |||
<br> | |||
これは、<code>package.json</code>に<code>"type": "module"</code>が設定されているにもかかわらず、<code>server/index.js</code>がCommonJS形式の<code>require()</code>を使用しているために発生する。<br> | |||
<br> | |||
解決方法を以下に示す。<br> | |||
* <u>package.json</u> ファイルから <code>"type": "module"</code> の行を削除する | |||
*: <pre>sed -i '/"type": "module"/d' package.json</pre> | |||
* 削除後、JSONの構文が壊れていないか確認する (末尾のカンマに注意) | |||
*: <pre>node -e "JSON.parse(require('fs').readFileSync('package.json'))" && echo "OK"</pre> | |||
<br> | |||
===== Node.jsのバージョンが古い ===== | |||
Node.js 18以上が必要である。<br> | |||
バージョンを確認する。<br> | |||
node --version | |||
<br> | |||
バージョンが18未満の場合は、Node.jsを更新する。<br> | |||
<br> | |||
===== npm installが失敗する ===== | |||
依存関係のインストールに失敗する場合は、以下を試す。<br> | |||
rm -rf node_modules package-lock.json | |||
npm install | |||
<br> | |||
===== Claude Desktopでツールが表示されない ===== | |||
* 設定ファイル (<u>claude_desktop_config.json</u>) のJSON構文が正しいか確認する。 | |||
* <u>server/index.js</u> ファイルのパスが正しいか確認する。 | |||
* Claude Desktopを完全に終了して再起動する。 | |||
<br><br> | |||
= 外部リンク = | |||
==== PDF Reader MCP ==== | |||
* [https://github.com/SylphxAI/pdf-reader-mcp PDF Reader MCPのGithub] | |||
* [https://glama.ai/mcp/servers/@SylphxAI/pdf-reader-mcp PDF Reader MCP on Glama] | * [https://glama.ai/mcp/servers/@SylphxAI/pdf-reader-mcp PDF Reader MCP on Glama] | ||
* [https:// | <br> | ||
==== PDF-Tools MCP ==== | |||
* [https://github.com/Open-Document-Alliance/PDF-Tools PDF-ToolsのGithub] | |||
* [https://www.opendocuments.ai/ Open Document Alliance 公式サイト] | |||
<br> | |||
==== 共通 ==== | |||
* [https://modelcontextprotocol.io/ Model Context Protocol公式サイト] | * [https://modelcontextprotocol.io/ Model Context Protocol公式サイト] | ||
<br><br> | <br><br> | ||
#seo: | |||
|title= | |title=PAGENAME : PDF MCP Servers (PDF Reader / PDF-Tools) | MochiuWiki | ||
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,MCP,Model Context Protocol,PDF,PDF Reader,Document Processing,Claude,AI,Machine Learning,Python,Node.js,TypeScript,PDF Processing,Document Analysis | |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,MCP,Model Context Protocol,PDF,PDF Reader,PDF Tools,PDF Filler,Document Processing,Claude,AI,Machine Learning,Python,Node.js,TypeScript,PDF Processing,Document Analysis,Form Filling | ||
|description= | |description=PAGENAME - PDF Reader MCPサーバおよびPDF-Tools MCPサーバに関する包括的なガイド、AIアシスタントによるPDF操作の統合 | This page is PAGENAME in our wiki about PDF MCP servers and AI-powered document processing | ||
|image=/resources/assets/MochiuLogo_Single_Blue.png | |image=/resources/assets/MochiuLogo_Single_Blue.png | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ: | [[カテゴリ:設定]] | ||