You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Détection combinée : signature comportementale d'abord (LiteMCP = spec 2026-07-28 non négociée + /health « ok » ; FastMCP = réponses SSE + /sse legacy co-servi, avec arbitrage Python/TypeScript par le langage du process), puis nom annoncé par le serveur (serverInfo.name) et paquet lancé pour les serveurs stdio.
Langage déduit du framework quand il est identifié (rmcp → Rust, mcp-go → Go…), sinon en-têtes HTTP, process propriétaire du port ou commande stdio.
Matching par mot délimité : mcpo ne matche plus mcporter, et @modelcontextprotocol/server-* (serveurs npm officiels) n'est plus pris pour le SDK C#. Tests de non-régression dédiés.
Nouvelle route GET /api/frameworks (id, label, langage) : l'UI construit les badges depuis cette table, sans liste dupliquée en JavaScript. Badge générique .tag.fw pour les frameworks autres que LiteMCP/FastMCP.
Durcissements (audit 2026-10-25)
sanitize_http_path : un chemin de sonde sans / initial ou contenant un caractère de contrôle retombe sur le chemin par défaut (anti-CRLF dans la request-line) ; utilisé par http_request, sse_get_host et le probe.
http_host_header : en-tête Host correct (host:port, crochets IPv6) sur toutes les requêtes de sonde.
read_bounded_line : lecture stdio plafonnée (au plus MAX_PROBE_READ + 1 octets avant troncature) — plus d'allocation géante avant coupure.
RespHead.session_id : le Mcp-Session-Id renvoyé par l'initialize est capturé, prêt à être rejoué sur les appels suivants.
ssh_error_hint factorisé (un seul endroit pour les messages « auth refusée » / « machine injoignable »).
UI
Plus de badge « HTTP+SSE » ni « SSE » : le streamable JSON et les réponses encodées SSE (FastMCP/mcp-proxy) sont tous les deux du HTTP — le badge de transport affiche désormais simplement HTTP. Le badge de framework (FastMCP, LiteMCP) reste séparé et son tooltip ne parle plus de SSE.
Trois modes seulement : STDIO / HTTP / WS. Le badge HTTPS (port 443) est retiré : ce n'était pas un mode de transport.
Badge WS (orange) : affiché quand le serveur accepte une upgrade WebSocket (HTTP/1.1 101 Switching Protocols) sur le chemin MCP. Nouvelle sonde ws_upgrade_host (en-têtes Upgrade: websocket, Sec-WebSocket-Key), timeout court, détection seule — aucun frame WS n'est échangé.
Détail serveur : la ligne framework de FastMCP n'affiche plus « + SSE legacy ».
Technique
Server.ws / McpProbe.ws propagés (probe HTTP loopback, probe par hôte, cache de démarrage, /api/state, /api/detail).
Test de non-régression ws_upgrade_detecte_101_et_rejette_le_reste : 101 → WS, 200 → HTTP, port fermé → pas de panic.