fix: upgrade libgnutls30 and libssh2-1 to fix Trivy CVEs#33
Conversation
…ools BRIC-19: Add /bricks/mcp endpoint with 3 MCP tools: - list_bricks_documents: list project documents via Bricks API - read_bricks_document: download & extract text via presigned S3 URL + Kreuzberg - publish_section_version: publish structured section with dry-run mode (default on)
…esolve pre-signed URL internally - Remove file_url parameter from MCP tool, use document_id + project_unique_id (required) - BricksApiAdapter resolves pre-signed URL via list_project_documents internally - URLs are always fresh (no expiry issues), LLM just passes stable IDs - Extract filename from URL path when Content-Disposition is missing - Update all tests (432 passing)
Kaiohz
left a comment
There was a problem hiding this comment.
🔍 Code Review — PR #33
Score : 8/10 🟢
✅ Points positifs
-
Architecture hexagonale respectée — Le port
BricksApiPort(abstraction domaine) + adapterBricksApiAdapter(infrastructure) suit parfaitement le pattern existant. Propre et cohérent. -
Tests exhaustifs — 431 lignes de tests pour l'adapter, 224 pour le port/model, 97 pour le use case list, 206 pour publish, 237 pour read, 322 pour les MCP tools. Couverture des cas normaux ET des erreurs (401, 403, 404, timeout, connection error). Bravo.
-
Dry-run par défaut —
BRICKS_PUBLISH_DRY_RUN=trueen dev, c'est un excellent choix. On ne publie jamais accidentellement chez Bricks. -
Gestion des erreurs distinguée — Chaque code HTTP a son exception Python sémantique (
PermissionError,FileNotFoundError,ConnectionError,TimeoutError). C'est beaucoup plus exploitable que desRuntimeErrorgénériques. -
Cleanup des fichiers temporaires — Le
finally: os.unlink(tmp_path)dansReadBricksDocumentUseCaseassure qu'on ne leak pas de fichiers même en cas d'erreur. Bon reflex. -
Documentation à jour — README mis à jour avec le 4e MCP server, les nouveaux tools, la config Bricks. C'est souvent oublié.
-
Dockerfile CVE fix — Le
apt-get upgrade -y libgnutls30 libssh2-1est propre et ciblé. Pas de full upgrade.
⚠️ Points à améliorer
-
urllibau lieu dehttpx— Le reste du projet utilise probablement des clients modernes.urllib.requestest verbeux et synchrone (wrappé dansasyncio.to_thread). C'est fonctionnel, mais un client async natif (httpx.AsyncClient) serait plus idiomatique et performant dans un contexte FastAPI/async. Impact moyen — ça marche, mais c'est un écart de style. -
download_documentfait 2 appels API — Pour télécharger un document, on appelle d'abordlist_project_documentspour résoudre l'URL pré-signée, puis on télécharge. C'est correct car l'URL est dans la réponse de list, mais ça signifie qu'on récupère TOUS les documents du projet pour en télécharger un seul. Si un projet a 500 docs, c'est un overhead. Suggestion : Ajouter un cache court (TTL 5min) surlist_project_documents, ou passer l'URL directement dans le tool MCP. -
Pas de retry/backoff — Les appels API vers Bricks n'ont aucun retry. Si l'API retourne un 502/503 transient, c'est échec direct. Un retry simple avec backoff exponentiel améliorerait la résilience.
-
workflow_namedefault incohérent — Dans le MCP tool,workflow_namedefault ="agent-haiku-files-v1", mais dans la doc README c'est"haiku-files". Le use case default est aussi"agent-haiku-files-v1". Il faut harmoniser. -
content: dictsans validation — Le toolpublish_section_versionacceptecontent: dictsans schéma Pydantic. Un dict brut, c'est fragile. UnPublishContentmodel avec validation apporterait de la robustesse, surtout pour un MCP tool exposé publiquement. -
Typo mineure —
mcp_bricks_tools.pyligne 36:Returns:dans la docstring delist_bricks_documentsest vide (juste "Liste des documents du projet Bricks avec métadonnées" mais le champ Returns n'a pas de description du type de retour).
💡 Suggestions (nice-to-have)
- Typing des retours MCP —
list_bricks_documentsretournelist(non typé). Utiliserlist[BricksDocumentInfo]serait plus explicite et aiderait les clients MCP à comprendre le schéma. - Connection pooling — Si httpx est adopté, un client partagé avec connection pool réduirait la latence.
- Health check Bricks — Ajouter un endpoint
/healthcheck qui vérifie la connectivité Bricks (optionnel).
🏁 Verdict
8/10 — PR solide, bien structurée, bien testée. L'intégration Bricks suit les patterns existants du projet. Les points négatifs sont des améliorations possibles, pas des bloqueurs. Les 2 points les plus worth addressing avant merge :
- Harmoniser les defaults
workflow_name - Considérer un cache pour
list_project_documentsdansdownload_document
Approuvé avec suggestions mineures. 👍
Summary