name: docs-mcp version: "1.0.0" description: Self-hosted library documentation index — version-pinned docs scraped from sites, GitHub, npm and PyPI dockerImage: "ghcr.io/arabold/docs-mcp-server:latest" transport: SSE containerPort: 6280 repositoryUrl: https://github.com/arabold/docs-mcp-server command: - --protocol - http - --host - 0.0.0.0 - --port - "6280" # The scraped index is a SQLite file (better-sqlite3 + sqlite-vec) under /data. # There is no external-database mode, so the volume below is what makes the # index outlive instance recreation. Its claim is named after the server # (mcpctl--data), not the instance, so a server edit re-attaches to the # same data instead of starting empty. # # `list_libraries` takes no arguments and reads the SQLite store, so a pass # proves the volume is actually mounted and readable — not just that the process # is up. It answers "No libraries indexed yet." on a fresh instance rather than # erroring, which is why it works as a probe where `search_docs` (needs a # library that only exists after a scrape) does not. healthCheck: tool: list_libraries arguments: {} volumes: - name: data mountPath: /data sizeGb: 20 env: - name: DOCS_MCP_EMBEDDING_MODEL description: >- Embedding model as provider:name. Unset = keyword search only. For local embeddings use openai:nomic-embed-text with OPENAI_API_BASE on Ollama. required: false - name: OPENAI_API_BASE description: OpenAI-compatible embeddings endpoint, e.g. http://ollama:11434/v1 required: false - name: OPENAI_API_KEY description: Embeddings API key. Literal "ollama" when pointing at a local Ollama. required: false