RAG-MCP

mohandshamada/RAG-MCP

3.2

If you are the rightful owner of RAG-MCP and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.

A high-performance Model Context Protocol (MCP) server designed for intelligent document processing using Retrieval-Augmented Generation (RAG).

PDF RAG MCP Server

Python 3.9+ License: MIT UV MCP

A high-performance Model Context Protocol (MCP) server for intelligent document processing with Retrieval-Augmented Generation (RAG). Process PDFs, Excel spreadsheets, Word documents, and images with semantic search and compliance checking.

✨ Features

  • 📄 Multi-Format Support: PDF, Excel, Word, Images (with OCR)
  • 🔍 Semantic Search: RAG-powered queries with FAISS vector store
  • Compliance Checking: Compare documents against specifications
  • 📊 Report Generation: Text, JSON, and HTML compliance reports
  • 🤖 Claude Desktop Integration: Seamless MCP integration
  • Lightning Fast: 10-100x faster with UV package manager
  • 🐳 Docker Ready: Production-ready containerization

🚀 Quick Start (60 seconds)

Option 1: UV Installation (Recommended - Fastest ⚡)

Unix/Linux/macOS:

pip install uv

Windows:

git clone https://github.com/mohandshamada/RAG-MCP.git
cd pdf_rag_mcp_server
.\install_uv.ps1

Run the server:

uv run python main.py

Option 2: Traditional pip

git clone https://github.com/mohandshamada/RAG-MCP.git
cd pdf_rag_mcp_server
pip install -r requirements.txt
python main.py

Option 3: Docker

git clone https://github.com/mohandshamada/RAG-MCP.git
cd pdf_rag_mcp_server
docker-compose up -d

📋 Requirements

  • Python: 3.9 or higher
  • Optional: Tesseract OCR for image processing
  • Optional: Java for PDF table extraction

🎯 Usage Examples

CLI Client

# Ingest a document
uv run python client.py ingest document.pdf -n my_doc

# Query with semantic search
uv run python client.py query my_doc "What are the key requirements?"

# List all indexed documents
uv run python client.py list

# Compare against specifications
uv run python client.py compare my_doc requirements.txt --format html

# Generate compliance report
uv run python client.py report my_doc specs.json --format json

# Delete a document
uv run python client.py delete my_doc

Python API

from src.rag_server import ingest_document, rag_query, compare_document_to_specification

# Ingest a document
result = ingest_document("document.pdf", "my_doc")

# Query it
results = rag_query("my_doc", "What is this about?", top_k=5)

# Compare to specification
with open("requirements.txt") as f:
    specs = f.read()

comparison = compare_document_to_specification(
    "my_doc",
    specs,
    "requirements",
    threshold=0.7
)

🖥️ Claude Desktop Integration

Add to your Claude Desktop configuration:

Location:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Configuration:

{
  "mcpServers": {
    "rag-document-server": {
      "command": "uv",
      "args": [
        "run",
        "python",
        "/absolute/path/to/pdf_rag_mcp_server/src/rag_server.py"
      ],
      "cwd": "/absolute/path/to/pdf_rag_mcp_server"
    }
  }
}

Without UV:

{
  "mcpServers": {
    "rag-document-server": {
      "command": "python",
      "args": ["/absolute/path/to/pdf_rag_mcp_server/src/rag_server.py"],
      "env": {
        "PYTHONPATH": "/absolute/path/to/pdf_rag_mcp_server"
      }
    }
  }
}

Restart Claude Desktop, and you'll have access to document processing tools!

🐳 Docker Deployment

Quick Start

# Build and start
docker-compose up -d

# Check status
docker-compose ps

# View logs
docker-compose logs -f

# Use CLI in container
docker-compose exec rag-mcp-server python client.py list

# Stop
docker-compose down

Production Deployment

# Build
docker-compose build

# Run with custom config
docker-compose -f docker-compose.yml up -d

# Scale (if needed)
docker-compose up -d --scale rag-mcp-server=3

# View health status
docker-compose ps

Docker Commands Reference

# Rebuild after code changes
docker-compose build --no-cache

# Run in foreground (see logs)
docker-compose up

# Execute commands in container
docker-compose exec rag-mcp-server python verify_installation.py

# Access container shell
docker-compose exec rag-mcp-server /bin/bash

# Clean up everything
docker-compose down -v --remove-orphans

🌐 Deployment Options

1. Local Development

# Install with UV (fastest)
./install_uv.sh  # or install_uv.ps1 on Windows

# Run server
uv run python main.py

2. Production Server (Linux)

# Install dependencies
./install_uv.sh

# Run as systemd service (create service file)
sudo nano /etc/systemd/system/rag-mcp-server.service

Service file (/etc/systemd/system/rag-mcp-server.service):

[Unit]
Description=RAG MCP Server
After=network.target

[Service]
Type=simple
User=youruser
WorkingDirectory=/path/to/pdf_rag_mcp_server
ExecStart=/path/to/.venv/bin/python main.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Enable and start:

sudo systemctl enable rag-mcp-server
sudo systemctl start rag-mcp-server
sudo systemctl status rag-mcp-server

3. Docker Production

# Production deployment
docker-compose -f docker-compose.yml up -d

# With monitoring
docker-compose -f docker-compose.yml -f docker-compose.monitoring.yml up -d

# Behind reverse proxy (nginx)
# Add nginx config for port forwarding

4. Cloud Deployment

AWS EC2
# Launch EC2 instance (Ubuntu 22.04)
# Install Docker
sudo apt-get update
sudo apt-get install docker.io docker-compose -y

