Skip to main content
Glama
RMITBLOG

Parallels RAS MCP Server

by RMITBLOG

ras_farm_get_licensing

Check Parallels RAS license status, including type, expiration, seat count, and activation details to verify compliance and capacity.

Instructions

Get RAS licensing status, including license type (subscription/perpetual), expiration date, seat count, usage, and activation status. Use this to check license compliance, verify capacity, or diagnose licensing issues.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Tool registration with schema definition including title, description, annotations (read-only, idempotent), and empty inputSchema
    server.registerTool(
      "ras_farm_get_licensing",
      {
        title: "Licensing",
        description:
          "Get RAS licensing status, including license type (subscription/perpetual), " +
          "expiration date, seat count, usage, and activation status. Use this to check " +
          "license compliance, verify capacity, or diagnose licensing issues.",
        annotations: READ_ONLY_ANNOTATIONS,
        inputSchema: {},
      },
      async () => {
        try {
          const data = await rasClient.get("/api/farm-settings/licensing");
          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 licensing info") }], isError: true };
        }
      }
    );
  • Handler function that makes a GET request to /api/farm-settings/licensing endpoint, returns formatted JSON response, and handles errors with sanitised error messages
    async () => {
      try {
        const data = await rasClient.get("/api/farm-settings/licensing");
        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 licensing info") }], isError: true };
      }
    }
  • Helper function that sanitizes error messages by removing sensitive information (auth tokens, passwords) and truncating long responses to prevent 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}`;
    }

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