使用说明
RAG MCP服务器
Google Drive参考库上的个人语义搜索引擎,作为MCP服务器公开,可连接到Claude.ai。
为什么是这个而不是Claude.ai的原生Google Drive集成?
| 本机驱动器连接 | 此RAG服务器 | |
|---|---|---|
| 运作原理 | 将原始文件内容转储到上下文中 | 将块嵌入为向量,仅检索相关块 |
| 大型图书馆 | 使用10+篇论文快速达到令牌限制 | 扩展到数百个文档——只返回前K个块 |
| 搜索质量 | 关键字/文件名匹配 | 语义相似性——即使没有确切的关键字,也能找到相关内容 |
| PDF处理 | 全文转储 | 使用页码元数据进行每页提取 |
| 重新读取文件 | 每次对话 | 索引都保存在Qdrant Cloud中,无需重新下载 |
| 引文支持 | 否 | 返回每个块的论文标题+页码 |
| 上下文效率 | 上下文中的整个文档 | 只有最相关的段落,保持窗口干净 |
核心思想:与其把整个库都给克劳德,不如给它一个工具 查询 图书馆。克劳德决定搜索什么,然后重新集中注意力,引用摘录。
建筑
Google Drive (PDFs / DOCX)
│
▼
src/drive/ ← Service Account auth + file sync
│
▼
src/ingestion/ ← text extraction (PyMuPDF / python-docx) + chunking
│
▼
src/store/ ← fastembed embeddings → Qdrant Cloud
│
▼
src/mcp_server/ ← MCP tools over Streamable HTTP + OAuth 2.0
│
▼
Claude.ai
先决条件
- Python 3.11–3.13(不支持3.14——fastembed还没有轮子)
- 一个启用了驱动API和 服务帐户
- 与该服务帐户共享的Google Drive文件夹
- A. Qdrant云 集群(免费层有效)
- 服务器的公共HTTPS URL(为本地开发提供免费层或ngrok)
逐步设置
1.克隆并安装
git clone <repo-url>
cd RAG-MCP-Server
pip install -e ".[dev]"
2.Qdrant Cloud——创建集群
- 注册地址: cloud.qdrant.io
- 创建免费集群
- 复制 群集URL 并生成 API密钥 从仪表板
3.谷歌云——创建服务帐户
- 首选 谷歌云控制台
- 创建或选择一个项目并启用 Google Drive API
- 首选 IAM和管理员→ 服务账户→ 创建服务帐户
- 不授予其特殊角色(驱动器访问由文件夹共享控制)
- 打开服务帐户→ Keys → 添加关键点→ JSON --下载文件
- 复制整个JSON文件内容——将其粘贴为下面的env-var
4.与服务帐户共享您的Drive文件夹
打开要索引的Google Drive文件夹,单击 分享,并添加服务帐户电子邮件(看起来像 name@project.iam.gserviceaccount.com)与 观众 访问。
从URL获取文件夹ID:
https://drive.google.com/drive/folders/1A2B3C4D5E6F7G8H9I0J
^^^^^^^^^^^^^^^^^^^^
this is your folder ID
5.配置环境变量
创建一个 .env 项目根目录中的文件:
DRIVE_FOLDER_ID=your_folder_id_here
QDRANT_URL=https://your-cluster.qdrant.io
QDRANT_API_KEY=your_qdrant_api_key
GOOGLE_SERVICE_ACCOUNT_KEY={"type":"service_account","project_id":"..."}
MCP_SERVER_URL=https://your-public-url.example.com
GOOGLE_SERVICE_ACCOUNT_KEY 是下载的JSON密钥的完整内容,在一行中。
可选变量(默认值):
MCP_HOST=0.0.0.0
MCP_PORT=8000
EMBED_MODEL=BAAI/bge-small-en-v1.5
CHUNK_MAX_TOKENS=400
CHUNK_OVERLAP_PARAGRAPHS=1
内存提示(免费层托管): 如果在同步过程中达到512 MB的限制,请降低
CHUNK_MAX_TOKENS到200较小的块意味着每个嵌入批内存中的向量更少。
6.运行服务器
python -m src.mcp_server.server
不需要浏览器OAuth流——服务帐户会自动进行身份验证。
7.公开服务器
选项A--部署到Render(推荐)
- 将仓库推送到GitHub
- 创建新 网络服务 上 render.com,已连接到您的仓库
- 设置构建命令:
pip install -e . - 设置启动命令:
python -m src.mcp_server.server - 在Render仪表板中添加步骤5中的所有环境变量
- 渲染提供稳定
https://your-service.onrender.comURL--请将其用作MCP_SERVER_URL
选项B--ngrok用于本地开发
# in a separate terminal
ngrok http 8000
复制 https:// URL并将其设置为 MCP_SERVER_URL,然后重新启动服务器。
每次重启时免费更改ngrok网址——更新
MCP_SERVER_URL每次重新启动。
8.连接Claude.ai
- 首选 claude.ai → 设置→ 集成
- 使用您的公共URL添加新的MCP服务器
- 完成出现的OAuth弹出窗口
- 服务器现在已连接
9.初始同步
在Claude.ai对话中:
“使用sync_drive工具下载并索引我的论文”
这将从您的Drive文件夹下载所有PDF和DOCX文件,并构建矢量索引。后续同步仅处理新的或更改的文件。
可用工具
| 工具 | 说明 |
|---|---|
search_references |
语义搜索——返回与论文标题和页码最相关的块 |
list_papers |
列出当前索引的所有论文 |
sync_drive |
从驱动器下载新的/更新的文件并重新索引它们 |
示例提示
Search my references for transformer attention mechanisms
List all papers I have indexed
Sync my Drive folder, then find papers about retrieval-augmented generation and summarize the key ideas
项目结构
RAG-MCP-Server/
├── config/
│ └── settings.py # All configuration via env vars
├── src/
│ ├── drive/
│ │ ├── auth.py # Google Service Account authentication
│ │ └── sync.py # File download and sync logic
│ ├── ingestion/
│ │ ├── extractor.py # PDF (per-page) and DOCX text extraction
│ │ └── chunker.py # Token-aware chunking with overlap
│ ├── store/
│ │ └── vector_store.py # fastembed embeddings + Qdrant storage and query
│ └── mcp_server/
│ ├── oauth.py # In-memory OAuth 2.0 provider (auto-approves)
│ └── server.py # MCP tools + Streamable HTTP transport
├── tests/ # Full test suite (AAA pattern, 90%+ coverage)
├── .env # Local env vars (git-ignored)
└── pyproject.toml
运行测试
pytest