From 99747d96e089b36c24652a4d9e4a4ef8668c32a7 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Sat, 18 Jul 2026 22:58:41 +0200 Subject: [PATCH] fix(mcp): timeout connexion 90s (premier npx) + message d'erreur explicite Co-Authored-By: Claude Opus 4.8 --- backend/app/mcp_client.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/backend/app/mcp_client.py b/backend/app/mcp_client.py index 8141986..c05beb4 100644 --- a/backend/app/mcp_client.py +++ b/backend/app/mcp_client.py @@ -96,7 +96,10 @@ def set_mcp_state(sid: str, *, enabled: bool, params: dict) -> dict: _CALL_TIMEOUT = 30.0 -_CONNECT_TIMEOUT = 20.0 +# Généreux : le premier lancement d'un serveur npx (Playwright, Context7…) +# télécharge le paquet — souvent bien plus de 20 s. Les démarrages suivants +# sont instantanés (cache npm). +_CONNECT_TIMEOUT = 90.0 _MAX_RESULT_CHARS = 8000 @@ -185,7 +188,14 @@ class McpManager: conn = _ServerConn(sid) await conn.start() except Exception as exc: - msg = str(exc)[:300] or exc.__class__.__name__ + if isinstance(exc, (asyncio.TimeoutError, TimeoutError)): + msg = ( + "délai de démarrage dépassé — premier lancement d'un " + "serveur npx (téléchargement) ou paquet absent de l'image. " + "Réessaie au prochain message." + ) + else: + msg = str(exc)[:300] or exc.__class__.__name__ logger.warning("Serveur MCP %s indisponible : %s", sid, msg) self._errors[sid] = msg self._notices.append(