Skip to main content
Glama

pursIdeQuit

Gracefully shut down the PureScript IDE server using its built-in quit command, ensuring resource release without abrupt termination.

Instructions

Gracefully shut down the IDE server and free up resources. PREREQUISITE: IDE server must be running. Same effect as stop_purs_ide_server but uses the server's built-in quit command first.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The main handler function for the 'pursIdeQuit' tool. It attempts to send a 'quit' command to the running purs ide server, waits briefly, kills the process if necessary, updates state variables, and returns a success response with a detailed status message.
    "pursIdeQuit": async () => {
        let quitMessage = "purs ide server quit command initiated.";
        let pursIdeResponded = false;
    
        if (pursIdeProcess && pursIdeIsReady) {
            logToStderr("[pursIdeQuit] Attempting to send 'quit' command to purs ide server.", "debug");
            sendCommandToPursIde({ command: "quit" })
                .then(res => {
                    pursIdeResponded = true;
                    logToStderr(`[pursIdeQuit] purs ide server responded to quit command: ${JSON.stringify(res)}`, 'debug');
                })
                .catch(err => {
                    logToStderr(`[pursIdeQuit] Error/No response from purs ide server for quit command: ${err.message}`, 'warn');
                });
            
            // Wait a short period to allow purs ide server to shut down gracefully
            // or for the sendCommandToPursIde to potentially resolve/reject.
            await delay(250); // Increased slightly to 250ms
        } else {
            quitMessage = "No purs ide server was running or ready to send quit command to.";
            logToStderr("[pursIdeQuit] " + quitMessage, "info");
        }
    
        // Ensure our managed process is stopped regardless of purs ide's response
        if (pursIdeProcess) {
            logToStderr("[pursIdeQuit] Ensuring managed purs ide process is stopped.", "debug");
            pursIdeProcess.kill();
            pursIdeProcess = null;
            pursIdeIsReady = false;
            logPursIdeOutput("Managed purs ide server process stopped via pursIdeQuit tool.", "info");
            quitMessage += " Managed purs ide process has been stopped.";
        } else {
            if (!quitMessage.includes("No purs ide server was running")) {
                 quitMessage += " No managed purs ide process was found running to stop.";
            }
        }
        
        if (pursIdeResponded) {
            quitMessage += " purs ide server acknowledged quit.";
        } else {
            quitMessage += " purs ide server may not have acknowledged quit before process termination.";
        }
    
        return { content: [{ type: "text", text: JSON.stringify({ status_message: quitMessage, resultType: "success" }, null, 2) }] };
    },
  • The tool schema definition for 'pursIdeQuit', including name, description, and input schema (empty object). This is part of the TOOL_DEFINITIONS array returned by the 'tools/list' MCP method.
        name: "pursIdeQuit",
        description: "Gracefully shut down the IDE server and free up resources. PREREQUISITE: IDE server must be running. Same effect as stop_purs_ide_server but uses the server's built-in quit command first.",
        inputSchema: { type: "object", properties: {}, additionalProperties: false }
    },
    {
  • index.js:1044-1088 (registration)
    Registration of the 'pursIdeQuit' handler in the INTERNAL_TOOL_HANDLERS object, which is used in 'tools/call' to dispatch to the correct function based on tool name.
    "pursIdeQuit": async () => {
        let quitMessage = "purs ide server quit command initiated.";
        let pursIdeResponded = false;
    
        if (pursIdeProcess && pursIdeIsReady) {
            logToStderr("[pursIdeQuit] Attempting to send 'quit' command to purs ide server.", "debug");
            sendCommandToPursIde({ command: "quit" })
                .then(res => {
                    pursIdeResponded = true;
                    logToStderr(`[pursIdeQuit] purs ide server responded to quit command: ${JSON.stringify(res)}`, 'debug');
                })
                .catch(err => {
                    logToStderr(`[pursIdeQuit] Error/No response from purs ide server for quit command: ${err.message}`, 'warn');
                });
            
            // Wait a short period to allow purs ide server to shut down gracefully
            // or for the sendCommandToPursIde to potentially resolve/reject.
            await delay(250); // Increased slightly to 250ms
        } else {
            quitMessage = "No purs ide server was running or ready to send quit command to.";
            logToStderr("[pursIdeQuit] " + quitMessage, "info");
        }
    
        // Ensure our managed process is stopped regardless of purs ide's response
        if (pursIdeProcess) {
            logToStderr("[pursIdeQuit] Ensuring managed purs ide process is stopped.", "debug");
            pursIdeProcess.kill();
            pursIdeProcess = null;
            pursIdeIsReady = false;
            logPursIdeOutput("Managed purs ide server process stopped via pursIdeQuit tool.", "info");
            quitMessage += " Managed purs ide process has been stopped.";
        } else {
            if (!quitMessage.includes("No purs ide server was running")) {
                 quitMessage += " No managed purs ide process was found running to stop.";
            }
        }
        
        if (pursIdeResponded) {
            quitMessage += " purs ide server acknowledged quit.";
        } else {
            quitMessage += " purs ide server may not have acknowledged quit before process termination.";
        }
    
        return { content: [{ type: "text", text: JSON.stringify({ status_message: quitMessage, resultType: "success" }, null, 2) }] };
    },

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/avi892nash/purescript-mcp-tools'

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