Skip to main content
Glama
Rubrik MCP

Rubrik MCP

Official
by rubrikinc

Rubrik MCP

An MCP server that connects AI assistants to the Rubrik Security Cloud GraphQL API. It's built for Rubrik admins and teams automating against Rubrik, and runs locally (on your own workstation or on an agent's server) alongside the AI assistant that calls it.


What you can do

Discovery

The MCP ships with a pre-built index of the entire RSC GraphQL API. The discovery tools let the AI agent explore that index — searching operations, inspecting full argument signatures, tracing input and return types — to find exactly the right operation and field shape for any request. This produces precise, well-formed GraphQL on the first try.

Discovery tools require no RSC credentials and work entirely offline. This makes them useful on their own: if you're evaluating the API, prototyping an integration, or building automation before you have production credentials, you can start immediately.

> "What operations are available for SLA management?"
> "Show me the full argument shape for the assignSla mutation."
> "Generate Python code to assign an SLA domain to a list of workload IDs."

Because the agent understands both queries and mutations from the schema index, it can generate runnable Python code for any write operation — without ever connecting to RSC.

Execution

With an RSC service account, the agent can run live GraphQL queries against your environment:

  • List workloads with protection status, compliance state, and backup history

  • Retrieve recent events and failures

  • Trigger on-demand snapshots and poll until they complete

  • Register hosts and assign SLA domains

Raw GraphQL execution is read-only. If you ask for a write operation not covered by a built-in tool, the server returns the attempted mutation and the agent generates a runnable code sample. A small number of write operations are available as dedicated built-in tools: on-demand snapshots (rsc_take_on_demand_snapshot), host onboarding (rsc_onboard_host), and SLA assignment (rsc_assign_sla). These are disabled by default — set "writes_enabled": true in the gating policy to expose them. For everything else, the generated code approach gives you a runnable script with full control.

WARNING

Write tools act on your Rubrik environment, and the LLM driving the MCP decides when to call them. Any model can misread instructions or be influenced by untrusted data it reads (prompt injection) and invoke a write tool you did not intend — for example an SLA change via rsc_assign_sla that leaves data unprotected. As more write tools are added, this surface grows. They are disabled by default for that reason; enabling them is an explicit choice. The durable boundary is a least-privilege, read-only service account, which cannot perform any write operation regardless of which model you use or how the agent behaves. See Service account role recommendations, and enable Quorum Authorization for destructive operations.

Built-in tools

Discovery — no credentials required

Tool

What it does

rsc_search_schema

Find the right query or mutation by keyword, field meaning, or type vocabulary in one call

rsc_describe_operation_full

Argument signature with all input/enum types expanded inline

rsc_describe_type

Fields and values for a GraphQL type

Execution — service account required

Tool

What it does

rsc_execute_operation

Run any raw GraphQL query (mutations generate code instead)

rsc_get_workloads

Workloads with protection status, compliance, and backup history

rsc_get_events

Recent events and activity, always time-scoped

rsc_get_clusters

Rubrik clusters registered in RSC, with status, version, capacity, and runway

rsc_get_sla_domains

SLA Domains with base frequency, retention lock, archival, and replication settings

rsc_search_help

Search KB articles, product docs, and known issues by keyword

rsc_take_on_demand_snapshot

Trigger a backup for a workload and return the job ID

rsc_wait_for_job

Poll a job until completion

rsc_onboard_host

Register a physical or virtual host

rsc_assign_sla

Assign, unassign, or set do-not-protect on workloads

Workflow management — service account required

Tool

What it does

rsc_save_workflow

Save a conversation flow as a named reusable tool

rsc_list_workflows

List all saved workflows

rsc_delete_workflow

Remove a saved workflow

Tool creation

After the agent has done the discovery work to answer a question, you can save that entire flow as a named MCP tool:

"Save this as a workflow so I can reuse it."

On the next restart, that tool appears alongside the built-in tools — a single call instead of multi-step schema discovery. Repeated operations use fewer tokens and respond faster. Workflow files are plain JSON you can edit, version-control, and share with your team.


Related MCP server: mcp-graphql-tools

Installation

Prerequisites

  • uv (recommended), or Python 3.10 or later with pip

  • A Rubrik Security Cloud account with a service account (for execution tools only)

