stripe-test-clock-constraints

Reference for Stripe test clock constraints and pitfalls. Use when planning or debugging test-clock workflows, when an advance or customer-attach step fails, or to check rules before building a time-s

SKILL.md

GitHub

Stripe Test Clock Constraints

Quick reference for the rules and gotchas of Stripe test clocks as exposed by this MCP. Consult this before designing a time-simulation scenario.

Hard constraints

  • Max 3 customers per clock. create_stripe_test_customers with a test_clock set rejects number > 3. To exceed 3 customers in one scenario, use additional clocks.
  • Clock attachment is creation-time only. A customer can be linked to a test clock only when it is created (create_stripe_test_customers with test_clock). There is no way to attach or move an existing customer to a clock afterward, so create the clock first.
  • Advance is forward-only. advance_stripe_test_clock can only move frozen_time to a time after the current frozen time. You cannot rewind a clock; to test an earlier point, create a new clock.
  • Advance is asynchronous. After advance_stripe_test_clock, the clock enters an advancing state and processes billing events in the background. The tool returns the status once in its response, but this MCP server does not expose a tool to retrieve or re-poll the clock, so you cannot programmatically watch it reach ready. If the response shows advancing, wait a few seconds before follow-up operations, or have the user confirm the clock has settled in the Stripe Dashboard.

Time format

  • frozen_time is a Unix timestamp in seconds (epoch seconds), not milliseconds and not an ISO string.
  • Convert carefully:
    • Many languages give milliseconds (Date.now() in JS) — divide by 1000 and floor.
    • From an ISO date: compute epoch seconds (for example, in shell date -d '2024-02-01T00:00:00Z' +%s).
    • When reading a value back, multiply by 1000 to build a JS Date.
  • A common bug is passing milliseconds, which lands the clock far in the future; double-check the magnitude (a 2024-2026 timestamp is ~1.7e9, a millisecond value is ~1.7e12).

Practical guidance

  • Plan all the time points you need up front; since you cannot rewind, build a fresh clock per backward scenario.
  • Keep the test_clock_id returned at creation; it is required for every advance.
  • To cross a billing boundary, advance to just past the subscription's current_period_end.
  • For an end-to-end billing procedure, see stripe-billing-cycle-test.
  • For setup/cleanup of the data around clocks, see stripe-test-data-lifecycle.