LabscoMCP early access ↗
jsbroksMCP SERVER

RAGSync

Point one YAML file at folders and web pages, and get five stable search tools over them that never change as sources are added.

by jsbroks ↗Vector Stores & RAG RetrievalCommunity

LABSCO SUMMARY

Add a source, keep the same five tools.

That stability is the design decision worth having: an agent written against search today still works after you add three more sources, because the tool surface does not grow with them. Local embeddings by default means the first run costs nothing and sends nothing anywhere.

What it is

A configuration-driven RAG MCP server. One YAML file defines the sources, chunking strategy, embedding model and vector store; the server indexes them, watches them for changes, and exposes a small, source-agnostic tool surface on top.

What you get

  • Five tools that stay the same as sources come and go: search, list_sources, get_document, get_index_status, reindex
  • search — semantic search across one source or all of them, with optional metadata filtering, returning normalized [0, 1] scores
  • get_document — the full document once search surfaces a chunk from it
  • get_index_status and reindex — freshness and health per source, and a forced re-scan when you need one
  • Source types: folder for a local directory of text, PDF and Markdown files with gitignore-style include and exclude globs, and website for a fixed list of pages, fetched rather than crawled
  • Live reload — filesystem watching and polling keep the index current, and editing the config itself applies without a restart
  • Tools return structured {"error": "..."} objects rather than raising, so a calling agent can recover in conversation

Requirements

Run it with uvx ragsync --config /abs/path/to/config.yaml — no clone, no install step. Give --config an absolute path; paths inside the config resolve against the config file's own directory, so a repo config can use path: ./docs. Embeddings default to local fastembed, which needs no API key; openai and voyage are per-source alternatives and read their key from the environment variable named by api_key_env, never from the config. First launch downloads the local embedding model, so it is slower than later ones. Access scoping is by running separate instances with separate configs — there is no cross-instance search.

Setup effort

One command — uvx ragsync --config <YOUR_PATH>