A Python-based MCP (Model Context Protocol) server for local document indexing and search using LanceDB vector database and local LLMs.
- Real-time Document Monitoring: Automatically indexes new and modified documents in configured folders
- Multi-format Support: Handles PDF, Word (docx/doc), text, Markdown, and RTF files
- Local LLM Integration: Uses Ollama for document summarization and keyword extraction. Nothing ever leaves your computer
- Vector Search: Semantic search using LanceDB and sentence transformers
- MCP Integration: Exposes search and catalog tools via Model Context Protocol
- Incremental Indexing: Only processes changed files to save resources
- Performance Optimized: Designed for decent performance on standard laptops (e.g. M1/M2 MacBook)
- Python 3.9+ installed
- uv package manager:
- Ollama (for local LLM):
Configure the indexer using environment variables or a .env file:
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
The indexer exposes the following tools via MCP:
Search for documents using natural language queries.
- Parameters:
- query: Search query text
- limit: Maximum number of results (default: 10)
- search_type: "documents" or "chunks"
List all indexed documents with summaries.
- Parameters:
- skip: Number of documents to skip (default: 0)
- limit: Maximum documents to return (default: 100)
Get detailed information about a specific document.
- Parameters:
- file_path: Path to the document
Force reindexing of a specific document.
- Parameters:
- file_path: Path to the document to reindex
Get current indexing statistics.
Once configured, you can use the indexer in Claude:
- File Detection: Watchdog monitors configured folders for changes
- Document Parsing: Extracts text from PDF, Word, and text files
- Text Chunking: Splits documents into overlapping chunks for better retrieval
- LLM Processing: Generates summaries and extracts keywords using Ollama
- Embedding Generation: Creates vector embeddings using sentence transformers
- Vector Storage: Stores documents and chunks in LanceDB
- MCP Exposure: Makes search and catalog tools available via MCP
- Incremental Indexing: Only changed files are reprocessed
- Async Processing: Parallel processing of multiple documents
- Batch Operations: Efficient batch indexing for multiple files
- Debouncing: Prevents duplicate processing of rapidly changing files
- Size Limits: Configurable maximum file size to prevent memory issues
If Ollama is not running or the model isn't available, the indexer falls back to simple text extraction without summarization.
Ensure the indexer has read access to monitored folders:
For large document collections, consider:
- Reducing CHUNK_SIZE to create smaller chunks
- Limiting MAX_FILE_SIZE_MB to skip very large files
- Using a smaller embedding model
MIT License - See LICENSE file for details
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Add tests for new functionality
- Submit a pull request
For issues or questions:
- Open an issue on GitHub
- Check the troubleshooting section
- Review logs in the console output
.png)

