Skip to main content
Glama
fkom13

MCP SFTP Orchestrator

by fkom13

get_system_resources

Retrieve vital system metrics including CPU usage, RAM consumption, and disk utilization from a target server for monitoring and resource analysis.

Instructions

Récupère les métriques système vitales (CPU, RAM, Disque) d'un serveur.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
aliasYesAlias du serveur cible.

Implementation Reference

  • The handler function queues an SSH job to run 'uptime && free -h && df -h /' on the specified server, waits for completion, parses the output with ssh.parseSystemResources, and returns JSON formatted resources or error.
        async (params) => {
            try {
                const job = queue.addJob({
                    type: 'ssh',
                    alias: params.alias,
                    cmd: "uptime && free -h && df -h /"
                });
                ssh.executeCommand(job.id);
                const result = await waitForJobCompletion(job.id, config.syncTimeout);
    
                if (!result || result.status !== 'completed') {
                    throw new Error(result ? result.error : `Timeout de la commande de monitoring pour ${params.alias}`);
                }
    
                const parsedOutput = ssh.parseSystemResources(result.output);
                return { content: [{ type: "text", text: JSON.stringify(parsedOutput, null, 2) }] };
            } catch (e) {
                const errorPayload = {
                    toolName: "get_system_resources",
                    errorCode: "MONITORING_ERROR",
                    errorMessage: e.message
                };
                return { content: [{ type: "text", text: JSON.stringify(errorPayload, null, 2) }], isError: true };
            }
        }
    );
  • Input schema defining the required 'alias' parameter for the target server.
    {
        title: "Obtenir les ressources système d'un VPS",
        description: "Récupère les métriques système vitales (CPU, RAM, Disque) d'un serveur.",
        inputSchema: z.object({
            alias: z.string().describe("Alias du serveur cible.")
        })
    },
  • server.js:230-264 (registration)
    Registration of the 'get_system_resources' tool using server.registerTool, including schema and inline handler function.
    server.registerTool(
        "get_system_resources",
        {
            title: "Obtenir les ressources système d'un VPS",
            description: "Récupère les métriques système vitales (CPU, RAM, Disque) d'un serveur.",
            inputSchema: z.object({
                alias: z.string().describe("Alias du serveur cible.")
            })
        },
        async (params) => {
            try {
                const job = queue.addJob({
                    type: 'ssh',
                    alias: params.alias,
                    cmd: "uptime && free -h && df -h /"
                });
                ssh.executeCommand(job.id);
                const result = await waitForJobCompletion(job.id, config.syncTimeout);
    
                if (!result || result.status !== 'completed') {
                    throw new Error(result ? result.error : `Timeout de la commande de monitoring pour ${params.alias}`);
                }
    
                const parsedOutput = ssh.parseSystemResources(result.output);
                return { content: [{ type: "text", text: JSON.stringify(parsedOutput, null, 2) }] };
            } catch (e) {
                const errorPayload = {
                    toolName: "get_system_resources",
                    errorCode: "MONITORING_ERROR",
                    errorMessage: e.message
                };
                return { content: [{ type: "text", text: JSON.stringify(errorPayload, null, 2) }], isError: true };
            }
        }
    );
  • Helper function in ssh.js that parses the raw output from 'uptime && free -h && df -h /' into structured load average, memory, and disk usage data.
    function parseSystemResources(output) {
        const resources = {
            load_average: null,
            memory: null,
            disk: null
        };
        const lines = output.split('\n');
    
        try {
            const uptimeLine = lines.find(line => line.includes('load average:'));
            if (uptimeLine) {
                const parts = uptimeLine.split('load average:')[1];
                resources.load_average = parts.split(',').map(s => s.trim());
            }
    
            const memLine = lines.find(line => line.trim().startsWith('Mem:'));
            if (memLine) {
                const parts = memLine.trim().split(/\s+/);
                resources.memory = {
                    total: parts[1],
                    used: parts[2],
                    free: parts[3],
                    available: parts[6]
                };
            }
    
            const diskLine = lines.find(line => line.startsWith('/dev/'));
            if (diskLine) {
                const parts = diskLine.trim().split(/\s+/);
                resources.disk = {
                    filesystem: parts[0],
                    total: parts[1],
                    used: parts[2],
                    available: parts[3],
                    use_percent: parts[4]
                };
            }
        } catch (e) {
            // En cas d'erreur de parsing, retourner les données brutes
            return { raw_output: output, parsing_error: e.message };
        }
    
        return resources;
    }

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/fkom13/mcp-sftp-orchestrator'

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