Install via agent prompt

If you're using Claude Code, paste this into the chat and the agent will handle the rest:

"Add the Rubrik MCP server (PyPI package rubrik-mcp, run it with uvx rubrik-mcp) to my Claude Code MCP configuration. My RSC service account JSON is at ~/.rsc/service_account.json."

For Claude Desktop:

"Add the Rubrik MCP server (PyPI package rubrik-mcp, run it with uvx rubrik-mcp) to my Claude Desktop config. My RSC service account JSON is at ~/.rsc/service_account.json."

Install manually

Using uvx (recommended): there is nothing to install separately. uvx rubrik-mcp downloads the package from PyPI into a cached, isolated environment and runs it. Use it directly as the command in your client configuration below. To pin a specific release, use rubrik-mcp@<version>, for example uvx rubrik-mcp@0.11.20261102.

Using pip:

pip install rubrik-mcp

Note the full path to the installed command. You will use it in place of uvx rubrik-mcp in the client configuration:

which rubrik-mcp
# example: /Users/you/.venv/bin/rubrik-mcp

Hardened install (optional)

For environments that require install-time hash verification (each package checked against a known-good cryptographic hash before it is installed), a hashed requirements.txt is published in this repository for each release. Install the verified dependency set first, then the package itself:

pip install --require-hashes -r requirements.txt
pip install --no-deps rubrik-mcp

requirements.txt is generated from the locked, hash-pinned dependency set (uv export); --require-hashes makes pip refuse any package whose hash does not match, and --no-deps on the second step keeps the verified set untouched. Then configure your client with the full path to rubrik-mcp, as in the pip instructions above. This path is optional; the standard install is sufficient for most users.

Configure your MCP client

Claude Code:

claude mcp add rubrik -e RSC_SERVICE_ACCOUNT_FILE=/path/to/service_account.json -- uvx rubrik-mcp

Options such as -e go before --; everything after -- is the command that launches the server. For discovery-only usage, omit the -e option.

Verify it's registered:

claude mcp list

Claude Desktop: edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "rubrik": {
      "command": "uvx",
      "args": ["rubrik-mcp"],
      "env": {
        "RSC_SERVICE_ACCOUNT_FILE": "/path/to/service_account.json"
      }
    }
  }
}

Desktop apps don't always inherit your shell's PATH. If Claude Desktop reports that it can't find uvx, replace "uvx" with its full path from which uvx (for example /Users/you/.local/bin/uvx).

Other MCP clients (generic stdio):

{
  "name": "rubrik",
  "transport": "stdio",
  "command": "uvx",
  "args": ["rubrik-mcp"],
  "env": {
    "RSC_SERVICE_ACCOUNT_FILE": "/path/to/service_account.json"
  }
}

If you installed with pip, set "command" to the full path of rubrik-mcp and drop "args".


Service account setup

Create a service account in RSC at Settings > Users and Roles > Service Accounts. Download the JSON credential file when prompted — RSC will not show the secret again.

The credential file looks like this:

{
  "client_id": "client|...",
  "client_secret": "...",
  "access_token_uri": "https://<your-rsc-domain>/api/client_token"
}

Provide it to the MCP server using one of three methods (checked in this order):

Option A — Service account JSON file (recommended)

export RSC_SERVICE_ACCOUNT_FILE=/path/to/service_account.json

Option B — Individual environment variables

export RSC_URL=https://<your-rsc-domain>
export RSC_CLIENT_ID=client|...
export RSC_CLIENT_SECRET=...

Option C — Config file at ~/.rsc/config.json

{
  "client_id": "client|...",
  "client_secret": "...",
  "access_token_uri": "https://<your-rsc-domain>/api/client_token"
}

Service account role recommendations

The role you assign to the service account determines what the MCP server can access. Assign only what your workflows actually need.

For monitoring, reporting, and auditing — assign a read-only role. This covers workload listing, compliance status, event history, and backup reporting. A read-only role cannot modify SLA assignments, trigger snapshots, or change any configuration. This is the right starting point for most users.

For DevOps automation — assign a role with the specific permissions your automation requires. Common additions: SLA management permissions (to assign or modify SLA domains) and on-demand backup permissions (to trigger snapshots). Do not grant cluster admin or global admin unless the workflow explicitly requires it.

