Cursor · App Store Connect

Create offers and offer codes from Cursor

A 7-day free trial for new subscribers, a code for your newsletter, a discount for people who cancelled. Ask Cursor and MetaRun stages the right Apple offer type for each audience, with prices for every storefront.

Setup checked October 2026 against Cursor MCP docs, Cursor CLI

01 · Uplink

Connect Cursor once

01 · Add to ~/.cursor/mcp.json (or .cursor/mcp.json for one project)

{
  "mcpServers": {
    "metarun": {
      "url": "https://metarun.dev/api/mcp"
    }
  }
}

02 · Or use the install link

Opens Cursor with the server filled in.

https://cursor.com/link/mcp/install?name=metarun&config=eyJ1cmwiOiJodHRwczovL21ldGFydW4uZGV2L2FwaS9tY3AifQ%3D%3D

03 · Sign in

When Cursor connects, MetaRun opens in your browser. Pick read-only or read and change, and you're back in the editor with the tools listed under MCP.

Prefer a personal access token (scripts, CI)?

Use a token instead

Mint a personal access token in MetaRun under Settings, MCP. It's shown once and can be revoked any time. Cursor reads ${env:METARUN_TOKEN} from your environment. Some Cursor versions start the browser sign-in even when a header is set; if that happens, signing in works the same.

{
  "mcpServers": {
    "metarun": {
      "url": "https://metarun.dev/api/mcp",
      "headers": { "Authorization": "Bearer ${env:METARUN_TOKEN}" }
    }
  }
}
02 · Briefing

What Cursor handles here

Apple has four offer types for subscriptions and they target different people: introductory offers for those who never subscribed, promotional offers for current subscribers, offer codes for anyone with a code, and win-back offers for people who left. Each has its own screens in App Store Connect and its own rules about price and eligibility.

MetaRun exposes each one as a preview and apply pair. Cursor can create them, generate one-time codes, turn codes on and off, and read back what's live.

03 · Preflight

Before you start

  • A subscription to attach the offer to.
  • Who the offer is for: new, current, lapsed, or anyone with a code.
  • Prices per storefront for paid offers; free trials only need territories.
04 · Execution

How it runs

  1. 01

    Match the offer to the audience

    Cursor picks the offer type from who it's for: never subscribed, subscribed now, lapsed, or anyone holding a code.

  2. 02

    Price it per storefront

    Paid offers take a price per territory. Free trials take a list of territories instead, because Apple wants no price on a free row.

  3. 03

    Preview the offer

    The preview shows the offer, its duration and where it applies, with a confirm token.

  4. 04

    Generate and track codes

    One-time codes are generated in a batch after the campaign exists. Campaigns can be switched off later without deleting them.

05 · Session

An example session in Cursor

List every offer on the yearly plan and which ones are active.

  1. apple_list_subscription_offersThe yearly plan has no introductory offer.
  2. apple_preview_create_intro_offerPreview: one-week free trial for new subscribers, every territory.
  3. Cursor asks before running apple_apply_create_intro_offer. You read the preview above and approve.
  4. apple_apply_create_intro_offerCreated in every storefront.
  5. apple_preview_create_offer_codePreview: NEWSLETTER, 50% off for three months.

Illustrative: your apps, versions and numbers will differ. The tool names and their order are real.

06 · Tools

The MetaRun tools Cursor calls

ToolWhat it does
apple_list_subscription_offersreadEvery offer on a subscription, across all four types.
apple_preview_create_intro_offerpreview + applyFree trial, pay as you go, or pay up front for new subscribers.
apple_preview_create_promotional_offerpreview + applyA discount current or lapsed subscribers can redeem in the app.
apple_preview_create_offer_codepreview + applyAn offer code campaign, with custom codes or one-time codes.
apple_preview_generate_offer_codespreview + applyMint a batch of one-time-use codes.
apple_preview_set_offer_code_activepreview + applyTurn a code campaign on or off.
apple_preview_create_winback_offerpreview + applyA win-back offer for people who cancelled (iOS 18 and later).
apple_preview_create_iap_offer_codepreview + applyOffer codes for in-app purchases.

Each preview has an apply twin (the same name with apply instead of preview) that only runs with the confirm token from a fresh preview, and refuses if App Store Connect changed in between. MetaRun tools save to your MetaRun workspace only (studio projects, tracked keywords), never to Apple.

07 · Apple rules

What Apple enforces, and how MetaRun handles it

Intro offers are stored per territory

Apple keeps an introductory offer as one resource per storefront, so a 3-day trial in 175 storefronts is 175 records. MetaRun reads them back as one offer with a territory count.

Free trials carry no price

A free trial's price rows must have no price point. MetaRun takes territories instead of prices for free offers and refuses a mixed request at preview rather than repricing silently.

Issued codes can't be taken back

Generating codes isn't revertible, since a code already handed out can't be un-issued. Deactivating the campaign is the lever instead.

Win-back offers need iOS 18

Win-back offers reach people who subscribed before and cancelled, and only on iOS 18 and later.

08 · Comms

What to ask Cursor

  • Ask Cursor: List every offer on the yearly plan and which ones are active.
  • Ask Cursor: Turn off the SUMMER offer codes.
  • Ask Cursor: Add a pay-up-front intro offer: first year at $19.99 in the US, PPP elsewhere.
09 · Unattended

Run it from a script with Cursor

The Cursor CLI runs one request without the editor with agent -p. Allow only the read tools the request needs in ~/.cursor/cli-config.json (Mcp(metarun:tool_name) rules), and keep MetaRun's apply tools out of that list.

Read-only check, safe to schedule

agent -p "List every offer on each subscription of com.example.app: type, duration, territories and whether it is active. Read only." --output-format json

Don't run it with --force for MetaRun: that approves every tool, applies included.

10 · Safety

How Cursor asks before a change

Cursor asks before each MCP tool call by default, following your Run Mode settings. Keep MetaRun's apply tools on ask: that prompt is the confirm step for every App Store change. In the Cursor CLI, allow rules live in ~/.cursor/cli-config.json in the form Mcp(server:tool), so you can allow MetaRun's read tools and leave the applies out.

Apple key stays on MetaRun, encryptedPreview before every writeRecorded, revertible from history
11 · FAQ

Frequently asked questions

Which offer type should I use?

Introductory offers for people who never subscribed, promotional offers for current subscribers, win-back offers for people who left, and offer codes when you hand out a code yourself. Cursor can pick based on who you describe.

Can Cursor generate one-time offer codes?

Yes. Create the campaign, then generate a batch of one-time-use codes. Generation isn't revertible, so it always previews first.

Can I offer a free trial in some countries only?

Yes. Free trials take a list of territories; leave it out for every storefront.

Do offers work for in-app purchases?

Offer codes do, through apple_preview_create_iap_offer_code. Introductory, promotional and win-back offers are subscription features in Apple's model.

How do I connect Cursor to App Store Connect?

Add https://metarun.dev/api/mcp to ~/.cursor/mcp.json (or use the install link) and sign in to MetaRun when Cursor opens your browser. After that, ask for "offers and offer codes" in plain words and Cursor picks the MetaRun tools.

Does Cursor see my App Store Connect key?

No. Your App Store Connect API key stays envelope-encrypted on MetaRun's servers and is decrypted per request. Cursor holds a MetaRun token that you can revoke in Settings at any time.

More with Cursor

In depth: Bulk App Store pricing

Agent access

14-day free trial with agent access. No credit card. Your Apple key stays encrypted on MetaRun.