Skip to main content
Glama
entraadm-mcp

entraadm-mcp

by shigechika

vm_backup_policies

Read Azure VM backup policy schedules and retention settings across Recovery Services vaults to audit protection coverage by subscription.

Instructions

Schedule and retention of the Azure VM backup policies in each Recovery Services vault.

Azure Resource Manager in the DEFAULT tenant only, also when several tenants are configured (ENTRAADM_CONFIG).

Read-only; needs the Reader role on the subscription. Per policy: policy_type (V1 = SimpleSchedulePolicy, V2 = SimpleSchedulePolicyV2 with an hourly / daily / weekly schedule), schedule (frequency, run times in UTC, weekdays, or the hourly window), retention (LongTermRetentionPolicy: daily / weekly / monthly / yearly blocks with their day selection and duration), instant_rp_days, timezone and protected_item_count (ARM's own count). A schedule or retention type this server does not know is returned as {"type": <name>, "unparsed": true}, never dropped.

subscription is an id or display name from list_subscriptions (None = every visible subscription); an unknown or ambiguous name returns found: false. Coverage flags as in vm_backup_status: skipped_vaults per subscription, skipped subscriptions when the budget ran out, capped overall.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "vm_backup_policies"
  }
}

Input Schema

NameRequiredDescriptionDefault
max_pagesNo
subscriptionNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.3.0

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does: it declares read-only, names the required Reader role, pins tenant scope, defines failure modes (unknown/ambiguous subscription → `found: false`), and guarantees no policy type is silently dropped (`{"type": <name>, "unparsed": true}`). It also explains the truncation model (skipped_vaults per subscription, skipped subscriptions on budget exhaustion, capped overall), which is exactly the kind of behavior an agent cannot infer elsewhere.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then scope/permissions, then the per-field contract, then parameter and truncation semantics — a sensible reading order. It is dense and somewhat long, and the enumerated field glosses (V1/V2, retention blocks) are heavy, but each earns its place as the only documentation of the return shape given there is no output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must define the return payload, and it does at the field level including the unparsed-type fallback and ARM's own protected_item_count. The only real gap is `max_pages`, whose paging behavior is gestured at ('budget', 'capped') rather than stated, which matters for an agent deciding how many calls to make.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does for `subscription`: accepted forms, the None default's meaning, and the unknown/ambiguous resolution behavior. `max_pages` is never named directly — its effect is only inferable from the 'budget ran out' / `capped` language, leaving one of two parameters under-specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource precisely (Azure VM backup policies per Recovery Services vault) and what it exposes (schedule and retention), and it implicitly distinguishes itself from the sibling vm_backup_status by deferring to it for coverage-flag semantics. It never uses an explicit retrieval verb, but 'Read-only' plus the per-policy field list makes the operation unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives solid operating context: DEFAULT tenant only even with multiple tenants in ENTRAADM_CONFIG, read-only, Reader role on the subscription, and how to pass `subscription` (id or display name from list_subscriptions, None = all). What's missing is an explicit statement of when to reach for this tool versus vm_backup_status or vm_activity — the routing is only implied by the shared coverage-flag vocabulary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.