Skip to main content
Glama

obsidian_list_files_in_dir

Explore and list files and directories within your Obsidian vault to navigate organized sections like Zettelkasten folders.

Instructions

List files and directories in a specific vault directory.

Use this tool to explore the contents of a specific folder, such as your Zettelkasten directory or any other organized section of your vault. Args: params (ListFilesInput): Contains: - dirpath (str): Relative path to directory (empty for root) Returns: str: Formatted list of directories and files in the specified path Example: For dirpath="Zettelkasten", lists all notes in your Zettelkasten folder.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
paramsYes

Implementation Reference

  • Handler function that executes the tool: constructs API endpoint, calls ObsidianClient.get(), extracts files/directories, formats output using helper, handles errors.
    async def list_files_in_dir(params: ListFilesInput) -> str: """List files and directories in a specific vault directory. Use this tool to explore the contents of a specific folder, such as your Zettelkasten directory or any other organized section of your vault. Args: params (ListFilesInput): Contains: - dirpath (str): Relative path to directory (empty for root) Returns: str: Formatted list of directories and files in the specified path Example: For dirpath="Zettelkasten", lists all notes in your Zettelkasten folder. """ try: endpoint = f"/vault/{params.dirpath}" if params.dirpath else "/vault/" result = await obsidian_client.get(endpoint) files = result.get("files", []) directories = result.get("directories", []) return format_file_list(files, directories) except ObsidianAPIError as e: return json.dumps({ "error": str(e), "success": False }, indent=2)
  • Pydantic model defining input schema: optional dirpath (str, default empty for root).
    class ListFilesInput(BaseModel): """Input for listing files in a directory.""" model_config = ConfigDict(str_strip_whitespace=True, extra='forbid') dirpath: Optional[str] = Field( default="", description="Relative directory path to list (empty string for vault root)", max_length=500 )
  • MCP tool registration decorator specifying name and annotations (read-only, idempotent).
    @mcp.tool( name="obsidian_list_files_in_dir", annotations={ "title": "List Files in Directory", "readOnlyHint": True, "destructiveHint": False, "idempotentHint": True, "openWorldHint": False } )
  • Helper function formats lists of files and directories into markdown with emojis and sections.
    def format_file_list(files: List[str], directories: List[str]) -> str: """Format file and directory lists for display.""" result = [] if directories: result.append("## Directories") for d in sorted(directories): result.append(f"- πŸ“ {d}/") result.append("") if files: result.append("## Files") for f in sorted(files): result.append(f"- πŸ“„ {f}") return "\n".join(result) if result else "No files or directories found."

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Shepherd-Creative/obsidian-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server