super-shell-mcp
Version:
MCP server for executing shell commands across multiple platforms
174 lines (173 loc) • 5.59 kB
TypeScript
import { EventEmitter } from 'events';
/**
* Command security level classification
*/
export declare enum CommandSecurityLevel {
/** Safe commands that can be executed without approval */
SAFE = "safe",
/** Commands that require approval before execution */
REQUIRES_APPROVAL = "requires_approval",
/** Commands that are explicitly forbidden */
FORBIDDEN = "forbidden"
}
/**
* Command whitelist entry
*/
export interface CommandWhitelistEntry {
/** The command path or name */
command: string;
/** Security level of the command */
securityLevel: CommandSecurityLevel;
/** Allowed arguments (string for exact match, RegExp for pattern match) */
allowedArgs?: Array<string | RegExp>;
/** Description of the command for documentation */
description?: string;
}
/**
* Pending command awaiting approval
*/
export interface PendingCommand {
/** Unique ID for the command */
id: string;
/** The command to execute */
command: string;
/** Arguments for the command */
args: string[];
/** When the command was requested */
requestedAt: Date;
/** Who requested the command */
requestedBy?: string;
/** Resolve function to call when approved */
resolve: (value: {
stdout: string;
stderr: string;
}) => void;
/** Reject function to call when denied */
reject: (reason: Error) => void;
}
/**
* Result of command execution
*/
export interface CommandResult {
/** Standard output from the command */
stdout: string;
/** Standard error from the command */
stderr: string;
}
/**
* Command service configuration options
*/
export interface CommandServiceOptions {
/** Optional shell path to use when shell execution is enabled */
shell?: string;
/** Whether to execute commands through a shell (default: false) */
useShell?: boolean;
/** Default timeout for command execution in milliseconds (default: 30000) */
defaultTimeout?: number;
}
/**
* Service for securely executing shell commands
*/
export declare class CommandService extends EventEmitter {
/** Shell to use for commands */
private shell;
/** Whether shell parsing is enabled */
private useShell;
/** Command whitelist */
private whitelist;
/** Pending commands awaiting approval */
private pendingCommands;
/** Default timeout for command execution in milliseconds */
private defaultTimeout;
/**
* Create a new CommandService
* @param options Command service configuration options
*/
constructor(options?: CommandServiceOptions);
/**
* Get the current shell being used
* @returns The shell path
*/
getShell(): string;
/**
* Whether command execution uses a shell for parsing
* @returns True if shell execution is enabled
*/
isShellEnabled(): boolean;
/**
* Initialize the default command whitelist based on the current platform
*/
private initializeDefaultWhitelist;
/**
* Add a command to the whitelist
* @param entry The command whitelist entry
*/
addToWhitelist(entry: CommandWhitelistEntry): void;
/**
* Remove a command from the whitelist
* @param command The command to remove
*/
removeFromWhitelist(command: string): void;
/**
* Update a command's security level
* @param command The command to update
* @param securityLevel The new security level
*/
updateSecurityLevel(command: string, securityLevel: CommandSecurityLevel): void;
/**
* Get all whitelisted commands
* @returns Array of command whitelist entries
*/
getWhitelist(): CommandWhitelistEntry[];
/**
* Get all pending commands awaiting approval
* @returns Array of pending commands
*/
getPendingCommands(): PendingCommand[];
/**
* Validate if a command and its arguments are allowed
* @param command The command to validate
* @param args The command arguments
* @returns The security level of the command or null if not whitelisted
*/
private validateCommand;
/**
* Execute a shell command
* @param command The command to execute
* @param args Command arguments
* @param options Additional options
* @returns Promise resolving to command output
*/
executeCommand(command: string, args?: string[], options?: {
timeout?: number;
requestedBy?: string;
}): Promise<CommandResult>;
/**
* Queue a command for approval
* @param command The command to queue
* @param args Command arguments
* @param requestedBy Who requested the command
* @returns Promise resolving when command is approved and executed
*/
private queueCommandForApproval;
/**
* Queue a command for approval without waiting for the Promise to resolve
* @param command The command to queue
* @param args Command arguments
* @param requestedBy Who requested the command
* @returns The ID of the queued command
*/
queueCommandForApprovalNonBlocking(command: string, args?: string[], requestedBy?: string): string;
/**
* Approve a pending command
* @param commandId ID of the command to approve
* @returns Promise resolving to command output
*/
approveCommand(commandId: string): Promise<CommandResult>;
/**
* Deny a pending command
* @param commandId ID of the command to deny
* @param reason Reason for denial
*/
denyCommand(commandId: string, reason?: string): void;
}