Streamable HTTP вход движка (src/remote_main.py) в контейнере: тот же
create_mcp_server(), те же тулы, тот же DI. Внешние MCP-клиенты (Claude Code,
VS Code, Zed remote) подключаются по HTTP с Bearer-auth.
python:3.12-slim+ runtime-зависимости изrequirements.txt(manylinux/abi3 колёса — компилятор не нужен).- BM25/FTS5 + SymbolIndex — ON всегда (основной носитель recall, план §10).
- Embedder — ONNX in-process CPU fallback (e5-small). Модели ожидаются в
/data/models(томmcp-data), при отсутствии — graceful-деградация. - llama.cpp embedder (8080) / reranker (8081) — опциональные ВНЕШНИЕ сервисы
(подключаются через env
LLAMA_CPP_HOST/PORT). Reranker off по умолчанию (§10). - Модели и артефакты — во внешнем томе
/data(MSCODEBASE_DATA_DIR=/data), не в образе.
Вариант C (полный мульти-контейнер с
llama-server-embedder/reranker) — follow-up: добавляется как второй/третий сервис в compose, образapiне меняется.
cd deploy/docker
cp .env.example .env # задать MSCODEBASE_REMOTE_TOKEN (ОБЯЗАТЕЛЬНО)
docker compose up -d --build
docker compose ps # HEALTHCHECK: healthy
curl -s http://127.0.0.1:8089/healthz # {"status":"ok","service":"mscodebase-remote"}Контекст сборки — корень репо (там .dockerignore, исключающий experiments/
и прочее, не нужное в образе).
- Claude Code / Desktop —
.mcp.json:"type": "http","url": "http://<host>:8089/mcp","headers": {"Authorization": "Bearer <token>"}. - VS Code —
.vscode/mcp.json:"type": "http"+"headers"(Bearer), fallback HTTP→SSE по клиентской конвенции. - Zed —
settings.json:context_serversс"url"+"Authorization"header.
MSCODEBASE_REMOTE_TOKENобязателен для сети; пустой = access-gate выключен (не выставлять в интернет без токена).- Rate-limit на гейте: per-token (sha256) + per-IP,
MSCODEBASE_REMOTE_RATE_LIMIT_RPS(default 30.0/сек на ключ). Circuit breaker на/mcp(5xx→503)./healthzосвобождён (uptime-мониторинг). - Контейнер — не-рут (
appuid 10001), том/dataпринадлежитapp. - Флуд в
/healthz— вне лимита (тривиальный эндпоинт; у провайдера мониторинга отдельный бюджет).
docker compose -f deploy/docker/docker-compose.yml down
docker compose -f deploy/docker/docker-compose.yml up -d --buildRolling-restart для multi-instance — задокументировать позже (ТЗ §9б-7; сейчас
единый инстанс, том mcp-data переживает пересоздание контейнера).
python -m pytest tests/test_remote_main.py -q— гейт auth/rate-limit/breaker.- Локально образ не собирался (Docker вне песочницы) — полный build + smoke E-07 (equiv stdio↔HTTP) выполняются на CI-джобе / машине владельца.