mcpField
A
appstoreconnect-mcp

appstoreconnect-mcp

ローカル
github.com/akoskomuves開発ツール53 日前に更新

appstoreconnect-mcp について

appstoreconnect-mcpは、互換クライアントからApp Store Connectのアプリや商品を管理するMCPサーバーです。サブスクリプション、価格設定、アプリ内課金のツールに加え、接続設定と診断機能を備えています。

主な機能

  1. 01アプリの一覧表示と取得
  2. 02サブスクリプションの作成と管理
  3. 03サブスクリプション価格の確認と予約
  4. 04アプリ価格スケジュールの管理
  5. 05アプリ内課金の管理

活用シーン

  1. 01地域別のサブスクリプション価格の確認
  2. 02サブスクリプション価格変更の予約
  3. 03サブスクリプション商品の作成と更新
  4. 04アプリとアプリ内課金の価格確認

MCP 対応

App Store Connect APIの操作を、アプリ、サブスクリプション、価格設定、アプリ内課金のツールとしてMCPクライアントに公開します。セットアップウィザードから、選択したMCPクライアントに登録できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"akoskomuves-appstoreconnect": {
"command": "npx",
"args": [
"-y",
"@akoskomuves/appstoreconnect-mcp"
],
"env": {
"ASC_ISSUER_ID": "<ASC_ISSUER_ID>",
"ASC_KEY_ID": "<ASC_KEY_ID>",
"ASC_PRIVATE_KEY_PATH": "<ASC_PRIVATE_KEY_PATH>",
"ASC_VENDOR_NUMBER": "<ASC_VENDOR_NUMBER>"
}
}
}
}
起動コマンドnpx -y @akoskomuves/appstoreconnect-mcp
設定が必要な環境変数
ASC_ISSUER_IDApp Store Connect API issuer UUID (Users and Access > Integrations > Keys).
ASC_KEY_IDシークレット10-character App Store Connect API key ID.
ASC_PRIVATE_KEY_PATHシークレットPath to the downloaded .p8 private key file (~ is expanded).
ASC_VENDOR_NUMBEROptional. Account-level vendor number for the sales/finance report tools.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@akoskomuves/appstoreconnect-mcp1.0.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

appstoreconnect-mcp

npm CI License: MIT

Model Context Protocol に対応した、Apple App Store Connect API 用のサーバーです。MCP 互換クライアント(Claude Code、Claude Desktop、Cursor、Windsurf)から、アプリ、サブスクリプション、価格などを管理できます。

最初に公開された機能はサブスクリプション価格です。実際の iOS アプリで、65 の地域にわたる本番価格の変更を 120 件スケジュールするためにすでに使用された、購買力平価(PPP)に基づく価格調整ワークフローも含まれています。新しい ASC ドメイン(TestFlight、売上、スクリーンショット、IAP)は、ファイルを 1 つずつ追加できるように設計されています。ロードマップをご覧ください。

インストール(設定不要)

npx @akoskomuves/appstoreconnect-mcp init

ウィザードでは、次の操作を行います。

  1. App Store Connect → Keys を開き、.p8 をダウンロードできるようにします(すでにキーがある場合はスキップされます)。
  2. キーを ~/.appstore/ にコピーし、chmod 600 を設定します。
  3. Issuer ID と、自動検出された Key ID を尋ねます。
  4. 実際の API 呼び出しで認証を検証してから、設定を書き込みます。
  5. インストール済みの MCP クライアント(Claude Code、Claude Desktop、Cursor、Windsurf)を検出し、選択したクライアントに登録します。

後で問題が見つかった場合は、読み取り専用の診断を実行します。

npx @akoskomuves/appstoreconnect-mcp doctor
手動インストール

手動で設定する場合は、~/.claude.json(Claude Code)、claude_desktop_config.json(Claude Desktop)、またはクライアントに相当する設定ファイルに追加します。

{
  "mcpServers": {
    "appstoreconnect": {
      "command": "npx",
      "args": ["-y", "@akoskomuves/appstoreconnect-mcp"],
      "env": {
        "ASC_ISSUER_ID": "...",
        "ASC_KEY_ID": "...",
        "ASC_PRIVATE_KEY_PATH": "~/.appstore/AuthKey_XXXXXXXXXX.p8"
      }
    }
  }
}

または、Claude Code の CLI を使用します。

claude mcp add appstoreconnect \
  -e ASC_ISSUER_ID=... \
  -e ASC_KEY_ID=... \
  -e ASC_PRIVATE_KEY_PATH=~/.appstore/AuthKey_XXXXXXXXXX.p8 \
  -- npx -y @akoskomuves/appstoreconnect-mcp

設定

App Store Connect → Users and Access → Integrations → Keys で App Store Connect API キーを生成します。価格を書き込むにはAdminロールが必要です。読み取り専用の操作にはApp Managerを使用できます。

変数内容
ASC_ISSUER_IDKeys ページに記載された Issuer UUID
ASC_KEY_ID10 文字の Key ID
ASC_PRIVATE_KEY_PATHダウンロードした AuthKey_XXXXXXXXXX.p8 ファイルへのパス(~ は展開されます)

.p8 ファイルは秘密鍵です。絶対にコミットしないでください。リポジトリ外の ~/.appstore/AuthKey_XXXXXXXXXX.p8 に保存することをおすすめします。

オプション:アプリ内課金の署名キー

asc_sign_* ツール(サブスクリプション特典の引き換え署名)でのみ必要です。App Store Connect → Users and Access → Integrations → In-App Purchase で 2 つ目のキーを発行してください。これは上記の ASC API キーとは別のキーで、同じページの別のタブから生成します。

変数内容
ASC_IAP_ISSUER_IDIn-App Purchase のキーのタブに記載された Issuer UUID(ASC_ISSUER_ID とは異なります)
ASC_IAP_KEY_IDIAP キーの 10 文字の Key ID
ASC_IAP_PRIVATE_KEY_PATHIAP 署名用の .p8 へのパス(~ は展開されます)

これらの設定がなくてもサーバーは正常に起動します。未設定の場合、asc_sign_* ツールのみセットアップを促すメッセージを表示して処理を拒否します。3 つすべてではなく 1 つまたは 2 つだけ設定すると、明確なエラーを表示してサーバーが拒否します。appstoreconnect-mcp doctor を実行すると、キーが有効な ES256 PKCS#8 として読み込まれることを確認できます。

任意:ベンダー番号(売上・財務レポート)

asc_get_sales_report/asc_get_finance_report でのみ使用します。ベンダー番号はアカウント単位の番号で、App Store Connect → Payments and Financial Reports にチーム名とともに表示されます(85123456 のような数値の文字列です)。

変数内容
ASC_VENDOR_NUMBER売上・財務レポートをダウンロードする際のデフォルトのベンダー番号

この番号を設定しなくても、2 つのレポートツールは引き続き動作します。ただし、呼び出しごとに vendorNumber を渡す必要があります(エラーメッセージに確認先が表示されます)。注:売上・財務レポートをダウンロードするには、Admin、Finance、または Sales のロールを持つ API キーが必要です。

ツール

アプリ
  • asc_list_apps — アプリを一覧表示します(bundleId で絞り込み可能)
  • asc_get_app — ID でアプリを 1 つ取得します
サブスクリプション
  • asc_list_subscription_groups — アプリのグループを一覧表示します
  • asc_get_subscription_group — ID でグループを 1 つ取得します
  • asc_list_subscriptions — グループ内の自動更新サブスクリプションを一覧表示します
  • asc_get_subscription — ID でサブスクリプションを 1 つ取得します
  • asc_list_subscription_prices — サブスクリプションごとの現在の価格スケジュールです。地域ごとに 1 行(絞り込みなしで約 175 行)表示されます。territoryId を渡すと、1 つの市場に絞り込めます
  • asc_list_subscription_price_points — 地域内でサブスクリプションに有効な価格ポイントです。nearAmount を渡すと、指定した目標価格に近い価格帯に絞り込めます
サブスクリプション商品(書き込み)

階層自体を作成します。以前は App Store Connect の Web UI に移動する必要があった手順です。名前は 4 つあり、顧客に表示されるのはそのうち 2 つだけです。

リソース属性表示対象
SubscriptionGroupreferenceName内部のみ
SubscriptionGroupLocalizationname顧客 — プラン選択肢の上に表示される見出し
Subscriptionname内部のみ
SubscriptionLocalizationname顧客 — 個々のプラン
  • asc_post_subscription_group — すべてのサブスクリプションが属するコンテナを作成します。顧客が 1 つのグループ内で保持できる有効なサブスクリプションは 1 つだけ なので、月額プランと年額プランなど、相互に排他的なプランは同じグループに属します
  • asc_patch_subscription_group — 名前を変更します(変更できる属性は referenceName のみです。グループを別のアプリに移動することはできません)
  • asc_delete_subscription_group — まずグループのサブスクリプションを一覧表示し、削除を妨げる具体的な商品名をクライアント側で示して削除を拒否します。Apple から内容のない 409 が返されるのを防ぎます
  • asc_post_subscription — 自動更新サブスクリプションを作成します。productId は恒久的な値 で、変更できません。また、サブスクリプションを削除した後でも、Apple がアカウント内での再利用を許可することはありません。作成時に subscriptionPeriod を指定するのは任意ですが、提出前には必須です。新しい商品は MISSING_METADATA の状態で作成され、成功メッセージに残りの手順が表示されます
  • asc_patch_subscription — name、subscriptionPeriod、familySharable、reviewNote、groupLevel を変更します。productId を変更するコードパスは、設計上存在しません。ネストされたオファー/価格の配列は意図的にサポートしていません。API 上の意味が「置き換え」であるため、呼び出し元がオファーを 1 つ渡すと、残りが知らないうちに削除されてしまいます。専用のオファーおよび価格ツールを使用してください
  • asc_delete_subscription — 状態を事前に確認し、審査中または過去に承認された商品は削除を拒否します。販売中の商品を販売停止にする方法として asc_post_subscription_availability を案内します
サブスクリプショングループのローカライズ

お客様に表示されるグループ見出しです。App Store ではプランの選択肢の上に表示され、「設定」→「サブスクリプション」にも表示されます。ローカライズがないグループは提出できません。

  • asc_list_subscription_group_localizations / asc_get_subscription_group_localization
  • asc_post_subscription_group_localization — name と locale に加え、任意で customAppName を指定します(サブスクリプションシート内でのアプリ名の表示を上書きします。通常は省略します)。ワイヤー形式に関する注意点にも対応済みです。親リレーションシップのキーは subscriptionGroup ですが、Subscription では同じ親を group と呼びます
  • asc_patch_subscription_group_localization — name / customAppName。ロケールは変更できない検索キーです
  • asc_delete_subscription_group_localization
サブスクリプションの価格設定(書き込み)
  • asc_post_subscription_price — 1つの地域の価格を設定します。開始価格または予約済みの変更を指定できます。順序が重要で、どちらの手順も本番環境で確認済みです: 地域の提供状況 → 日付なしの基本価格 → 日付指定の変更。
    • 地域でのサブスクリプションの初回価格では、startDate を省略してください。 最初の行は日付なしの基本価格です。初回価格を日付指定にすると、変更元の価格がない状態での価格変更になります。Apple は明確にこう説明しています — "Invalid startDate. Create a starting price before creating future prices." — 先の日付を指定しても解決しません(1、8、29日先のいずれも409になります)。
    • 先に提供状況を設定する必要があります。 これがないと、形式が正しい日付なしの POST でも、価格ポイントを原因とする409エラーで失敗します(ENTITY_ERROR.RELATIONSHIP.INVALID → /data/relationships/subscriptionPricePoint/id)。価格ポイントに問題はありません。Apple が、販売されていない地域の製品に価格を設定できないだけです。このツールは、生の409エラーをそのまま返すのではなく、どちらのエラーも翻訳します。
    • 日付指定の変更では preserveCurrentPrice のデフォルトは true です。基本価格では、既存の購入者を保護する対象グループがないため省略されます。作成された行の preserved: false は、新しい価格で置き換えられるまでの値として想定されるもので、既存の購入者の保護に失敗したわけではありません
  • asc_delete_subscription_price — 予約済みの価格変更を取り消します
アプリの価格設定(有料の非サブスクリプションアプリ)
  • asc_list_app_prices — アプリの現在の価格スケジュールを取得します。手動で上書きした価格と自動算出された価格を分け、基本地域を示します
  • asc_list_app_price_points — 指定した地域のアプリで有効な Apple の価格帯(地域あたり約600以上)を取得します。nearAmount(目標価格)と任意の nearCount(デフォルトは10)を渡すと、最も近い価格帯に応答を絞り込めます。Apple はサーバー側で価格の近さによるフィルターをサポートしていないため、一覧全体はページ分割されますが、最も近い価格帯のみが表示されます。
  • asc_post_app_price_schedule — 価格スケジュール全体を置き換えます(マージではなく全スケジュールの置き換えで、Apple の API と同じ動作です)。事前チェックでは、少なくとも1つの項目が基本地域を対象とし、startDate が指定されていないことを確認します。また、明示的な acknowledgeReplacesAll: true が必要です。基本地域を変更する場合は、別途 acknowledgeDeletesScheduledIfBaseChanges による確認も必要です(Apple は基本地域の変更時に保留中の予約変更を削除します)。アプリには既存購入者の保護の仕組みがないため、新しいスケジュールは各項目の startDate に一括で有効になります。
アプリ内課金(消費型、非消費型、非更新サブスクリプション)
  • asc_list_iaps — アプリのアプリ内課金を一覧表示します(v2 のみ対応 — 自動更新サブスクリプションは上記のサブスクリプションツールで扱います)。inAppPurchaseType と state で絞り込めます。アプリ内課金があるとわかっているアプリで結果が 0 件の場合、アプリ内課金がレガシー形式のみで登録されている可能性があります。この場合、ここに表示される前に App Store Connect のウェブ UI で移行する必要があります。
  • asc_get_iap — ID を指定して、単一のアプリ内課金を取得します。
  • asc_list_iap_prices — アプリ内課金の現在の価格スケジュール(アプリの価格と同じ形式:手動設定の価格、価格の自動派生、基準地域)。
  • asc_list_iap_price_points — 指定した地域でアプリ内課金に有効な Apple の価格帯です。アプリおよびサブスクリプションの価格ポイントツールと同じく、nearAmount / nearCount で絞り込めます。
  • asc_post_iap_price_schedule — アプリ内課金の価格スケジュール全体を置き換えます(asc_post_app_price_schedule と同じく、スケジュール全体を置き換えるセマンティクスです:acknowledgeReplacesAll: true、startDate のない基準地域のエントリー、基準価格変更の確認が必要)。既存購入者向けの価格維持の仕組みはありません(アプリと同様です)。
  • asc_post_iap — 消費型、非消費型、または非更新サブスクリプションのアプリ内課金を作成します。productId は恒久的なもので、削除後も含め、アカウント上で再利用できません。新しいアプリ内課金は MISSING_METADATA の状態で作成され、成功メッセージに残りの手順が表示されます
  • asc_patch_iap — name(内部名)、reviewNote、familySharable を変更します。クリアするには null を渡します。productId と inAppPurchaseType は変更不可であり、送信されません
  • asc_delete_iap — 状態を事前に確認し、審査中または承認済みのアプリ内課金については削除を拒否します。販売中のアプリ内課金の販売を停止するには asc_post_iap_availability を使うよう案内します。force: true を指定すると確認をスキップします
バージョン単位のアプリ内課金およびサブスクリプションのコンテンツ(/v2)

API 4.x では、アプリ内課金、サブスクリプション、グループのローカライズ用エンドポイントと、2 つのプロモーション画像用エンドポイントに /v2 版が追加されます。リソースと属性は /v1 と同じですが、商品自体ではなく商品 バージョン に関連付けられます(リレーションシップ version)。/v1 は非推奨ではないため、既存のローカライズツールと画像ツールは引き続き /v1 を使用します。これらは追加機能です。商品バージョン一覧からバージョン ID を取得してください。

  • ローカライズ:asc_{post,get,patch,delete}_{iap,subscription,subscription_group}_version_localization
  • 画像:asc_{upload,post,patch,get,delete}_{iap,subscription}_version_image — v2 の確定時に受け付けるのは uploaded のみです(sourceFileChecksum は不要です)
アプリ内製品のバージョン(IAP、サブスクリプション、サブスクリプショングループ)

API 4.4.1 以降、すべてのアプリ内製品は2つのレイヤーで構成されています。製品(inAppPurchases、subscriptions、subscriptionGroups)には、IDとコマース情報(製品 ID、タイプ、価格、提供状況、オファー)が含まれます。上記のツールは製品を操作します。バージョン(inAppPurchaseVersions、subscriptionVersions、subscriptionGroupVersions)には、App Review が承認する顧客向けメタデータ(ローカライズ情報、および IAP とサブスクリプションの場合は画像)が含まれます。各バージョンには番号と状態(PREPARE_FOR_SUBMISSION ~ APPROVED、その後、新しいバージョンが承認されると REPLACED_WITH_NEW_VERSION)があります。承認済みのメタデータを変更するには、バージョンを作成して編集し、レビュー提出を通じてバージョンを提出します。Apple は、製品スコープの v1 ローカライズ/画像エンドポイントと、IAP/サブスクリプションの単独提出を非推奨とし、このモデルに移行しました。

  • asc_list_{iap,subscription,subscription_group}_versions — 1つの製品のバージョンを新しい順に表示し、状態とローカライズ数を含めます。state で絞り込めます
  • asc_get_*_version — 製品、ローカライズ、画像を含む1つのバージョン
  • asc_post_*_version — 新しいバージョンを作成します(リレーションシップのみのボディ)。バージョンには PATCH や DELETE がないため、製品に PREPARE_FOR_SUBMISSION のドラフトがすでに存在する場合は拒否し、そのバージョンを示します。dryRun はボディと既存のバージョンを表示します
  • asc_list_*_version_localizations — バージョンに紐づくローカライズ情報(v1 のものとは異なり、state はありません)
  • asc_list_{iap,subscription}_version_images / asc_get_{iap,subscription}_version_primary_image — バージョンの画像(to-many)と to-one の image
アプリ内課金のオファーコード

消耗型、非消耗型、非更新サブスクリプション向けのオファーコードです(API 4.2)。サブスクリプションのオファーコードと同様に、キャンペーン → 1回限り使用するコードのバッチ/カスタムコードという階層があり、キャンペーンはよりシンプルです。設定項目は名前、顧客の適格性(NON_SPENDER、ACTIVE_SPENDER、CHURNED_SPENDER)、および地域ごとの価格(IAP 価格ポイント)だけです。削除はできず、PATCH で変更できるのは active のみです。

  • asc_list_iap_offer_codes · asc_get_iap_offer_code · asc_list_iap_offer_code_prices
  • asc_post_iap_offer_code — すべての地域の価格をインラインで指定して1回 POST します。キャンペーン数の上限10件と名前の一意性を事前チェックします(どちらもサブスクリプションから引き継いだ、動作上の前提です) · asc_patch_iap_offer_code(active)
  • 1回限り使用するコードのバッチ:asc_list_* / asc_get_* / asc_post_* / asc_patch_iap_offer_code_one_time_use_codes、および asc_export_iap_offer_code_one_time_use_values(引き換え可能な文字列の CSV)
  • カスタムコード:asc_list_iap_offer_code_custom_codes · asc_get_* · asc_post_iap_offer_code_custom_code(キャンペーン内にすでに存在する文字列は拒否します) · asc_patch_*
サブスクリプションの導入オファー

導入オファーは新規登録者を対象とするもので、通常価格が適用される前の割引された「最初の期間」です。

  • asc_list_subscription_introductory_offers — サブスクリプションに設定された導入オファー(無料トライアル/従量課金/前払い)を、すべての地域にわたって一覧表示します。Apple の「すべての地域」ワイルドカード(territory を指定しない単一のオファー)は、表では TERR=(all) として表示されます。特定の市場に絞り込むには territoryId を渡します。ワイルドカードオファーはすべての地域で有効なため、常に含まれます。
  • asc_get_subscription_introductory_offer — ID を指定してオファーを1件取得します。
  • asc_post_subscription_introductory_offer — オファーを作成します。offerMode は3種類です。FREE_TRIAL(価格なし。pricePointId は省略)、PAY_AS_YOU_GO(numberOfPeriods で指定した期間、各期間にオファー価格を請求)、PAY_UP_FRONT(全期間分を一括請求。Apple は引き続き numberOfPeriods を必須とします。省略時は1がデフォルトです)。特定の市場を対象にするには territoryId を渡し、Apple の「すべての地域」ワイルドカードを使用するには省略します(すべての市場で文字どおりの価格ポイントを使用し、自動為替換算は行われません)。サーバー側の検証では、pricePointId のない PAY_*、numberOfPeriods のない PAY_AS_YOU_GO、および endDate ≤ startDate を拒否します。それ以外の場合、Apple のエラーはそのまま表示されます。
  • asc_patch_subscription_introductory_offer — 更新できる項目を限定した操作です。作成後に変更できるのは startDate、endDate、pricePointId のみです。モード/期間/回数を変更するには、削除して再作成してください。
  • asc_delete_subscription_introductory_offer — 保留中または有効なオファーを削除します。現在利用可能なオファーは Apple が削除を拒否するため、代わりに endDate を今日に設定して停止してください。
サブスクリプションのプロモーションオファー

プロモーションオファーは既存または解約済みの登録者を対象とします。導入オファーとは対象条件が逆で、リソースタイプ自体で決まるため、オファーごとのフラグはありません。Apple はサブスクリプションごとの有効なプロモーションオファーを最大10件に制限しています。作成後に編集できるのは地域ごとの価格のみです。name、offerCode、offerMode、duration、numberOfPeriods は変更できません。

  • asc_list_subscription_promotional_offers — サブスクリプションに設定されたプロモーションオファーを一覧表示します。
  • asc_get_subscription_promotional_offer — 地域ごとの価格を含むオファーを1件取得します。
  • asc_list_subscription_promotional_offer_prices — オファーに紐付けられた地域ごとの価格行(地域+通貨+金額+価格ポイント ID)を一覧表示します。
  • asc_post_subscription_promotional_offer — オファー(name + offerCode + モード + 期間 + すべての地域ごとの価格)を単一のアトミックな POST で作成します。Apple の10件制限と offerCode の重複を事前にチェックし、Apple から 409 を返させる代わりに、明確な対処方法を示すメッセージとともに拒否します。
  • asc_patch_subscription_promotional_offer_prices — オファーの地域ごとの価格を更新します。Apple の API 上の動作は置き換えです(新しい価格配列が更新後の状態となり、指定されていない地域は削除されます)。ツールの mode: 'replace' | 'add' | 'remove' パラメーターにより、この落とし穴を回避できます。'add' は現在の価格を読み込んでマージし、'remove' は読み込んで絞り込みます。
  • asc_delete_subscription_promotional_offer — DELETE → 204。
