add_documentLABSCO SUMMARY
The fallback embedding provider is a trap worth knowing about.
Three providers chain automatically, and the last one is hash-based — it will happily produce vectors without sentence-transformers installed, and the search results will be poor in a way that looks like a data problem rather than a setup problem. Check get_stats after your first ingest. Everything else about the design is sensible: local SQLite, vectors on disk, and quality filters that keep navigation chrome out of the index.
What it is
A self-hosted RAG system that pairs a local vector store with Playwright-based web scraping. Pages get scraped into a folder, processed into embeddings, and stored in SQLite with the vectors on disk as NumPy arrays. The MCP server then lets a client add, search and retrieve from that store without anything leaving the machine — unless you opt into OpenAI embeddings.
What you get
add_documentputs content straight into the vector storesearch_documentsfinds similar content;get_contextreturns it already formatted for a querylist_documentsandget_statsfor what is in there and how it is doingprocess_scraped_filesingests what Playwright saved;save_scraped_contentstashes content for later processing- A second server in the same repository — BerryExa — adds
crawl_contentfor extraction with subpage support,extract_linksfor subpage discovery, andget_content_previewfor a quick look before committing to a full crawl - Three embedding providers with automatic fallback: sentence-transformers locally, OpenAI if you set a key, and a hash-based last resort the README itself advises against for production
- Quality filters that drop content under 100 characters, navigation-only pages, duplicates and files over 500KB
- Chunking at 500 characters with 50 characters of overlap and sentence-boundary detection
Requirements
No account required for the default path. Clone, run npm run install-deps and npm run setup, then build it with npm run build and point your client at node with dist/vector_db_server.js and the repository as the working directory. Package berry-rag, version 1.0.0. Set OPENAI_API_KEY only if you want OpenAI embeddings instead of local ones. The first run downloads the sentence-transformers model, roughly 90MB. Scraping is done by the Playwright MCP server, configured alongside this one.
Setup effort
Build from source — git clone https://github.com/berrydev-ai/berry-rag.git
USE CASES
Building a searchable copy of a library's docs
Scrape the pages, process them into the store, and query them later without re-fetching.
Answering an implementation question from your own sources
Retrieve formatted context for the question rather than pasting whole pages into the conversation.
Checking a crawl before committing to it
Preview the content and list the internal links to see what a full crawl would pull in.
Seeing what is actually in the index
List the stored documents and read the statistics before blaming retrieval for a bad answer.
10 tools
Listed in project docs. Your client may show a different list.
search_documentsget_contextlist_documentsget_statsprocess_scraped_filessave_scraped_contentcrawl_contentextract_linksget_content_previewBEFORE YOU INSTALL
What to know first
Tools you get
10 tools named in the project's documentation.
Requires
- Node.js with npm
- Python with pip
INSTALLATION
Connect your client
You clone and build this one yourself.
Server setup
git clone https://github.com/berrydev-ai/berry-rag.git
cd berry-rag
npm run install-deps
npm run setup
npm run buildMCP Clients
Claude Desktop
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
},
"berry-rag": {
"command": "node",
"args": [
"<YOUR_BERRY_RAG_CLONE>/dist/vector_db_server.js"
],
"cwd": "<YOUR_BERRY_RAG_CLONE>"
}
}
}