PDF文档查询服务器

MCP PDF Server是一款基于模型上下文协议(MCP)的服务,允许用户通过AI助手查询PDF文档内容,支持自动发现、提取和向量化处理PDF文件,并通过向量数据库进行高效检索。

  • by BhagyeshRashinkar
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 BhagyeshRashinkar/mcp-pdf-server

使用说明

📚 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)
  1. 你通过你的人工智能助手问一个问题。
  2. 服务器 嵌入 使用您选择的嵌入模型的问题。
  3. 它 搜索 Qdrant为您的PDF中前5个最相关的文本块。
  4. 它 生成 基于检索到的上下文,使用LLM的答案。

🚀 快速开始

先决条件

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