fix: Update webdav models for proper serialization
This commit is contained in:
@@ -40,7 +40,7 @@ class DirectoryListing(BaseResponse):
|
|||||||
"""Response model for directory listings."""
|
"""Response model for directory listings."""
|
||||||
|
|
||||||
path: str = Field(description="Directory path")
|
path: str = Field(description="Directory path")
|
||||||
items: List[FileInfo] = Field(description="Files and directories in the path")
|
files: List[FileInfo] = Field(description="Files and directories in the path")
|
||||||
total_count: int = Field(description="Total number of items")
|
total_count: int = Field(description="Total number of items")
|
||||||
directories_count: int = Field(description="Number of directories")
|
directories_count: int = Field(description="Number of directories")
|
||||||
files_count: int = Field(description="Number of files")
|
files_count: int = Field(description="Number of files")
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from mcp.server.fastmcp import Context, FastMCP
|
|||||||
|
|
||||||
from nextcloud_mcp_server.auth import require_scopes
|
from nextcloud_mcp_server.auth import require_scopes
|
||||||
from nextcloud_mcp_server.context import get_client
|
from nextcloud_mcp_server.context import get_client
|
||||||
from nextcloud_mcp_server.models import FileInfo, SearchFilesResponse
|
from nextcloud_mcp_server.models import DirectoryListing, FileInfo, SearchFilesResponse
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -13,17 +13,36 @@ def configure_webdav_tools(mcp: FastMCP):
|
|||||||
# WebDAV file system tools
|
# WebDAV file system tools
|
||||||
@mcp.tool()
|
@mcp.tool()
|
||||||
@require_scopes("files:read")
|
@require_scopes("files:read")
|
||||||
async def nc_webdav_list_directory(ctx: Context, path: str = ""):
|
async def nc_webdav_list_directory(
|
||||||
|
ctx: Context, path: str = ""
|
||||||
|
) -> DirectoryListing:
|
||||||
"""List files and directories in the specified NextCloud path.
|
"""List files and directories in the specified NextCloud path.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
path: Directory path to list (empty string for root directory)
|
path: Directory path to list (empty string for root directory)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
List of items with metadata including name, path, is_directory, size, content_type, last_modified
|
DirectoryListing with files, total_count, directories_count, files_count, and total_size
|
||||||
"""
|
"""
|
||||||
client = get_client(ctx)
|
client = get_client(ctx)
|
||||||
return await client.webdav.list_directory(path)
|
items = await client.webdav.list_directory(path)
|
||||||
|
|
||||||
|
# Convert to FileInfo models
|
||||||
|
file_infos = [FileInfo(**item) for item in items]
|
||||||
|
|
||||||
|
# Calculate metadata
|
||||||
|
directories_count = sum(1 for f in file_infos if f.is_directory)
|
||||||
|
files_count = sum(1 for f in file_infos if not f.is_directory)
|
||||||
|
total_size = sum(f.size or 0 for f in file_infos if not f.is_directory)
|
||||||
|
|
||||||
|
return DirectoryListing(
|
||||||
|
path=path,
|
||||||
|
files=file_infos,
|
||||||
|
total_count=len(file_infos),
|
||||||
|
directories_count=directories_count,
|
||||||
|
files_count=files_count,
|
||||||
|
total_size=total_size,
|
||||||
|
)
|
||||||
|
|
||||||
@mcp.tool()
|
@mcp.tool()
|
||||||
@require_scopes("files:read")
|
@require_scopes("files:read")
|
||||||
|
|||||||
Reference in New Issue
Block a user