Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

vectordb-mcp

Local RAG over your own files, exposed to Claude Desktop and Claude Code as an MCP server. Chunking via LangChain's RecursiveCharacterTextSplitter, embeddings via jinaai/jina-embeddings-v5-text-nano (local, no API key), vectors in FAISS, text/metadata in SQLite.

Setup

cd vectordb-mcp
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt

First run downloads the embedding model (~1GB) from Hugging Face and caches it locally (%USERPROFILE%\.cache\huggingface).

Data files (data/vectordb.sqlite3, data/<collection>.index) are created under the project's data/ folder on first use — nothing global, easy to wipe by deleting the folder.

Register with Claude Desktop

Edit %APPDATA%\Claude\claude_desktop_config.json:

{
  "mcpServers": {
    "vectordb-mcp": {
      "command": "C:\\Users\\Kiran\\OneDrive\\Desktop\\Projects\\vectordb-mcp\\.venv\\Scripts\\python.exe",
      "args": ["C:\\Users\\Kiran\\OneDrive\\Desktop\\Projects\\vectordb-mcp\\run.py"]
    }
  }
}

Restart Claude Desktop; the three tools (ingest_local_document, vector_search, manage_collections) should appear under the hammer icon.

Register with Claude Code

From the project directory (or any directory, using absolute paths):

claude mcp add vectordb-mcp -- "C:\Users\Kiran\OneDrive\Desktop\Projects\vectordb-mcp\.venv\Scripts\python.exe" "C:\Users\Kiran\OneDrive\Desktop\Projects\vectordb-mcp\run.py"

Verify with claude mcp list / /mcp inside a session.

Tools

  • ingest_local_document(filepath, collection_name="main", chunk_size=512, chunk_overlap=50)
  • vector_search(query, collection_name="main", top_k=5)
  • manage_collections(action: "list" | "delete" | "reset", collection_name=None)

Deduplication

Two layers, see vectordb_mcp/dedup.py:

  • Ingestion-time (exact): each chunk is hashed (normalized, sha256) and checked against a UNIQUE(collection, content_hash) index in SQLite. Duplicate content (repeated boilerplate/footers across files) is embedded and stored once; re-ingesting the same or overlapping content just links the new source file to the existing chunk row.
  • Retrieval-time (exact + near-duplicate): vector_search over-fetches candidates from FAISS, drops exact hash repeats as a safety net, and also drops near-duplicates via word-shingle Jaccard similarity (default threshold 0.7) so overlap-adjacent chunks that differ by only a few words don't both make it into the top_k results returned to Claude.

About

This is a MCP tool which creates a local SQL vector DB with context compressor

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages