Skip to main content
Glama
swlittles

App Store Connect MCP

by swlittles

Remove introductory offers

remove_intro_offers
DestructiveIdempotent

Delete introductory offers, such as free trials, across subscription territories in App Store Connect. Runs as a dry run first, reports progress, and can resume after rate limits.

Instructions

Deletes a subscription's introductory offers (for example a free trial) in every territory or only some. Apple stores one offer per territory, so this is a bulk job: it reports progress, keeps going past individual failures, stops early if the hourly rate limit runs low, and can be re-run to finish.

Destructive: dry_run defaults to true and returns the plan. Show it to the user, then call again with dry_run: false. Needs ASC_WRITE=1.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
appNoApp ID, bundle ID or exact app name. Defaults to ASC_APP_ID, or to the only app the key can see.
dry_runNoDefaults to true: return the plan without changing anything. Call again with dry_run: false to apply it.
offer_modeNoOnly offers of this kind.
territoriesNoOnly these territories (ISO alpha-3, e.g. USA, GBR). Default: all.
subscriptionYesSubscription ID or product ID (e.g. com.example.app.yearly).

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.0

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond what annotations declare (destructive/idempotent/openWorld) by disclosing the bulk-job semantics: reports progress, continues past individual failures, stops early when the hourly rate limit runs low, and is safely re-runnable. The dry_run-defaults-to-true workflow and the ASC_WRITE=1 auth requirement are exactly the operational context an agent otherwise couldn't infer.

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 verb and scope, then a tight second paragraph on the destructive/dry_run contract. Every clause carries useful weight; the bulk-behavior sentence is dense but justified for a rate-limited batch operation.

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

Completeness5/5

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

For a destructive bulk operation with no output schema, the description supplies the missing pieces: progress/failure/rate-limit behavior, re-runnability, auth prerequisite, and the mandatory dry_run preview flow. Nothing essential to calling it correctly is left unexplained.

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 every parameter is already documented, including dry_run's default and the territory/offer_mode enums. The description reinforces the dry_run workflow but adds no syntax or format detail 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.

Purpose5/5

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

States a specific verb (deletes) and resource (a subscription's introductory offers), with the scope explicitly qualified (every territory or only some). An agent can distinguish this from the inverse sibling add_free_trial without opening the schema.

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?

Usage is strongly implied by the verb and by the dry_run workflow ('Show it to the user, then call again with dry_run: false'), which is clear procedural guidance. However, no explicit when-not condition or named alternative (e.g. add_free_trial as the inverse) is given, so routing is left to inference.

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