About
Updated:
Contextator turns documentation into a searchable endpoint that AI agents can talk to. Point a project at a folder, a git repository, an upload or a Notion workspace, and it becomes its own Model Context Protocol server that Claude Code, Cursor, Claude Desktop and any other MCP client can search semantically.
What it does
- One URL per project, fully isolated. Every project keeps its own documents and vector
embeddings; a client connected to
/mcp/billingnever sees/mcp/mobile. - Many sources per project. A mounted directory, a git repository (or one subdirectory of it), uploaded files and archives, an Obsidian vault or a Notion workspace — combined into one searchable endpoint, each source mounted under its own name.
- Semantic search, not grep. Documents are chunked with their heading breadcrumbs intact and embedded into PostgreSQL with pgvector, so an agent finds the passage that answers the question rather than the page that repeats the keyword.
- Incremental indexing. Files are hashed; only what changed is re-embedded, and deleted files disappear from the index. A push webhook can trigger a run on every commit.
- Three tools for the agent.
search_docsfor ranked excerpts,list_topicsfor the document tree,read_documentfor the full Markdown of one indexed file.
How it works
An index run syncs each source first — fetching a git branch, pulling Notion pages, reading a mounted folder — then walks the result, chunks every Markdown, MDX or text file along its headings, embeds the chunks and stores them next to their document. When an agent asks a question, the question is embedded the same way and answered with a cosine search over that project’s chunks alone.
Embeddings are generated locally on the CPU by default, with a multilingual model that covers 50+ languages. Nothing about your documents is sent anywhere unless you deliberately switch the embedding provider to a hosted API.
Principles
- Self-hosted first. One Docker container holds the database and the app. Your documents stay on your infrastructure.
- Local by default. The default setup makes no outbound call once the embedding model has been downloaded.
- Boring on purpose. The dashboard is vanilla HTML, CSS and ES modules with no build step; the server is TypeScript on Node.js.
- Accounts and roles. The dashboard signs people in with their own account.
rootandadminmanage everything; amembersees only the projects it is added to, reading them or editing them. - A door on each endpoint. A project’s MCP endpoint is open by default; require a bearer token on it per project when you want it closed. Tokens are scoped to one project, shown once and revocable.
- Honest about limits. A token is a credential for the endpoint, not an account: whoever holds it reads everything indexed in that project, and a project left open is readable by anyone who can reach its URL.
Built with
TypeScript · Node.js 20+ · Fastify 5 · PostgreSQL 16 with pgvector · Drizzle ORM ·
@modelcontextprotocol/sdk · transformers.js.
Who builds it
Contextator is designed and developed by Muhammet Şafak and published as a Tunedness production. The software is free and open source under the GNU Affero General Public License v3: anyone may use it, study it, change it and run it, and any modified version that people reach over a network has to offer its source in turn — Contextator cannot be closed. A separate commercial licence is available for cases where those terms do not fit.