サブスクリプションの再獲得オファー

再獲得オファーは、解約済みのサブスクライバー、つまり以前サブスクリプションに登録して解約した顧客を対象とします。Apple は、オファーの適格条件に基づいて対象となる顧客に自動的に表示します(または、独自の StoreKit メッセージを通じて表示します)。これは、導入オファーやプロモーションオファーと並ぶ3つ目のオファータイプです。プロモーションオファーよりも機能が豊富で、適格性のターゲティング、スケジュール、優先度、自動アセットの用途が追加されています。referenceName、offerId、duration、offerMode、periodCount、targetSubscriptionPlanType、価格は、作成後に変更できません。

  • asc_list_subscription_win_back_offers — サブスクリプションに設定された再獲得オファーの一覧を取得します。
  • asc_get_subscription_win_back_offer — サブスクリプションと地域ごとの価格を含め、単一のオファーを取得します。
  • asc_list_subscription_win_back_offer_prices — オファーに紐付けられた地域ごとの価格行(地域+通貨+金額+価格ポイント ID)の一覧を取得します。
  • asc_post_subscription_win_back_offer — オファー(識別情報+適格条件+スケジュール+優先度+すべての地域ごとの価格)を1回のアトミックな POST で作成します。適格条件は、customerEligibilityPaidSubscriptionDurationInMonths、customerEligibilityTimeSinceLastSubscribedInMonths({ minimum, maximum? } の範囲)、および任意の customerEligibilityWaitBetweenOffersInMonths で指定します。offerId の重複を事前に確認し、範囲と endDate > startDate を検証します。
  • asc_patch_subscription_win_back_offer — 変更可能な属性のみ更新します。対象は、適格条件、startDate/endDate、priority、promotionIntent です。識別情報、モード、期間、支払い期間、価格を変更するには、削除して再作成してください。
  • asc_delete_subscription_win_back_offer — DELETE → 204。
App Asset Library(スクリーンショット、プレビュー、イベント用アセット)

App Store Connect API 4.5.1 では、スクリーンショットセット、プレビューセット、アプリ内イベントのスクリーンショット/動画クリップが、アプリごとに 1 つの App Asset Library に置き換えられました。画像または動画を一度アップロードしてから、配置します。1 つの配置では、1 つのアセットを、1 つの placementType とデバイスの placementGroup のスロットにある 1 つのローカライズ(バージョン、カスタムプロダクトページ、実験の処理、またはアプリ内イベント)に配置します。同じアセットを複数のローカライズに配置できます。ライブラリの ID はアプリ ID です。

  • 参照データ:asc_get_asset_library_ref_data — デバイスグループ(IPHONE_DYNAMIC_ISLAND_LARGE_PROFILE、IPAD_13_PROFILE、IPHONE_DUO_PROFILE、…)、グループごとのアセット上限(例:スクリーンショット 10 枚、プレビュー 3 本)、各グループで使用できるピクセル数/形式/再生時間の仕様をまとめた Apple のカタログです。sections とフィルターを使って対象を絞れます。ドキュメント全体は約 130 KB です。
  • ライブラリ:asc_get_app_asset_library · asc_list_asset_library_{images,videos}(カテゴリ/状態/名前/仕様でのフィルター、アセットごとの配置数) · asc_get_asset_library_{image,video} · asc_list_asset_library_{image,video}_placements(アセットの表示場所)。
  • アップロード:asc_upload_asset_library_{image,video}(予約 → チャンクの PUT → 確定を行う複合操作) · asc_post_* / asc_patch_*(生の操作。uploaded、archived、referenceName、動画の previewFrameTimeCode) · asc_delete_*。確定時に必要なのは uploaded: true のみです。この API ではチェックサムは不要です。
  • 配置:asc_list_localization_placements(ローカライズに表示される内容を、グループごとにストアでの順序で取得) · asc_get_asset_library_placement · asc_post_asset_library_placement(画像または動画 × 親ローカライズ) · asc_delete_asset_library_placement(アセットはライブラリに残ります) · asc_post_asset_library_placement_ordering_request(1 つのグループの順序を変更)。

プロダクトページのヘッダー(プロダクトページ上部の横長の画像または動画):category: "CREATIVE_ASSETS" を指定してアップロードし、バージョン、カスタムプロダクトページ、または実験処理のローカライズに、placementType: "PRODUCT_PAGE_HEADER_ASSET"、placementGroup: "DEFAULT_PROFILE" を指定して配置します。ローカライズごとに 1 つまでです。現在の仕様(2026-10-23):PNG 5244x2950(16:9)または 3840x1646(21:9)、アルファチャンネルなし。または、動画 3840x1646(21:9)、30/60 fps、最大 30 秒、.mp4/.m4v/.mov。APP_STORE_SEARCH_RESULTS_ASSET も同じ方法で使用できます。placementTypes: ["PRODUCT_PAGE_HEADER_ASSET"] を指定して asc_get_asset_library_ref_data を呼び出すと、現在の仕様を確認できます。

従来のセットベースのツール(asc_*_app_screenshot*、asc_*_app_preview*、asc_*_app_event_screenshot*、asc_*_app_event_video_clip*、asc_upload_screenshot、asc_upload_app_preview)は、引き続き Apple の非推奨エンドポイントで動作し、その旨が説明文に記載されています。

IAP とサブスクリプションのレビュー用素材

アプリ内課金またはサブスクリプションを提出する前に Apple が必要とするレビュー用スクリーンショットと、任意のプロモーション用画像です。さらに v1.5 からは、バージョンのApp Review 添付ファイル(デモ動画など、レビュアー向けのファイル)にも対応しています。5 種類のリソースがあり、いずれもアプリのスクリーンショットと同じ 3 段階のアップロードフロー(予約 → PUT チャンク → 確定)を使用します。ローカルファイルから 3 段階すべてを実行する複合 asc_upload_* ツールもあります。IAP 画像は inAppPurchase、IAP レビュー用スクリーンショットは inAppPurchaseV2 を介して関連付けられるという API の注意点にも対応しています。

  • 画像(IAP/サブスクリプションごとに複数):asc_list_{iap,subscription}_images · asc_get_* · asc_upload_*(複合) · asc_post_* / asc_patch_*(予約/確定を個別に実行) · asc_delete_*。
  • レビュー用スクリーンショット(IAP/サブスクリプションごとに 1 つ):asc_get_{iap,subscription}_review_screenshot(1 つだけ返します。存在しない場合は null) · asc_upload_* · asc_post_* / asc_patch_* · asc_delete_*。1 つのみ設定できるため、すでに存在する場合、アップロード/予約ツールは実行を拒否します。先に削除してください。
  • App Review 添付ファイル(バージョンのレビュー詳細ごとに複数):asc_list_review_attachments · asc_get_review_attachment · asc_upload_review_attachment(複合) · asc_post_* / asc_patch_* · asc_delete_*。親 ID には asc_get_app_store_review_detail の appStoreReviewDetail ID を指定します。
App Review の詳細、提出、リリース

「メタデータの準備完了」から「ビルドの公開」までに必要となる最後の手動手順です。

  • asc_get_app_store_review_detail / asc_post_… / asc_patch_… — バージョンの「App Review に伝える内容」カードです。連絡担当者、デモアカウント(名前/パスワード/必須かどうか)、メモを設定します。バージョンごとに 1 つのみで、PATCH 時には Apple が内容を統合します。
  • asc_post_app_store_version_release_request — ⚠️ 承認済み(PENDING_DEVELOPER_RELEASE)バージョンを App Store で今すぐ公開します。「このバージョンをリリース」ボタンを自動化したものです。手動リリースのバージョンのみが対象で、取り消しはできません。
  • asc_post_iap_submission / asc_post_subscription_submission / asc_post_subscription_group_submission — IAP/サブスクリプション/サブスクリプショングループの保留中のメタデータ変更を、バージョンリリースなしで単独で審査に提出します。IAP は inAppPurchaseV2 を介して関連付けられるという API の注意点にも対応しています。
  • asc_get_subscription_grace_period / asc_patch_… — アプリごとの課金猶予期間を設定します。optIn / sandboxOptIn、期間(3/16/28 日)、renewalType(すべての更新、または有料から有料への更新のみ)を指定できます。Apple が支払いを再試行している間、期限切れのサブスクライバーも引き続き利用資格を維持できます。
App Clips

クリップを含むビルドをアップロードすると、App Clip のレコードが作成されます。API では作成できません。以下の機能はすべて、このレコードに関連付けられます。

  • クリップ:asc_list_app_clips(アプリごと、bundleId フィルター) · asc_get_app_clip。
  • デフォルトエクスペリエンス(Safari バナー、メッセージ、デフォルトリンク用のカード。バージョンごとに 1 つ):asc_list_app_clip_default_experiences · asc_get_… · asc_post_…(action、リリースバージョン、または前バージョンのカードをコピーするための templateDefaultExperienceId) · asc_patch_… · asc_delete_…。
  • バージョンリンク:asc_get_app_store_version_app_clip_default_experience / asc_patch_…(バージョンから) · asc_get_app_clip_default_experience_release_version / asc_patch_…(エクスペリエンスから)。Apple の API ではリンク解除はできず、再リンクのみ可能です。
  • ローカリゼーション:asc_list_app_clip_default_experience_localizations · asc_get_… · asc_post_…(ロケール + サブタイトル) · asc_patch_… · asc_delete_…。
  • ヘッダー画像(ローカリゼーションごとに 1 つ):asc_upload_app_clip_header_image(予約 → チャンクを PUT → MD5 でコミットする複合処理) · asc_get_app_clip_header_image(画像またはローカリゼーションで指定) · raw asc_post_* / asc_patch_* · asc_delete_*。
  • App Review の詳細:asc_get_app_clip_app_store_review_detail(詳細またはエクスペリエンスで指定) · asc_post_… / asc_patch_…(呼び出し URL)。
  • 高度なエクスペリエンス(URL ごとのカード:App Clip Code、NFC、QR、マップのプレイスカード):asc_list_app_clip_advanced_experiences(ステータス / プレイスのステータス / アクションのフィルター) · asc_get_… · まず asc_upload_app_clip_advanced_experience_image を実行し、その後 asc_post_app_clip_advanced_experience を実行(リンク、isPoweredBy、デフォルト言語、ヘッダー画像、ローカリゼーションをインラインで指定、任意の place) · asc_patch_…(removed: true で削除。localizations を指定するとすべて置き換え) · 画像の raw asc_get_* / asc_post_* / asc_patch_*。
  • TestFlight の呼び出し:asc_get_beta_app_clip_invocation · asc_post_…(ビルドのバンドル ID、URL、タイトルをインラインで指定) · asc_patch_… · asc_delete_… · asc_{post,patch,delete}_beta_app_clip_invocation_localization。
Background Assets(Apple ホスト型アセットパック)
  • アセットパック:asc_list_background_assets(アプリごと。アーカイブ済み / 識別子 / ロケール / プラットフォームのフィルター。内部ベータ、外部ベータ、App Store で公開中のバージョンを表示) · asc_get_background_asset · asc_post_background_asset(assetPackIdentifier は作成後に変更不可) · asc_patch_background_asset(archived のみ)。
  • バージョン:asc_list_background_asset_versions(状態 + 配信先ごとのリリース状態フィルター) · asc_get_background_asset_version · asc_post_background_asset_version(番号は Apple が割り当て) · asc_get_background_asset_version_release(track:internalBeta / externalBeta / appStore)。
  • ファイル:asc_upload_background_asset_file(複合処理:ASSET アーカイブまたは MANIFEST → 予約 → チャンクを PUT → コミット) · asc_list_background_asset_upload_files · asc_get_… · raw asc_post_* / asc_patch_*。コミットでは sourceFileChecksums.file を送信します(デフォルトは MD5。SHA_256 も使用可能)。このリソースの単数形 sourceFileChecksum は非推奨です。
