search_documentationLABSCO SUMMARY
Incremental sync by ETag, and the docs say when not to force it.
The full reindex is expensive — every file re-downloaded and every embedding regenerated — and the documentation says outright to reserve force: true for a deliberate rebuild. Score bands are published too: above 0.8 is an excellent match, 0.6 to 0.8 likely relevant, below 0.6 probably not, which turns a raw number into a decision. The project labels itself a work in progress, so treat it accordingly.
What it is
An MCP server that indexes Markdown documentation stored on S3 and answers questions against it. Vector indices are plain files on disk via HNSWLib, and embeddings come from Ollama locally or from a cloud provider, so it can run with no hosted dependency at all.
What you get
- Semantic search across the indexed docs, returning the matching chunk, its source S3 key, its chunk index and a similarity score —
search_documentation, withmax_resultsdefaulting to 4 - The vector index synchronized with the bucket, detecting new, modified and deleted files by ETag comparison —
refresh_index, incremental by default withforcefor a full rebuild - A whole document retrieved rather than a chunk —
get_full_document - Sync stats on every refresh: new, modified and deleted file counts, total documents and elapsed seconds
- Any S3-compatible storage — AWS, MinIO, Scaleway, Cloudflare R2 — through
S3_ENDPOINTandS3_REGION
Requirements
An S3-compatible bucket with your Markdown in it: S3_BUCKET_NAME, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_REGION, and S3_ENDPOINT for non-AWS providers. An embedding provider chosen by EMBEDDING_PROVIDER: ollama (the default, local and free — pull nomic-embed-text first), openai, or google, each with its own key variable. Node.js >= 18 from source, or Docker, which the README recommends. Tunables include RAG_MAX_RESULTS (default 4), RAG_CHUNK_SIZE (default 1000), RAG_CHUNK_OVERLAP (default 200) and SYNC_MODE (startup, periodic or manual). The README marks the project a work in progress and not suitable for production.
Setup effort
Run a container — pull the image and point your client at it
USE CASES
Answering questions from your own documentation
Ask in natural language and get back the relevant passage with its source file and a score you can judge it by.
Keeping the index current after a docs update
Run an incremental sync so only new, modified and deleted files are processed, based on ETag comparison.
Reading the whole page a snippet came from
Fetch the full document once the search has told you which file holds the answer.
Running it with no cloud dependency
Point the embedding provider at a local Ollama model, so nothing leaves the machine and there is no key to manage.
3 tools
Listed in project docs. Your client may show a different list.
refresh_indexget_full_documentBEFORE YOU INSTALL
What to know first
Tools you get
3 tools named in the project's documentation.
Requires
- Docker
- Ollama on the same machine with nomic-embed-text pulled — the default embedding provider (OpenAI or Google replace it, each with its own key)
- An S3-compatible bucket: S3_BUCKET_NAME, S3_REGION, S3_ACCESS_KEY_ID and S3_SECRET_ACCESS_KEY in the .env file the container reads
Where it runs
Both documented clients run the server on your machine.
INSTALLATION
Connect your client
Server setup
Install Ollama from https://ollama.ai, then pull the embedding model:
ollama pull nomic-embed-textSave the project's env.example (https://github.com/yoanbernabeu/S3-Documentation-MCP-Server/blob/main/env.example) as .env in the folder you will run Docker from, and set S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_BUCKET_NAME and S3_REGION
From that folder, start the container:
docker run -d \
--name s3-doc-mcp \
-p 3000:3000 \
--env-file .env \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-v $(pwd)/data:/app/data \
yoanbernabeu/s3-doc-mcp:latestMCP Clients
Cursor
{
"mcpServers": {
"doc": {
"type": "streamable-http",
"url": "http://127.0.0.1:3000/mcp",
"note": "S3 Documentation RAG Server"
}
}
}The configuration on this page does not set S3_ACCESS_KEY_ID and S3_SECRET_ACCESS_KEY; the project's instructions put them in a .env file. Check which folder the server reads that file from before you rely on it.
Claude Code
claude mcp add doc --transport http http://127.0.0.1:3000/mcpThe configuration on this page does not set S3_ACCESS_KEY_ID and S3_SECRET_ACCESS_KEY; the project's instructions put them in a .env file. Check which folder the server reads that file from before you rely on it.