VPS_setNameserversV1
Configure custom DNS resolvers for a VPS instance to manage domain name resolution. Specify up to three nameservers to control how the virtual machine resolves domain names.
Instructions
Set nameservers for a specified virtual machine.
Be aware, that improper nameserver configuration can lead to the virtual machine being unable to resolve domain names.
Use this endpoint to configure custom DNS resolvers for VPS instances.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| virtualMachineId | Yes | Virtual Machine ID | |
| ns1 | Yes | ns1 parameter | |
| ns2 | No | ns2 parameter | |
| ns3 | No | ns3 parameter |
Implementation Reference
- src/core/tools/vps.ts:1330-1366 (schema)The VPS_setNameserversV1 tool schema definition: defines the tool name, description, HTTP method (PUT), path (/api/vps/v1/virtual-machines/{virtualMachineId}/nameservers), input schema with required parameters (virtualMachineId, ns1) and optional parameters (ns2, ns3), and security configuration.
{ "name": "VPS_setNameserversV1", "description": "Set nameservers for a specified virtual machine.\n\nBe aware, that improper nameserver configuration can lead to the virtual\nmachine being unable to resolve domain names.\n\nUse this endpoint to configure custom DNS resolvers for VPS instances.", "method": "PUT", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/nameservers", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "ns1": { "type": "string", "description": "ns1 parameter" }, "ns2": { "type": "string", "description": "ns2 parameter" }, "ns3": { "type": "string", "description": "ns3 parameter" } }, "required": [ "virtualMachineId", "ns1" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, - src/core/tools/vps.js:1320-1356 (schema)JavaScript version of the VPS_setNameserversV1 tool schema definition.
{ "name": "VPS_setNameserversV1", "description": "Set nameservers for a specified virtual machine.\n\nBe aware, that improper nameserver configuration can lead to the virtual\nmachine being unable to resolve domain names.\n\nUse this endpoint to configure custom DNS resolvers for VPS instances.", "method": "PUT", "path": "/api/vps/v1/virtual-machines/{virtualMachineId}/nameservers", "inputSchema": { "type": "object", "properties": { "virtualMachineId": { "type": "integer", "description": "Virtual Machine ID" }, "ns1": { "type": "string", "description": "ns1 parameter" }, "ns2": { "type": "string", "description": "ns2 parameter" }, "ns3": { "type": "string", "description": "ns3 parameter" } }, "required": [ "virtualMachineId", "ns1" ] }, "security": [ { "apiToken": [] } ], "group": "vps" }, - src/servers/vps.js:1-7 (registration)Server entry point that imports the tools list (including VPS_setNameserversV1) from src/core/tools/vps.js and starts the VPS MCP server.
#!/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-7 (registration)TypeScript server entry point that imports the tools list (including VPS_setNameserversV1) and starts the VPS MCP server.
#!/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/core/runtime.js:1879-1966 (handler)The executeApiCall method in MCPServer handles all API-based tools including VPS_setNameserversV1. It performs path parameter substitution, sets up the HTTP request (PUT with path /api/vps/v1/virtual-machines/{virtualMachineId}/nameservers), and sends the request to the Hostinger API.
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; } }