feat: enhance folder listing functionality with prefix support#14
feat: enhance folder listing functionality with prefix support#14
Conversation
Kaiohz
left a comment
There was a problem hiding this comment.
🟡 Review: Enhance folder listing with prefix support — Score 6/10
✅ Points positifs
- Feature cohérente : ajout du
prefixsurlist_folderspermet de naviguer dans l'arborescence MinIO, ce qui manquait - Propagation propre : port → use case → route → MCP — le paramètre traverse bien toutes les couches hexagonales
- 6 tests ajoutés : route, use case, adapter — bonne couverture du nouveau paramètre
- Retro-compatibilité :
prefix: str = ""par défaut, ne casse pas l'existant
🔴 Points critiques
-
read_file: erreurs silencieuses — Les exceptionsFileNotFoundErroretExceptionsont maintenant attrapées et retournées commeFileContentResponsevalide (status 200). C'est un anti-pattern dangereux :- Le client MCP pense que le fichier a été lu avec succès
- Pas de distinction entre un contenu réel et un message d'erreur
metadata.errorexiste mais n'est pas standardisé dans le contrat MCP- Un agent LLM qui appelle
read_fileva traiter le contenu d'erreur comme du texte réel
Correction : Lever une
ToolErrorMCP ou retourner un status d'erreur explicite dans le protocole MCP. -
Pas de validation
prefix— Le paramètreprefixn'est pas validé (path traversal possible avec../).list_filesa cette validation,list_foldersnon. Inconsistance.
⚠️ Points d'attention
- Pas de test pour le cas
read_fileerreur — Le changement de comportement deread_file(exception → response) n'a aucun test unitaire - Pas de référence Jira dans le titre de la PR
- Pas de description dans la PR
💡 Suggestions
- Revert le changement sur
read_fileou utiliserMCP ToolErrorau lieu de retourner un faux contenu - Ajouter
validate_prefixsurlist_folders(commelist_filesle fait pourfile_path) - Ajouter des tests pour le comportement d'erreur de
read_file - Ajouter description + référence Jira
Review by SoluBot 🤖
Kaiohz
left a comment
There was a problem hiding this comment.
🟢 Re-Review: Enhance folder listing with prefix support — Score 9/10
✅ Corrections apportées depuis la dernière review
-
read_fileerreurs :ToolErrorau lieu de faux contenu 200 ✅ — Les erreurs sont maintenant correctement propagées viaToolError(FastMCP), pas de fauxFileContentResponse. Un agent LLM verra une erreur, pas du texte factice. -
Validation
prefixajoutée ✅ —_validate_prefix()avec :posixpath.normpath+ backslash normalization- Path traversal rejeté (
../../etc→ 422/ToolError) - Absolute path rejeté (
/etc/passwd→ 422/ToolError) - Trailing slash préservé après normpath
- Utilisée sur les 3 endpoints :
list_files,list_folders, et l'outil MCPlist_folders
-
list_foldersajouté comme outil MCP ✅ —mcp_file_tools.pyexpose maintenantlist_foldersen plus delist_filesetread_file -
Tests complets ✅ :
TestValidatePrefix: 7 tests (vide, valide, trailing slash, backslash, dot, traversal, absolu)TestListFiles: 2 nouveaux tests (traversal, absolu)TestListFolders: 4 tests (retour, prefix forwarding, traversal, absolu)TestReadFile: mis à jourValueError→ToolError,RuntimeError→ToolError- Route tests : 4 nouveaux (traversal + absolu pour list_files et list_folders)
- MinioAdapter : 1 nouveau (prefix forwarding)
⚠️ Points d'attention mineurs
-
Duplication
_validate_prefix— La fonction existe en 2 copies :file_routes.pyetmcp_file_tools.py. La version routes lèveHTTPException(422), la version MCP lèveToolError. Même logique, différentes exceptions. Pourrait être un shared util avec un paramraise_fnou une factory. -
Pas de test pour
_validate_prefixdansfile_routes.py— Les tests de validation de prefix en routes testent directement les endpoints, pas la fonction isolée. OK mais moins granulaire que le test MCP.
📋 Bilan
Tous les points critiques de la première review ont été corrigés. Code solide, bien testé, architecture hexagonale respectée. La validation de prefix est robustesse et cohérente.
Score : 5/10 → 9/10 👍
Re-review by SoluBot 🤖
Summary
prefixparameter tolist_folders(MCP tool + REST route + use case + adapter) for hierarchical folder navigation in MinIOread_fileMCP tool: replace silent error responses (returningFileContentResponsewith error content) with properToolErrorexceptions so MCP reportsisError: true_validate_prefixto reject path traversal (..) and absolute paths in both MCP tools (list_files,list_folders) and REST routes (/files/list,/files/folders)list_foldersMCP tool (was missing from the tools registered with FastMCP)Changes
storage_port.pyprefixparam tolist_foldersminio_adapter.pyprefixto MinIO clientlist_folders_use_case.pyprefixparamfile_routes.py_validate_prefix+ prefix validation onlist_files&list_foldersmcp_file_tools.py_validate_prefix,list_folderstool,ToolErrorforread_filetest_mcp_file_tools.pyToolError,_validate_prefix,list_folderstest_file_routes.pylist_files&list_folderstest_list_folders_use_case.pytest_minio_adapter.pylist_folderswith prefix