Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Self-hosted documentation server: each project's indexed docs as its own MCP endpoint.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
Authorization标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
这个地址需要在请求的 header 中放入密钥,而添加连接器的菜单无法设置。请改用 Claude Code、Cursor 或 VS Code。
在终端中运行这条命令
claude mcp add --transport http contextator 'https://{host}/mcp/{project}' --header 'Authorization: Bearer {token}'运行前请先填写空着的值。
地址中有只有你知道的 {…} 部分(例如你的账户),请复制后自行填写。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"contextator": {
"url": "https://{host}/mcp/{project}",
"headers": {
"Authorization": "Bearer {token}"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
地址中有只有你知道的 {…} 部分(例如你的账户),请复制后自行填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"contextator": {
"type": "http",
"url": "https://{host}/mcp/{project}",
"headers": {
"Authorization": "Bearer {token}"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个地址需要在请求的 header 中放入密钥,而添加连接器的菜单无法设置。请改用 Claude Code、Cursor 或 VS Code。
你的选择通过 Cookie 保存在这台设备上,无需账户。
Authorization 机密 HTTP header这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
这个地址需要填入你自己的值,所以我们无法替你读取工具列表。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过 GitHub 账户 Contextator 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
这个地址需要填入你自己的账户信息,所以我们无法替你检查
这个地址需要填入你自己的账户信息,所以我们无法替你检查
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:Authorization
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(1.0.0)于前天进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, SSTracker free youth training
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Free youth sports drills, practice plans and age-group answers for parents and coaches.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Self-hosted MCP server that turns your documentation into one semantically searchable endpoint per project.
Give a project its document sources — mounted folders, git repositories, uploaded archives, a Notion workspace, a Confluence Cloud site or Data Center instance, a published documentation site — and it becomes its own Model Context Protocol endpoint that AI agents (Cursor, Claude Code, Claude Desktop, …) can search:
http://localhost:3444/mcp/<project-name>
It ships as one Docker container, published as contextator/contextator, that holds both the database and the app, and is free software under the AGPL-3.0-or-later with a commercial license available (License).
/mcp/billing never sees /mcp/mobile..zip/.tar.gz/.rar, a Notion workspace, a Confluence Cloud site or Data Center instance, or a published documentation site read from its sitemap.xml, combined into one searchable endpoint. See Document sources.Xenova/multilingual-e5-small, a retrieval model covering 100 languages incl. Turkish). Switch to OpenAI embeddings with two env vars.http://localhost:3444/ to manage projects and their sources — add a repository, drop a folder or an archive on the page, test a connection, trigger re-indexing and watch progress.root and admin manage everything and everyone; a member sees only the projects it is assigned to, as a read-only viewer or an editor that adds sources, uploads files and re-indexes. Any account can mint its own named, scoped, revocable API token for a script or CI job; ADMIN_TOKEN still works too. See Accounts and permissions..html, .docx, .csv, .pdf, .pptx, .xlsx, .ipynb, .rst and .adoc/.asciidoc are converted to Markdown as they are indexed, so an agent reads a Word file or a PDF the way it reads a page of documentation. See File types.Everything runs in a single container named contextator: PostgreSQL 16 + pgvector and the Node.js app, started and stopped together by a small entrypoint script. Data lives in Docker volumes and survives container removal (see Data and persistence). The published image is contextator/contextator; docker compose up -d pulls it, so the two files below — not the whole repository — are all a fresh install needs.
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 port is published on `127.0.0.1` only. The dashboard and every MCP endpoint answer on this machine and nowhere else, so a container started on a laptop or an office server does not appear on the network it is plugged into. To publish it on the network deliberately, set CONTEXTATOR_BIND=0.0.0.0 in .env and put a TLS-terminating reverse proxy or a VPN in front of it — see Running behind a reverse proxy.
SETUP_CODE you chose, and create the root account. The code exists so that nobody who reaches the server before you can claim it; it stops working the moment that account is created.Left SETUP_CODE empty? The server generates one and prints it at every start until an account exists — it is in the log you are already tailing:
┌─ Contextator first-run setup ───────────────────────────────────────────┐
│ No user accounts exist yet; the dashboard is waiting for its first one. │ │ │ │ Open http://localhost:3444/setup │ │ Code K7QM-92QX-VBHT │ │ │ │ A new code is printed on every start until that first account exists. │ └─────────────────────────────────────────────────────────────────────────┘
2. Sign in at **http://localhost:3444/**.
n): name it demo, and for the 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. Leaving the directory empty creates an empty project; add its sources afterwards with Add source.indexing → idle in the list; the Document sources panel shows every source with its document count, last sync and any error.npm install && npm run smoke -- http://localhost:3444/mcp/demo "how do I re-index"
The first start initialises the database and downloads the embedding model (~470 MB for the default fp32 model, ~235 MB with EMBEDDING_DTYPE=fp16, ~120 MB with EMBEDDING_DTYPE=q8, ~90 MB for all-MiniLM-L6-v2) into the contextator-models volume; later starts take a few seconds.
Without Compose:
docker run -d --name contextator -p 127.0.0.1:3444:3444 \
-e SETUP_CODE=whatever-you-like \ -v contextator-pgdata:/var/lib/postgresql/data \ -v contextator-models:/app/.cache/models \ -v contextator-data:/data \ -v /path/to/your/docs:/docs:ro \ contextator/contextator
Building the image from source instead of pulling it: Build the image yourself.
Tags. latest is the newest stable release; 1 (from 1.0.0 on) tracks the newest release of the 1.x major line; 1.0 tracks the latest patch inside the 1.0.x line; 1.0.0 is one exact, immutable release. Pin a versioned tag for anything you upgrade deliberately by setting CONTEXTATOR_TAG in .env (e.g. CONTEXTATOR_TAG=1.0.0) and running docker compose up -d — this reads at every start, not only the first. Every one of those tags from 0.2.0 on has a -slim twin — latest-slim, 1-slim, 1.0-slim, 1.0.0-slim — which is described in Bringing your own PostgreSQL.
Point Claude Code, Cursor, Claude Desktop or any other MCP client at http://localhost:3444/mcp/ — the dashboard's Connect panel prints the exact snippet, token header included when the project requires one. For a project that requires a token:
claude mcp add --transport http demo-docs http://localhost:3444/mcp/demo --header "Authorization: Bearer ctxm_9f3a…"
Four read-only tools are exposed: search_docs (hybrid search, ranked excerpts), list_topics (the indexed document list), read_document (one file's Markdown, by path or heading range) and whats_new (what was added, changed or removed since a point in time). A fifth, report_gap, lets an agent tell the maintainers what the documentation did not answer; it writes to its own table (reported_gaps), never to documentation, and is absent while the query log is off. Beside the tools, each project publishes its documents as MCP resources and two read-only prompts, answer_from_docs (argument question) and explore_topic (argument topic).
One URL, Streamable HTTP first. Streamable HTTP is the way to connect. The legacy HTTP+SSE transport is deprecated: it still answers on the same URL and keeps working, no removal date is set, and its responses carry a Deprecation: true header. The same URL also speaks the stateless MCP 2026-07-28 protocol beside 2025-11-25.
A project is a set of sources — a local directory, a git repository, an upload, a Notion workspace, a Confluence site or a documentation site — each added in the dashboard under its own name, so a file install.md in a source named handbook is searched and read as handbook/install.md. An agent can narrow a search to one release with search_docs(query: "rotate the signing key", version: "v3").
Everything else — the protocol eras, the source types, access modes and file types — is in Connecting AI clients, Document sources, MCP access and File types.
Stack: TypeScript · Node.js 24+ · Fastify 5 · PostgreSQL 16 + pgvector · Drizzle ORM · @modelcontextprotocol/server (MCP TypeScript SDK 2.x) · @huggingface/transformers · unpdf / mammoth / turndown.
Each run syncs every source, hashes files to skip what has not changed, converts and chunks what has (frontmatter-aware, split at headings, a breadcrumb kept per chunk), then embeds each chunk and writes it beside a keyword index — search is hybrid, meaning and exact wording fused by rank, which is why an environment variable name finds its page as readily as a question does. A force re-index rebuilds everything beside the live index rather than replacing it first, so the project keeps answering while it runs. CHUNK_MAX_TOKENS defaults to a measured 96, not the model's much larger window — filling the window measures worse.
Full run mechanics, the chunk-budget measurement, hybrid search and rank fusion, and the cross-lingual search limit (measured, not fixed, with what to do instead): Indexing and Embedding Models.
Everything is an environment variable; see .env.example for the full annotated list. The variables that most installs touch:
| Variable | Default | Notes |
|---|---|---|
PORT / HOST | 3444 / 0.0.0.0 | |
DATABASE_URL | – | Empty uses the embedded PostgreSQL; set it to bring your own — see Bringing your own PostgreSQL |
ALLOWED_DOC_ROOTS | /docs | Comma-separated. Project directories must live inside one of these |
SECRET_KEY | – |
只显示了开头部分;其余内容请在仓库中阅读