Easy MCP RAG
An MCP server for RAG using Qdrant that automatically indexes documents from directories and generates search tools for each collection.
README
Easy MCP RAG ๐
A high-performance Model Context Protocol (MCP) server for RAG using Qdrant. Built for UV/UVX with CPU/GPU support and HTTP transport.
โจ Features
- ๐ Automatic Document Indexing - Scan directories and index all documents
- ๐ Smart Organization - Each subdirectory becomes its own searchable dataset
- ๐ ๏ธ Dynamic MCP Tools - Auto-generated tools for each collection
- ๐ Multi-Format Support - PDF, DOCX, CSV, XLSX, TXT, Markdown, and more
- โก GPU Acceleration - Optional CUDA/MPS support for faster embeddings
- ๐ HTTP Transport - Run as HTTP server or stdio
- ๐ฆ UV/UVX Ready - Install and run with a single command
- ๐ Verbose Logging - Detailed query tracking and monitoring
๐ Quick Start
Install with UVX (Recommended)
Run directly from GitHub without installation:
uvx --from git+https://github.com/yourusername/easy_mcp_rag.git easy_mcp_rag --data-dir ./documents
Install with UV
# Install from GitHub
uv pip install git+https://github.com/yourusername/easy_mcp_rag.git
# Or clone and install locally
git clone https://github.com/yourusername/easy_mcp_rag.git
cd easy_mcp_rag
uv pip install -e .
๐ Prerequisites
- Start Qdrant (using Docker):
docker run -p 6333:6333 qdrant/qdrant
- Prepare your documents:
documents/
โโโ legal_docs/
โ โโโ contract.pdf
โ โโโ terms.docx
โโโ research/
โ โโโ paper1.pdf
โ โโโ notes.txt
โโโ data/
โโโ analysis.csv
๐ป Usage
Basic Usage (stdio)
# With UVX
uvx --from git+https://github.com/yourusername/easy_mcp_rag.git easy_mcp_rag --data-dir ./documents
# With UV
uv run easy_mcp_rag --data-dir ./documents
# After installation
easy_mcp_rag --data-dir ./documents
HTTP Mode
easy_mcp_rag --data-dir ./documents --transport http --http-port 8000
GPU Acceleration
# Auto-detect GPU
easy_mcp_rag --data-dir ./documents --device auto
# Force CUDA (NVIDIA GPU)
easy_mcp_rag --data-dir ./documents --device cuda
# Force MPS (Apple Silicon)
easy_mcp_rag --data-dir ./documents --device mps
# Force CPU
easy_mcp_rag --data-dir ./documents --device cpu
Advanced Configuration
easy_mcp_rag \
--data-dir ./documents \
--qdrant-host localhost \
--qdrant-port 6333 \
--device cuda \
--embedding-model all-mpnet-base-v2 \
--chunk-size 1024 \
--chunk-overlap 100 \
--top-k 10 \
--batch-size 64 \
--verbose \
--force-reindex
๐ง Configuration Options
| Flag | Description | Default |
|---|---|---|
--data-dir |
Directory with document subdirectories | Required |
--qdrant-host |
Qdrant server host | localhost |
--qdrant-port |
Qdrant server port | 6333 |
--device |
Device: auto, cpu, cuda, mps | auto |
--transport |
Transport type: stdio, http | stdio |
--http-host |
HTTP server host | 0.0.0.0 |
--http-port |
HTTP server port | 8000 |
--embedding-model |
Sentence transformer model | all-MiniLM-L6-v2 |
--chunk-size |
Text chunk size (chars) | 512 |
--chunk-overlap |
Chunk overlap (chars) | 50 |
--top-k |
Results per search | 5 |
--batch-size |
Embedding batch size | 32 |
--verbose |
Enable verbose logging | False |
--log-level |
Log level | INFO |
--force-reindex |
Force reindex all docs | False |
๐ฏ MCP Client Configuration
Claude Desktop / Cline / Other MCP Clients
Add to your MCP client config:
{
"mcpServers": {
"rag-server": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/yourusername/easy_mcp_rag.git",
"easy_mcp_rag",
"--data-dir",
"/path/to/your/documents",
"--device",
"auto",
"--verbose"
]
}
}
}
With HTTP Transport
{
"mcpServers": {
"rag-server": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/yourusername/easy_mcp_rag.git",
"easy_mcp_rag",
"--data-dir",
"/path/to/your/documents",
"--transport",
"http",
"--http-port",
"8000"
]
}
}
}
๐ ๏ธ How It Works
- Scan - Discovers all subdirectories in your data directory
- Load - Extracts text from all supported file types
- Chunk - Splits documents into overlapping chunks
- Embed - Generates vector embeddings (CPU or GPU)
- Index - Stores in Qdrant (one collection per subdirectory)
- Serve - Creates MCP tools for each collection
Example
documents/
โโโ legal_docs/ โ Creates "legal_docs_search" tool
โโโ research/ โ Creates "research_search" tool
โโโ data/ โ Creates "data_search" tool
๐ Supported File Types
| Category | Extensions |
|---|---|
| Text | .txt, .md, .py, .js, .json, .xml, .html, .css |
.pdf |
|
| Word | .docx, .doc |
| Spreadsheet | .csv, .xlsx, .xls |
๐จ Embedding Models
Choose based on your needs:
| Model | Dimensions | Speed | Quality | Use Case |
|---|---|---|---|---|
all-MiniLM-L6-v2 |
384 | โกโกโก | Good | Default, fast |
all-MiniLM-L12-v2 |
384 | โกโก | Better | Balanced |
all-mpnet-base-v2 |
768 | โก | Best | Quality |
๐ Troubleshooting
Qdrant Connection Failed
# Check if Qdrant is running
curl http://localhost:6333
# Start Qdrant
docker run -p 6333:6333 qdrant/qdrant
GPU Not Detected
# Check PyTorch GPU support
python -c "import torch; print(torch.cuda.is_available())"
# Install with GPU support
uv pip install -e ".[gpu]"
Out of Memory
# Use smaller model
--embedding-model all-MiniLM-L6-v2
# Reduce batch size
--batch-size 16
# Use CPU
--device cpu
๐ Logging
Enable verbose logging to see detailed information:
easy_mcp_rag --data-dir ./documents --verbose
Output includes:
- โ Tool access events
- ๐ Query details
- ๐ Result counts
- ๐ฏ Relevance scores
- ๐ Source files
Example:
2024-01-20 10:30:15 - easy_mcp_rag.server - INFO - Tool accessed: legal_docs_search
2024-01-20 10:30:15 - easy_mcp_rag.server - INFO - Query: contract terms
2024-01-20 10:30:15 - easy_mcp_rag.server - INFO - Results returned: 5
2024-01-20 10:30:15 - easy_mcp_rag.server - DEBUG - Result 1: score=0.8542
๐ Security Notes
- HTTP mode exposes the server on the network
- Use
--http-host 127.0.0.1for local-only access - Consider authentication for production deployments
๐ Development
# Clone repository
git clone https://github.com/yourusername/easy_mcp_rag.git
cd easy_mcp_rag
# Install with dev dependencies
uv pip install -e ".[dev]"
# Run tests
pytest
# Format code
black src/
# Lint
ruff src/
๐ค Contributing
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
๐ License
MIT License - see LICENSE file
๐ Credits
Built with:
- MCP - Model Context Protocol
- Qdrant - Vector database
- Sentence Transformers - Embeddings
- UV - Package manager
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.