VPS_getDataCenterListV1
Retrieve a list of available data centers to select location options when deploying VPS instances.
Instructions
Retrieve all available data centers.
Use this endpoint to view location options before deploying VPS instances.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/core/tools/vps.ts:13-29 (registration)Tool definition/registration for VPS_getDataCenterListV1 in the VPS tool list. It defines the tool's name, description, HTTP method (GET), API path (/api/vps/v1/data-centers), empty input schema (no parameters required), and security scheme (apiToken).
{ "name": "VPS_getDataCenterListV1", "description": "Retrieve all available data centers.\n\nUse this endpoint to view location options before deploying VPS instances.", "method": "GET", "path": "/api/vps/v1/data-centers", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "vps" }, - src/core/runtime.ts:1909-1999 (handler)Generic API call handler (executeApiCall) in the MCPServer class. When VPS_getDataCenterListV1 is called, it uses this handler to make a GET request to /api/vps/v1/data-centers since the tool does not have the custom flag set.
private async executeApiCall(tool: OpenApiTool, params: Record<string, any>): Promise<any> { // 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: AxiosRequestConfig = { method: method.toLowerCase(), url, headers: { ...this.headers }, timeout: 60000, // 60s validateStatus: function (status: number): boolean { 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) { 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; if (config.headers) { config.headers["Content-Type"] = "application/json"; } } this.log('debug', "Request config:", { url: config.url, method: config.method, params: config.params, headers: config.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 axiosError = error as AxiosError; const responseData = axiosError.response?.data; const responseStatus = axiosError.response?.status; this.log('error', 'API Error Details:', { status: responseStatus, data: typeof responseData === 'object' ? JSON.stringify(responseData) : String(responseData) }); // Rethrow with more context for better error handling const detailedError = new Error(`API request failed with status ${responseStatus}: ${errorMessage}`); (detailedError as any).response = axiosError.response; throw detailedError; } throw error; } } - src/core/tools/vps.ts:18-22 (schema)Input schema for VPS_getDataCenterListV1. It specifies an empty object with no properties, meaning the tool requires no input parameters.
"inputSchema": { "type": "object", "properties": {}, "required": [] }, - src/core/tools/vps.js:2-19 (registration)JavaScript (compiled) version of the VPS_getDataCenterListV1 tool registration. Same definition as the TypeScript source but in JS format.
export default [ { "name": "VPS_getDataCenterListV1", "description": "Retrieve all available data centers.\n\nUse this endpoint to view location options before deploying VPS instances.", "method": "GET", "path": "/api/vps/v1/data-centers", "inputSchema": { "type": "object", "properties": {}, "required": [] }, "security": [ { "apiToken": [] } ], "group": "vps" },