From 21af24b30452651d04573e703f6d8e745d3add7a Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Sun, 28 Jun 2026 11:52:34 +0000 Subject: [PATCH] fix find_or_create_folder: exact name match per component instead of endswith --- src/ayon_mcp/client.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/ayon_mcp/client.py b/src/ayon_mcp/client.py index 6e0e7fe..7b55a76 100644 --- a/src/ayon_mcp/client.py +++ b/src/ayon_mcp/client.py @@ -104,27 +104,36 @@ class AyonClient: def find_or_create_folder( self, project: str, path: str, folder_type: str = "Asset" ) -> dict: - """Find existing folder or create it (including parents).""" + """Find existing folder or create it (including parents). + + Walks the path component by component — each component must match + the exact folder name under the current parent, not just endswith. + """ f = self.find_folder(project, path) if f: return f parts = path.strip("/").split("/") - current_parent = None - - # Find root parent + # Resolve root-level folders (no parentId) folders = self.list_folders(project) + + current_parent = None for part in parts: found = None for f in folders: fp = f.get("path", "").lstrip("/") pid = f.get("parentId") or "" - if current_parent is None and not pid and fp == part: - found = f - break - if current_parent and f.get("parentId") == current_parent["id"] and fp.endswith(part): - found = f - break + + if current_parent is None: + # Root level: name matches and no parent + if f.get("name") == part and not pid: + found = f + break + else: + # Child level: name matches AND parentId matches + if f.get("name") == part and pid == current_parent["id"]: + found = f + break if found: current_parent = found