利用可能状況(サブスクリプション、IAP、プラン)

アプリ内製品のテリトリーごとの利用可能状況です。App Availability と対になる機能で、主な違いは、テリトリーとの関連付けにアプリで使われる不透明な複合値ではなく、**3文字のISOコード(プレーンな territories)**を使う点です。

  • サブスクリプション:asc_get_subscription_availability · asc_list_subscription_available_territories · asc_post_subscription_availability(全置換です。テリトリーの完全なリストを送信してください。⚠️ 削除したテリトリーでは販売が停止されます)。API 4.4で SubscriptionAvailability が非推奨になったため、これらの読み取りと書き込みでは、代わりにサブスクリプションの UPFRONT プランの利用可能状況を扱います。実際のデータでは同じテリトリーセットが設定されており、すべてのサブスクリプションにこのプランがあります。名前と入力項目は以前と同じです。
  • IAP:asc_get_iap_availability(v2の親パス経由で読み取ります)· asc_list_iap_available_territories · asc_post_iap_availability(同じ置換方式)。
  • サブスクリプションプラン(プランタイプごと:UPFRONT = 標準プラン。各期間の料金を前払いします。MONTHLY = 12か月の契約期間がある月払い):asc_list_subscription_plan_availabilities · asc_list_subscription_plan_available_territories · asc_post_… · asc_patch_…(PATCHに対応する唯一の利用可能状況リソースです)。
マーケットプレイスのWebhook(EUの代替マーケットプレイス)

/v1/marketplaceWebhooks は非推奨です。マーケットプレイスの通知は、マーケットプレイスアプリに登録し、3つの ALTERNATIVE_DISTRIBUTION_* イベントを購読する通常のWebhookになりました。asc_list_marketplace_webhooks / asc_post_… / asc_patch_… / asc_delete_… は名前を維持し、/v1/webhooks を操作します(作成と一覧取得では marketplaceAppId を指定します)。以前のチームレベルのエンドポイントで作成したレコードを一覧取得、パッチ、削除する場合は、legacy: true を渡してください。マーケットプレイスアプリ以外のアプリでこれらのイベントタイプを使うと、Appleは409エラーを返し、ツールはその旨を通知します。

サブスクリプションオファーの署名(アプリ内での引き換え)

iOSアプリでStoreKitを通じてプロモーションオファーや導入オファーを引き換えられるようにする、暗号署名機能です。ASC APIキーとは別の署名キーを使用します。このキーは、App Store Connect → Users and Access → Integrations → In-App Purchase で発行します。環境変数については、オプションの設定セクションを参照してください。Apple公式の @apple/app-store-server-library を基盤としています。

  • asc_sign_promotional_offer_legacy — StoreKit 1の SKPaymentDiscount と、初期のStoreKit 2 Product.PurchaseOption.promotionalOffer(offerID:keyID:nonce:signature:timestamp:) APIで使われる、従来のECDSA連結署名です。署名とnonce、タイムスタンプ、keyIdを返します。呼び出し元はこれらをStoreKitに渡します。UUID nonceと現在のタイムスタンプを自動生成します。テスト用にどちらも上書きできます。
  • asc_sign_promotional_offer — WWDC 2025で導入され(iOS 15にバックデプロイされています)、StoreKit 2の新しいプロモーションオファー購入オプションで使うJWS v2形式です。JWSコンパクトシリアライゼーションを直接返します。transactionId(顧客の appTransactionId)は任意ですが、指定を強く推奨します。
  • asc_sign_introductory_offer_eligibility — aud="introductory-offer-eligibility" を含むJWS v2です。StoreKitのデフォルトの導入オファー適格性チェックを上書きできます(例:以前に利用した顧客に別のトライアルを付与する)。WWDC 2025で追加されました。

すべての署名は署名時から24時間有効です。事前に署名してキャッシュするのではなく、引き換えを試みるたびに再署名してください。

年齢レーティング

App Review のアンケートではアプリの評価レーティングが決まり、提出の可否もこれによって左右されます。以前はここから設定する方法がありませんでした。

  • asc_get_age_rating_declaration — 回答を読み取ります。デフォルト以外の回答のみ(通常の宣言には29個の属性があり、そのほとんどが NONE/false です)に加えて、すべてのオーバーライドを表示するため、レーティングを実際に左右する項目がひと目でわかります。
  • asc_patch_age_rating_declaration — アンケートに回答します。コンテンツに関する質問には頻度(NONE/INFREQUENT_OR_MILD/FREQUENT_OR_INTENSE)を指定し、それ以外にはブール値を指定します。さらに、レーティングのオーバーライドとキッズ向け年齢区分も指定します。

このリソースについては、間違えやすい点が2つあります。ツールがこれらを適切に処理します。まず、これはバージョンではなく AppInfo に紐づいています。年齢レーティングはカテゴリなどと同じくアプリ単位のメタデータであり、/v1/appStoreVersions/{id}/ageRatingDeclaration は404を返します。また、IDはAppInfo の ID です。そのため、appId を渡すと対象が自動的に解決されます(アプリに公証トラックをまたいで複数の AppInfo がある場合、ツールは推測せず候補を表示します)。

Apple は書き込み時にマージします。省略したキーは現在の値を維持するため、部分更新は安全です。ただし、回答をクリアするには省略するのではなく、明示的に NONE/false を送信する必要があります。オーバーライドでレーティングを引き上げることはできますが、引き下げることはできません。

ビルドのアップロード

Transporter の代わりに API 経由で .ipa/.pkg をアップロードします(API 4.1)。ビルドのアップロードを作成(アプリ+バージョン+ビルド番号+プラットフォーム)→ ファイルを予約 → Apple のストレージにチャンクを PUT → ファイルのチェックサムを指定してコミット、という流れです。コミットでは sourceFileChecksums: { file: { hash, algorithm } } を指定します。これは、スクリーンショットで使われるフラットなチェックサム文字列とは異なり、ネストされたオブジェクトです。

  • asc_upload_build — ローカルファイルから一連の処理をすべて実行します(MD5 チェックサム、拡張子から UTI を取得、dryRun で両方のボディを表示)。その後、Apple がビルドを処理します。asc_get_build_upload で処理状況を確認してください
  • asc_list_build_uploads — アプリのアップロードを新しい順に表示します。バージョン、ビルド、プラットフォーム、状態(AWAITING_UPLOAD/PROCESSING/COMPLETE/FAILED。エラー数と警告数を含む)、および生成されたビルドを確認できます。COMPLETE 状態のアップロードでは、ビルド ID はアップロード ID と同じです。アップロード途中で放棄されたスロットは AWAITING_UPLOAD のままになります
  • asc_get_build_upload(エラー/警告の詳細)・asc_delete_build_upload(スロットを削除します。処理済みのビルドには影響しません)
  • 個別の手順:asc_post_build_upload · asc_post_build_upload_file · asc_upload_asset_chunk · asc_patch_build_upload_file · asc_list_build_upload_files · asc_get_build_upload_file
  • ビルドバンドル(処理済みビルド内のアプリ、App Clip、拡張機能):asc_list_build_bundles · asc_list_build_bundle_file_sizes(デバイスごとのダウンロードサイズ/インストールサイズ) · asc_get_build_bundle_app_clip_domain_status(cache または debug) · asc_list_build_bundle_beta_app_clip_invocations
Xcode Cloud(CI/CD)

ビルドループを担います。実行状況の確認、失敗内容の把握、ビルドの開始ができます。階層は、プロダクト → ワークフロー → ビルド実行 → アクション(ビルド/テスト/アーカイブ/解析)→ 問題/テスト結果/アーティファクトです。完了した実行から、生成されたTestFlightビルドへリンクし、TestFlightツールに引き継ぎます。

  • 読み取り:asc_list_ci_products · asc_list_ci_workflows / asc_get_ci_workflow(フラグ、開始条件のパターン、アクション、解決済みのXcode/macOSを含む簡潔な設定概要 — Appleの約9万文字の完全なドキュメントを取得するにはraw:trueを指定) · asc_list_ci_build_runs(ワークフローまたはプロダクト別) / asc_get_ci_build_run · asc_list_ci_build_actions · asc_list_ci_issues · asc_list_ci_test_results · asc_list_ci_artifacts / asc_get_ci_artifact(署名済みで有効期限付きのdownloadUrl — ASCのベアラートークンなしで取得できます) · asc_list_ci_build_run_builds(TestFlightへの引き継ぎ) · asc_list_ci_environment_versions(Xcode/macOSのカタログ)。
  • SCMの読み取り:asc_list_scm_providers · asc_list_scm_repositories · asc_list_scm_git_references(ブランチ/タグの参照ID — ビルド開始時に使用) · asc_list_scm_pull_requests。
  • トリガー:asc_post_ci_build_run(ビルドを開始 — ブランチ/タグの上書きとcleanは任意指定です。チームのコンピューティング時間を使用します) · asc_patch_ci_workflow(isEnabled、clean、名前、説明による一時停止/再開 — 開始条件とアクションは、設計上Xcodeが管理します)。
おすすめへのノミネーション

App Storeでのおすすめ掲載(Todayタブ、キュレーションされたコレクション)を目指して、Appleの編集チームにリリースを提案します。下書きは非公開で、提出は一方向です。

  • asc_list_nominations(アプリ/状態/種類で絞り込み) · asc_get_nomination · asc_post_nomination(レビュー可能なDRAFTがデフォルトです — submitted:false) · asc_patch_nomination(下書きを編集。submitted:trueにするとAppleに送信されます — 送信取り消しはできず、archived:trueにすることのみ可能です) · asc_delete_nomination。
  • 提案内容はdescriptionとnotesに記載します。publishStartDate/publishEndDateで関連期間を指定し、supplementalMaterialsUrisにプレスキット/TestFlightのリンクを設定します。ワイヤーキーはlaunchInSelectMarketsFirstです(UIで使われている「storefronts」ではなく、Marketsという名称です)。
Game Center:詳細、グループ、実績、リーダーボード

Apple の v2 パスにおける Game Center のコアモデルです(/v1 の achievement/leaderboard/set に関する各 CRUD パスはすべて非推奨です)。アプリには Game Center の詳細が 1 つあり、実績、リーダーボード、リーダーボードセットは、その詳細に属するか、複数のアプリで Game Center データを共有する場合は Game Center グループに属します。各項目には App Review を経るバージョンがあり、各バージョンには画像付きのローカライズがあります。

  • 詳細とグループ:asc_get_app_game_center_detail(Game Center を利用していないアプリの場合、エラーではなく何も返しません)・asc_get_* / asc_post_* / asc_patch_game_center_detail · グループ asc_{list,get,post,patch,delete}_game_center_group(s) · asc_list_game_center_group_details · asc_get_game_center_detail_group。
  • 実績、リーダーボード、リーダーボードセット:それぞれに list/get/post/patch/delete があります。作成時は最初のバージョンをインラインで送信します。所有者は gameCenterDetailId または gameCenterGroupId のいずれか 1 つだけを指定してください。
  • バージョン → ローカライズ → 画像:各ファミリーに list/get/post があり、ローカライズには get/post/patch/delete があります。画像の複合アップロード(reserve → PUT チャンク → uploaded: true)に加え、raw の reserve/commit/delete も利用できます。
  • 並べ替えでは、指定した順序で所有者のリスト全体を置き換えるため、項目を追加または削除するリストはツールで拒否されます。セットのメンバーシップ:セット内のリーダーボードを追加、置換(並べ替え)、または削除できます。メンバーのローカライズには list/post/patch/delete があります。
  • モデレーションと提出:asc_list_game_center_leaderboard_score_moderations · asc_patch_game_center_score_moderation(スコアをブロック) · asc_list_game_center_blocked_players · asc_patch_game_center_detail_player(プレイヤーをブロックまたはブロック解除) · asc_post_game_center_leaderboard_entry_submission / asc_post_game_center_player_achievement_submission(サーバー側のスコアと実績の報告)。2026-10-24 時点では、ブロック中のプレイヤーとスコアモデレーションの読み取りは仕様に含まれているものの、Apple は 404 を返します。
  • 削除前にはバージョンの状態が確認されます。確認をスキップするには force: true を指定します。
Game Center:アクティビティ、チャレンジ、マッチメイキング

プレイヤー向けの Game Center サーフェスです。アクティビティとチャレンジは、アプリの Game Center 詳細(appId を渡すとツールが解決します)または複数のアプリで共有される Game Center グループに属します。これらのコンテンツは App Review に提出するバージョンに含まれます。公開中のバージョンではなく、PREPARE_FOR_SUBMISSION バージョンを編集してください。

  • アクティビティ:asc_list_game_center_activities · asc_get_* / asc_post_* / asc_patch_*(archived: true にすると公開中のものを終了します)/ asc_delete_game_center_activity · asc_{add,remove}_game_center_activity_{achievements,leaderboards}(v2 ID)。
  • チャレンジ:asc_list_game_center_challenges(referenceName / archived フィルター)· asc_get_* / asc_post_* / asc_patch_* / asc_delete_game_center_challenge · asc_set_game_center_challenge_leaderboard(v2 リーダーボード)。
  • バージョン → ローカライゼーション → 画像(どちらにも同じツールを使用し、名前には activity または challenge が含まれます):asc_list_*_versions · asc_get_*_version · asc_post_*_version(アクティビティのバージョンには、fallbackUrl 用の asc_patch_game_center_activity_version もあります)· asc_list_*_localizations と get / post / patch / delete · asc_get_*_image(ID、ローカライゼーション、またはバージョンのデフォルト画像で取得)· asc_upload_*_image(複合処理:予約 → チャンクを PUT → uploaded: true、チェックサムなし)と raw post / patch / delete。
  • アプリのバージョン:asc_list_game_center_app_versions(App Store のバージョンごとに 1 つ。enabled フィルター。compatibilityVersionsOf で互換性のあるバージョンを一覧表示)· asc_get_* · asc_post_* · asc_patch_game_center_app_version(⚠️ enabled: false にすると、そのバージョンの Game Center がオフになります)· asc_{add,remove}_game_center_app_version_compatibility。
  • マッチメイキング(アプリ単位ではなくチーム全体):ルールセット asc_{list,get,post,patch,delete}_game_center_matchmaking_rule_set(s) · ルールとチーム asc_{list,post,patch,delete}_game_center_matchmaking_{rules,teams}(ルールセットを通じて一覧表示)· キュー asc_{list,get,post,patch,delete}_game_center_matchmaking_queue(s)(⚠️ 公開済みのゲームが指定しているキューを削除すると、マッチメイキングが機能しなくなります)· asc_test_game_center_matchmaking_rule_set(ルールセットに架空のリクエストを通してドライランを行い、一致したものを返します)· asc_get_game_center_matchmaking_{queue,rule}_metrics(リクエスト、キューのサイズ、セッション、ルールの結果、エラーを時系列で取得)。
  • ルール式は JMESPath ベースです。リテラルはバッククォートで囲みます(requests[0].secondsInQueue >= `5` )。数値をそのまま指定すると 409 コンパイルエラーになります。
プロビジョニングとコード署名

Developer Portal の領域(fastlane の match/sigh/cert に相当します)。ロールの制限: Admin(または Account Holder)の API キーが必要です。App Manager/Developer のキーでは、ここで 403 エラーが返されます(各ツールで説明されます)。

  • Bundle ID:asc_list_bundle_ids(識別子で絞り込み) · asc_get_bundle_id(ケイパビリティとプロファイルを含む) · asc_post_bundle_id(識別子は変更不可。逆引き DNS 形式の文字列を確認してください) · asc_patch_bundle_id(名前の変更のみ) · asc_delete_bundle_id(アプリが関連付けられている間は拒否されます)。
  • ケイパビリティ:asc_post_bundle_id_capability · asc_patch_bundle_id_capability · asc_delete_bundle_id_capability — ケイパビリティを変更すると既存のプロファイルは無効になります。変更後に再生成してください。
  • 証明書:asc_list_certificates · asc_get_certificate(base64 DER コンテンツ) · asc_post_certificate(PEM CSR から作成。秘密鍵が Apple に送信されることはありません) · asc_delete_certificate(⚠️ DELETE は失効を意味します。この証明書を使った CI 署名は即座に機能しなくなります)。
  • プロファイル:asc_list_profiles · asc_get_profile(profileContent は実際の base64 .mobileprovision です) · asc_post_profile · asc_delete_profile。PATCH はありません。プロファイルは変更不可のため、削除して再作成することでローテーションします。
  • デバイス:asc_list_devices · asc_post_device(⚠️ 実質的に永久です。デバイスは無効化のみ可能で、削除はできません。また、年間クラスごとに100台の上限にカウントされます) · asc_patch_device(名前の変更、ENABLED/DISABLED)。
  • Pass Type ID(Apple Wallet):asc_list_pass_type_ids · asc_get_pass_type_id · asc_list_pass_type_id_certificates · asc_post_pass_type_id(識別子は変更不可) · asc_patch_pass_type_id(名前の変更のみ) · asc_delete_pass_type_id(⚠️ 関連する証明書が失効します。すでにウォレットにあるパスは更新されなくなります)。
  • Merchant ID(Apple Pay):asc_list_merchant_ids · asc_get_merchant_id · asc_list_merchant_id_certificates · asc_post_merchant_id(識別子は変更不可) · asc_patch_merchant_id(名前の変更のみ) · asc_delete_merchant_id(⚠️ この ID を使用しているすべてのアプリとサイトで Apple Pay が機能しなくなります)。
ユーザーとアクセス権

アカウントを支えるチームです。読み取りは無料です。チームを変更する書き込み操作にはすべて確認が必要です。 Admin API キーが必要です。

🔒 confirm: true のゲート。 asc_patch_user、asc_delete_user、asc_add_user_visible_apps、asc_set_user_visible_apps、asc_remove_user_visible_apps、asc_post_user_invitation、asc_delete_user_invitation は、呼び出しに confirm: true が渡されない限り、Apple に何も送信しません。指定がない場合はユーザーを検索し、対象者の情報(名前、ログイン名、ID、現在のロール)と、具体的な変更内容(失うロールと得るロール、名前付きで失うアプリ、Account Holder と ADMIN に関する警告)を示す拒否応答を返します。ユーザーを削除したりロールを変更したりすると、実際のユーザーがアクセスできなくなるため、デフォルト値も force もありません。アカウント所有者が該当する変更を承認した後に、明示的に confirm: true を指定してください。

  • ユーザー:asc_list_users(ユーザー名/ロール/表示可能なアプリで絞り込み) · asc_get_user · asc_list_user_visible_apps · 🔒 asc_patch_user(roles と visibleAppIds は現在のリストを置き換えます) · 🔒 asc_delete_user。
  • 表示可能なアプリ:🔒 asc_add_user_visible_apps · 🔒 asc_set_user_visible_apps(置き換え) · 🔒 asc_remove_user_visible_apps。ユーザーが allAppsVisible または全アプリ対象のロールを持っている場合、効果はありません。
  • 招待:asc_list_user_invitations · asc_get_user_invitation · asc_list_user_invitation_visible_apps · 🔒 asc_post_user_invitation(メールを送信) · 🔒 asc_delete_user_invitation(キャンセル)。PATCH はありません。キャンセルして再度招待してください。
  • アクター:asc_list_actors(Apple は ID を必要とします。レビュー提出の submittedByActor などから取得してください。ID は USER:<uuid>/API_KEY:<key id> のような形式です) · asc_get_actor。
法的契約
  • EULA(製品ページに表示される、顧客向けのもの):asc_get_app_end_user_license_agreement(アプリにカスタム EULA がない場合は「標準 EULA」を返します) · asc_get_end_user_license_agreement · asc_list_end_user_license_agreement_territories · asc_post_end_user_license_agreement · asc_patch_end_user_license_agreement(本文や対象地域を置き換えます) · asc_delete_end_user_license_agreement(Apple の標準 EULA に戻します)。
  • TestFlight ベータライセンス:asc_list_beta_license_agreements · asc_get_beta_license_agreement · asc_get_app_beta_license_agreement · asc_get_beta_license_agreement_app · asc_patch_beta_license_agreement。アプリごとに 1 つあり、Apple によって作成されます。作成や削除はできません。
サンドボックステスター

StoreKit のテストアカウントで、収益化機能をエンドツーエンドでテストできます。テスターは ASC の UI で作成し、API で設定を管理します。

  • asc_list_sandbox_testers · asc_patch_sandbox_tester(地域、interruptPurchases、高速化された subscriptionRenewalRate — サブスクリプションの 1 か月分が 3~60 分ごとに更新されます) · asc_post_sandbox_testers_clear_purchase_history(サンドボックス専用の消去機能で、購入フローを再テストできます。イントロオファーの利用資格もリセットされます)。
関連リソースの読み取り、関連付け、アプリ設定

API 4.5.1 のその他の関連リソースの読み取り、関連付けの書き込み、そして他のツールがすでに対応しているリソースに対する単一の PATCH/DELETE です。

  • asc_get_related — 関連リソースへの GET 48 種類に対応する単一のツールです。"<parent>.<relationship>" をキーとして指定します。ビルドの app/preReleaseVersion/buildBetaDetail/icons/individualTesters、ベータテスターの apps/groups/builds、プロファイルの devices/certificates、バンドル ID の capabilities/profiles、アプリの ciProduct、CI プロダクトの repositories、レビュー提出の items、オファーコードの価格などに対応します(各キーはツールの説明にすべて記載されています)。単一リソースの読み取りでは、Apple から data: null が返された場合、「リンクなし」と表示します。
  • 既存の一覧取得ツールに対応する ID 指定の読み取り:asc_get_analytics_report / _instance / _segment · asc_get_alternative_distribution_package_{delta,variant,version} · asc_get_ci_product · asc_get_ci_build_action · asc_get_ci_issue · asc_get_ci_test_result · asc_get_scm_provider · asc_get_scm_pull_request · asc_get_iap_content · asc_get_app_price_point_v3。
  • アプリ情報:asc_get_app_info_category(6 つあるカテゴリー枠のいずれか) · asc_list_app_info_territory_age_ratings。
  • 価格:asc_list_app_price_schedule_prices / asc_list_iap_price_schedule_prices(手動または自動、地域別) · asc_list_price_point_equalizations(アプリ、IAP、またはサブスクリプション。adjusted は月額プランに調整された均等化価格を取得します。Apple がここで受け付けるのは planType: MONTHLY のみです)。
  • TestFlight の指標:asc_get_beta_tester_usages(アプリ、ベータグループ、またはテスター 1 人+アプリ。Apple では groupBy またはフィルターが必須のため、アプリ/グループの結果は常にテスターごとにグループ化されます) · asc_get_beta_group_public_link_usages · asc_get_build_beta_usages。
  • asc_get_app_performance_overview — GET /v1/apps/{id}/performanceOverviews(API 4.5、application/vnd.apple.xcode-overview+json)。
  • 関連付け(POST は追加、DELETE は指定した ID のみ削除、PATCH は順序を保って置き換えます):asc_add/remove_build_beta_groups · asc_add/remove_build_individual_testers · asc_add/remove_beta_tester_beta_groups · asc_add/remove_beta_tester_builds · asc_remove_beta_tester_apps · asc_remove_app_beta_testers · asc_add/remove_app_store_version_localization_search_keywords · asc_add/remove_app_custom_product_page_localization_search_keywords · asc_set_app_screenshot_set_order · asc_set_app_preview_set_order · asc_remove_subscription_prices · asc_remove_subscription_introductory_offers。
  • asc_post_app_store_version_promotion — 成果を上げたプロダクトページ最適化の処理をバージョンに適用します。
  • Android → iOS アプリのマッピング:asc_list_android_to_ios_app_mappings · asc_get_… · asc_post_…(Play のパッケージ名+アプリ署名の SHA-256 フィンガープリント) · asc_patch_… · asc_delete_…。
  • ルーティングアプリの対応範囲(ナビゲーションアプリの .geojson ファイル。バージョンごとに単一リソース):asc_get_routing_app_coverage · asc_upload_routing_app_coverage(複合操作) · asc_post_… / asc_patch_… · asc_delete_…。
  • 設定:asc_patch_app(App Store Server 通知の URL+バージョン、コンテンツ権利、プライマリロケール、簡易購入) · asc_patch_app_custom_product_page_version(ディープリンク) · asc_patch_certificate(activated) · asc_patch_review_submission_item(resolved / removed) · asc_delete_ci_workflow · asc_delete_ci_product。
