Skip to main content
Glama
GUEPARD98

SSH-PowerShell MCP Server

by GUEPARD98

powershell_execute

Execute PowerShell commands locally to automate system administration tasks and streamline Windows management processes.

Instructions

Ejecutar comandos PowerShell localmente

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
commandYesComando PowerShell a ejecutar

Implementation Reference

  • Handler logic for the 'powershell_execute' tool within the CallToolRequestSchema switch statement. Calls executePowerShell and formats the response.
    case 'powershell_execute': log('info', `⚡ Ejecutando PowerShell: ${args.command}`); const psResult = await executePowerShell(args.command, args.timeout); return { content: [ { type: 'text', text: `✅ PowerShell ejecutado:\n\n${psResult.output}` } ], isError: false, metadata: { tool: 'powershell_execute', exitCode: psResult.exitCode, executionTime: psResult.executionTime, rateLimitInfo: { remainingRequests: rateLimiter.getRemainingRequests() }, timestamp: new Date().toISOString() } };
  • Core helper function that executes PowerShell commands locally, handles stdout/stderr, timeouts, and returns structured results.
    function executePowerShell(command, timeout = null) { return new Promise((resolve, reject) => { const startTime = Date.now(); const actualTimeout = timeout || parseInt(process.env.COMMAND_TIMEOUT) || DEFAULT_CONFIG.COMMAND_TIMEOUT; log('debug', 'Ejecutando comando PowerShell', { command, timeout: actualTimeout }); // Validar comando if (!command || typeof command !== 'string') { return reject(new Error('Comando PowerShell inválido')); } const psExecutable = getPowerShellExecutable(); const childProcess = spawn(psExecutable, ['-Command', command], { stdio: ['pipe', 'pipe', 'pipe'], shell: false // Mejor seguridad sin shell wrapper }); let stdout = ''; let stderr = ''; let isResolved = false; childProcess.stdout.on('data', (data) => { stdout += data.toString(); }); childProcess.stderr.on('data', (data) => { stderr += data.toString(); }); childProcess.on('close', (code) => { if (isResolved) return; isResolved = true; const executionTime = Date.now() - startTime; const result = { success: code === 0, output: stdout, error: stderr || null, exitCode: code, executionTime }; log('debug', 'Comando PowerShell completado', result); if (code === 0) { resolve(result); } else { reject(result); } }); childProcess.on('error', (error) => { if (isResolved) return; isResolved = true; const result = { success: false, output: stdout, error: error.message, exitCode: -1, executionTime: Date.now() - startTime }; log('error', 'Error ejecutando PowerShell', result); reject(result); }); // Timeout mejorado const timeoutId = setTimeout(() => { if (isResolved) return; isResolved = true; try { childProcess.kill('SIGKILL'); } catch (e) { log('warn', 'Error matando proceso', e); } const result = { success: false, output: stdout, error: `Timeout de ${actualTimeout}ms excedido`, exitCode: -1, executionTime: actualTimeout }; log('warn', 'Timeout en comando PowerShell', result); reject(result); }, actualTimeout); childProcess.on('close', () => clearTimeout(timeoutId)); childProcess.on('error', () => clearTimeout(timeoutId)); }); }
  • src/index.js:432-450 (registration)
    Tool registration in the ListToolsRequestSchema handler, including name, description, and input schema.
    { name: 'powershell_execute', description: 'Ejecutar comandos PowerShell localmente', inputSchema: { type: 'object', properties: { command: { type: 'string', description: 'Comando PowerShell a ejecutar' }, timeout: { type: 'number', description: 'Timeout en milisegundos (opcional)' } }, required: ['command'] } }, {

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/GUEPARD98/MCP-POWERSHELL'

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