Skip to main content
Glama
RMITBLOG

Parallels RAS MCP Server

by RMITBLOG

ras_policies_list

Retrieve all client policies to audit configuration settings, troubleshoot user experience issues, and review display, audio, printing, and device redirection controls.

Instructions

List all Parallels RAS client policies, including policy names, settings, and assignment status. Client policies control user experience settings such as display, audio, printing, and device redirection. Use this to audit policy configuration or troubleshoot client behaviour issues.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The handler function that executes the ras_policies_list tool logic. It makes a GET request to the RAS API /api/policies endpoint and returns the JSON response or an error message.
    async () => { try { const data = await rasClient.get("/api/policies"); 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 policies") }], isError: true }; } }
  • Complete registration of the ras_policies_list tool with the MCP server, including its title, description, annotations, empty input schema, and the handler function.
    server.registerTool( "ras_policies_list", { title: "Client Policies", description: "List all Parallels RAS client policies, including policy names, settings, " + "and assignment status. Client policies control user experience settings " + "such as display, audio, printing, and device redirection. Use this to " + "audit policy configuration or troubleshoot client behaviour issues.", annotations: READ_ONLY_ANNOTATIONS, inputSchema: {}, }, async () => { try { const data = await rasClient.get("/api/policies"); 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 policies") }], isError: true }; } } );
  • Input schema definition for ras_policies_list tool - an empty object indicating no input parameters are required.
    inputSchema: {},
  • Helper function sanitiseError used by the handler to format error messages by removing sensitive information (auth tokens, passwords) and truncating long messages.
    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}`; }
  • The RasClient.get method used by the handler to make authenticated GET requests to the RAS API, with automatic login, token refresh on 401, and timeout handling.
    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(); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/RMITBLOG/ParallelsRAS_MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server