地域
  • asc_list_territories — App Store の全 175 地域
PPP による価格の再調整
  • ppp_load_index — PPP シグナルとして使用する、Apple Music の個人プラン価格スナップショットを返します
  • ppp_compute_proposal — 地域ごとの価格案を計算します(読み取り専用のドライランです。Apple Music の比率を暗黙の PPP 為替レートとして使用し、有効な Apple 価格ポイントに合わせて調整し、設定可能な丸め戦略と下限を適用します)。有料アプリの場合は resourceType: "subscription"(デフォルト)と subscriptionId、resourceType: "app" と appId、resourceType: "iap" と iapId、resourceType: "introductoryOffer" と subscriptionId に加えて offerMode/duration(PAY_AS_YOU_GO の場合は numberOfPeriods も指定。PAY_UP_FRONT ではデフォルトで 1)を渡します。また、resourceType: "promotionalOffer" の場合は subscriptionId に加えて offerMode/duration/promoOfferName/promoOfferCode(PAY_AS_YOU_GO の場合は numberOfPeriods も指定。PAY_UP_FRONT ではデフォルトで 1)を渡します。
  • ppp_apply_proposal — MCP の確認要求を通じて確認した後(または無人実行では confirm: true を指定して)、ASC に対する案を再計算して適用します。いずれかの行で価格が maxDropPct(デフォルトは 90%)を超えて下落する場合は拒否します。ASC の請求通貨が Apple Music の通貨と異なる地域はスキップします。
    • サブスクリプションの場合:地域ごとの subscriptionPrices POST を maxConcurrency(デフォルトは 2)に基づいて間隔を空けて実行し、429 は自動的に再試行します。preserveCurrentPrice: true(デフォルト)の場合、既存の加入者には現在の価格が適用され続けます。
    • アプリおよび IAPの場合:価格スケジュール全体を置き換える POST を 1 回だけ実行します(HTTP 呼び出しは 1 回で、アトミックです)。アプリ/IAP には既存価格を維持する仕組みがないため、新価格は各エントリーの startDate に適用されます。基本地域を変更する場合は acknowledgeDeletesScheduledIfBaseChanges: true が必要です(基本地域の変更時に Apple が保留中のスケジュール済み変更を消去するためです)。
    • 導入オファーの場合:地域ごとの subscriptionIntroductoryOffers POST を maxConcurrency に基づいて間隔を空けて実行します。Δ列は、調整後のオファー価格とその地域の現在の通常のサブスクリプション価格を比較します。そのため、-50% はオファー価格がサブスクリプション価格の半額であることを意味します。FREE_TRIAL は価格を計算できないため拒否されます(地域を省略して asc_post_subscription_introductory_offer を使用すると、単一のグローバル無料トライアルを設定できます)。導入オファーは追加であり、置き換えではありません。対象の (sub, territory) の組み合わせに有効なオファーがすでに存在する場合、Apple は 409 を返し、その行は結果テーブルで failed と表示されます。
    • プロモーションオファーの場合:/v1/subscriptionPromotionalOffers へのアトミックな POST 1 回で、オファーと地域ごとの PPP に合わせて調整した価格をすべて単一のリクエストで作成します。作成のみ可能です。offerCode が既存のオファーと重複する場合、またはサブスクリプションのオファー数が Apple の上限である 10 件に達している場合は拒否されます。FREE_TRIAL は価格を計算できないため拒否されます。Δは導入オファーと同様に、現在のサブスクリプション価格との比較で表示されます。
レスポンスの形式

すべてのリスト/取得ツールは、LLM がコンテキストを消費せずに読み取れるよう、デフォルトで簡潔なテキストテーブルを返します。すべてのツールでは、次のオプションも指定できます。

  • raw: true — デバッグや高度な用途向けに、完全な JSON:API ペイロード(data、included、links、meta)を返します。
  • maxItems: number — 自動ページネーションの上限を設定します(デフォルトはツールに応じて 500~1000)。MCP は links.next をたどり、ページをまたいで included リソースを統合し、重複を除去します。

スパースフィールドセット(fields[type]=...)は、未使用の属性を取得しないようツールごとに適用されます。全 175 地域の価格スケジュールは、ページあたり 200 件のページネーション付き呼び出し 1 回で取得でき、フィルターなしのペイロードと比べてサイズはおよそ 1/10 です。

プロトコルのサポート

同じビルドで MCP 2026-07-28 リビジョンと2025年版のプロトコルに対応しており、どちらを使うかはクライアントが選択します。どちらの場合も設定は不要です。

2026-07-28では、サーバーはステートレスです(initialize ハンドシェイクはなく、機能は server/discover から取得します)。また、書き込み確認プロンプトでは複数回の往復が必要です。ppp_apply_proposal が input_required の結果を返すと、クライアントは確認を表示し、ユーザーの回答を添えて同じツール呼び出しを再実行します。エリシテーションに対応していないクライアントには、以前と同じく confirm: true を指定して再実行するよう通知されます。

提案は往復の間に保持されず、再実行時に再計算されます。そのため、書き込みの直前に App Store Connect から価格が読み直され、一時停止して検討する前の価格が再利用されることはありません。その代わり、対話形式で適用する場合は計算が2回行われます。64テリトリーのサブスクリプションでは、約48秒ではなく約95秒かかります。confirm: true を指定した無人実行では確認が求められず、計算は1回だけなので影響はありません。

本番環境での動作

本番の App Store Connect アカウントに対して ppp_apply_proposal を実行する前に、知っておくとよい点をいくつか紹介します。

  • レート制限への対応。 Apple は POST エンドポイントを毎分約50回に制限します。client.request は Retry-After ヘッダーに従い、ヘッダーがない場合は指数バックオフ(2秒 → 60秒、上限あり、最大6回の再試行)を行います。60テリトリーのリバランスでは、再試行の間隔を調整しながら、手動対応なしで実時間約2分で完了します。
  • 通貨不一致によるスキップ。 バンドルされた Apple Music のインデックスではあるテリトリーの通貨が BHD と記載されている一方、ASC ではサブスクリプションの請求通貨が USD の場合、PPP-FX 比率の次元が合わなくなります。そのような行には currency-mismatch (asc=USD, am=BHD) と表示され、適用対象から除外されます。湾岸地域の USD 請求市場(BHR、KWT、OMN)でよく見られます。必要に応じて手動で設定してください。
  • 妥当性確認の下限。 floorFactor(デフォルトは0.15)は、現在価格に対するテリトリーごとの値下げ幅の厳格な下限です。古いインデックス項目によって価格がほぼゼロまで下がるのを防ぎます。より慎重にリバランスするには、0.30または0.50を指定してください。
  • 値下げ幅の妥当性確認の上限。 maxDropPct(デフォルトは90%)は、1行でもこの値を超えて値下がりする場合、実行全体の適用を拒否します。Apple Music が市場価格を大幅に引き下げるのを見たことがある場合、ASC に書き込む前に、これによってその結果生じた外れ値を検出できます。
  • 必要に応じてスナップショットを更新してください。 data/apple-music-prices.json は手動で編集されたスナップショットです。各項目には日付が記載されており、提案の出力にもスナップショットの日付が表示されます。Apple Music の価格が変わったら、更新のプルリクエストを送ってください。プロジェクトに取り込まれます。

匿名のエラーレポート(オプトイン、デフォルトで無効)

このサーバーは App Store Connect の認証情報を保持するため、マシンの外部に送信される情報には厳しい基準を設けています。テレメトリーは明示的に有効にしない限り無効であり、「デフォルトで有効、後からオプトアウト」という手順はありません。

appstoreconnect-mcp init で一度だけ確認されます。いつでも変更できます。

appstoreconnect-mcp telemetry status
appstoreconnect-mcp telemetry on
appstoreconnect-mcp telemetry off
送信される情報
送信される情報ツール名(asc_patch_subscription_localization)、HTTP ステータス(409)、Apple のエラー code(ENTITY_ERROR.ATTRIBUTE.INVALID.UNMODIFIABLE)、Apple の一般的な title、JSON ポインター(/data/attributes/state)、パッケージのバージョン、Node のバージョン、OS とアーキテクチャ、ランダムなインストール UUID。さらに、1日につき1回の稼働確認 ping。
送信されない情報Apple のエラー detail のテキスト、リクエスト URL やパス、アプリ ID、バンドル ID、アプリ名、価格、サブスクリプション名、リクエストまたはレスポンスの本文、発行者 ID、キー ID、認証情報。位置情報の取得は明示的に無効化されています($geoip_disable)。そのため、IP アドレスから推定される市区町村、郵便番号、座標も記録されません。

スクラバーはブロックリストではなく許可リストです。Apple が明日フィールドを追加しても、レビューで除外されるのではなく、仕組み上送信対象になりません。tests/telemetry-scrubbing.test.ts のテストで適用されており、含まれる情報だけでなく、含まれない情報も同様に検証しています。

理由

たとえば「Apple がすべての asc_patch_subscription_localization を 409 で拒否し始めた」というバグが、誰かがイシューを報告するのを待たずにシグナルとして現れるようになります。これは実際にあった事例です。手作業で発見されたもので、これはその自動化版です。

すべての環境で無効にする
  • DO_NOT_TRACK=1 が尊重され、明示的なオプトインより優先されます。
  • ASC_MCP_TELEMETRY=0 は完全に無効化します。=1 は、その実行中に限り有効にし、同意をディスクに記録しません。
  • ASC_MCP_TELEMETRY_HOST / ASC_MCP_TELEMETRY_KEY を設定すると、フォークを独自のコレクターに接続できます。

通信は 3 秒のタイムアウトを設けたファイア・アンド・フォーゲット方式です。ツール呼び出しをブロックせず、例外を発生させず、標準出力にも書き込みません(標準出力は MCP プロトコルの通信チャネルです)。

