使用说明
📚 MCP PDF服务器
一 MCP(模型上下文协议) 允许AI助手的服务器 查询您的PDF文档。将PDF放入矢量数据库,并提出问题——答案基于您的实际文档。
✨ 特性
- 🔌 MCP兼容 --适用于任何MCP客户端(GitHub Copilot、Antigravity等)
- 📄 自动PDF发现 --自动查找、提取、分块和嵌入文件夹中的所有PDF
- 🔍 向量搜索 --在生成答案之前检索最相关的段落
- 🐳 Docker就绪 --使用一个命令作为容器化服务器运行
- 🗄️ Qdrant --用于相似性搜索的快速开源矢量数据库
🏗️ 运作原理
┌─────────────┐ MCP (stdio) ┌───────────────────┐ HTTP ┌──────────┐
│ AI Assistant │◄───────────────────►│ MCP PDF Server │◄────────────►│ Qdrant │
│ │ │ │ │ Vector DB│
└─────────────┘ │ 1. Embed question │ └──────────┘
│ 2. Search vectors │
│ 3. Generate answer│ LLM API
│ │◄────────────►
└───────────────────┘ (Embeddings
+ Generation)
- 你通过你的人工智能助手问一个问题。
- 服务器 嵌入 使用您选择的嵌入模型的问题。
- 它 搜索 Qdrant为您的PDF中前5个最相关的文本块。
- 它 生成 基于检索到的上下文,使用LLM的答案。
🚀 快速开始
先决条件
- Docker&Docker编写
- Node.js 20+ (仅供摄入)
- [LLM API密钥]
1.克隆和配置
git clone https://github.com/your-username/mcp-pdf-server.git
cd mcp-pdf-server
cp .env.example .env
编辑 .env 并设置您的API密钥:
API_KEY=nvapi-your_key_here
2.启动Qdrant
docker-compose up -d
3.添加您的PDF和摄取
将您的PDF文档放在 pdfs/ 文件夹,然后:
npm install # first time only
npm run ingest
文件夹中的所有PDF都会被自动发现和接收。
4.构建服务器映像
docker build -t mcp-pdf-server .
5.连接到您的AI助手
添加到AI助手的MCP配置中(例如。, mcp_config.json):
{
"mcpServers": {
"pdf-docs": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network",
"mcp-network",
"-e",
"API_KEY",
"-e",
"QDRANT_URL=http://mcp-qdrant:6333",
"-e",
"COLLECTION_NAME=documents",
"-e",
"EMBED_MODEL=nvidia/nv-embedqa-e5-v5",
"-e",
"GEN_MODEL=qwen/qwen2.5-coder-32b-instruct",
"mcp-pdf-server"
],
"env": {
"API_KEY": "your_nvapi_key_here"
}
}
}
}
完成! 向你的AI助手询问有关你的文档的任何问题。
🔧 可用工具
| 工具 | 说明 |
|---|---|
ask_documents |
问任何问题。服务器从您摄入的PDF中检索相关上下文并生成答案。 |
⚙️ 环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
API_KEY |
LLM API密钥 | (必填) |
EMBED_MODEL |
嵌入模型 | nvidia/nv-embedqa-e5-v5 |
GEN_MODEL |
发电模型 | qwen/qwen2.5-coder-32b-instruct |
COLLECTION_NAME |
Qdrant集合名称 | documents |
QDRANT_URL |
Qdrant连接URL | http://localhost:6333 |
EMBED_BATCH_SIZE |
每个嵌入批次的块数 | 15 |
EMBED_MAX_RETRIES |
API失败的最大重试次数 | 3 |
EMBED_COOLOFF_MS |
批次之间的冷却时间(ms) | 500 |
注: 这
.env文件用于本地摄取。这mcp_config.json通过Docker传递env变量-e服务器的标志。
📁 项目结构
mcp-pdf-server/
├── pdfs/ # Place your PDF documents here
├── src/
│ ├── server.ts # MCP server entry point
│ ├── llm/
│ │ └── provider.ts # LLM API client (embed + generate)
│ ├── vector/
│ │ └── qdrant.ts # Qdrant client config
│ └── ingest/
│ ├── main.ts # Ingestion orchestrator (auto-discovers PDFs)
│ ├── extract.ts # PDF text extraction
│ ├── chunk.ts # Text chunking
│ └── embed.ts # Batch embedding & Qdrant insertion
├── docker-compose.yml # Qdrant service
├── Dockerfile # Server image
├── .env.example # Env var template (safe to commit)
├── .gitignore # Keeps secrets & binaries out of git
└── package.json
🛠️ 发展
对于热重载的本地开发:
npm install
docker-compose up -d # Start Qdrant
npm run dev # Server with hot-reload
要将本地开发服务器与您的AI助手一起使用,请更改 mcp_config.json 致:
{
"mcpServers": {
"pdf-docs": {
"command": "npx",
"args": ["tsx", "src/server.ts"],
"cwd": "/path/to/mcp-pdf-server",
"env": {
"API_KEY": "your_nvapi_key_here",
"QDRANT_URL": "http://localhost:6333",
"COLLECTION_NAME": "documents",
"EMBED_MODEL": "nvidia/nv-embedqa-e5-v5",
"GEN_MODEL": "qwen/qwen2.5-coder-32b-instruct"
}
}
}
}
📝 用例
此服务器与 任何 PDF知识库:
- 📖 技术书籍——体系结构、算法、系统设计
- 📋 公司文档--维基、运行手册、政策
- 📄 研究论文——学术论文、白皮书
- 📑 法律文件——合同、合规性
- 🎓 教材——课本、课堂讲稿
🐛 故障排除
| 问题 | 解决方案 |
|---|---|
| 服务器无法访问Qdrant | docker ps --确保 mcp-qdrant 正在运行 mcp-network |
| 嵌入不匹配 | 已更改 EMBED_MODEL?删除 qdrant_storage/ 并重新摄入 |
| 重建服务器映像 | docker build -t mcp-pdf-server . 代码更改后 |
| 重置所有数据 | 删除 ./qdrant_storage/ 并重新运行 npm run ingest |
| 速率限制 | 增加 EMBED_COOLOFF_MS 或减少 EMBED_BATCH_SIZE 在 .env |
| 未找到PDF | 确保 .pdf 文件被放置在 pdfs/ 目录 |
📄 许可证
ISC