General guidance:

  • Create a dedicated role for the MCP service account rather than reusing an existing admin role. Name it clearly (e.g. "MCP Read-Only" or "MCP DevOps").

  • Configure roles at Settings > Users and Roles > Roles. Rubrik's permission model is hierarchical — scope roles to specific clusters or workload types where possible rather than granting global access.

  • For destructive operations (snapshot deletion, SLA policy removal, cluster configuration), enable Quorum Authorization at Settings > Security > Quorum Authorization. This requires a second authorized user to approve the operation before it executes, even when the service account has the necessary permissions.

  • Restrict which IPs can authenticate using the RSC IP allowlist at Settings > Security > IP Allowlist. Add only the IP or CIDR range of the machine running the MCP server.

  • Rotate client secrets on a schedule (monthly at minimum). Secrets do not expire by default. Use chmod 600 on any file containing a client_secret.

  • All API activity is recorded in RSC audit logs at Reports > Audit Logs. Review periodically.

  • Each request to RSC identifies the MCP in its headers: Sdk-Language: rubrik-mcp, Sdk-Version set to the MCP version, and a User-Agent such as rubrik-mcp/<version> (rsc-python-client/<version>; Python/<version>) claude-code/2.1.0. The last part is the MCP client's self-reported name and version. No other client or user information is sent.


Saving your own tools

When you find yourself asking the same question repeatedly, save it:

"Save this as a workflow so I can reuse it."

The AI calls rsc_save_workflow, which writes a JSON file to the MCP config directory's workflows/ folder — ~/.config/rubrik-mcp/workflows/ by default, or under $RUBRIK_MCP_CONFIG_DIR when set (see docs/docker.md for the containerized case). On the next restart, that workflow is registered as a named MCP tool — a single call instead of multi-step schema discovery. Repeated operations use fewer tokens and respond faster.

Workflow files are plain JSON. Open them in any editor, adjust the query, change the defaults, or share them with your team.

Community-contributed workflows (threat feed management, SLA operations, and more) are available in the rubrik-community repository. Copy any JSON file into the config directory's workflows/ folder (~/.config/rubrik-mcp/workflows/ by default, or under $RUBRIK_MCP_CONFIG_DIR) and restart your MCP client to install it.


Further reading

For the full built-in tools reference, architecture diagram, the local gating policy (~/.config/rubrik-mcp/mcp-policy.json, relocatable via $RUBRIK_MCP_CONFIG_DIR), the audit log (mcp-audit.log, in the same config directory), upgrade notes for config previously kept in ~/.rubrik, and development setup, see docs/advanced.md. To run the server in a container, see docs/docker.md.

Available Tools

13 tools
rsc_delete_workflowA
Destructive

Delete a user-defined workflow from the MCP config dir's workflows/ folder.

Location is ~/.config/rubrik-mcp/workflows/ by default, or under $RUBRIK_MCP_CONFIG_DIR when set. Removes the workflow file from disk. The workflow remains callable in the current server session but will not load on next restart.

Args: name: The workflow name (as returned by rsc_list_workflows).

Returns: Dict with status, name, and path of the deleted file.

Inputs: name (required).

rsc_describe_operation_fullA
Read-only

Get an operation's signature with all input types expanded inline.

Returns an operation's argument signature with all input/enum types expanded inline — recursively up to depth levels. Combines the operation lookup and rsc_describe_type into one call so you have everything needed to construct a correct query without guessing.

Args: name: camelCase operation name (e.g. "azureNativeVirtualMachines"). operation_type: "query" or "mutation". depth: How many levels of input types to expand (default 2).

Returns: Dict with operation details plus: - "expanded_types": all referenced input/enum type definitions - "return_type_fields": object/interface types in the return type, expanded 2 levels deep (connection wrapper → node fields), so you know exactly which fields are selectable in the query body. Interface types include an "inline_fragments" key listing each concrete implementor and its fields — these fields are ONLY accessible via "... on TypeName { field }" inline fragments in your query; they cannot be queried directly on the interface.

Inputs: name (required), operation_type (required), depth.

rsc_describe_typeA
Read-only

Get the definition of a GraphQL type used in RSC operations.