PPP リバランススキル

examples/ppp-rebalance/ ディレクトリには、これらのツールを購買力平価のワークフロー(ドライラン → スケジュール → ロールバック)にまとめ、注意点も組み込んだ Claude Code スキルが含まれています。

mkdir -p ~/.claude/skills && \
  ln -s "$PWD/examples/ppp-rebalance" ~/.claude/skills/ppp-rebalance

次に Claude に「ppp-rebalance スキルを使って、サブスクリプションの価格をリバランスしてください」と尋ねます。

ロードマップ

v0.1~v1.0 では、収益化+ベータ配信+App Store のプロダクトページ全体+ライブのプロモーションイベント+テリトリー/ロールアウト/輸出コンプライアンス+プッシュ通知+収益/分析レポート+顧客フィードバック+プロダクトページの A/B テスト+実行時のヘルス/アクセシビリティ+予約注文/実勢為替レート+EU DMA の代替配信を対象とします。具体的には、価格設定/IAP/オファー全体(サブスクリプション、有料アプリ、IAP、初回オファー、プロモーションオファー、オファーコードキャンペーン、署名者)、TestFlight(ビルド、ベータグループ、ベータテスター、ベータローカライズ、ベータレビュー申請)、ロケールごとのプロダクトページのコピー(リリースノート、説明、キーワード、プロモーションテキスト)、リリースライフサイクル(App Store バージョンの書き込み+V2 レビュー申請)、App Info/カテゴリ/タグ/検索キーワード関連機能(v0.12)、スクリーンショット+プレビューアセットのアップロード+Custom Product Pages(v0.13)、In-App Events+Promoted Purchases(v0.14)、App Availability+Phased Release+Encryption Declarations(v0.15)、TestFlight のフィードバックループ(ベータフィードバックのスクリーンショット/クラッシュ、ビルド通知、公開リンクの募集条件)(v0.16)、Webhook(アプリごとのイベントプッシュと、配信履歴、再配信、テスト ping)(v0.17)、売上/財務レポートのダウンロード+Analytics Reports チェーン(v0.18)、顧客レビュー(閲覧、返信、要約)(v0.19)、App Store Version Experiments(処理パターン+バリアントアセットを使ったプロダクトページの A/B テスト)(v0.20)、診断/パフォーマンス/電力/アクセシビリティ関連機能(v0.21)、テリトリーごとの予約注文+実勢為替レートによる PPP(v0.22)、そして EU DMA/代替配信(v1.0)です。計画していたロードマップは完了しています。残る領域は LLM 主導の運用に適しています。App Store の業務には、レビューへの返信や価格設定の位置付けなど、判断を要するテキスト作業が多く、モデルが下書きを作成し、人間が承認できるためです。

