Skip to main content
Glama

update_subscription

Patch Google Play subscription listings or base plans by replacing specified fields with new values. Preview changes with dryRun before writing and update prices for new subscribers only when allowed.

Instructions

Patch a subscription. updateMask lists the fields to replace (e.g. 'listings' or 'basePlans'); subscription carries their new values. Updating basePlans changes PRICES for NEW subscribers and is gated by PLAY_MCP_ALLOW_PRICE_CHANGES (existing subscribers move only via migrate_base_plan_prices). Set dryRun:true to see current vs proposed without writing.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "packageName": "<packageName>",
      "productId": "<productId>",
      "subscription": "<subscription>",
      "updateMask": "<updateMask>"
    },
    "name": "update_subscription"
  }
}

Input Schema

NameRequiredDescriptionDefault
dryRunNoPreview the diff without writing (default false)
productIdYesSubscription product id
updateMaskYesComma-separated field mask, e.g. 'listings' or 'basePlans'
packageNameYesApplication id (package name), e.g. com.example.app
subscriptionYesPartial Subscription resource
regionsVersionNoRegions version for regional prices (default 2022/02; override the default with PLAY_MCP_REGIONS_VERSION)
latencyToleranceNoOptional propagation latency tolerance (default latency-sensitive)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.2/5.0
Behavior4/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 real work: it discloses that basePlans updates only affect NEW subscribers' prices, that the operation is gated by PLAY_MCP_ALLOW_PRICE_CHANGES, and that dryRun performs a read-only diff. It doesn't say whether the patch is reversible, what happens to fields omitted from the mask, or what the response contains, leaving some mutation semantics implicit.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core action and followed by the field-mask mechanics, the price-change caveat, and the dry-run escape hatch. Every clause carries information; nothing is padding.

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?

For a 7-parameter, nested-object mutation tool with no annotations and no output schema, the description covers the risky behaviors (price gating, subscriber scoping, dry run) well. It could still be more complete about the return value and about what a partial Subscription object must contain, but the essentials for correct invocation are present.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds genuine meaning by explaining the relationship between updateMask (fields to replace) and subscription (their new values) and by giving example mask values, but it adds nothing about regionsVersion or latencyTolerance beyond what the schema already documents.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Patch a subscription') and immediately explains the two-part mechanism (updateMask + subscription). It also names migrate_base_plan_prices as the sibling for the adjacent task, so an agent can separate this tool from the price-migration path without opening a schema.

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

Usage Guidelines4/5

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

It states clearly when to use this tool (replace named fields on a subscription) and routes the price-change-for-existing-subscribers case to migrate_base_plan_prices, plus offers dryRun as a safe preview path. It stops short of distinguishing this from other update_* siblings such as update_subscription_offer or update_listing, so the routing is good but not exhaustive.

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