Args: name: Type name (e.g. "CreateGlobalSlaInput", "SlaAssignTypeEnum").

Returns: Dict with name, kind, and either: - fields: {fieldName: {type, description}} for objects/inputs/interfaces - values: [str] for enums - types: [str] for unions

Inputs: name (required).

rsc_execute_operationA
Read-only

Execute a raw GraphQL query against the live RSC API.

This tool supports queries only. Mutations are not available via raw GraphQL — use built-in tools (rsc_take_on_demand_snapshot, etc.) for supported write operations. If you submit a mutation, this tool returns a mutation_blocked error with the attempted operation so Claude can generate a Python code sample for you.

IMPORTANT: Write operation as a single line with no newlines or extra whitespace. Multi-line strings appear as ugly \n escape sequences in the tool call display. Good: "query { nodes { id name } }"

Requires RSC credentials — set one of:

  • RSC_SERVICE_ACCOUNT_FILE env var (path to service account JSON)

  • RSC_URL + RSC_CLIENT_ID + RSC_CLIENT_SECRET env vars

  • ~/.rsc/config.json

Args: operation: A complete GraphQL query string on a single line, e.g.: "query { accountId }" "query ListSLAs($after: String) { slaDomains(after: $after) { count nodes { id name } pageInfo { hasNextPage endCursor } } }" variables: Optional dict of variable values for parameterized operations.

Returns: The raw JSON response from the RSC GraphQL API (data + errors if any). Returns {"error": "mutation_blocked", "blocked_operation": "...", "message": "..."} if a mutation is submitted — Claude will use this to generate a Python code sample.

Note: returns the raw GraphQL response with no field filtering or redaction — do not use in contexts where data minimization of personal-data-bearing fields is required.

Inputs: operation (required), variables.

rsc_get_clustersA
Read-only

List Rubrik CDM clusters registered in RSC. Use for any question about cluster inventory, connection status (connected/disconnected/degraded), CDM version, storage capacity, runway, sync health, node health, or hardware warnings. Filters: name, connection status, cluster type.

Each result includes:

  • Identity: id, name, version, type, productType

  • Status: status (Connected/Disconnected/Initializing), isHealthy

  • Capacity: metric.totalCapacity, usedCapacity, availableCapacity (bytes)

  • Runway: estimatedRunway (days before storage is full)

  • Nodes: clusterNodeConnection.count (number of nodes in the cluster)

  • Timing: lastConnectionTime

Args: name_contains: Filter by cluster name. Passed to the server-side name filter. status: Connection status filter. One of: Connected, Disconnected, Initializing. cluster_type: Cluster type filter. One of: Cloud, ExoCompute, OnPrem, Polaris, Robo, Unknown. limit: Maximum number of clusters to return. Default 20, max 100.

