使用说明
带MCP的PDF仪表板
上传PDF,使用PyMuPDF或GLM-OCR(Ollama)提取文本,并使用Ollama本地模型对文档提问。没有API密钥。
特性
- PDF提取:PyMuPDF用于文本层;扫描PDF或仅扫描图像时的GLM-OCR
- 根据RAG文件:每次上传都有自己的Chroma收藏
- 本地聊天:带有内联引用的LangChain代理;从下拉列表中选择任何已安装的Ollama型号
- Markdown查看器:阅读提取的文本,预览块,下载markdown
先决条件
设置
1.克隆存储库
git clone https://github.com/dakshp26/PDFDashboardWithMCP.git
cd PDFDashboardWithMCP
2.安装依赖项
uv sync
3.拉动Olama车型
ollama pull qwen2.5:3b # chat (or another chat model)
ollama pull nomic-embed-text # embeddings
ollama pull glm-ocr # OCR for scanned PDFs
4.运行应用程序
uv run streamlit run app/main.py
打开 http://localhost:8501 在您的浏览器中。
用法
- 上传PDF:打开上传PDF,选择一个文件,等待提取完成
- 聊天:打开聊天,选择PDF和Ollama模型,提问
项目结构
app/
├── main.py # Entry point, page navigation
├── app_pages/
│ ├── landing.py # Home page
│ ├── process_pdf_upload.py # Upload + pipeline UI
│ ├── pdf_library.py # Browse uploaded PDFs (read-only viewer)
│ └── process_pdf.py # Viewer + chat UI
└── process_pdf/
├── extract.py # PDF → Markdown (pymupdf4llm + GLM-OCR)
├── pipeline.py # Extraction pipeline with live progress
├── rag.py # Chunking, embeddings, Chroma persistence
└── agent.py # LangChain agent with retriever tool
mcp_server/
└── server.py # MCP server (list_documents, get_document)
data/ # Runtime data (gitignored)
├── process_pdf/ # Saved PDFs and extracted markdown
└── process_chroma/ # Chroma vector collections (one per PDF)
[!注意] 按文件细分、执行顺序和数据流: APP_STRUCTURE.md.
页面
| Page | 它的作用 |
|---|---|
| 家 | 链接和设置摘要 |
| 上传PDF | 运行提取(文本层、OCR回退、分块、嵌入);下载markdown |
| PDF库 | 打开过去的上传;查看标记和块预览,而无需重新运行提取 |
| 聊天 | 查询带有引用的索引PDF |
提取进度显示在 st.status 块。经过处理后,Chroma系列得以保留 data/process_chroma/ 并在下次运行时加载,而无需重新提取。
MCP服务器
MCP客户端的两个工具(Claude Desktop、Cursor、Claude Code):
list_documents:索引文档集合get_document(document, query):对集合进行语义搜索
Claude Desktop
添加 claude_desktop_config.json (Windows: %APPDATA%\Claude\claude_desktop_config.json)或使用 .mcp.json 在项目根目录中:
{
"mcpServers": {
"PDFDashboardWithMCP": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/PDFDashboardWithMCP", "mcp_server/server.py"]
}
}
}
Cursor
添加 .cursor/mcp.json 在项目根目录或全局目录中 ~/.cursor/mcp.json:
{
"mcpServers": {
"PDFDashboardWithMCP": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/PDFDashboardWithMCP", "mcp_server/server.py"]
}
}
}
Claude Code
项目范围 .mcp.json 在repo根目录中,服务器与此repo绑定:
{
"mcpServers": {
"PDFDashboardWithMCP": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/PDFDashboardWithMCP", "mcp_server/server.py"]
}
}
}
克劳德代码读取 .mcp.json 当你打开项目时。
替换 /absolute/path/to/PDFDashboardWithMCP 使用您的克隆路径。
Ollama一定和他一起跑
nomic-embed-text在MCP服务器加载集合之前拉取。
技术栈
| 组件 | 库 |
|---|---|
| UI | 流光显示 |
| PDF提取 | langchain-pymupdf4llm,PyMuPDF |
| OCR回退 | Ollama glm-OCR |
| 嵌入 | Ollama nomic嵌入文本 |
| 矢量存储 | 色度(langchain色度) |
| LLM/代理 | Ollama聊天模型(例如qwen2.5:3b),LangChain |
| 包管理器 | uv |
| MCP服务器 | MCP[cli] |
