baserow-schema-mcp : piege HTTP/2 sur le reverse-proxy DSM

Le flux SSE reste bloque quand le client negocie HTTP/2 via ALPN sur la
nouvelle regle DSM baserow-schema.bolbol.tn -- fonctionne en HTTP/1.1 force.
Cause probable cote DSM (config divergente de baserow.bolbol.tn qui marche).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Nabil Derouiche
2026-08-17 17:41:27 +01:00
co-authored by Claude Sonnet 5
parent 2d8ed89502
commit f3d8fae20b
2 changed files with 6 additions and 0 deletions
+4
View File
@@ -427,3 +427,7 @@ Regle distincte de l'anti-invention benchmarks du 27/07/2026 (qui couvre la veil
## FIX -- baserow-schema-mcp : 4 outils manquants (create/delete table/field) ajoutes en service compagnon, pas en extension du MCP natif (2026-08-17) ## FIX -- baserow-schema-mcp : 4 outils manquants (create/delete table/field) ajoutes en service compagnon, pas en extension du MCP natif (2026-08-17)
Le MCP natif de Baserow (image officielle, non patchable) ne couvre que les lignes (create_rows/delete_rows/list_tables/...), pas le schema (tables/champs). Nouveau service independant `baserow-schema-mcp` (port 3101, meme famille que le sidecar OAuth `baserow-oauth-stub`) proxyant 4 outils vers l'API REST native de Baserow. Trois pieges a retenir pour tout futur service MCP maison : (1) ces 4 routes de schema exigent un JWT utilisateur, le Database API Token ne fonctionne pas dessus (confirme via /api/redoc/) -- re-login proactif + retry sur 401 pour eviter de reproduire l'incident "rotation Baserow" deja vu sur dashboard-terrain et gsparc-mezzouna-api ; (2) l'API bas niveau `mcp.server.sse.SseServerTransport` a change entre la version figee par context-hub et `mcp==1.29.0` (methodes disparues) -- preferer l'API haut niveau `FastMCP` (`@mcp.tool()` + `mcp.sse_app()`), plus stable dans le temps ; (3) `mcp>=1.29` protege par defaut contre le DNS rebinding avec `allowed_hosts=[]`, ce qui rejette TOUT Host header tant qu'on ne le configure pas explicitement. Reste a faire (manuel, hors perimetre agent) : reverse-proxy DSM `baserow-schema.bolbol.tn` -> 3101, puis ajout du connecteur cote Claude.ai. Detail complet : common/baserow-schema-mcp.md. Le MCP natif de Baserow (image officielle, non patchable) ne couvre que les lignes (create_rows/delete_rows/list_tables/...), pas le schema (tables/champs). Nouveau service independant `baserow-schema-mcp` (port 3101, meme famille que le sidecar OAuth `baserow-oauth-stub`) proxyant 4 outils vers l'API REST native de Baserow. Trois pieges a retenir pour tout futur service MCP maison : (1) ces 4 routes de schema exigent un JWT utilisateur, le Database API Token ne fonctionne pas dessus (confirme via /api/redoc/) -- re-login proactif + retry sur 401 pour eviter de reproduire l'incident "rotation Baserow" deja vu sur dashboard-terrain et gsparc-mezzouna-api ; (2) l'API bas niveau `mcp.server.sse.SseServerTransport` a change entre la version figee par context-hub et `mcp==1.29.0` (methodes disparues) -- preferer l'API haut niveau `FastMCP` (`@mcp.tool()` + `mcp.sse_app()`), plus stable dans le temps ; (3) `mcp>=1.29` protege par defaut contre le DNS rebinding avec `allowed_hosts=[]`, ce qui rejette TOUT Host header tant qu'on ne le configure pas explicitement. Reste a faire (manuel, hors perimetre agent) : reverse-proxy DSM `baserow-schema.bolbol.tn` -> 3101, puis ajout du connecteur cote Claude.ai. Detail complet : common/baserow-schema-mcp.md.
## FIX -- baserow-schema-mcp : flux SSE bloque en HTTP/2 via le reverse-proxy DSM (2026-08-17)
Une fois la regle DSM `baserow-schema.bolbol.tn` -> 3101 creee (cert Let's Encrypt auto-provisionne OK, TLS OK), le endpoint `/mcp/<token>/sse` restait silencieusement bloque quand le client negociait HTTP/2 via ALPN (comportement par defaut de curl et probablement des clients MCP standards) -- 0 octet recu avant timeout. En forcant HTTP/1.1 (`curl --http1.1`), la reponse SSE arrive immediatement et normalement (`event: endpoint` avec session_id). Cause probable : la couche DSM (TLS + reverse-proxy) ne relaie pas correctement un flux chunked/SSE en HTTP/2 sur cette regle precise, alors que `baserow.bolbol.tn` (meme pattern de sidecar nginx, connecteur Claude.ai deja en prod) fonctionne -- ecart de configuration DSM entre les deux regles, pas cote applicatif (nginx interne identique dans les deux cas). A verifier/fixer cote DSM (desactiver HTTP/2 sur cette regle, ou aligner sur la config de baserow.bolbol.tn) si le connecteur Claude.ai echoue silencieusement a l'inscription.
+2
View File
@@ -1,3 +1,5 @@
**MAJ 17/08/2026** : DSM cree, endpoint accessible en HTTPS mais flux SSE bloque en HTTP/2 (voir piege n°5 en fin de fichier PROTOCOL-INFRA.md) -- fonctionne en forcant HTTP/1.1. A verifier avant test connecteur Claude.ai.
# baserow-schema-mcp — serveur MCP compagnon pour la gestion de schema Baserow (17/08/2026) # baserow-schema-mcp — serveur MCP compagnon pour la gestion de schema Baserow (17/08/2026)
**Statut** : PRODUCTION (4 outils testes end-to-end). Reste une action manuelle : **Statut** : PRODUCTION (4 outils testes end-to-end). Reste une action manuelle :