Returns: A dict with: - count: true total matching the filter (the connection's count). - returned: how many clusters are in this response. - truncated: True when returned < count (more exist than were returned). - clusters: list of cluster records.

Inputs: limit, status, cluster_type, name_contains.

rsc_get_eventsA
Read-only

Get recent events and activity for workloads.

Returns backup jobs, failures, anomalies, and other activity. Always scoped to a time window (default: last 24 hours) to keep queries fast.

For failure details, each event includes the error message, reason, and recommended remedy where available.

Args: last_hours: How far back to look, in hours. Default 24. Always provide this — omitting a time range makes the query very slow. workload_id: Filter to a specific workload FID (from rsc_get_workloads). Use this to answer "why did the backup fail for workload X". object_name: Filter by object name substring. status: Filter by event status. One of: SUCCESS, FAILURE, WARNING, RUNNING, CANCELED, CANCELING, QUEUED, PARTIAL_SUCCESS, TASK_FAILURE, TASK_SUCCESS, INFO. severity: Filter by severity. One of: SEVERITY_CRITICAL, SEVERITY_WARNING, SEVERITY_INFO. activity_type: Filter by activity type. Common values: BACKUP, RECOVERY, REPLICATION, ARCHIVE, ANOMALY, INDEX, LOG_BACKUP. cluster_id: Filter by Rubrik cluster UUID. limit: Maximum number of events to return. Default 100.

Returns: A dict with count (true total matching the filter), returned (how many events are in this response), truncated (True when more events exist than were returned, because of limit or the record cap), and events (the list of event records). Report count for "how many" questions, not len(events).

Inputs: limit, status, severity, cluster_id, +4 more.

rsc_get_sla_domainsA
Read-only

List SLA Domains (protection policies) configured in RSC. Use for any question about protection policies — filter by name, protected workload type (including Kubernetes), cluster, or retention lock status. Also use for: counting SLA policies, finding which SLAs protect a specific workload type, identifying retention-locked SLAs, or finding SLAs with specific replication or archival configurations.

Each result includes:

  • Identity: id, name, description

  • Object types: objectTypes (SlaObjectType enum values for workloads this SLA covers)

  • Coverage: protectedObjectCount (number of workloads under this SLA)

  • Retention lock: isRetentionLockedSla, retentionLockMode

  • Base frequency: baseFrequency.duration + unit (primary backup schedule)

  • Archival: archivalSpecs (target name, type, and frequency threshold)

  • Replication: replicationSpecsV2 (destination cluster IDs and names)

Args: name_contains: Filter by SLA name (server-side name filter). object_type: Filter by protected workload type. Must be a SlaObjectType enum value, e.g. "VSPHERE_OBJECT_TYPE", "K8S_OBJECT_TYPE", "AWS_EC2_EBS_OBJECT_TYPE", "NUTANIX_OBJECT_TYPE". cluster_id: Filter by cluster UUID — returns SLAs associated with that cluster. is_retention_locked: When True, return only retention-locked SLAs. When False, return only non-retention-locked SLAs. Omit to return all. Applied client-side after fetching; count reflects the server-side total before this filter. limit: Maximum number of SLA domains to return. Default 50, max 200.

Returns: A dict with: - count: true total matching the server-side filter (before is_retention_locked). - returned: how many SLA domains are in this response. - truncated: True when returned < count. - sla_domains: list of SLA domain records.

Inputs: limit, cluster_id, object_type, name_contains, +1 more.

rsc_get_workloadsA
Read-only

List workloads with protection, compliance, usage, and backup status.

Each result includes:

  • Identity: fid, name, objectType

  • SLA: slaDomain (assigned SLA), protectionStatus (Protected/NoSla/DoNotProtect)

  • Compliance: complianceStatus (IN_COMPLIANCE, OUT_OF_COMPLIANCE, etc.)

  • Backup history: lastSnapshot, localSnapshots, missedSnapshots, totalSnapshots

  • Usage: physicalBytes, logicalBytes

  • Location: location (e.g. vCenter, host, or instance the workload lives on), cluster (Rubrik cluster managing the workload)

Args: object_type: Filter by workload type, e.g. "NutanixVirtualMachine", "VmwareVirtualMachine", "AzureNativeVm", "AwsNativeEc2Instance". Cannot be combined with excluded_object_types. protection_status: One of "Protected", "NoSla", "DoNotProtect". Omit to return all statuses. search_term: Filter by name substring. compliance_status: Filter by compliance state. One of: "IN_COMPLIANCE" — protected, active, no missed snapshots. "OUT_OF_COMPLIANCE" — protected, active, one or more missed snapshots. "UNPROTECTED" — no effective SLA assigned. "NOT_APPLICABLE" — protected but relic or archived; compliance not evaluated. "NOT_AVAILABLE" — protected and active but compliance could not be computed (SLA engine error or unmet precondition). "EMPTY" — report sync has not yet produced a value for this object; data is absent, not wrong. Indicates the cluster's report sync is lagging. Note: "NULL" also exists in the underlying store but is excluded from this filter — it indicates a workload with no compliance status object at all (distinct from EMPTY) and is not used in practice by the ETL pipeline. sla_time_range: Compliance window to evaluate. Defaults to the entire protection lifetime of each workload, which often overstates violations. Prefer a shorter window for actionable results. One of: "LAST_SNAPSHOT", "LAST_2_SNAPSHOTS", "LAST_3_SNAPSHOTS", "LAST_24_HOURS", "PAST_7_DAYS", "PAST_30_DAYS", "PAST_90_DAYS", "PAST_365_DAYS", "SINCE_PROTECTION". sla_id: Filter to workloads assigned to a specific SLA Domain ID. Use this to answer "list all VMs in SLA X" — pass the SLA's UUID. Matches on effective SLA (inherited or directly assigned). cluster_id: Filter to workloads managed by a specific Rubrik cluster UUID. object_fids: Filter to specific workload FIDs (list of UUIDs). Use to fetch details for a known set of workloads in a single call. object_state: Filter by lifecycle state. One of: "ACTIVE", "ARCHIVED", "RELIC", "NOT_SPECIFIED". Use "RELIC" to find decommissioned workloads that still have snapshots. org_id: Filter to workloads belonging to a specific organization UUID. is_local: True to return only local workloads; False for remote/replicated only. Omit to return both. excluded_object_types: List of workload types to exclude. Cannot be combined with object_type. sort_by: Field to sort by, e.g. "MissedSnapshots", "Name", "LastSnapshot", "ComplianceStatus", "SlaDomainName". sort_order: "ASC" or "DESC". limit: Maximum number of results to return. Omit for all results (bounded by the server-side record cap).

Returns: A dict with: - count: the true total matching the filter (the connection's count). - returned: how many workloads are in this response. - truncated: True when returned < count (more exist than returned, because of limit or the record cap). Report count for "how many" questions, not len(workloads). - workloads: the list of workload records.

Inputs: limit, org_id, sla_id, sort_by, +11 more.

rsc_list_workflowsA
Read-only

List all user-defined workflows in the MCP config dir's workflows/ folder.

Location is ~/.config/rubrik-mcp/workflows/ by default, or under $RUBRIK_MCP_CONFIG_DIR when set. Returns name, description preview, step count, and the resolved file path for each workflow.

Inputs: no named parameters. Returns: result

rsc_save_workflowA
Destructive

Save a multi-step workflow as a named, callable MCP tool.

Call this after completing a workflow in conversation to persist it for future use. The workflow is written to the workflows/ dir under the MCP config directory (~/.config/rubrik-mcp/workflows/ by default, or under $RUBRIK_MCP_CONFIG_DIR when set) and registered immediately. It loads automatically on next server start. The exact file path is returned in the response.

Provide either spec (the complete workflow dict) or steps + the other fields individually. Passing spec is simpler when the LLM has already constructed the full definition.

Workflow spec format: { "schema_version": 1, "name": "rsc_my_workflow", "description": "What this does and when to use it.", "steps": [ { "id": "step1", "mcp": "rubrik", "tool": "rsc_execute_operation", "args": {"operation": "query { accountId }"} }, { "id": "step2", "mcp": "virustotal", "tool": "get_threat_actor_files", "args": {"threat_actor_id": "${step1.data.accountId}"} } ] }

RSC steps ("mcp": "rubrik") execute server-side. Non-RSC steps are returned as next_steps for the LLM to execute. Use "${step_id.path.to.value}" in args to reference prior step results.

Args: name: Tool name (valid Python identifier, e.g. "rsc_get_aws_failures"). description: What this workflow does and when to use it. steps: List of step dicts (id, mcp, tool, args). spec: Complete workflow spec dict — use instead of name/description/steps when passing the full definition at once.

Returns: Dict with status, name, path, and a note about restart behavior.

Inputs: name (required), description (required), spec, steps.

rsc_search_helpA
Read-only

Search Rubrik KB articles, product documentation, and known issues.

Use when: an RSC event or workload has a failure/error message, the user asks a troubleshooting or "how do I" question, or an error code (e.g. RBK91030123) is present. Always call this before answering from memory — KB articles reflect the current product state. Results include title, description snippet, source type, and a direct link to the full article.

Args: query: Free-text search string (e.g. "ransomware recovery", "SLA not applying"). source: Limit results to one source. One of: KB_ARTICLES, PRODUCT_DOCS, KNOWN_ISSUES. Omit to search all sources. limit: Maximum number of results to return. Default 10.

Returns: A dict with count (total matches), returned (how many results are in this response), truncated (True when more results exist than were returned), and results (list of items with title, source, description, and link). Report count for "how many" questions, not len(results). Note: link may be null for some results.

Inputs: query (required), limit, source.

rsc_search_schemaA
Read-only

Search the full RSC GraphQL schema to find relevant operations.

Searches operation names/descriptions, field semantics, and type-level vocabulary in one call and returns the best candidate operations ranked by relevance. Use this whenever you need to find an operation and don't already know its name.

The search runs three complementary indexes:

  • Operation index: matches operation names and descriptions directly

  • Field index: finds concepts buried in nested type fields (e.g. "who is logged in" → Group.activeUsers → operations returning Group)

  • Type index: matches domain concepts to operations via aggregate type vocabulary (e.g. "cluster storage runway" → Cluster type → listing ops)

Results are deduplicated and merged; the same operation may be surfaced by multiple indexes and will appear once with the highest score.

Args: search: Natural-language query or keywords describing what you want. Must be non-empty. Use descriptive terms, not operation names. operation_type: Filter results to "query", "mutation", or "all" (default). Use "query" for read-only intent, "mutation" for write intent.

Returns: Dict with: - operations: list of dicts with name, type, description, return_type, score, source (ops/fields/types) - search: the search string used

Inputs: search (required), operation_type.

rsc_wait_for_jobA
Read-only

Poll an RSC job until it completes and return the final status.

Handles all job types automatically based on objectType — no polling code needed from the caller.

How to get job_id and cluster_id:

  • CDM workloads: job_id = the id field from the AsyncRequestStatus returned by the snapshot mutation. cluster_id = the cluster_id field returned by rsc_take_on_demand_snapshot (included automatically for CDM types). Falls back to cluster.id from rsc_get_workloads if needed.

  • Cloud-native workloads: job_id = taskchainUuid from taskchainUuids[0].taskchainUuid in the mutation response. cluster_id is not needed.

For background monitoring without blocking, run rsc-job-monitor via the Bash tool and watch it with the Monitor tool: Bash(run_in_background=true): /app/.venv/bin/rubrik-job-monitor --job-id --object-type [--cluster-id ] Monitor(command): /app/.venv/bin/rubrik-job-monitor --job-id --object-type [--cluster-id ]

Args: job_id: Request ID (CDM) or taskchainUuid (cloud-native). object_type: Workload objectType — determines which status query to use. cluster_id: Rubrik cluster UUID. Required for CDM workloads. Get it from rsc_get_workloads cluster.id. timeout: Maximum seconds to wait before returning. Default 300. poll_interval: Seconds between status checks. Default 10.

Returns: Dict with status, progress, done, raw, and optionally timed_out. CDM status values: SUCCEEDED, FAILED, CANCELED, QUEUED, IN_PROGRESS. Cloud-native state values: SUCCEEDED, FAILED, CANCELED, RUNNING, READY. jobInfo status values: SUCCESS, FAILURE, IN_PROGRESS, UNSPECIFIED.

Inputs: job_id (required), object_type (required), timeout, cluster_id, +1 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 13 tools

    Disambiguation4/5

    The three schema-introspection tools (rsc_search_schema, rsc_describe_type, rsc_describe_operation_full) are closely related but their descriptions clearly delineate search vs. type lookup vs. full operation expansion. The data-fetching tools each target a distinct resource (workloads, events, clusters, SLA domains), and workflow CRUD is unambiguous.

    Naming Consistency5/5

    All tools share a uniform rsc_ prefix followed by a consistent snake_case verb_noun pattern (get_workloads, list_workflows, delete_workflow, search_schema, describe_type, wait_for_job). No mixed conventions or stray casing.

    Tool Count5/5

    13 tools is well within the ideal 3-15 range, with each tool earning its place across introspection, read operations, job polling, and workflow management. No redundancy that would justify trimming.

    Completeness3/5

    Read coverage is solid (workloads, events, clusters, SLAs, help) and raw queries via rsc_execute_operation fill gaps, but mutations are explicitly blocked and there are no built-in write/recovery tools despite descriptions referencing rsc_take_on_demand_snapshot and similar 'built-in tools' that are absent from the surface. This leaves a notable gap for any write/protection workflow.

    Maintenance

    ActivityActive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      C
      quality
      B
      maintenance
      Connects AI coding assistants to Snyk API & Web for onboarding scan targets, configuring authentication, running DAST scans, and triaging findings through natural language.
      51
      38 PyPI
      8
      Apache 2.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      Connects AI assistants to Turbot Guardrails for natural language exploration, analysis, and automation of cloud governance.
      13 npm
      4
      Apache 2.0