"""MCP tools for directory operations."""
from pathlib import Path
from ..services.directory_service import DirectoryService
from ..core.constants import DEFAULT_ROOT
# Default configuration
READ_ONLY = False
def register_directory_routes(server):
"""Register all directory MCP tools."""
@server.tool(
name="list_directories",
description="List all subdirectories in a given path with metadata "
"(name, size, item count, timestamps)",
)
def list_directories(path: str = Path.home().as_posix()) -> dict:
"""
List all subdirectories in a given path.
Args:
path: Relative path from root directory (default: user home directory)
Returns:
Dictionary with list of directories and metadata
"""
service = DirectoryService(root=DEFAULT_ROOT)
result = service.list_directories(path)
return result.model_dump()
@server.tool(
name="create_directory",
description="Create a new directory with optional parent directory creation",
)
def create_directory(path: str, create_parents: bool = False) -> dict:
"""
Create a new directory.
Args:
path: Relative path for the new directory
create_parents: If True, create parent directories as needed (default: False)
Returns:
Dictionary with operation result
"""
service = DirectoryService(root=DEFAULT_ROOT)
result = service.create_directory(path, create_parents)
return result.model_dump()
@server.tool(
name="delete_directory",
description="Delete a directory, optionally with all its contents (recursive delete)",
)
def delete_directory(path: str, recursive: bool = False) -> dict:
"""
Delete a directory.
Args:
path: Relative path to the directory to delete
recursive: If True, delete directory and all contents (default: False)
Returns:
Dictionary with operation result
"""
service = DirectoryService(root=DEFAULT_ROOT)
result = service.delete_directory(path, recursive)
return result.model_dump()
@server.tool(
name="move_directory",
description="Move or rename a directory from source to destination path",
)
def move_directory(source_path: str, destination_path: str) -> dict:
"""
Move or rename a directory.
Args:
source_path: Relative path to the source directory
destination_path: Relative path to the destination
Returns:
Dictionary with operation result
"""
service = DirectoryService(root=DEFAULT_ROOT)
result = service.move_directory(source_path, destination_path)
return result.model_dump()
@server.tool(
name="get_directory_metadata",
description="Get detailed metadata about a directory"
" (size, item counts, timestamps, permissions)",
)
def get_directory_metadata(path: str = ".") -> dict:
"""
Get detailed metadata about a directory.
Args:
path: Relative path to the directory (default: current directory)
Returns:
Dictionary with detailed directory metadata
"""
service = DirectoryService(root=DEFAULT_ROOT)
result = service.get_directory_metadata(path)
return result.model_dump()