Skip to main content
Glama
r28ai

stripe-billing-ops-mcp

by r28ai

stripe_subscriptions_update

Update a Stripe subscription: change items by sending their ID; omit ID to add new items. Unprovided fields remain unchanged.

Instructions

Update a subscription. Parameters not provided are left unchanged. To change an item send its id; omitting the id adds a new item instead.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
itemsNoThe items to change, up to 20. Absent, the items are left alone.
cancelAtNoWhen to cancel: a Unix timestamp, or one of 'max_billed_until', 'max_period_end', 'min_period_end'. A timestamp before the current period ends prorates if prorations are enabled. Pass an empty string to clear a cancellation that was scheduled earlier; `cancel_at_period_end` does not clear a timestamp. A timestamp is seconds, not milliseconds: 1700000000, not 1700000000000.
metadataNoSet of key-value pairs attached to the subscription.
trialEndNoWhen the trial ends: the string 'now' to end it immediately, or a Unix timestamp at most two years out. Overrides any trial the plan defines. A timestamp is seconds, not milliseconds: 1700000000, not 1700000000000.
discountsNoCoupons and promotion codes. A populated array replaces the subscription's existing discounts. Absent, they are left alone.
descriptionNoAn arbitrary string attached to the subscription.
daysUntilDueNoDays until an invoice is due. Valid only when collection_method is 'send_invoice'.
subscriptionYesThe ID of the subscription to update.
prorationDateNoA Unix timestamp to calculate prorations against, as though the update happened then. Absent, Stripe uses now. A timestamp is seconds, not milliseconds: 1700000000, not 1700000000000.
paymentBehaviorNoWhat to do if payment for the update fails. Absent, Stripe allows the subscription to go past_due.
collectionMethodNoHow to collect payment. Absent, Stripe charges automatically.
cancelAtPeriodEndNoWhether the subscription cancels at the end of the current period. Send it only to change the setting.
prorationBehaviorNoHow to handle prorations when the billing cycle or an item quantity changes. Absent, Stripe creates them.
cancellationDetailsNoWhy the subscription is being cancelled.
defaultPaymentMethodNoThe payment method to charge. It must already belong to this subscription's customer.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag this as a mutation (readOnlyHint=false) with open-world effects. The description adds real value beyond that: the PATCH-style semantics that unprovided parameters are left unchanged, and the add-vs-update branching for items. It does not mention auth or rate limits, but the partial-update contract is the key behavioral trait an agent needs.

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 short sentences, each earning its place: purpose first, then the partial-update contract, then the one non-obvious branching rule. No filler.

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 15-parameter mutation with full schema coverage and annotations declaring the write semantics, the description surfaces the two traps an agent could hit (silent partial update, item add-vs-update). No output schema exists, so no return-value explanation is needed. Coverage is strong, though it omits any pointer to related tools.

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 schema already documents all 15 parameters thoroughly, including the items.id add/update semantics. The description restates the items id rule rather than adding meaning beyond the schema, so the baseline 3 applies.

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?

The description opens with a specific verb and resource ('Update a subscription'), which is unambiguous and separable from read-oriented siblings like stripe_subscriptions_list. It stops short of naming any sibling or scope constraint, so it is clear but not maximally differentiated.

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?

It gives useful conditional behavior for the items parameter (send `id` to modify, omit it to add), which is genuine usage guidance. However it never states when to reach for this tool versus stripe_subscriptions_list or a create path, so context is only implied.

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