Skip to main content
Glama
RMITBLOG

Parallels RAS MCP Server

by RMITBLOG

ras_pub_get_avd_apps

Retrieve published Azure Virtual Desktop applications to review assignments and verify Azure-based application publishing from session hosts.

Instructions

List published Azure Virtual Desktop (AVD) applications. AVD apps are delivered from Azure-hosted session hosts. Use this to review AVD app assignments or verify Azure-based application publishing.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Complete implementation of ras_pub_get_avd_apps tool including registration, schema definition, and handler logic. The handler makes an API GET request to /api/publishing/apps/avd to retrieve published Azure Virtual Desktop applications.
    server.registerTool( "ras_pub_get_avd_apps", { title: "Published AVD Apps", description: "List published Azure Virtual Desktop (AVD) applications. AVD apps are " + "delivered from Azure-hosted session hosts. Use this to review AVD app " + "assignments or verify Azure-based application publishing.", annotations: READ_ONLY_ANNOTATIONS, inputSchema: {}, }, async () => { try { const data = await rasClient.get("/api/publishing/apps/avd"); 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 published AVD apps") }], isError: true }; } } );
  • Tool schema definition including title, description, read-only annotations, and empty inputSchema (no parameters required).
    { title: "Published AVD Apps", description: "List published Azure Virtual Desktop (AVD) applications. AVD apps are " + "delivered from Azure-hosted session hosts. Use this to review AVD app " + "assignments or verify Azure-based application publishing.", annotations: READ_ONLY_ANNOTATIONS, inputSchema: {}, },
  • The actual handler function that executes the tool logic - fetches AVD apps data from the RAS API and returns it as JSON text, with error handling.
    async () => { try { const data = await rasClient.get("/api/publishing/apps/avd"); 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 published AVD apps") }], isError: true }; } }
  • The rasClient.get() method used by the handler to make authenticated GET requests to the RAS API, handling authentication and automatic retries on 401 errors.
    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(); }
  • The sanitiseError() helper function used to sanitize error messages before returning them to prevent leaking sensitive information like auth tokens or passwords.
    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}`; }

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