Skip to main content
Glama

stripe_catalog

The catalogue: products, prices, coupons, promotion codes.

⚠️ A Stripe price is immutable on its amount. "Change the price" means creating a NEW price and deactivating the old one — update_price only touches active, metadata and nickname. Say that rather than appearing to edit an amount.

A coupon is the discount RULE (percent_off/amount_off, how long it applies); a promotion code is the TEXT a customer actually types at checkout, and always points at one coupon. Create the coupon first, then one or more promotion codes for it — several codes ("LAUNCH20", "PARTNER20") can share the same underlying coupon/discount.

Deleting a product, price or coupon is not available here (and a Coupon has no active flag to toggle); revoke a promotion code instead (update_promotion_code, active=false) — the redemption rule stays on file but nothing more can be redeemed with it.

⚠️ Verified live 2026-08-23: a promotion code's expires_at cannot be LATER than its coupon's redeem_by — Stripe rejects it outright, naming both timestamps. And on a promotion code object, the coupon it applies is under promotion.coupon (with promotion.type == "coupon"), NOT a top-level coupon field — that flat shape was retired.

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": "stripe_catalog"
  }
}

Input Schema

NameRequiredDescriptionDefault
opNo"list_products" (default) and the other fifteen verbs.list_products
_orgNoOrg (id) de CET APPEL. `oto_list_orgs()`.
codeNo"list_promotion_codes" filter; on "create_promotion_code", the literal text the customer types (omit to let Stripe generate one).
nameNoREQUIRED by "create_product". On "create_coupon"/"update_coupon", what the customer sees on their invoice (optional).
limitNo
_groupNoÉquipe (id) de CET APPEL, sous son org parente.
activeNofilter on lists; on "update_product"/"update_price", `active=false` retires it from sale without deleting anything; on "update_promotion_code", `active=false` revokes the code.
_run_idNoOBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas.
_projectNoProjet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`.
currencyNo
durationNoREQUIRED by "create_coupon" — "once" | "repeating" | "forever".
metadataNo
price_idNoREQUIRED by "get_price"/"update_price".
tax_codeNoon "create_product"/"update_product" — e.g. "txcd_10000000" (general services). Needed before a payment link can be created on accounts eligible for managed payments (verified live).
_instanceNoInstance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`.
coupon_idNoREQUIRED by "get_coupon"/"update_coupon", and by "create_promotion_code" (the discount rule the new code applies).
redeem_byNo"create_coupon" — Unix timestamp after which the coupon itself can no longer be attached to a new subscription/order.
amount_offNo
expires_atNo"create_promotion_code" — Unix timestamp after which this CODE stops working (the coupon behind it can outlive it).
product_idNoREQUIRED by "get_product"/"update_product"/"create_price"; filters "list_prices".
customer_idNo"create_promotion_code" — restricts the code to one customer (omit for account-wide).
descriptionNo
percent_offNo
unit_amountNo"create_price", in cents. currency: "create_price", and "create_coupon" when paired with `amount_off`.
restrictionsNo"create_promotion_code" — e.g. `{"first_time_transaction": true}` or `{"minimum_amount": 5000, "minimum_amount_currency": "eur"}`.
starting_afterNo
max_redemptionsNo"create_coupon"/"create_promotion_code" — caps total uses.
promotion_code_idNoREQUIRED by "get_promotion_code"/"update_promotion_code".
duration_in_monthsNo"create_coupon", REQUIRED when `duration="repeating"`.
recurring_intervalNo"create_price" — omit for a one-off price.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

No schema history has been recorded yet.

TDQS

A3.9/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 burden and does substantial work: it discloses that prices are amount-immutable, that `update_price` only touches active/metadata/nickname, that deletion is unavailable for products/prices/coupons, that a coupon has no `active` flag, and that `expires_at` is rejected when later than the coupon's `redeem_by`. It omits permission/auth requirements and pagination behavior for the list ops, which keeps it below a 5.

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-loaded with the object model and organized into short paragraphs around the immutable-price and coupon/promotion-code distinctions, with warnings marked explicitly. It is on the long side and includes a meta-instruction ('Say that rather than appearing to edit an amount') that reads as prompt scaffolding rather than tool documentation, but there is little true padding.

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

Completeness3/5

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

For a tool with sixteen ops and thirty parameters, the description covers the domain model and the risky mutations well, and an output schema exists so return values need not be documented. However, it never enumerates the ops or explains the eleven list/get operations, and leaves pagination (`limit`, `starting_after`) completely unexplained, so an agent still has gaps for the read paths.

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 77%, so baseline is 3, and the description adds genuine meaning on top: it links `coupon_id` to the coupon-then-code ordering, explains the `expires_at` vs `redeem_by` ordering constraint that the schema only hints at, and clarifies the immutable-price semantics behind `unit_amount`. Parameters like `limit`, `starting_after`, `metadata`, and `amount_off` remain undescribed in both places, so it doesn't fully compensate.

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 opening line names the resource domain precisely (products, prices, coupons, promotion codes) and the body makes clear it covers both listing and creation/updating of those objects. It does not, however, state that this is a single multi-op tool with sixteen verbs, nor distinguish it from siblings such as stripe_search or stripe_checkout, so an agent must infer the scope from the schema's `op` enum.

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?

Strong workflow guidance: create the coupon first then the promotion code(s), use `update_promotion_code` with `active=false` instead of deleting, and create a NEW price rather than trying to edit an amount. What is missing is routing guidance against the other Stripe tools (stripe_search, stripe_payment, stripe_checkout) and any hint about the default `list_products` op.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources