VPS_stopRecoveryModeV1
Exit system rescue mode for a virtual machine and return it to normal operation. Use when the VPS is in recovery mode and needs to be restored.
Instructions
Stop recovery mode for a specified virtual machine.
If virtual machine is not in recovery mode, this operation will fail.
Use this endpoint to exit system rescue mode and return VPS to normal operation.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| virtualMachineId | Yes | Virtual Machine ID |
Implementation Reference
- src/core/runtime.js:1879-1999 (handler)The executeApiCall method handles all non-custom tool executions including VPS_stopRecoveryModeV1. It performs the HTTP DELETE request to /api/vps/v1/virtual-machines/{virtualMachineId}/recovery with the virtualMachineId passed as a path parameter.
async executeApiCall(tool, params) { // Get method and path from tool const method = tool.method; let path = tool.path; // Clone params to avoid modifying the original const requestParams = { ...params }; // Replace path parameters with values from params Object.entries(requestParams).forEach(([key, value]) => { const placeholder = `{${key}}`; if (path.includes(placeholder)) { path = path.replace(placeholder, encodeURIComponent(String(value))); delete requestParams[key]; // Remove used parameter } }); // Build the full URL const baseUrl = this.baseUrl.endsWith("/") ? this.baseUrl : `${this.baseUrl}/`; const cleanPath = path.startsWith("/") ? path.slice(1) : path; const url = new URL(cleanPath, baseUrl).toString(); this.log('debug', `API Request: ${method} ${url}`); try { // Configure the request const config = { method: method.toLowerCase(), url, headers: { ...this.headers }, timeout: 60000, // 60s validateStatus: function (status) { return status < 500; // Resolve only if the status code is less than 500 } }; const bearerToken = process.env['API_TOKEN'] || process.env['APITOKEN']; // APITOKEN for backwards compatibility if (bearerToken) { config.headers['Authorization'] = `Bearer ${bearerToken}`; } else { this.log('error', `Bearer Token environment variable not found: API_TOKEN`); } // Add parameters based on request method if (["GET", "DELETE"].includes(method)) { // For GET/DELETE, send params as query string config.params = { ...(config.params || {}), ...requestParams }; } else { // For POST/PUT/PATCH, send params as JSON body config.data = requestParams; config.headers["Content-Type"] = "application/json"; } this.log('debug', "Request config:", { url: config.url, method: config.method, params: config.params, headers: Object.keys(config.headers) }); // Execute the request const response = await axios(config); this.log('debug', `Response status: ${response.status}`); return response.data; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); this.log('error', `API request failed: ${errorMessage}`); if (axios.isAxiosError(error)) { const responseData = error.response?.data; const responseStatus = error.response?.status; this.log('error', 'API Error Details:', { status: responseStatus, data: typeof responseData === 'object' ? JSON.stringify(responseData) : responseData }); // Rethrow with more context for better error handling const detailedError = new Error(`API request failed with status ${responseStatus}: ${errorMessage}`); detailedError.response = error.response; throw detailedError; } throw error; } } /** * Log messages with appropriate level * Only sends to MCP if we're connected */ log(level, message, data) { // Always log to stderr for visibility console.error(`[${level.toUpperCase()}] ${message}${data ? ': ' + JSON.stringify(data) : ''}`); // Only try to send via MCP if we're in debug mode or it's important if (this.debug || level !== 'debug') { try { // Only send if server exists and is connected if (this.server && this.server.isConnected) { this.server.sendLoggingMessage({ level, data: `[MCP Server] ${message}${data ? ': ' + JSON.stringify(data) : ''}` }); } } catch (e) { // If logging fails, log to stderr console.error('Failed to send log via MCP:', e.message); } } } /** * Create and configure Express app with shared middleware */ createApp() { const app = express(); app.use(express.json()); app.use(cors()); - src/core/tools/vps.js:1478-1501 (schema)Input schema and tool definition for VPS_stopRecoveryModeV1. Defines a DELETE operation on /api/vps/v1/virtual-machines/{virtualMachineId}/recovery requiring only virtualMachineId (integer).
{ "name": "VPS_stopRecoveryModeV1", "description": "Stop recovery mode for a specified virtual machine.\n\nIf virtual machine is not in recovery mode, this operation will fail.\n\nUse this endpoint to exit system rescue mode and return VPS to normal operation.", "method": "DELETE", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/recovery", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, - src/core/tools/vps.ts:1488-1511 (schema)TypeScript type definition for VPS_stopRecoveryModeV1 with typed OpenApiTool interface. Same schema definition as the JS file but with TypeScript type safety.
{ "name": "VPS_stopRecoveryModeV1", "description": "Stop recovery mode for a specified virtual machine.\n\nIf virtual machine is not in recovery mode, this operation will fail.\n\nUse this endpoint to exit system rescue mode and return VPS to normal operation.", "method": "DELETE", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/recovery", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" } }, "required": [ "virtualMachineId" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, - src/servers/vps.js:1-6 (registration)Server entry point that imports tools (including VPS_stopRecoveryModeV1) from the vps.js tool definitions and passes them to startServer for registration with the MCP framework.
#!/usr/bin/env node // Auto-generated entry for group: vps import { startServer } from '../core/runtime.js'; import tools from '../core/tools/vps.js'; startServer({ name: 'hostinger-vps-mcp', version: '0.1.41', tools }); - src/servers/vps.ts:1-6 (registration)TypeScript server entry point that imports tools (including VPS_stopRecoveryModeV1) and registers them with the MCP framework.
#!/usr/bin/env node // Auto-generated entry for group: vps import { startServer } from '../core/runtime.js'; import tools from '../core/tools/vps.js'; startServer({ name: 'hostinger-vps-mcp', version: '0.1.41', tools });