Skip to content

fix: upgrade libgnutls30 and libssh2-1 to fix Trivy CVEs#33

Merged
Kaiohz merged 3 commits into
mainfrom
BRIC-19/mcp-bricks-documents-publish
May 20, 2026
Merged

fix: upgrade libgnutls30 and libssh2-1 to fix Trivy CVEs#33
Kaiohz merged 3 commits into
mainfrom
BRIC-19/mcp-bricks-documents-publish

Conversation

@Kaiohz
Copy link
Copy Markdown
Collaborator

@Kaiohz Kaiohz commented May 20, 2026

Summary

Kaiohz added 3 commits May 17, 2026 08:25
…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 Kaiohz merged commit 9595946 into main May 20, 2026
1 check passed
@Kaiohz Kaiohz deleted the BRIC-19/mcp-bricks-documents-publish branch May 20, 2026 09:50
Copy link
Copy Markdown
Collaborator Author

@Kaiohz Kaiohz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔍 Code Review — PR #33

Score : 8/10 🟢


✅ Points positifs

  1. Architecture hexagonale respectée — Le port BricksApiPort (abstraction domaine) + adapter BricksApiAdapter (infrastructure) suit parfaitement le pattern existant. Propre et cohérent.

  2. 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.

  3. Dry-run par défautBRICKS_PUBLISH_DRY_RUN=true en dev, c'est un excellent choix. On ne publie jamais accidentellement chez Bricks.

  4. Gestion des erreurs distinguée — Chaque code HTTP a son exception Python sémantique (PermissionError, FileNotFoundError, ConnectionError, TimeoutError). C'est beaucoup plus exploitable que des RuntimeError génériques.

  5. Cleanup des fichiers temporaires — Le finally: os.unlink(tmp_path) dans ReadBricksDocumentUseCase assure qu'on ne leak pas de fichiers même en cas d'erreur. Bon reflex.

  6. Documentation à jour — README mis à jour avec le 4e MCP server, les nouveaux tools, la config Bricks. C'est souvent oublié.

  7. Dockerfile CVE fix — Le apt-get upgrade -y libgnutls30 libssh2-1 est propre et ciblé. Pas de full upgrade.


⚠️ Points à améliorer

  1. urllib au lieu de httpx — Le reste du projet utilise probablement des clients modernes. urllib.request est verbeux et synchrone (wrappé dans asyncio.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.

  2. download_document fait 2 appels API — Pour télécharger un document, on appelle d'abord list_project_documents pour 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) sur list_project_documents, ou passer l'URL directement dans le tool MCP.

  3. 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.

  4. workflow_name default incohérent — Dans le MCP tool, workflow_name default = "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.

  5. content: dict sans validation — Le tool publish_section_version accepte content: dict sans schéma Pydantic. Un dict brut, c'est fragile. Un PublishContent model avec validation apporterait de la robustesse, surtout pour un MCP tool exposé publiquement.

  6. Typo mineuremcp_bricks_tools.py ligne 36: Returns: dans la docstring de list_bricks_documents est 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 MCPlist_bricks_documents retourne list (non typé). Utiliser list[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 /health check 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 :

  1. Harmoniser les defaults workflow_name
  2. Considérer un cache pour list_project_documents dans download_document

Approuvé avec suggestions mineures. 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant