ras_support_info
Retrieve Parallels RAS support details including contact information, product version, build number, and entitlement status to verify support coverage or prepare for technical assistance.
Instructions
Get Parallels RAS support information, including support contact details, product version, build number, and support entitlement. Use this to check the installed RAS version, verify support status, or gather information for a support ticket.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/tools/help-support.ts:31-38 (handler)The ras_support_info tool handler that makes an async GET request to '/api/help-and-support/support' endpoint and returns the support information as formatted JSON, with error handling using sanitiseError.
async () => { try { const data = await rasClient.get("/api/help-and-support/support"); return { content: [{ type: "text" as const, text: JSON.stringify(data, null, 2) }] }; } catch (err) { return { content: [{ type: "text" as const, text: sanitiseError(err, "Failed to retrieve support info") }], isError: true }; } } - src/tools/help-support.ts:19-39 (registration)The registration of ras_support_info tool with the MCP server, including title, description, annotations (read-only), empty input schema (no parameters), and the handler function.
server.registerTool( "ras_support_info", { title: "Support Information", description: "Get Parallels RAS support information, including support contact details, " + "product version, build number, and support entitlement. Use this to check " + "the installed RAS version, verify support status, or gather information " + "for a support ticket.", annotations: READ_ONLY_ANNOTATIONS, inputSchema: {}, }, async () => { try { const data = await rasClient.get("/api/help-and-support/support"); return { content: [{ type: "text" as const, text: JSON.stringify(data, null, 2) }] }; } catch (err) { return { content: [{ type: "text" as const, text: sanitiseError(err, "Failed to retrieve support info") }], isError: true }; } } ); - src/tools/help-support.ts:29-29 (schema)The input schema definition for ras_support_info tool - an empty object indicating the tool takes no input parameters.
inputSchema: {}, - src/client.ts:43-54 (helper)The sanitiseError helper function used by ras_support_info handler to sanitize error messages by removing auth tokens, passwords, and truncating long responses to avoid leaking internal details.
function sanitiseError(err: unknown, context: string): string { const raw = err instanceof Error ? err.message : String(err); // Remove anything that looks like a token or password value let sanitised = raw .replace(/auth_token[=:]\s*\S+/gi, "auth_token=[REDACTED]") .replace(/password[=:]\s*\S+/gi, "password=[REDACTED]"); // Truncate excessively long API response bodies if (sanitised.length > 500) { sanitised = sanitised.substring(0, 500) + "... (truncated)"; } return `${context}: ${sanitised}`; } - src/client.ts:128-166 (helper)The rasClient.get() method used by ras_support_info to make authenticated GET requests to the RAS API, handling lazy authentication, automatic retry on 401 errors, and request timeouts.
async get(path: string): Promise<unknown> { // Ensure we have a valid session if (!this.authToken) { await this.login(); } const fetchOptions = { method: "GET" as const, headers: { ...this.headers, auth_token: this.authToken!, }, signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS), }; let response = await fetch(`${this.baseUrl}${path}`, fetchOptions); // Token may have expired — re-authenticate once and retry if (response.status === 401) { await this.login(); response = await fetch(`${this.baseUrl}${path}`, { ...fetchOptions, headers: { ...this.headers, auth_token: this.authToken!, }, signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS), }); } if (!response.ok) { const body = await response.text(); throw new Error( `RAS API error (HTTP ${response.status}) on ${path}: ${body.substring(0, 300)}` ); } return response.json(); }