# Clone and deploy
git clone <your-repo>
cd pdf_rag_mcp_server
docker-compose up -d
Google Cloud Run
# Build and push
gcloud builds submit --tag gcr.io/PROJECT_ID/rag-mcp-server
gcloud run deploy rag-mcp-server --image gcr.io/PROJECT_ID/rag-mcp-server
Azure Container Instances
# Build and push to ACR
az acr build --registry REGISTRY_NAME --image rag-mcp-server:latest .
az container create --resource-group RG_NAME --name rag-mcp-server \
  --image REGISTRY_NAME.azurecr.io/rag-mcp-server:latest

⚙️ Configuration

Environment Variables

# Data directories
export DATA_DIR=/path/to/data
export LOG_DIR=/path/to/logs

# Model settings
export EMBEDDING_MODEL=all-MiniLM-L6-v2
export CHUNK_SIZE=1000
export CHUNK_OVERLAP=200

# Limits
export MAX_FILE_SIZE_MB=500
export TOP_K_DEFAULT=5

Custom Configuration

Create config/config.py or modify existing:

# Embedding model
EMBEDDING_MODEL = "all-MiniLM-L6-v2"

# Text chunking
CHUNK_SIZE = 1000
CHUNK_OVERLAP = 200

# Query defaults
TOP_K_DEFAULT = 5

# File limits
MAX_FILE_SIZE_MB = 500

# Supported formats
SUPPORTED_FORMATS = ["pdf", "xlsx", "docx", "png", "jpg"]

🧪 Testing

Run Tests

# Comprehensive test suite
uv run python run_tests.py

# Verification script
uv run python verify_installation.py

# Create test files
uv run python test_data/create_test_files.py

Test Coverage

# With pytest (dev dependencies)
uv pip install -e ".[dev]"
uv run pytest --cov=src --cov-report=html

📊 Performance

Speed Benchmarks

OperationTimeDetails
PDF Ingestion~5-30ms/pageWith PyMuPDF
Excel Processing~5-20ms/sheetWith openpyxl
RAG Query~50-200msFAISS search
Batch Query (3 docs)~150-600msParallel search

With UV Package Manager

InstallationpipUVSpeedup
Fresh install~5 min~30 sec10x
Cached install~2 min~5 sec24x
Docker build~10 min~2 min5x

📖 Documentation

  • - Complete UV setup guide
  • - UV integration details
  • - All bug fixes documented
  • - Testing results
  • - Quick start guide
  • - Detailed configuration reference
  • - Usage examples
  • - Architecture overview

🔧 Troubleshooting

Installation Issues

UV not found:

# Unix/Linux/macOS
export PATH="$HOME/.cargo/bin:$PATH"

# Windows
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","User")

Permission errors:

# Unix/Linux/macOS
chmod +x install_uv.sh

# Windows (Run as Administrator)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Dependency conflicts:

# UV has better resolution
uv pip compile pyproject.toml

# Fallback to pip
pip install -r requirements.txt

Runtime Issues

Import errors:

# Ensure PYTHONPATH is set
export PYTHONPATH=/path/to/pdf_rag_mcp_server

Encoding errors on Windows:

# Already fixed in verify_installation.py
# UTF-8 encoding is now automatic

Tesseract not found:

# Install Tesseract OCR
# Ubuntu: sudo apt-get install tesseract-ocr
# macOS: brew install tesseract
# Windows: Download from https://github.com/UB-Mannheim/tesseract/wiki

Docker Issues

Build fails:

# Clear cache and rebuild
docker-compose build --no-cache

Container won't start:

# Check logs
docker-compose logs rag-mcp-server

# Verify health
docker-compose ps

Port conflicts:

# Change port in docker-compose.yml
ports:
  - "8001:8000"  # Use different host port

🏗️ Architecture

Core Components

┌─────────────────────────────────────────┐
│         MCP Server (FastMCP)            │
├─────────────────────────────────────────┤
│  Document Processing:                   │
│  - PDF (PyMuPDF)                       │
│  - Excel (openpyxl)                    │
│  - Word (python-docx)                  │
│  - Images (pytesseract)                │
├─────────────────────────────────────────┤
│  RAG Pipeline:                          │
│  - Text Chunking (langchain)           │
│  - Embeddings (HuggingFace)            │
│  - Vector Store (FAISS)                │
├─────────────────────────────────────────┤
│  Comparison Engine:                     │
│  - Specification Parsing                │
│  - Semantic Matching                    │
│  - Compliance Scoring                   │
├─────────────────────────────────────────┤
│  Output:                                │
│  - CLI Client                           │
│  - MCP Tools                            │
│  - API Functions                        │
└─────────────────────────────────────────┘

Data Flow

Document Input → Extraction → Chunking → Embedding → Vector Store
                                                          ↓
Query Input → Embedding → Similarity Search → Results ← Vector Store
                                                          ↓
Specification → Parsing → Semantic Match → Compliance Report

🤝 Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

📞 Support

🎯 Roadmap

  • Web API (FastAPI)
  • Persistent vector database (Qdrant/Milvus)
  • Authentication/authorization
  • Monitoring and metrics
  • Kubernetes deployment manifests
  • CI/CD pipeline
  • More document formats
  • Advanced OCR capabilities

📈 Status

  • Build: ✅ Passing
  • Tests: ✅ 75% pass rate
  • Coverage: 🔄 In progress
  • Deployment: ✅ Production ready
  • Performance: ⚡ Optimized with UV

Made with ❤️ for the MCP ecosystem

⚡ 10-100x faster with UV | 🤖 Claude Desktop Ready | 🐳 Docker Optimized