Skip to main content
Glama
wonderwhy-er

Claude Desktop Commander MCP

get_file_info

Retrieve comprehensive metadata about files or directories, including size, timestamps, permissions, type, and text file details like line count and append position. Works within allowed paths; use absolute paths for reliability.

Instructions

                    Retrieve detailed metadata about a file or directory including:
                    - size
                    - creation time
                    - last modified time 
                    - permissions
                    - type
                    - lineCount (for text files)
                    - lastLine (zero-indexed number of last line, for text files)
                    - appendPosition (line number for appending, for text files)
                    
                    Only works within allowed directories.
                    
                    IMPORTANT: Always use absolute paths for reliability. Paths are automatically normalized regardless of slash direction. Relative paths may fail as they depend on the current working directory. Tilde paths (~/...) might not work in all contexts. Unless the user explicitly asks for relative paths, use absolute paths.
                    This command can be referenced as "DC: ..." or "use Desktop Commander to ..." in your instructions.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pathYes

Implementation Reference

  • Main handler function that executes the get_file_info tool: parses input schema, calls helper getFileInfo, formats output as key-value text.
    export async function handleGetFileInfo(args: unknown): Promise<ServerResult> {
        try {
            const parsed = GetFileInfoArgsSchema.parse(args);
            const info = await getFileInfo(parsed.path);
            return {
                content: [{
                    type: "text",
                    text: Object.entries(info)
                        .map(([key, value]) => `${key}: ${value}`)
                        .join('\n')
                }],
            };
        } catch (error) {
            const errorMessage = error instanceof Error ? error.message : String(error);
            return createErrorResponse(errorMessage);
        }
    }
  • Zod schema for validating get_file_info tool input: requires 'path' string.
    export const GetFileInfoArgsSchema = z.object({
      path: z.string(),
    });
  • Registration/dispatch: Maps 'get_file_info' tool calls to handleGetFileInfo handler in the CallToolRequest switch statement.
    case "get_file_info":
        result = await handlers.handleGetFileInfo(args);
        break;
  • src/server.ts:622-643 (registration)
    Tool registration in ListToolsRequest handler: defines name, description, input schema for get_file_info.
        name: "get_file_info",
        description: `
                Retrieve detailed metadata about a file or directory including:
                - size
                - creation time
                - last modified time 
                - permissions
                - type
                - lineCount (for text files)
                - lastLine (zero-indexed number of last line, for text files)
                - appendPosition (line number for appending, for text files)
                
                Only works within allowed directories.
                
                ${PATH_GUIDANCE}
                ${CMD_PREFIX_DESCRIPTION}`,
        inputSchema: zodToJsonSchema(GetFileInfoArgsSchema),
        annotations: {
            title: "Get File Information",
            readOnlyHint: true,
        },
    },
  • Core helper function that retrieves file stats (size, times, type, permissions) and optionally line count for text files.
    export async function getFileInfo(filePath: string): Promise<Record<string, any>> {
        const validPath = await validatePath(filePath);
        const stats = await fs.stat(validPath);
    
        // Basic file info
        const info: Record<string, any> = {
            size: stats.size,
            created: stats.birthtime,
            modified: stats.mtime,
            accessed: stats.atime,
            isDirectory: stats.isDirectory(),
            isFile: stats.isFile(),
            permissions: stats.mode.toString(8).slice(-3),
        };
    
        // For text files that aren't too large, also count lines
        if (stats.isFile() && stats.size < FILE_SIZE_LIMITS.LINE_COUNT_LIMIT) {
            try {
                // Get MIME type information
                const { mimeType, isImage, isPdf } = await getMimeTypeInfo(validPath);
    
                // Only count lines for non-image, likely text files
                if (!isImage && !isPdf) {
                    const content = await fs.readFile(validPath, 'utf8');
                    const lineCount = countLines(content);
                    info.lineCount = lineCount;
                    info.lastLine = lineCount - 1; // Zero-indexed last line
                    info.appendPosition = lineCount; // Position to append at end
                }
            } catch (error) {
                // If reading fails, just skip the line count
                // This could happen for binary files or very large files
            }
        }
    
        return info;
    }

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/wonderwhy-er/DesktopCommanderMCP'

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