fs_stat
Retrieve file or directory statistics from remote servers via SSH to check permissions, size, and modification details for system monitoring and management.
Instructions
Gets file or directory statistics
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | Yes | SSH session ID | |
| path | Yes | Path to stat |
Implementation Reference
- src/fs-tools.ts:94-134 (handler)Handler implementation for the fs_stat tool, responsible for getting file or directory statistics on the remote system using SFTP.
export async function statFile( sessionId: string, path: string ): Promise<FileStatInfo> { logger.debug('Getting file stats', { sessionId, path }); const session = sessionManager.getSession(sessionId); if (!session) { throw new Error(`Session ${sessionId} not found or expired`); } try { const stats = await session.sftp.stat(path); let type: FileStatInfo['type'] = 'other'; if ((stats as any).isFile && (stats as any).isFile()) { type = 'file'; } else if ((stats as any).isDirectory && (stats as any).isDirectory()) { type = 'directory'; } else if ((stats as any).isSymbolicLink && (stats as any).isSymbolicLink()) { type = 'symlink'; } const statInfo: FileStatInfo = { size: stats.size, mtime: new Date((stats as any).mtime ? (stats as any).mtime * 1000 : Date.now()), mode: stats.mode, type }; logger.debug('File stats retrieved', { sessionId, path, type, size: stats.size }); return statInfo; } catch (error) { logger.error('Failed to get file stats', { sessionId, path, error }); throw wrapError( error, ErrorCode.EFS, `Failed to get stats for ${path}. Check if the path exists.` ); } } - src/types.ts:258-261 (schema)Input validation schema for the fs_stat tool parameters.
export const FSStatSchema = z.object({ sessionId: z.string().min(1), path: z.string().min(1) }); - src/mcp.ts:440-445 (registration)Registration and tool call handler in the switch-case logic of the SSH MCP server, which parses the arguments and invokes statFile.
case 'fs_stat': { const params = FSStatSchema.parse(args); const result = await statFile(params.sessionId, params.path); logger.info('Path stat', { sessionId: params.sessionId, path: params.path }); return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }; }