フェーズドメイン実現できること
v0.1 ✓アプリ · サブスクリプション · サブスクリプション価格 · PPP リバランス購買力に基づいて、テリトリーごとの価格変更をスケジュールできます。
v0.2.0 ✓アプリ価格(サブスクリプション以外):一覧表示 / 価格ポイント一覧表示 / スケジュール置換 · アプリへの PPP 計算の拡張有料アプリに対する PPP のドライランと、asc_post_app_price_schedule による手動適用が可能です。
v0.3.0 ✓アプリ内課金(v2):一覧表示 / 取得 / 価格スケジュールの読み取りと書き込みアプリ内課金(消耗型、非消耗型、非更新サブスクリプション)にも同じ収益化機能を提供します。自動更新サブスクリプションには引き続き Subscriptions ツールを使用します。
v0.4.0 ✓アプリとアプリ内課金への ppp_apply_proposal 自動適用 · アプリ内課金への PPP · 価格ポイント一覧表示の nearAmount フィルターサブスクリプションだけでなく、すべての有料対象に対して、PPP リバランスを一度の操作で適用できます。
v0.5.0 ✓サブスクリプションの導入オファー(無料トライアル / 従量課金 / 前払い):一覧表示 / 取得 / POST / PATCH / 削除 · 導入オファーへの PPP 拡張どこでも一律の $0.99 ではなく、地域の購買力に合わせて調整される、PPP 対応の「初月」/「最初の 3 か月」プロモーションを実施できます。
v0.6.0 ✓サブスクリプションのプロモーションオファー(既存・解約済みのサブスクライバー向け):一覧表示 / 取得 / POST / 価格の PATCH / 削除 · プロモーションオファーへの PPP 拡張(作成時のみ、単一の POST でアトミックに実行)テリトリーごとの価格設定に PPP を適用した、再獲得キャンペーンを実施できます。
v0.7.0 ✓サブスクリプションオファーの署名:3 種類の署名方式(レガシー ECDSA、JWS v2 プロモーション、JWS v2 導入オファーの適格性確認)で、Apple が現在サポートするすべての形式に対応StoreKit での引き換えをエンドツーエンドで実行できます。v0.6 のプロモーションオファーを ASC で設定するだけでなく、iOS アプリで利用できるようになりました。
v0.8.0 ✓サブスクリプションのオファーコード(キャンペーンの作成・読み取り・更新・削除以外の CRUD · テリトリーごとの価格 · 1 回限り使用するコードの一括生成 · /values によるテキスト/csv エクスポート)· オファーコードキャンペーンへの PPP 拡張プロモーションコードの引き換えキャンペーン(App Store Connect →「Offer codes」)で、コードの生成、無効化、CSV エクスポートができます。
v0.8.1 ✓サブスクリプションのオファーコードの追加機能:カスタム(複数回使用可能)コード(一覧表示/POST/PATCH)· 一括作成時の environment: SANDBOX|PRODUCTION · キャンペーン作成時の autoRenewEnabled · キャンペーンのダイジェストに autoRenew と本番/サンドボックスのコード数を表示 · PPP 適用時に autoRenewEnabled を引き継ぎ一般公開される引き換え可能な文字列(1 つの文字列を複数回引き換え)に加え、本番とサンドボックスを区別する一括生成のタグ付け、更新されない 1 回限りのオファーコードに対応します。
v0.9.0 ✓5 つのサブドメインにわたる TestFlight 機能:ビルド(一覧表示/取得/期限切れにする/ビルドベータ詳細)· ベータグループ(CRUD + テスターとの関連付け + ビルドとの関連付け)· ベータテスター(CRUD + 招待の送信/再送信)· ベータビルドのローカリゼーション(ビルド × ロケールごとの CRUD)· ベータアプリのローカリゼーション(アプリ × ロケールごとの CRUD)· ベータアプリレビューの提出と詳細 · プレリリースバージョン(読み取り専用)。新しいツール 32 個。「このテストノートを EN/ES/JA で添えて、新しいビルドにこのテスター 30 人を招待して。」
v0.10.0 ✓4 つの対象にわたる App Store のプロダクトページのローカリゼーション:App Store バージョン(読み取り専用の一覧表示/取得)· App Store バージョンのローカリゼーション(CRUD — リリースノート / 説明 / キーワード / プロモーションテキスト / マーケティング URL とサポート URL)· サブスクリプションのローカリゼーション(CRUD — ロケールごとの名前と説明)· アプリ内課金のローカリゼーション(v2 アプリ内課金と同じ形式の CRUD)。新しいツール 17 個。LLM による最大の効果が得られます。既存のローカリゼーションを文体の参考にして、リリースノートを 35 のロケールに翻訳し、差分を提示して、承認後に反映できます。
v0.10.1 ✓修正:asc_patch_app_store_version_localization に状態を考慮した事前チェックを追加 — Apple の一般的な 409 STATE_ERROR が返される前に、互換性のないフィールドの一括指定をクライアント側で拒否し、{state, allowed, blocked, reason, nextEditablePath} を返します。MarketingUrlSchema の説明を改訂し、App Store プロダクトページと TestFlight の対象を区別しました。READY_FOR_SALE 状態のバージョンへの無駄な PATCH を回避できます。
v0.11.0 ✓App Store バージョンの書き込み機能(作成 / PATCH / 削除。削除は状態で制限)+ V2 レビュー提出ワークフロー(下書き作成 → アイテム追加 → 提出/キャンセル + ステータスの読み取り)。MCP から ASC を開かずに新しいバージョンをエンドツーエンドでリリースでき、リリースの全工程を完了できます。「リリースノートを 35 のロケールに翻訳して、バージョン 2.5 をレビューに提出して。」
v0.12.0 ✓アプリ情報(一覧表示/取得 + カテゴリー関連付けの状態制御付き PATCH)· AppInfoLocalization CRUD(ロケールごとの名前 + サブタイトル + プライバシー URL + プライバシーテキスト)· AppCategory カタログ(サブカテゴリーを含む読み取り専用)· AppTag(アプリごとの一覧表示 + visibleInAppStore の表示切り替え用 PATCH)· SearchKeywords の集約読み取り機能(プラットフォーム + ロケールでフィルター)。新しいツール 12 個。「アプリのサブカテゴリーを旅行からスポーツに変更してから、13 のロケールすべてでサブタイトルを更新して。」
v0.13.0 ✓アセットアップロード:スクリーンショット + アプリプレビュー(3 段階の予約 / チャンク PUT / コミット。複合ショートカット(asc_upload_screenshot、asc_upload_app_preview)と、手動制御用の 3 段階の個別ツールを提供)。カスタムプロダクトページ:ページ + バージョン + ローカリゼーションの CRUD。バージョンには状態制御があります。固定されたワイヤーキーの注意点(isUploaded→uploaded、isVisible→visible、videoURL→videoUrl)と、CPP バージョン作成時に attrs ブロックを省略する仕様に対応。新しいツール約 25 個。「これらのソースファイルから 12 のロケール向けに App Store スクリーンショットを生成し、paid-ads-summer というカスタムプロダクトページのバリエーションにアップロードして。」
v0.14.0 ✓アプリ内イベント:AppEvent + AppEventLocalization の CRUD。10 値の状態制御(WAITING_FOR_REVIEW / IN_REVIEW の場合は拒否)、TerritorySchedule 配列(ISO 8601)、イベントのスクリーンショットと動画クリップのアップロード(複合ツール + 3 段階の個別ツール。v0.13 のアセットアップロードヘルパーを再利用)。プロモート対象の購入:CRUD + アプリごとの順序関連付け(配列のみの PATCH。配列の順序がストアフロントの表示順になります)。固定されたワイヤーキーの注意点:isUploaded→uploaded、isVisibleForAllUsers→visibleForAllUsers、isEnabled→enabled。新しいツール約 28 個。「アプリ内イベント『Salmon Season Opens』を作成して。開催期間は 2026-06-15 から 2026-07-15 です。」
v0.15.0 ✓アプリの提供状況 v2(POST のみの全置換。3 文字の ISO コードが ID。予約注文の終了ツール)+ 段階的リリース(AppStoreVersion の 4 状態ライフサイクル PATCH)+ 暗号化申告(追記専用の申告 + ビルドとの関連付け + v0.13 のアセットアップロードを再利用したサポート書類のアップロード)。固定されたワイヤーキーの注意点:isAvailableInNewTerritories→availableInNewTerritories、isAvailableOnFrenchStore→availableOnFrenchStore、isUploaded→uploaded、downloadURL→downloadUrl。新しいツール約 19 個。「新たに 3 つのテリトリーでアプリを有効にして、バージョン 2.5 の段階的リリースを開始して。」
v0.16 ✓TestFlight の追加機能:ベータフィードバック提出(スクリーンショット + クラッシュフィードバックの一覧。ビルド/テスター/デバイスでフィルター、クラッシュログのテキスト取得、削除)+ ビルドベータ通知(「新しいビルドが利用可能」という手動通知。関連付けのみの POST で attrs ブロックは一切不要)+ ベータ募集条件(ベータグループごとの to-ONE。作成/PATCH/削除 + 有効なオプションのカタログ + 互換性のあるビルドの確認)。固定されたワイヤーキーの注意点:buildBundleID→buildBundleId(末尾の ID を削除)。フィードバックと条件の DELETE は Apple のドキュメントに記載されていますが Swift SDK にはなく、Apple のドキュメント JSON と照合して確認済みです。ドット付きフィルター filter[build.preReleaseVersion]。新しいツール 14 個。「ビルド 132 のベータフィードバックを頻度と深刻度別に要約して、トリアージリストを作成して。」
v0.17 ✓Webhook:アプリごとの CRUD(作成時に必須の attrs 5 個。書き込み専用 HMAC secret を含む。enabled による一時停止/再開。PATCH によるシークレットのローテーション)+ 配信履歴(詳細な filter[createdDateGreaterThanOrEqualTo] キーを使用する状態/日付フィルター、各試行の応答ステータス + エラー)+ 再配信(自己参照の template を使う関連付けのみの POST)+ テスト用 ping。イベントタイプの 12 値カタログは、v0.16 のフィードバック読み取り機能と BETA_FEEDBACK_*_CREATED の組み合わせに対応します。固定されたワイヤーキーの注意点:isEnabled→enabled、isRedelivery→redelivery、isPing→ping。新しいツール 8 個。「Slack チャンネルに新しいベータビルドの公開をすべて通知する Webhook を設定して。昨日以降の FAILED 配信を一覧表示して、再試行して。」
v0.18 ✓売上 + 財務レポート(JSON:API ではありません。新しい requestBinary クライアント経由で gzip 圧縮された TSV をダウンロード。10 種類の売上 reportTypes × subType × frequency。ASC_VENDOR_NUMBER 環境変数へのフォールバック付き vendorNumber。TSV プレビューのダイジェスト + saveTo によるファイル全体のエクスポート)+ Analytics Reports の 4 階層チェーン(ONGOING/ONE_TIME_SNAPSHOT をリクエスト → カテゴリーごとのレポート → 粒度/processingDate ごとのインスタンス → 署名付きの有効期限付き URL を使うセグメントと、gzip 解凍して CSV をダウンロードするツール)。固定された注意点:isStoppedDueToInactivity→stoppedDueToInactivity、gzip マジックバイト検出、セグメント URL の取得に ASC bearer を使用しないこと。新しいツール 9 個。「先週ブラジルで MRR が減少したのはなぜですか?リバランスの有効化日と比較してください。」
v0.19 ✓カスタマーレビュー:アプリ全体とバージョン単位の一覧(評価/テリトリーフィルター、未回答レビューの待ち行列用 exists[publishedResponse] フィルター、評価/日付の並べ替え)、レビューと返信の読み取り、⚠️ 一般公開される返信(レビューごとに 1 件の返信。再投稿すると置き換え)+ 返信の削除、カスタマーレビューの要約(Apple の AI による集約型プロダクトページ要約。filter[platform] が必須)。固定された注意点:isExistsPublishedResponse→exists[publishedResponse](exists パラメーターの削除形式)、filter[rating] の値は文字列です。新しいツール 6 個。「最新バージョンの星 1 つのレビューのうち、エクスポートのバグに言及しているすべてのレビューに返信案を作成して。投稿前に見せて。」
v0.20 ✓App Store バージョン実験 V2(アプリに関連付けられたプロダクトページ A/B テスト。非推奨の v1 機能は対象外):開始フラグによるライフサイクル制御を備えた実験 CRUD(開始後は⚠️顧客に表示されます。先に v0.11 のレビュー提出ワークフローで提出)、トリートメント(代替アイコンのテストを含む)、トリートメントのローカリゼーション。バリアントのスクリーンショット/プレビューには既存の v0.13 アセットツールを使用します(parentType appStoreVersionExperimentTreatmentLocalizations)。固定された注意点:isStarted→started、一覧表示のパス /v1/apps/{id}/appStoreVersionExperimentsV2 と CRUD のパス /v2/appStoreVersionExperiments。新しいツール 12 個。「トラフィックの 30% を対象に、青いアイコンと現在のアイコンの A/B テストを設定して。スクリーンショットは英語とドイツ語で。」
v0.21 ✓ランタイムの健全性 + アクセシビリティ:ビルドごとの診断シグネチャ(DISK_WRITES/HANGS/LAUNCHES のホットスポット。影響度で重み付け)+ 匿名化されたコールスタックログ(application/vnd.apple.diagnostic-logs+json)+ アプリおよびビルド単位の Xcode パフォーマンス/電力指標(application/vnd.apple.xcode-metrics+json、8 種類の指標)+ アクセシビリティ申告の CRUD(「Accessibility Nutrition Labels」:DRAFT → 公開状態への移行 ⚠️顧客に表示 → REPLACED)。固定事項:これまでで最大の is- strip ファミリー(9 件の isSupports*→supports* + isPublish→publish)、Accept のオーバーライドを介して 2 つの非 JSON:API コンテンツタイプに対応。新しいツール 8 個。「ビルド 2.5.0 を停止させるコールスタックはどれですか?起動時間のパーセンタイルをアプリのベースラインと比較してください。」
v0.22 ✓テリトリーごとの予約注文(territoryAvailabilities の PATCH:available ⚠️ / releaseDate / preOrderEnabled。v0.15 の提供状況機能を補完)+ 通貨が一致しないテリトリー向けの実勢為替レート(ppp_compute_proposal と ppp_apply_proposal の fxRates:ユーザー指定の USD 単位あたりのレートにより、Apple Music が現地通貨で価格設定する USD 請求のストアフロントを補正します。為替調整済みの行には * を付記。このサーバーはサードパーティーからレートを取得しません。設計上、外部通信先は Apple のみです)。新しいツール 1 個 + PPP エンジンのアップグレード。「日本で 9 月 1 日から予約注文を開始して。今日の BHD/KWD/OMR レートを使って、湾岸地域の価格をリバランスして。」
v1.0 ✓EU DMA / 代替配信(エンタイトルメントで制御。アカウントが登録されていない場合は、ツールが 403 の理由を説明):Web 配信用ドメイン(登録/一覧表示/削除 ⚠️)、公開署名鍵(秘密鍵は Apple に送信されません)、バージョンごとの署名付きパッケージ(署名付きダウンロード URL + バリアント + 差分を含む)、マーケットプレイス検索の詳細(catalogURL→catalogUrl への変換)、マーケットプレイスの Webhook(endpointURL→endpointUrl への変換、書き込み専用シークレット)。新しいツール 19 個。「バージョン 3.0 を Web 配信用にパッケージ化して、署名付き URL を CDN に渡して。」
v1.1.0 ✓サブスクリプションの再獲得オファー — 3 種類目のオファー。解約済みサブスクライバーを対象とします(Apple が条件を満たす解約済み顧客に自動的に表示します):一覧表示 / 取得 / 価格一覧表示 / POST / PATCH / 削除。プロモーションオファーよりも機能が充実しており、対象条件(有料期間 + 最後にサブスクリプションを利用してからの期間 {min,max} + 待機期間)、スケジュール(開始/終了)、優先度、自動アセットの promotionIntent に対応します。PATCH は attrs のみ(ID と価格は変更不可。変更するには削除して再作成します)。新しいツール 6 個。「1~6 か月前に解約したサブスクライバーに、PPP 価格を適用した 3 か月間のオファーで再登録を促して。Apple に自動的に表示させて。」
v1.2.0 ✓IAP + サブスクリプションの審査用アセット — IAP/サブスクリプションの提出前に Apple が要求する App Store 審査用スクリーンショットと、プロモーション画像です。1つの設定テーブルを基に、v0.13 の3段階アップロードフローで、4つのリソース(IAP/サブスクリプション × 画像/審査用スクリーンショット)に対応します。複合的な asc_upload_* と、低レベルの reserve/commit/delete、および読み取り機能を提供します。画像は複数登録できますが、審査用スクリーンショットは1つのみです(重複アップロードは拒否されます)。APIの注意点にも対応済みです。IAP画像は inAppPurchase に、IAP審査用スクリーンショットは inAppPurchaseV2 に関連付けられます。新しいツールが22個追加されます。「新しいサブスクリプションに審査用スクリーンショットを添付して、提出できるようにしてください。」
v1.4.0 ✓年齢レーティング申告 — App Review がアプリを評価するための質問票を読み取り、PATCH します(13個の頻度列挙値、11個の真偽値、レーティングの上書き、キッズ年齢区分)。バージョンではなく AppInfo に属し、申告IDは appInfo ID と同じです(appId から解決します)。Apple は PATCH 時に値をマージします。新しいツールが2個追加されます。「年齢レーティングの質問票に回答して、バージョン3.0を提出できるようにしてください。」
v1.5.0 ✓リリースフローを完全にカバーします。提供状況(サブスクリプション/IAP/プランタイプごとのテリトリー別提供状況 — ISOコードのみを使ったテリトリーの紐付け、POST のみで全件置換)に加え、バージョンごとのApp Review 詳細(連絡先/デモアカウント/メモ)と、アップロードファクトリーの5つ目のリソースとしての審査添付ファイル、リリースリクエスト(承認済みバージョンを今すぐリリース)、単独アイテムの提出(バージョンリリースを伴わずに IAP/サブスクリプション/グループを審査に提出)、請求猶予期間に対応します。新しいツールが約25個追加されます。「審査カードに記入し、デモ動画を添付して、新しいサブスクリプションを審査に提出し、承認済みのビルドをリリースしてください。」

v0.1→v1.0 のロードマップは完了しました — 当初予定していたすべての機能がリリースされています。1.0以降の作業では、Apple の API の変更(新しいリソース、契約の乖離 — scripts/audit-fieldsets.py と scripts/audit-required-attributes.py を参照)を追跡します。v1.1.0 ではウィンバックオファー、v1.2.0 では IAP/サブスクリプションの審査用アセット(審査用スクリーンショットなしでは提出できない問題を解消)、v1.4.0 では年齢レーティング申告、v1.5.0 では準備→審査提出→リリースのフローを完結させる機能(提供状況、審査詳細/添付ファイル、単独提出、リリースリクエスト、猶予期間)が追加され、App Asset Library(API 4.5.1)により、セットベースのスクリーンショット/プレビュー/イベントアセット用ツールが置き換えられます。

対象外(Fastlane/Xcode がすでに得意とする機能):プロビジョニングプロファイル、証明書、デバイス、ケイパビリティ、Game Center の設定。

これを App Store Connect の運用を支援する LLM コンパニオンとして考えてください。Fastlane はビルド/リリースパイプライン向けで、こちらはリリース後の知識業務 — リリースライフサイクル、翻訳、価格設定、ASO、顧客フィードバック、ストア内プロモーション、分析 — 向けです。

新しいドメインはそれぞれ、src/domains/<name>.ts のファイル1つと、src/index.ts の register* 呼び出しで構成されます。コントリビューションを歓迎します。CONTRIBUTING.md をご覧ください。

開発

git clone https://github.com/akoskomuves/appstoreconnect-mcp.git
cd appstoreconnect-mcp
npm install
npm run dev   # tsx watch mode
npm test
npm run build

コントリビューター向けの手順(changesets、PRテンプレート、ブランチ命名)については、CONTRIBUTING.md をご覧ください。

ライセンス

MIT © 2026 Akos Komuves

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。