这是一个使用FastMCP构建的强大模型上下文协议(MCP)服务器,提供全面的PDF处理功能,包括文本提取、图像提取以及用于读取图像内文字的OCR。
你需要在系统上安装Tesseract OCR:
Ubuntu/Debian:
sudo apt update
sudo apt install tesseract-ocr tesseract-ocr-eng
macOS:
brew install tesseract
Windows:
conda install -c conda-forge tesseract# 多种语言
sudo apt install tesseract-ocr-fra tesseract-ocr-deu tesseract-ocr-spa
# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
mkdir mcp-pdf-reader-server
cd mcp-pdf-reader-server
# 复制文件(pdf_reader_server.py 和 pyproject.toml)
# 然后安装依赖项
uv sync
uv run python -c "import pytesseract; print(pytesseract.get_tesseract_version())"
如果你更喜欢传统的设置方式:
python -m venv .venv
source .venv/bin/activate # 在Windows上:.venv\Scripts\activate
pip install fastmcp PyMuPDF pytesseract Pillow
使用UV:
uv run python pdf_reader_server.py
或者如果你已经激活了环境:
python pdf_reader_server.py
服务器将启动并监听标准输入/输出上的MCP请求。
read_pdf_text从PDF页面中提取文本内容。
参数:
file_path(字符串,必需):PDF文件路径page_range(对象,可选):包含起始和结束页码的字典示例:
{
"file_path": "/path/to/document.pdf",
"page_range": {"start": 1, "end": 5}
}
extract_pdf_images从PDF文件中提取所有图像。
参数:
file_path(字符串,必需):PDF文件路径output_dir(字符串,可选):保存图像的目录page_range(对象,可选):要处理的页码范围示例:
{
"file_path": "/path/to/document.pdf",
"output_dir": "/path/to/images/",
"page_range": {"start": 1, "end": 3}
}
read_pdf_with_ocr使用OCR从常规文本和图像中提取文本。
参数:
file_path(字符串,必需):PDF文件路径page_range(对象,可选):要处理的页码范围ocr_language(字符串,可选):OCR语言代码(默认:"eng")示例:
{
"file_path": "/path/to/document.pdf",
"ocr_language": "eng+fra",
"page_range": {"start": 1, "end": 10}
}
支持的OCR语言:
eng - 英语fra - 法语deu - 德语spa - 西班牙语eng+fra - 多种语言get_pdf_info获取关于PDF的详细元数据和统计信息。
参数:
file_path(字符串,必需):PDF文件路径analyze_pdf_structure分析PDF的结构和内容分布。
参数:
file_path(字符串,必需):PDF文件路径在你的claude_desktop_config.json中添加以下内容:
{
"mcpServers": {
"pdf-reader": {
"command": "uv",
"args": ["run", "python", "/path/to/your/pdf_reader_server.py"],
"cwd": "/path/to/your/mcp-pdf-reader-server"
}
}
}
{
"mcpServers": {
"pdf-reader": {
"command": "/path/to/your/.venv/bin/python",
"args": ["/path/to/your/pdf_reader_server.py"]
}
}
}
{
"mcpServers": {
"pdf-reader": {
"command": "python",
"args": ["/path/to/your/pdf_reader_server.py"],
"env": {
"PYTHONPATH": "/path/to/your/.venv/lib/python3.x/site-packages"
}
}
}
}
{
"success": true,
"file_path": "/path/to/document.pdf",
"pages_processed": "1-3",
"total_pages": 10,
"pages_text": [
{
"page_number": 1,
"text": "第一页内容...",
"word_count": 125
}
],
"combined_text": "所有文本组合...",
"total_word_count": 1250,
"total_character_count": 8750
}
{
"success": true,
"file_path": "/path/to/document.pdf",
"pages_processed": "1-2",
"ocr_language": "eng",
"pages_data": [
{
"page_number": 1,
"text": "来自PDF的常规文本...",
"ocr_text": "从图像中提取的文本...",
"images_with_text": [
{
"image_index": 1,
"ocr_text": "来自图像1的文本",
"confidence": "高"
}
],
"combined_text": "组合文本和OCR...",
"text_word_count": 100,
"ocr_word_count": 25
}
],
"summary": {
"total_text_word_count": 200,
"total_ocr_word_count": 50,
"combined_word_count": 250,
"images_processed": 3
},
"all_text_combined": "所有提取的文本..."
}
未找到Tesseract:
TesseractNotFoundError: tesseract未安装
权限错误:
OCR结果差:
内存错误:
使用UV运行带有调试日志:
PYTHONUNBUFFERED=1 uv run python pdf_reader_server.py
或者使用普通Python:
PYTHONUNBUFFERED=1 python pdf_reader_server.py
直接测试Tesseract:
tesseract --list-langs
tesseract image.png output.txt
你可以在代码中修改OCR配置:
ocr_text = pytesseract.image_to_string(
pil_image,
lang=ocr_language,
config='--psm 6 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz '
)
为了获得更好的OCR结果,可以考虑添加图像预处理:
# 添加到需求:opencv-python, numpy
import cv2
import numpy as np
# 预处理示例
def preprocess_image(image):
gray = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
return Image.fromarray(thresh)
MIT许可证 - 详情见LICENSE文件。