Replace the abandoned llms-txt-mcp/Chroma docs backend with an in-repo MCP service: SQLite WAL + FTS5 + sentence-transformer embeddings, transactional source replacement, persisted state across restarts, singleflight refresh with conditional requests, hybrid lexical/semantic ranking with exact-duplicate collapse, source/host filters, and explicit-by-default content retrieval. Add docs_rebuild and a docs-rebuild CLI command. Add deterministic llms-full.txt snapshot generation for machine-local menus with hash-validated provenance manifests; lifecycle commands promote a local menu to its snapshot only when the manifest validates. Switch public source profiles to content-bearing llms-full.txt feeds. Improve web search: bounded provider fallback with per-attempt diagnostics and cancellation, an optional Brave Search API provider, strict SearXNG engine selection, capped link/media extraction, and a real engine=browser renderer that routes every request through the existing SSRF vetting while blocking WebSockets, non-GET traffic, and private destinations. Extend release checks with offline unit suites and isolated candidate container tests for both images.
61 lines
2.9 KiB
Docker
61 lines
2.9 KiB
Docker
FROM node:22-bookworm-slim@sha256:813a7480f28fdadac1f7f5c824bcdad435b5bc1322a5968bbbdef8d058f9dff4
|
|
|
|
ARG MCP_WEB_SEARCH_VERSION=1.3.0
|
|
ARG MCP_WEB_SEARCH_MAX_BYTES=52428800
|
|
ARG MCP_PROXY_VERSION=0.12.0
|
|
|
|
# Chromium intentionally tracks Debian security updates inside the pinned base
|
|
# image family; Bing's browser path is more likely to break with stale Chromium
|
|
# than with patched OS packages.
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
chromium \
|
|
fonts-liberation \
|
|
python3-venv \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN python3 -m venv /opt/mcp-proxy \
|
|
&& /opt/mcp-proxy/bin/pip install --no-cache-dir "mcp-proxy==${MCP_PROXY_VERSION}" \
|
|
&& /opt/mcp-proxy/bin/mcp-proxy --version
|
|
|
|
COPY patch-mcp-web-search.mjs /tmp/patch-mcp-web-search.mjs
|
|
COPY overrides/bing.js /tmp/context-kit-bing-provider.js
|
|
COPY overrides/brave.js overrides/duckduckgo.js overrides/searxng.js overrides/registry.js overrides/diagnostics.mjs /tmp/context-kit-providers/
|
|
COPY overrides/browser-fetch.js overrides/bounds.mjs /tmp/context-kit-fetch/
|
|
COPY --chmod=0444 mcp-probe.mjs http-entrypoint.mjs /usr/local/lib/context-kit/
|
|
|
|
RUN npm install -g "@zhafron/mcp-web-search@${MCP_WEB_SEARCH_VERSION}" \
|
|
&& cp /tmp/context-kit-bing-provider.js /usr/local/lib/node_modules/@zhafron/mcp-web-search/dist/src/providers/bing.js \
|
|
&& cp /tmp/context-kit-providers/brave.js /usr/local/lib/node_modules/@zhafron/mcp-web-search/dist/src/providers/brave.js \
|
|
&& cp /tmp/context-kit-providers/duckduckgo.js /usr/local/lib/node_modules/@zhafron/mcp-web-search/dist/src/providers/duckduckgo.js \
|
|
&& cp /tmp/context-kit-providers/searxng.js /usr/local/lib/node_modules/@zhafron/mcp-web-search/dist/src/providers/searxng.js \
|
|
&& cp /tmp/context-kit-providers/registry.js /usr/local/lib/node_modules/@zhafron/mcp-web-search/dist/src/providers/registry.js \
|
|
&& cp /tmp/context-kit-providers/diagnostics.mjs /usr/local/lib/node_modules/@zhafron/mcp-web-search/dist/src/providers/diagnostics.js \
|
|
&& cp /tmp/context-kit-fetch/browser-fetch.js /usr/local/lib/node_modules/@zhafron/mcp-web-search/dist/src/fetch/browser.js \
|
|
&& cp /tmp/context-kit-fetch/bounds.mjs /usr/local/lib/node_modules/@zhafron/mcp-web-search/dist/src/fetch/bounds.js \
|
|
&& node /tmp/patch-mcp-web-search.mjs \
|
|
&& rm -rf /tmp/patch-mcp-web-search.mjs /tmp/context-kit-bing-provider.js /tmp/context-kit-providers /tmp/context-kit-fetch \
|
|
&& npm cache clean --force
|
|
|
|
RUN chmod -R a+rX /usr/local/lib/context-kit \
|
|
/usr/local/lib/node_modules/@zhafron/mcp-web-search
|
|
|
|
ENV CHROME_PATH=/usr/bin/chromium \
|
|
DEFAULT_SEARCH_PROVIDER=searxng \
|
|
HOME=/tmp \
|
|
HTTP_TIMEOUT=15000 \
|
|
MAX_BYTES=${MCP_WEB_SEARCH_MAX_BYTES} \
|
|
MAX_RESULTS=10 \
|
|
MAX_PROVIDER_ATTEMPTS=4 \
|
|
SEARCH_PROVIDER_TIMEOUT_MS=15000 \
|
|
PATH=/opt/mcp-proxy/bin:$PATH \
|
|
SEARXNG_URL=http://searxng:8080 \
|
|
XDG_CACHE_HOME=/tmp/.cache
|
|
|
|
USER node
|
|
|
|
EXPOSE 8000
|
|
|
|
ENTRYPOINT ["node", "/usr/local/lib/context-kit/http-entrypoint.mjs"]
|