ras_site_get_printing
Retrieve printing configuration settings for Parallels RAS, including printer redirection, universal printing options, and driver policies to troubleshoot or review print policy configurations.
Instructions
Get printing configuration settings, including printer redirection, universal printing options, and driver policies. Use this to troubleshoot print redirection issues or review printing policy configuration.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/tools/site-settings.ts:132-151 (registration)Registration of the ras_site_get_printing tool with the MCP server, including schema configuration and handler functionserver.registerTool( "ras_site_get_printing", { title: "Printing Settings", description: "Get printing configuration settings, including printer redirection, universal " + "printing options, and driver policies. Use this to troubleshoot print redirection " + "issues or review printing policy configuration.", annotations: READ_ONLY_ANNOTATIONS, inputSchema: {}, }, async () => { try { const data = await rasClient.get("/api/site-settings/printing"); 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 printing settings") }], isError: true }; } } );
- src/tools/site-settings.ts:143-150 (handler)Handler function that fetches printing settings from the RAS API endpoint /api/site-settings/printing and returns formatted JSON dataasync () => { try { const data = await rasClient.get("/api/site-settings/printing"); 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 printing settings") }], isError: true }; } }
- src/client.ts:128-166 (helper)RasClient.get() method used by the handler to make authenticated GET requests to the RAS API, handling authentication, retry on 401, and request timeoutsasync 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(); }
- src/client.ts:43-54 (helper)sanitiseError helper function that sanitizes error messages by redacting sensitive information like auth tokens and passwordsfunction 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}`; }