mcp-docs-assistant
🔌 MCP Docs Assistant
生产级检索增强生成(RAG)流水线,基于官方 Model Context Protocol 文档构建——通过 REST、MCP 工具和 Docker 提供。
用自然语言提问关于 MCP 的问题(架构、构建服务器/客户端、工具/资源/提示词、安全等),即可获得基于真实文档、可验证答案来源的回答,内置护栏、PII 脱敏、重排序、语义缓存和幻觉检测。
✨ 功能特性
能力 | 实现 |
🔀 多密钥 LLM 网关 | 由 Portkey 路由,在 2 个 Gemini key + 2 个 Groq key 之间负载均衡,并自动进行供应商回退 |
📚 基于文档的检索 | 官方 MCP 文档,切分块后嵌入到持久化的 Qdrant 向量存储 |
重排序 | Cross-encoder( |
🔯 安全护栏 | NeMo Guardrails(Colang 2x)——输入/输出安全检查,越狱 + 指令泄漏检测 |
PII 遮罩 | Microsoft Presidio——在输入和输出中屏蔽邮箱、电话、信用卡等信息 |
🧮 Token 运用 | 检索结果在进入 LLM 前按固定 token 预算进行贪婪适配 |
⚡ 语义缓存 | 基于嵌入相似度(非精确完全匹配下),带是否存在及容量期 |
💬 多轮会话 | LangGraph 分析检查点 + 会话跟踪查询更新(可用于“展示一个 Python 示例”) |
⌠ 幻觉检测 | 每次生成答案时使用 LL-as-judge 评分( |
📄 离线评估 | RAGAS 指标(忠实度、相关性、上下文准确/召回)数据库,基于 25 个参考 Q& 对 |
MCP 原生 | 将自身暴露为 MCP 工具( |
a RST API | 提供 FastAPI 端点,适合任何传统 HTTP 客户端 |
Docker | 使用 |
Related MCP server: FusionPact MCP Server
Architecture
flowchart TD
A[User Question] --> B[Guard Input<br/>NeMo Guardrails]
B -->|blocked| Z[Refusal message]
B -->|allowed| C[Mask Input PII<br/>Presidio]
C --> D[Condense Follow-up<br/>into standalone question]
D --> E{Semantic<br/>Cache Hit?}
E -->|yes| F[Return cached answer]
E -->|no| G[Retrieve Top-15<br/>Qdrant Vector Store]
G --> H[Rerank Top-5<br/>Cross-Encoder]
H --> I[Fit to Token Budget]
I --> J[Generate Answer<br/>Portkey: Gemini / Groq]
J --> K[Guard Output<br/>leak / PII pattern check]
K --> L[Hallucination Check<br/>LLM-as-judge]
L --> M[Mask Output PII]
M --> N[Cache + Store History]
N --> O[Return Answer]Everything in the direct graph is run by modules in [rag_pipeline/] (./rag_pipeline), which are wired in a LangGraph StateGrap in [rag_pipeline/graph.py]. rag_core.py dial every dependency once-as a singleton-and builds a stable wrapper of APIs-chat()、search()、get_history (), cache_stats () — that are used identically by the REST layer ([main.py)] and the MCP layer ([mcp_server.py]). No matter which interface a request comes from, same vector store / cache / history is used.
📁 Project Structure
mcp-docs-rag-assistant/
├── main.py # FastAPI app — REST endpoints + mounts MCP at /mcp
├── mcp_server.py # MCP tools (stdio standalone, or mounted in main.py)
├── rag_core.py # Singleton facade wiring the whole pipeline together
├── rag_pipeline/
│ ├── config.py # Env vars / secrets (single source of truth)
│ ├── logging_setup.py # Logging + Logfire
│ ├── gateway.py # Portkey multi-key LLM gateway
│ ├── errors.py # Retry + safe-node error handling
│ ├── ingestion.py # MCP docs loader + splitter
│ ├── vectorstore.py # Embeddings + persistent Qdrant store
│ ├── reranker.py # Cross-encoder reranking
│ ├── pii_masking.py # Presidio PII masking
│ ├── guardrails.py # NeMo Guardrails (Colang 2.x)
│ ├── token_management.py # Context window budgeting
│ ├── semantic_cache.py # Embedding-similarity cache
│ ├── query_condensation.py # Follow-up question rewriting
│ ├── hallucination.py # Runtime hallucination judge
│ └── graph.py # LangGraph StateGraph — full pipeline
├── scripts/
│ └── evaluate_ragas.py # Offline RAGAS evaluation (25 reference Q&A)
├── tests/
│ └── test_pipeline.py # Fast smoke tests (no API keys needed)
├── configs/guardrails/ # Colang rail files (generated at first run)
├── data/ # Persisted Qdrant vector store (gitignored)
├── notebooks/ # Original development notebook
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── .env.exampleGetting Started
Prerequisites
Python 3.11+
LLP API keys: Google AI Studio (Gemini, ×2)、Groq (×2)、Portkey (gateway + config id)
1. clone and set up a virtual environment
git clone https://github.com/<your-username>/mcp-docs-rag-assistant.git
cd mcp-docs-rag-assistant
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # macOS/Linux2. Install dependencies
pip install -r requirements.txt
python -m spacy download en_core_web_sm # required by Presidio for PII detection3. Configure environment variables
cp .env.example .envOpen .env and fill in with your own keys (GEMINI_API_KEY_1/2, GROQ_API_KEY_1/2, PORTKEY_API_KEY, PORTKEY_CONFIG_ID).
4. Launch the server
uvicorn main:app --reloadFirst time only:: the vector store doesn't exist yet, so server ingests MCP docs and embs in limited-rate batches—this can take 5–10 minutes. On later runs it loads the stored store from
data/qdrant_mcp_db/instantly.
Once you see Startup: RAG pipeline ready., go to:
http://localhost:8000/docs— interactive Swgger UI, tryPOST /chathttp://localhost:8000/health— health check
📡 RST API
Method | Endpoint | Description |
|
| Sent a question. Bory: |
|
| Retrieve + re-rank raw context, no generation. body: |
|
| Get 历史 for a thread |
|
| Semantic cache observability |
|
| Health check |
🔌 Using it as a MCP server
Standalone (stdio) — for Claude Desktop
Run directly:
python mcp_server.pyOr point a local MCP host at it, e.g. in Claude Desktop's config (claude_desktop_config.json):
{
"mcpServers": {
"mcp-docs-assistant": {
"command": "python",
"args": ["E:\\mcp-docs-rag-assistant\\mcp_server.py"]
}
}
}Remote (streamable-http) — via FastAPI
When main.py is running, the same MCP tools are reachable at:
http://localhost:8000/mcpAvailable tools: ask_mcp_docs, search_mcp_docs, get_conversation_history, cache_stats.
Docker
The only prerequisite is Docker Desktop (with Docker Compose), so you don't need to install Python, pip dependencies, or SpaCy model separately. All is done inside the image at build time (see the Dockerfile — it runs pip install -r requirements.txt and python -m spacy download en_core_web_sm).
# 1. Make sure .env exists (same as the local setup, step 3 above)
cp .env.example .env # then fill in real keys
# 2. Build and run
docker compose up --buildThat single command builds the image, installs everything, and starts the container. The data/ folder is mounted as a volume (see docker-compose.yml), so the vector store survives container restarts — you only pay the first-run embedding cost once.
Server is available at same as running locally: http://localhost:8000/docs.
To stop:
docker compose downTo rebuild after code changes:
docker compose up --build🐳 Testing
Fast smoke tests — no API keys or network calls required (fake embeds):
pip install pytest
pytest tests/ -v📄 Offline Evaluation (RAGAS)
The pipeline is evaluated against 25 hand-written MCP questions with reference answers using RAGAS:
python scripts/evaluate_ragas.pyThis does not require the server to be running — it constructs the pipeline itself (same class as main.py/mcp_server.py) and displays metrics table:
Faithfulness — is the answer based on retrieved context?
Response Relevancy — does the answer exactly address the question?
Context Precision — is retrieved context relevant?
Context Recall — does the retrieved context cover the reference answer's needs?
⏱️ A few minutes: each of 25 questions performs a real retrieval + generation, then every metric is judged by LLM-as-judge.
⚙️ Configuration reference
All config in .env (see .env.example). Key vars:
Variable | Purpose |
| Provider keys, load-balanced by Portkey |
| For the Portkey gateway (credentials + routing config) |
| Vector DB path + collection name |
| Optional — set to fall back to console logging |
| Server address and port |
🛠️ Tech Stack
FastAPI · LangChain · LangGraph · Qdrant · Portkey · Sentence-Transformers · Presidio · NeMo Guardrails · RAGAS · MCP Python SDK · Docker
📄 License
MIT — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseCqualityDmaintenanceA Model Context Protocol server that provides Retrieval-Augmented Generation capabilities using Contextual AI, enabling AI interfaces like Cursor IDE and Claude Desktop to query domain-specific knowledge with context-aware responses and source citations.121
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to access hybrid vector, reasoning-based tree retrieval, and agent memory through the Model Context Protocol (MCP), supporting Claude Desktop and other MCP-compatible clients.62Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables querying enterprise documents (DOCX, PDF, PPTX) using natural language, with hybrid search and MCP integration for Claude Desktop and other agents.MIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that enables Claude Desktop to search and read local documents via full-text and fuzzy search, providing direct access to indexed files without chunking.MIT
Related MCP Connectors
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
Query any docs site via MCP. Submit a URL, ask questions, get cited answers.
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/imanshrajsingh-boost/mcp-docs-rag-assistant'
If you have feedback or need assistance with the MCP directory API, please join our Discord server