-
Notifications
You must be signed in to change notification settings - Fork 0
Quick Start
From nothing to an agent answering questions about your documentation. Budget ten minutes, most of which is the one-time embedding-model download.
You need: Docker with Compose, and a folder of Markdown files. That is all — the database ships inside the container.
No repository clone needed — this pulls the published image, contextator/contextator:
mkdir contextator && cd contextator
curl -fsSLO https://raw.githubusercontent.com/Contextator/Contextator/main/docker-compose.yml
curl -fsSLO https://raw.githubusercontent.com/Contextator/Contextator/main/.env.example
cp .env.example .env
docker compose up -d
docker compose logs -f # wait for "embedding model ready"The first start does two slow things once: it initialises the database, and it downloads the embedding model (~470 MB by default; see Embedding Models for the smaller option). Both are stored in Docker volumes, so every later start takes seconds.
By default the folder ./docs is mounted read-only into the container at /docs; it is created empty
if it does not exist yet. Point it at your own documentation instead by setting it in .env before
starting:
DOCS_HOST_PATH=/path/to/your/docsThe dashboard needs an account, and a new instance has none, so it starts by asking for a one-time setup code. While no account exists the server prints it at every start — it is in the log you are already following:
┌─ Contextator first-run setup ───────────────────────────────────────────┐
│ No user accounts exist yet; the dashboard is waiting for its first one. │
│ │
│ Open http://localhost:3444/setup │
│ Code KRTW-9MHD-2PQF │
│ │
│ A new code is printed on every start until that first account exists. │
└─────────────────────────────────────────────────────────────────────────┘
Open http://localhost:3444/ — it sends you to /setup — and fill in the code, a username and a
password of at least 12 characters. Case and dashes in the code do not matter. Create the root
account signs you in, and the code stops working for good.
Prefer to choose the code yourself? Put
SETUP_CODE=something-you-rememberin.envbefore the first start. Lost it? Restart the server; a new one is printed. Everything else about accounts is on Accounts and Permissions.
Press New project (or just type n).
| Field | What to enter |
|---|---|
| Project name |
demo — lowercase letters, digits, - and _. This becomes your URL: /mcp/demo
|
| Documentation directory | Point at one of your own subfolders under /docs — the host folder from DOCS_HOST_PATH is mounted there, so docs/handbook on the host is /docs/handbook here |
| Index now | Leave it checked |
Press Create project. The project appears in the list and its status moves through
queued → syncing → embedding → idle. A few hundred Markdown files take a minute or two on the first
run; later runs only touch what changed.
Leaving the directory empty is fine too — you can add git repositories, uploads or Notion afterwards with Add source. See Document Sources.
Select the project and find the Connect an agent panel. It prints a ready-to-paste snippet for each client. For Claude Code:
claude mcp add --transport http demo-docs http://localhost:3444/mcp/demoFor Cursor, put this in ~/.cursor/mcp.json (global) or .cursor/mcp.json (per repository):
{ "mcpServers": { "demo-docs": { "url": "http://localhost:3444/mcp/demo" } } }Claude Desktop needs a stdio bridge; the snippet is on the Connecting AI Clients page along with everything else.
Ask your agent something your documentation answers:
How do I re-index a project?
The agent calls search_docs, gets back the most relevant excerpts with their file paths and heading
breadcrumbs, and answers from them. If it needs the whole file it calls read_document. If it wants to
know what exists at all, it calls list_topics. You do not have to tell it which tool to use — the
server describes itself.
You can verify the endpoint without an agent at all. From a source checkout:
npm install && npm run smoke -- http://localhost:3444/mcp/demo "how do I re-index"- Add more documentation. A project can hold several sources at once — see Document Sources.
- Keep it in sync automatically. A push webhook re-indexes the moment someone merges: Push Webhooks.
-
Give the rest of the team accounts. Users in the top-right menu creates them; a
memberaccount reaches only the projects you add it to under Members on the project page — see Accounts and Permissions. - Close the endpoint if it should not be public. A project's MCP endpoint is open to anyone who can reach its URL until you switch MCP access to token required on the project page — see Projects.
-
Tune retrieval. With the local model,
CHUNK_MAX_TOKENS=250usually retrieves slightly better than the default; see Indexing.
Contextator · AGPL-3.0-or-later · Self-hosted MCP documentation server
Getting started
Your documentation
Using it
Operations