@dollhousemcp/mcp-server
Version:
DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.
165 lines • 6.86 kB
TypeScript
import { Stats } from 'fs';
import { FileLockManager } from '../security/fileLockManager.js';
import { ElementType } from '../portfolio/types.js';
export interface FileReadOptions {
encoding?: BufferEncoding;
source?: string;
/** Override maximum file size for this operation (in bytes) */
maxSize?: number;
}
export interface FileWriteOptions {
encoding?: BufferEncoding;
source?: string;
atomic?: boolean;
/** Override maximum file size for this operation (in bytes) */
maxSize?: number;
}
export interface FileOperationOptions {
source?: string;
}
export interface FileOperationsConfig {
/** Enable verbose audit logging for read operations (default: false) */
verboseAudit?: boolean;
/** Maximum file size in bytes (default: 10MB) */
maxFileSize?: number;
}
export interface IFileOperationsService {
/**
* Read a file securely with atomic locking
* @param filePath - Absolute path to file
* @param elementType - Element type for context (optional for generic files)
* @param options - Read options
*/
readFile(filePath: string, options?: FileReadOptions): Promise<string>;
/**
* Read an element file (wrapper around readFile with specific logging)
* @param filePath - Absolute path to file
* @param elementType - Element type
* @param options - Read options
*/
readElementFile(filePath: string, elementType: ElementType, options?: FileReadOptions): Promise<string>;
/**
* Write a file securely with atomic locking
* @param filePath - Absolute path to file
* @param content - Content to write
* @param options - Write options
*/
writeFile(filePath: string, content: string, options?: FileWriteOptions): Promise<void>;
/**
* Delete a file securely
* @param filePath - Absolute path to file
* @param elementType - Element type for context (optional)
* @param options - Operation options
*/
deleteFile(filePath: string, elementType?: ElementType, options?: FileOperationOptions): Promise<void>;
/**
* Create a directory if it doesn't exist
* @param directoryPath - Absolute path to directory
*/
createDirectory(directoryPath: string): Promise<void>;
/**
* List files in a directory
* @param directoryPath - Absolute path to directory
*/
listDirectory(directoryPath: string): Promise<string[]>;
/**
* List directory contents with type information
* @param directoryPath - Absolute path to directory
* @returns Array of entries with name and type info
*/
listDirectoryWithTypes(directoryPath: string): Promise<Array<{
name: string;
isDirectory: boolean;
isFile: boolean;
}>>;
/**
* Rename/Move a file or directory
* @param oldPath - Current absolute path
* @param newPath - New absolute path
*/
renameFile(oldPath: string, newPath: string): Promise<void>;
/**
* Check if a file or directory exists
* @param filePath - Absolute path to check
*/
exists(filePath: string): Promise<boolean>;
/**
* Get file statistics
* @param filePath - Absolute path to the file
* @returns File statistics
*/
stat(filePath: string): Promise<Stats>;
/**
* Resolve a relative path to absolute path within a base directory
* @param relativePath - Relative path to resolve
* @param baseDirectory - Base directory for resolution
*/
resolvePath(relativePath: string, baseDirectory: string): string;
/**
* Validate a path doesn't contain traversal attempts
* @param filePath - Path to validate
* @param baseDirectory - Base directory to constrain to
*/
validatePath(filePath: string, baseDirectory: string): boolean;
/**
* Create a file atomically - fails if file already exists (prevents TOCTOU race conditions)
* @param filePath - Absolute path to file
* @param content - Content to write
* @param options - Write options
* @returns true if created, false if file already existed
*/
createFileExclusive(filePath: string, content: string, options?: FileWriteOptions): Promise<boolean>;
/**
* Copy a file from source to destination
* @param sourcePath - Absolute path to source file
* @param destPath - Absolute path to destination
* @param options - Operation options
*/
copyFile(sourcePath: string, destPath: string, options?: FileOperationOptions): Promise<void>;
/**
* Change file permissions
* @param filePath - Absolute path to file
* @param mode - Permission mode (e.g., 0o644)
* @param options - Operation options
*/
chmod(filePath: string, mode: number, options?: FileOperationOptions): Promise<void>;
/**
* Append content to a file
* @param filePath - Absolute path to file
* @param content - Content to append
* @param options - Write options
*/
appendFile(filePath: string, content: string, options?: FileWriteOptions): Promise<void>;
}
export declare class FileOperationsService implements IFileOperationsService {
private fileLockManager;
private readonly defaultMaxFileSize;
private config;
constructor(fileLockManager: FileLockManager, config?: FileOperationsConfig);
readFile(filePath: string, options?: FileReadOptions): Promise<string>;
readElementFile(filePath: string, elementType: ElementType, options?: FileReadOptions): Promise<string>;
writeFile(filePath: string, content: string, options?: FileWriteOptions): Promise<void>;
deleteFile(filePath: string, elementType?: ElementType, options?: FileOperationOptions): Promise<void>;
createDirectory(directoryPath: string): Promise<void>;
exists(filePath: string): Promise<boolean>;
/**
* Get file statistics
* @param filePath - Absolute path to the file
* @returns File statistics
*/
stat(filePath: string): Promise<Stats>;
listDirectory(directoryPath: string): Promise<string[]>;
listDirectoryWithTypes(directoryPath: string): Promise<Array<{
name: string;
isDirectory: boolean;
isFile: boolean;
}>>;
renameFile(oldPath: string, newPath: string): Promise<void>;
resolvePath(relativePath: string, baseDirectory: string): string;
validatePath(filePath: string, baseDirectory: string): boolean;
createFileExclusive(filePath: string, content: string, options?: FileWriteOptions): Promise<boolean>;
copyFile(sourcePath: string, destPath: string, options?: FileOperationOptions): Promise<void>;
chmod(filePath: string, mode: number, options?: FileOperationOptions): Promise<void>;
appendFile(filePath: string, content: string, options?: FileWriteOptions): Promise<void>;
}
//# sourceMappingURL=FileOperationsService.d.ts.map