3.6 KiB
3.6 KiB
title, type, ingested_at, ingested_by, source_project
| title | type | ingested_at | ingested_by | source_project |
|---|---|---|---|---|
| mcp-init-resilience | concept | 2026-06-10T10:58:09.003Z | OpeItcLoc03@DESKTOP-NSEF0UK | OpeItcLoc03/workshop |
MCP init resilience — почему user-level MCP не стартуют
Зафиксировано 2026-05-23. Round 2 не начат.
Класс инцидента
Два прецедента (2026-05-21, 2026-05-23): Claude Code не поднимает часть user-level MCP-серверов
при инициализации. /reload-plugins не помогает (он reload'ит только plugin-MCPs, не user-level entries).
Пострадавшие серверы: interns, kicad, context7 — общее: все имеют multi-step launcher.
interns—pass show(blocking gpg-agent call) → exec pythonkicad— node spawn'ит python helper (двойной spawn)context7—npx -y @upstash/context7-mcp(npm fetch / cache lock при первом запуске)
4 успешных используют прямой launcher (direct npx/node/uv).
Гипотеза root cause
CC MCP supervisor запускает MCPs параллельно при init, ждёт initialize JSON-RPC в пределах
timeout (значение неизвестно). Multi-step launchers не укладываются → помечаются disconnected.
Retry в сессии не делается. Параллельная вторая CC сессия (+28с) — вероятный contributing factor.
7 открытых вопросов
- Сколько секунд ждёт CC
initializeответа? Есть лиmcp.startupTimeoutMsknob вsettings.json? - Можно ли получить MCP transport stderr-логи? (
claude --mcp-debug/CLAUDE_MCP_DEBUG=1) pass showвinterns-mcp-launcher.sh— заменить на env-file (уже делается для других секретов)?- Serial-launch wrapper между двумя CC окнами?
- MCPs как long-lived daemons + CC connect по сокету?
- Plugin MCP (context7) — почему тоже упал при
/reload-plugins? - Enhancement request Anthropic:
/reload-mcpдля user-level серверов
Fix-направления (не выбраны)
| Направление | Эффект | Цена |
|---|---|---|
Убрать pass show из interns launcher → env-file |
устраняет gpg-blocking | API key plain at rest |
| Serial-launch wrapper CC сессий | снимает race | UX friction (ждать 30s) |
Найти mcp.startupTimeoutMs knob |
увеличить порог | если knob'а нет — null |
| MCPs как long-lived daemons + sockets | устраняет per-session re-init | зависит от CC поддержки |
Push к Anthropic: /reload-mcp |
runtime recovery | долго, off our hands |
Preemptive guards
- Не редактировать
interns-mcp-launcher.shимпульсивно — сначала воспроизвести без параллельной .admin сессии - Не выпиливать
passбез обсуждения security trade-off - Не предлагать
--mcp-debugрестарт в активной сессии
Round 2: первые два шага
- Проверить
mcp.startupTimeoutMsв~/.claude/settings.jsonschema - Воспроизвести в чистой сессии (только одна CC, без параллельной .admin) — если стартуют → виновен race; если нет → виноват launcher