appstore-connect について
appstore-connect は、App Store Connect で Apple プラットフォーム向けアプリを管理する開発者向けの MCP サーバーです。一般的な管理ツールに加え、Apple の OpenAPI 仕様に基づく API 操作へのアクセスを提供し、ツールグループの選択と読み取り専用モードに対応します。
主な機能
- 01App Store Connect API 操作へのアクセス
- 02バージョンと申請の管理
- 03TestFlight グループとテスターの管理
- 04ローカライズ、スクリーンショット、アプリ内購入の編集
- 05分析、売上、診断レポートの確認
- 06ツールグループの選択と読み取り専用モード
活用シーン
- 01アプリの審査提出の準備
- 02TestFlight グループとテスターの管理
- 03ストアの説明、キーワード、画像の更新
- 04アプリ分析と売上レポートの確認
MCP 対応
Claude や Cursor などの MCP クライアントに、App Store Connect の管理ツールを提供します。ツールグループを選択でき、読み取り専用モードでは書き込みリクエストを拒否します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
App Store Connect MCP Server
Apple の App Store Connect API 向け Model Context Protocol(MCP)サーバーです。Claude、Cursor、または MCP 対応クライアントから、iOS、macOS、tvOS、visionOS のアプリを直接管理できます。
機能
- あらゆる API 操作 -
asc_api_requestを通じて 1,303 件の App Store Connect API 操作を呼び出せます。Apple の OpenAPI 仕様に照らして検証され、検索や内容の確認にはasc_api_searchとasc_api_describeを使用できます - 提出とリリース - バージョンメタデータ(著作権、バージョン文字列、リリースタイプ)の編集、ビルドの添付、App Review の詳細、審査への提出、段階的リリースと手動リリース、輸出コンプライアンス
- アプリ情報 - カテゴリ、年齢制限指定、アプリ情報のローカライズ、カスタム EULA
- App Store のローカライズ - バージョン説明、キーワード、「新機能」の完全な CRUD
- アプリ管理 - すべてのプラットフォームのアプリの一覧表示と確認
- バージョン管理 - App Store バージョンの作成と管理
- TestFlight - グループ、ビルドへのアクセス、テスターと招待、「テスト内容」のメモ、ベータ版アプリのローカライズ、ベータ版審査への提出
- スクリーンショットとプレビュー - スクリーンショットとアプリプレビューのアップロード、並べ替え、削除。サブスクリプションとアプリ内課金のスクリーンショットの審査
- カスタマーレビュー - レビューの閲覧と返信の公開または削除
- バンドル ID の管理 - バンドル ID の完全な CRUD
- デバイス管理 - 登録済みデバイスの一覧表示と確認
- ユーザー管理 - チームユーザーの一覧表示と確認
- ビルド管理 - アプリビルドの一覧表示と確認
- カテゴリと価格 - カテゴリの確認、価格と提供状況の確認
- 価格設定と PPP - 購買力平価(PPP)に対応した地域ごとの価格設定
- サブスクリプション - グループ、サブスクリプション、ローカライズ、価格設定と PPP、提供状況、プロモーション、導入時および再獲得オファー、オファーコード
- アプリ内課金 - 1 回限りの購入(買い切り/非消費型、消費型、非更新型)の作成と管理:メタデータ、ローカライズ、価格設定と PPP、提供状況、オファーコード、審査用スクリーンショット、審査への提出
- カスタムプロダクトページ - ページ、バージョン、ロケールごとのプロモーションテキスト
- 分析レポート - アプリ分析レポート(エンゲージメント、コマース、使用状況、パフォーマンス)のリクエストとダウンロード
- 売上と財務 - 売上、トレンド、財務レポートのダウンロード
- パフォーマンスと診断 - アプリ/ビルドの電力とパフォーマンスのメトリクス、診断ログ
- ツールセットと読み取り専用モード - 必要なツールグループのみを公開するか、
ASC_READ_ONLY=1ですべての書き込みをブロックできます - デフォルトで安全 - 自動トークン更新とログ内の認証情報の秘匿化に対応した ES256 JWT 認証
目次
クイックスタート
- App Store Connect API キーを取得します(前提条件を参照)。
npx -y asc-mcp@latestと認証情報を使って、MCP クライアントにサーバーを追加します(MCP クライアントの設定を参照)。- クライアントを再起動します。新しいリリースは再起動のたびに反映されます。
インストール
npx(推奨)
npx -y asc-mcp@latest
MCP クライアントがこのコマンドを実行します(MCP クライアントの設定を参照)。npx はクライアントの起動時に最新リリースを取得するため、常に最新の状態を保てます。
グローバルインストール
npm install -g asc-mcp
次に、クライアント設定で "command": "asc-mcp" を使用します。グローバルインストールは自動では更新されないため、更新するには npm install -g asc-mcp@latest を実行してください。
更新
- npx: MCP クライアントを再起動してください。実行中のクライアントは、起動時のバージョンをそのまま使用します。
- グローバルインストール:
npm install -g asc-mcp@latestを実行してから、クライアントを再起動してください。 - 安定性を重視する場合は、
asc-mcp@latestの代わりに[email protected](または任意のバージョン)を指定して、バージョンを固定してください。
サーバーは1日に1回、起動を遅らせることなく、バックグラウンドで npm に最新バージョンを問い合わせます。お使いのバージョンが古い場合、次回のサーバー起動時にアシスタントへ通知し、アシスタントがそのことを1度だけお知らせします。この問い合わせ以外の情報は送信せず、インストールも行いません。無効にするには ASC_DISABLE_UPDATE_CHECK=1 を設定してください。
ソースからのインストール
git clone https://github.com/SardorbekR/appstore-connect-mcp.git
cd appstore-connect-mcp
npm install
npm run build
設定
前提条件:Apple API の認証情報を取得する
- App Store Connect にサインインします
- Users and Access → Integrations → App Store Connect API に移動します
- Generate API Key をクリックします(または既存のキーを使用します)
- 適切なロールを選択します(Admin または App Manager を推奨)
- .p8 ファイルをダウンロードします。ダウンロードできるのは1回だけです!
- Key ID(キーの一覧に表示されています)を控えます
- Issuer ID(ページ上部に表示されています)を控えます
環境変数
| 変数 | 必須 | 説明 |
|---|---|---|
APP_STORE_CONNECT_KEY_ID | はい | API Key ID(例:ABC123DEFG) |
APP_STORE_CONNECT_ISSUER_ID | はい | Issuer ID(UUID 形式) |
APP_STORE_CONNECT_P8_PATH | はい* | .p8 秘密鍵ファイルへのパス |
APP_STORE_CONNECT_P8_CONTENT | はい* | .p8 キーの内容(パスの代わりに指定) |
*P8_PATH または P8_CONTENT のいずれかが必要です。
任意の設定:
| 変数 | デフォルト | 説明 |
|---|---|---|
ASC_TOOLSETS | all | 公開するツールグループをカンマ区切りで指定します:apps、versions、media、testflight、pricing、subscriptions、iap、reviews、product-pages、provisioning、users、analytics、api。ツールの数を減らすと、利用可能なツール数が少ないクライアントで使用するコンテキストを減らせます。api グループでは、ほかのグループに含まれない操作も含め、すべての操作を実行できます。 |
ASC_READ_ONLY | off | 1 を指定すると読み取りツールのみを公開し、すべての GET 以外のリクエストをクライアントが拒否します |
ASC_MAX_RESPONSE_CHARS | 80000 | asc_api_request の結果に対するサイズ上限です。上限を超える結果はページの境界で終了し、続きの取得に使う cursor が返されます |
ASC_DISABLE_UPDATE_CHECK | off | 1 を指定すると、新しい asc-mcp リリースを1日1回確認する処理をスキップします |
MCP クライアントの設定
Claude Desktop
Claude Desktop の設定ファイルに追加します:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "asc-mcp@latest"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/absolute/path/to/AuthKey.p8"
}
}
}
}
Cursor
Cursor の MCP 設定(Settings → MCP Servers)に追加します:
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "asc-mcp@latest"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/absolute/path/to/AuthKey.p8"
}
}
}
}
Continue を使用する VS Code
Continue の設定に追加します:
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "asc-mcp@latest"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_PATH": "/absolute/path/to/AuthKey.p8"
}
}
}
}
パスの代わりに P8 の内容を使用する
CI/CD 環境やコンテナ環境では、キーの内容を直接渡すことができます:
{
"mcpServers": {
"app-store-connect": {
"command": "npx",
"args": ["-y", "asc-mcp@latest"],
"env": {
"APP_STORE_CONNECT_KEY_ID": "YOUR_KEY_ID",
"APP_STORE_CONNECT_ISSUER_ID": "YOUR_ISSUER_ID",
"APP_STORE_CONNECT_P8_CONTENT": "-----BEGIN PRIVATE KEY-----\nMIGT...your key here...AB12\n-----END PRIVATE KEY-----"
}
}
}
}
利用可能なツール
アプリ
| ツール | 説明 | パラメーター |
|---|---|---|
list_apps | アカウント内のすべてのアプリを一覧表示します | limit?(数値、1~200) |
get_app | 特定のアプリの詳細を取得します | appId(文字列、必須) |
バージョン
| ツール | 説明 | パラメーター |
|---|---|---|
list_app_versions | アプリのすべてのバージョンを一覧表示します | appId、platform?、versionState?、limit? |
get_app_version | バージョンの詳細を取得します | versionId |
create_app_version | 新しいアプリのバージョンを作成します | appId、platform、versionString、releaseType? |
バージョンのローカライズ
| ツール | 説明 | パラメーター |
|---|---|---|
list_version_localizations | バージョンのローカライズを一覧表示 | versionId, limit? |
get_version_localization | ローカライズの詳細を取得 | localizationId |
create_version_localization | 新しいロケールを追加 | versionId, locale, description?, keywords?, whatsNew? |
update_version_localization | ローカライズを更新 | localizationId, description?, keywords?, whatsNew?, promotionalText? |
delete_version_localization | ロケールを削除 | localizationId |
アプリ情報のローカライズ
| ツール | 説明 | パラメーター |
|---|---|---|
list_app_infos | アプリ情報レコードを一覧表示 | appId, limit? |
list_app_info_localizations | 名前/サブタイトルのローカライズを一覧表示 | appInfoId, limit? |
update_app_info_localization | アプリ名とサブタイトルを更新 | localizationId, name?, subtitle?, privacyPolicyUrl? |
ベータテスト(TestFlight)
| ツール | 説明 | パラメーター |
|---|---|---|
list_beta_groups | アプリのベータグループを一覧表示 | appId, limit? |
list_beta_testers | グループ内のテスターを一覧表示 | betaGroupId, limit? |
add_beta_tester | グループにテスターを追加 | betaGroupId, email, firstName?, lastName? |
remove_beta_tester | グループからテスターを削除 | betaGroupId, betaTesterId |
スクリーンショット
| ツール | 説明 | パラメーター |
|---|---|---|
list_screenshot_sets | スクリーンショットセットを一覧表示 | localizationId, limit? |
list_screenshots | セット内のスクリーンショットを一覧表示 | screenshotSetId, limit? |
upload_screenshot | 新しいスクリーンショットをアップロード | screenshotSetId, fileName, fileSize, filePath |
バンドル ID
| ツール | 説明 | パラメーター |
|---|---|---|
list_bundle_ids | すべてのバンドル ID を一覧表示 | limit?, platform? |
get_bundle_id | バンドル ID の詳細を取得 | bundleIdId |
create_bundle_id | 新しいバンドル ID を登録 | identifier, name, platform |
update_bundle_id | バンドル ID の名前を更新 | bundleIdId, name |
delete_bundle_id | バンドル ID を削除 | bundleIdId |
デバイス
| ツール | 説明 | パラメーター |
|---|---|---|
list_devices | 登録済みデバイスを一覧表示 | limit?, platform?, status? |
get_device | デバイスの詳細を取得 | deviceId |
ユーザー
| ツール | 説明 | パラメーター |
|---|---|---|
list_users | チームのユーザーを一覧表示 | limit?, roles? |
get_user | ユーザーの詳細を取得 | userId |
ビルド
| ツール | 説明 | パラメーター |
|---|---|---|
list_builds | アプリのビルドを一覧表示 | appId, limit? |
get_build | ビルドの詳細を取得 | buildId |
カテゴリと価格設定
| ツール | 説明 | パラメーター |
|---|---|---|
list_app_categories | アプリのカテゴリを一覧表示 | limit?, platform? |
get_app_price_schedule | アプリの価格情報を取得 | appId |
get_app_availability | アプリの提供地域を取得 | appId |
価格設定(PPP)
| ツール | 説明 | パラメーター |
|---|---|---|
list_territories | 通貨情報付きですべての地域を一覧表示 | limit? |
list_app_price_points | アプリで利用可能な価格帯を一覧表示 | appId, territory?, limit? |
get_price_point_equalizations | 各国の PPP 換算価格を取得 | pricePointId, territories?, limit? |
set_app_prices | 地域ごとの手動価格を設定(価格スケジュール全体を置き換えます) | appId, baseTerritory, manualPrices |
アプリ内課金(買い切り/非消耗型)
Apple の In-App Purchases v2 API を使用した一度限りの購入です。create_in_app_purchase のデフォルトは NON_CONSUMABLE(「買い切り」)です。公開するには、作成 → ローカライズを追加 → 価格を設定 → 配信可能地域を設定 → 審査に提出、の順に行います。
注: App Review では通常、アプリ内課金の審査用スクリーンショットが必要です。IAP の審査用スクリーンショットのアップロードは、これらのツールではまだサポートされていません。
submit_in_app_purchase_for_reviewがスクリーンショット不足で却下された場合は、App Store Connect で追加してください。
| ツール | 説明 | パラメーター |
|---|---|---|
list_in_app_purchases | アプリのアプリ内課金を一覧表示します。種類による絞り込みも可能です | appId、inAppPurchaseType?、limit? |
get_in_app_purchase | 1 件のアプリ内課金の詳細と状態を取得します | inAppPurchaseId |
create_in_app_purchase | IAP を作成します(デフォルトは NON_CONSUMABLE/買い切り) | appId、name、productId、inAppPurchaseType?、familySharable?、reviewNote? |
update_in_app_purchase | 名前、ファミリー共有、または審査メモを更新します(productId/種類は変更不可) | inAppPurchaseId、name?、familySharable?、reviewNote? |
delete_in_app_purchase | アプリ内課金を削除します | inAppPurchaseId |
list_in_app_purchase_localizations | ローカライズされた名前と説明を一覧表示します | inAppPurchaseId、limit? |
create_in_app_purchase_localization | ローカライズされた表示名(および説明)を追加します | inAppPurchaseId、locale、name、description? |
update_in_app_purchase_localization | ローカライズを更新します | localizationId、name?、description? |
delete_in_app_purchase_localization | ローカライズを削除します | localizationId |
list_in_app_purchase_price_points | 価格ポイント(顧客価格と収益)を一覧表示します | inAppPurchaseId、territory?、limit?、offset? |
get_in_app_purchase_price_point_equalizations | 基準価格ポイントに対する Apple の PPP 相当価格ポイントを取得します | pricePointId、territories?、limit? |
set_in_app_purchase_price | 価格を設定します(価格スケジュールを置き換えます。1 つの基準地域を指定して自動調整するか、PPP の全価格を指定します) | inAppPurchaseId、baseTerritory、manualPrices |
list_in_app_purchase_prices | 地域ごとの現在の価格を確認します(手動設定。自動設定価格は任意) | inAppPurchaseId、territory?、includeAutomatic?、limit? |
get_in_app_purchase_availability | 地域ごとの配信状況を取得します | inAppPurchaseId |
set_in_app_purchase_availability | 地域ごとの配信状況を設定します | inAppPurchaseId、availableInNewTerritories、territories? |
submit_in_app_purchase_for_review | IAP を App Review に提出します(アプリのバージョンとは独立しています) | inAppPurchaseId |
アナリティクスレポート
| ツール | 説明 | パラメーター |
|---|---|---|
create_analytics_report_request | アナリティクスレポートをリクエストします(継続的なレポートまたは一度限りのスナップショット) | appId、accessType |
list_analytics_report_requests | アプリのアナリティクスレポートリクエストを一覧表示します | appId |
get_analytics_report_request | アナリティクスレポートリクエストを取得します | requestId |
delete_analytics_report_request | アナリティクスレポートリクエストを削除します | requestId |
list_analytics_reports | リクエストで利用可能なレポートを一覧表示します | requestId |
list_analytics_report_instances | レポートのインスタンス(日付別)を一覧表示します | reportId |
list_analytics_report_segments | レポートインスタンスのダウンロード可能なセグメントを一覧表示します | instanceId |
download_analytics_report_segment | レポートのセグメントをダウンロードします | url |
売上と財務
| ツール | 説明 | パラメーター |
|---|---|---|
get_sales_report | 売上/トレンドレポートをダウンロードします | vendorNumber、reportType、reportSubType、frequency、reportDate |
get_finance_report | 財務レポートをダウンロードします | vendorNumber、regionCode、reportDate、reportType |
パフォーマンスと診断
| ツール | 説明 | パラメーター |
|---|---|---|
get_app_perf_metrics | アプリの電力とパフォーマンスのメトリクスを取得します | appId、metricType |
get_build_perf_metrics | ビルドのパフォーマンスメトリクスを取得します | buildId、metricType |
list_diagnostic_signatures | ビルドの診断シグネチャを一覧表示します | buildId |
list_diagnostic_logs | シグネチャの診断ログを一覧表示します | signatureId |
任意の API 操作(汎用)
| ツール | 説明 | パラメーター |
|---|---|---|
asc_api_request | 任意の App Store Connect API 操作(Apple の OpenAPI 4.5.1 に基づく 1303 件の操作)を呼び出します。 | method?、path?、query?、body?、paginate?、maxItems?、cursor?、allowUnknown? |
asc_api_search | App Store Connect API 操作インデックスをキーワードで検索します(パス、操作 ID、リソースタイプに一致)。例:「段階的リリース」、「カスタマーレビュー」、「オファーコード」。 | query、method?、limit? |
asc_api_describe | App Store Connect API 操作を 1 つ説明します。クエリパラメーターと許可される値、本文属性(型、列挙値、必須項目)、リレーションシップ、および最小限の本文テンプレートを示します。 | method、path |
サブスクリプション
| ツール | 説明 | パラメーター |
|---|---|---|
list_subscription_groups | アプリのすべてのサブスクリプショングループを一覧表示します。 | appId、limit? |
get_subscription_group | IDを指定して、特定のサブスクリプショングループの詳細を取得します。 | subscriptionGroupId |
create_subscription_group | アプリに新しいサブスクリプショングループを作成します。 | appId、referenceName |
update_subscription_group | サブスクリプショングループの参照名を更新します。 | subscriptionGroupId、referenceName |
list_subscription_group_localizations | サブスクリプショングループのローカライズを一覧表示します。 | subscriptionGroupId、limit? |
get_subscription_group_localization | IDを指定して、単一のサブスクリプショングループのローカライズを取得します。 | localizationId |
create_subscription_group_localization | サブスクリプショングループのローカライズを作成します。 | subscriptionGroupId、name、locale、customAppName?、customAppDescription? |
update_subscription_group_localization | 既存のサブスクリプショングループのローカライズを更新します。 | localizationId、name?、customAppName?、customAppDescription? |
list_subscriptions | サブスクリプショングループ内のすべての自動更新サブスクリプションを一覧表示します。 | subscriptionGroupId、limit? |
get_subscription | IDを指定して、特定の自動更新サブスクリプションの詳細を取得します。 | subscriptionId |
create_subscription | サブスクリプショングループ内に新しい自動更新サブスクリプションを作成します。 | subscriptionGroupId、name、productId、subscriptionPeriod、familySharable?、reviewNote?、groupLevel? |
update_subscription | 既存の自動更新サブスクリプションのメタデータを更新します。 | subscriptionId、name?、familySharable?、subscriptionPeriod?、reviewNote?、groupLevel? |
delete_subscription | 自動更新サブスクリプションを削除します。 | subscriptionId |
list_subscription_localizations | サブスクリプションのすべてのローカライズ(翻訳された名前と説明)を一覧表示します。 | subscriptionId、limit? |
create_subscription_localization | 特定のロケールで、サブスクリプションのローカライズされた名前と説明を作成します。 | subscriptionId、name、locale、description? |
update_subscription_localization | サブスクリプションのローカライズにおけるローカライズされた名前または説明を更新します。 | localizationId、name?、description? |
delete_subscription_localization | サブスクリプションのローカライズを削除します。 | localizationId |
list_subscription_price_points | サブスクリプションで利用可能な価格ポイントを一覧表示し、顧客価格と開発者の収益を示します。 | subscriptionId、territory?、limit?、offset? |
list_subscription_prices | 価格階層や地域の詳細を含め、サブスクリプションに現在設定されている価格を一覧表示します。 | subscriptionId、territory?、limit? |
get_subscription_availability | サブスクリプションの地域ごとの提供状況設定を取得します。利用可能な地域と、新しい地域で自動的に提供されるかどうかを示します。 | subscriptionId |
set_subscription_availability | サブスクリプションの地域ごとの提供状況を設定します。 | subscriptionId、availableInNewTerritories、territories? |
create_subscription_price | 特定の地域におけるサブスクリプションの価格を設定します。 | subscriptionId、subscriptionPricePointId、startDate?、preserveCurrentPrice? |
list_promotional_offers | サブスクリプションに設定されているすべてのプロモーションオファーを一覧表示します。 | subscriptionId、limit? |
create_promotional_offer | サブスクリプションのプロモーションオファーを作成します。 | subscriptionId、name、offerCode、duration、offerMode、periodCount、prices? |
update_promotional_offer | プロモーションオファーの地域ごとの価格リストを置き換えます。 | promotionalOfferId、prices |
delete_promotional_offer | サブスクリプションからプロモーションオファーを削除します。 | promotionalOfferId |
list_promotional_offer_prices | 解決済みの価格階層と地域の詳細を含め、プロモーションオファーに設定された価格を一覧表示します。 | promotionalOfferId、limit? |
バージョン管理とアプリ審査の詳細
| ツール | 説明 | パラメーター |
|---|---|---|
update_app_version | App Store バージョンのバージョン文字列、著作権、リリースタイプ、またはリリース予定日を更新します。 | versionId、versionString?、copyright?、releaseType?、earliestReleaseDate? |
delete_app_version | App Store バージョンを削除します。 | versionId |
get_app_version_build | App Store バージョンに紐付けられたビルドを取得します(紐付けられていない場合は null)。 | versionId |
set_app_version_build | ビルドを App Store バージョンに紐付けます。 | versionId、buildId |
get_review_detail | バージョンの App Review 詳細(連絡先、デモアカウント、審査メモ)を取得します。 | versionId |
create_review_detail | App Review 詳細がまだないバージョンに詳細を作成します。contactFirstName と contactPhone は必須です。 | versionId、contactFirstName、contactPhone、contactLastName?、contactEmail?、demoAccountName?、demoAccountPassword?、demoAccountRequired?、notes? |
update_review_detail | App Review 詳細(連絡先、デモアカウント、メモ)を更新します。 | reviewDetailId、contactFirstName?、contactLastName?、contactPhone?、contactEmail?、demoAccountName?、demoAccountPassword?、demoAccountRequired?、notes? |
リリースと輸出コンプライアンス
| ツール | 説明 | パラメーター |
|---|---|---|
get_phased_release | App Store バージョンの段階的リリース(段階的な配信)を取得します。 | versionId |
create_phased_release | App Store バージョンの段階的リリースを作成します。 | versionId、phasedReleaseState? |
update_phased_release | 段階的リリースを ACTIVE、PAUSED、または COMPLETE に変更します。 | phasedReleaseId、phasedReleaseState、confirmReleaseToAll? |
delete_phased_release | App Store バージョンの段階的リリースを削除します。 | phasedReleaseId |
release_app_version | 承認済みで、デベロッパーによるリリース待ち(PENDING_DEVELOPER_RELEASE)の App Store バージョンをリリースします。 | versionId |
list_encryption_declarations | アプリの輸出コンプライアンス(暗号化)申告を一覧表示します。 | appId、limit? |
get_encryption_declaration | ID を指定して、輸出コンプライアンス(暗号化)申告を 1 件取得します。 | declarationId |
create_encryption_declaration | アプリの輸出コンプライアンス(暗号化)申告を作成します。 | appId、appDescription、containsProprietaryCryptography、containsThirdPartyCryptography、availableOnFrenchStore |
assign_builds_to_encryption_declaration | ビルドを暗号化申告に紐付けます。 | declarationId、buildIds |
update_build | ビルドの usesNonExemptEncryption フラグや暗号化申告を更新するか、ビルドを期限切れにします。 | buildId、expired?、confirmExpire?、usesNonExemptEncryption?、appEncryptionDeclarationId? |
App Review の提出
| ツール | 説明 | パラメーター |
|---|---|---|
list_review_submissions | アプリの審査提出を一覧表示します。状態またはプラットフォームで絞り込むこともできます。 | appId、state?、platform?、limit? |
get_review_submission | 含まれる項目とともに審査提出を取得します。 | submissionId |
create_review_submission | アプリの 1 つのプラットフォーム向けに審査提出を作成します。 | appId、platform |
add_review_submission_item | 審査提出に項目を 1 件追加します。 | submissionId、itemType、itemId |
remove_review_submission_item | 審査提出から項目を削除します。 | itemId |
submit_review_submission | 審査提出を App Review に提出します。 | submissionId、expectedItemIds |
cancel_review_submission | 進行中の審査提出をキャンセルします。 | submissionId |
アプリ情報:カテゴリ、年齢制限、EULA
| ツール | 説明 | パラメーター |
|---|---|---|
get_app_info_categories | アプリ情報レコードのメインカテゴリとサブカテゴリ、およびサブカテゴリを取得します。 | appInfoId |
set_app_categories | アプリ情報レコードのApp Storeカテゴリとサブカテゴリを設定またはクリアします。 | appInfoId, primaryCategoryId?, primarySubcategoryOneId?, primarySubcategoryTwoId?, secondaryCategoryId?, secondarySubcategoryOneId?, secondarySubcategoryTwoId? |
list_app_subcategories | App Storeカテゴリのサブカテゴリを一覧表示します。例:GAMESのサブカテゴリ。 | categoryId, limit? |
get_age_rating_declaration | アプリ情報レコードの年齢制限に関する質問への回答を取得します。 | appInfoId |
update_age_rating_declaration | 年齢制限に関する質問への回答を更新します。 | declarationId, attributes |
create_app_info_localization | ロケール用のアプリ情報ローカライズ(名前、サブタイトル、プライバシー関連リンク)を作成します。 | appInfoId, locale, name, subtitle?, privacyPolicyUrl?, privacyChoicesUrl?, privacyPolicyText? |
delete_app_info_localization | アプリ情報のローカライズを削除します。 | localizationId |
get_eula | アプリのカスタムエンドユーザーライセンス契約を取得します。 | appId |
create_eula | 指定した地域(例:)に適用する、アプリのカスタムエンドユーザーライセンス契約を作成します。 | appId, agreementText, territories |
update_eula | アプリのカスタムEULAテキストや地域を更新します。 | eulaId, agreementText?, territories? |
delete_eula | アプリのカスタムエンドユーザーライセンス契約を削除します。 | eulaId |
メディア:スクリーンショットセット、アプリプレビュー、審査用スクリーンショット
| ツール | 説明 | パラメーター |
|---|---|---|
create_screenshot_set | App Storeバージョンのローカライズで、1つのデバイス画面サイズ用のスクリーンショットセットを作成します。 | localizationId, screenshotDisplayType |
delete_screenshot_set | スクリーンショットセットと、その中のすべてのスクリーンショットを削除します。 | screenshotSetId |
delete_screenshot | スクリーンショットセットから1つのスクリーンショットを削除します。 | screenshotId |
reorder_screenshots | セット内のスクリーンショットの表示順を設定します。screenshotIdsには、セット内の現在のすべてのスクリーンショットを、新しい順序でそれぞれ1回ずつ指定する必要があります。IDはlist_screenshotsで取得できます。 | screenshotSetId, screenshotIds |
list_preview_sets | App Storeバージョンのローカライズに含まれるアプリプレビューセット(デバイスタイプごとに1つ)を一覧表示します。 | localizationId, limit? |
create_preview_set | App Storeバージョンのローカライズで、1つのデバイスタイプ用のアプリプレビューセットを作成します。 | localizationId, previewType |
delete_preview_set | アプリプレビューセットと、その中のすべてのアプリプレビューを削除します。 | previewSetId |
list_previews | アプリプレビューセット内のアプリプレビュー(動画)を一覧表示します。 | previewSetId, limit? |
upload_app_preview | .mov、.m4v、または.mp4形式の動画をアプリプレビューとしてアップロードします。 | previewSetId, filePath, fileName?, previewFrameTimeCode?, waitForProcessing? |
delete_app_preview | プレビューセットから1つのアプリプレビューを削除します。 | previewId |
reorder_previews | プレビューセット内のアプリプレビューの表示順を設定します。previewIdsには、セット内の現在のすべてのプレビューを、新しい順序でそれぞれ1回ずつ指定する必要があります。IDはlist_previewsで取得できます。 | previewSetId, previewIds |
upload_subscription_review_screenshot | ローカルファイルからサブスクリプションのApp Review用スクリーンショットをアップロードします。 | subscriptionId, filePath, fileName? |
upload_iap_review_screenshot | ローカルファイルからアプリ内課金のApp Review用スクリーンショットをアップロードします。 | inAppPurchaseId, filePath, fileName? |
TestFlight グループ
| ツール | 説明 | パラメーター |
|---|---|---|
get_beta_group | パブリック TestFlight リンクなど、ベータグループの設定を取得します。 | betaGroupId |
create_beta_group | アプリのベータグループを作成します。 | appId, name, isInternalGroup?, hasAccessToAllBuilds?, publicLinkEnabled?, publicLinkLimitEnabled?, publicLinkLimit?, feedbackEnabled? |
update_beta_group | ベータグループの設定を更新します。 | betaGroupId, name?, publicLinkEnabled?, publicLinkLimitEnabled?, publicLinkLimit?, feedbackEnabled?, iosBuildsAvailableForAppleSiliconMac?, iosBuildsAvailableForAppleVision? |
delete_beta_group | ベータグループを削除します。 | betaGroupId |
list_beta_group_builds | ベータグループで利用できるビルドを一覧表示します。 | betaGroupId, limit? |
add_builds_to_beta_group | 1 つ以上のビルドをベータグループで利用できるようにします。 | betaGroupId, buildIds |
remove_builds_from_beta_group | 1 つ以上のビルドをベータグループから削除します。 | betaGroupId, buildIds |
add_testers_to_beta_group | テスター ID を指定して、既存のベータテスターをベータグループに追加します。 | betaGroupId, betaTesterIds |
delete_beta_tester | アカウントからベータテスターを削除します。 | betaTesterId |
invite_beta_tester | アプリのテストに招待するため、既存のベータテスターに招待を送信します。 | appId, betaTesterId |
TestFlight ビルドとベータレビュー
| ツール | 説明 | パラメーター |
|---|---|---|
list_beta_build_localizations | ビルドの TestFlight「テスト内容」メモを、ロケールごとに一覧表示します。 | buildId, limit? |
create_beta_build_localization | 1 つのロケールで、ビルドの「テスト内容」メモを追加します。 | buildId, locale, whatsNew? |
update_beta_build_localization | ビルドのローカライズに設定された「テスト内容」メモを置き換えます。 | localizationId, whatsNew |
delete_beta_build_localization | 1 つのロケールについて、ビルドの「テスト内容」メモを削除します。 | localizationId |
list_beta_app_localizations | アプリの TestFlight アプリ詳細(説明、フィードバック用メールアドレス、URL)を、ロケールごとに一覧表示します。 | appId, limit? |
create_beta_app_localization | 1 つのロケールで、アプリの TestFlight アプリ詳細を追加します。 | appId, locale, description?, feedbackEmail?, marketingUrl?, privacyPolicyUrl?, tvOsPrivacyPolicy? |
update_beta_app_localization | 1 つのロケールの TestFlight アプリ詳細を更新します。 | localizationId, description?, feedbackEmail?, marketingUrl?, privacyPolicyUrl?, tvOsPrivacyPolicy? |
delete_beta_app_localization | 1 つのロケールの TestFlight アプリ詳細を削除します。 | localizationId |
get_beta_app_review_detail | アプリの TestFlight ベータ App Review の詳細(連絡先、デモアカウント、メモ)を取得します。 | appId |
update_beta_app_review_detail | TestFlight ベータ App Review の詳細(連絡先、デモアカウント、メモ)を更新します。 | reviewDetailId, contactFirstName?, contactLastName?, contactPhone?, contactEmail?, demoAccountName?, demoAccountPassword?, demoAccountRequired?, notes? |
submit_build_for_beta_review | 外部テスターと共有できるよう、ビルドを TestFlight ベータ App Review に提出します。 | buildId |
list_beta_review_submissions | 必要に応じてレビューステートで絞り込み、ビルドの TestFlight ベータ App Review への提出を一覧表示します。 | buildId, betaReviewState?, limit? |
get_build_beta_detail | ビルドの TestFlight 設定と処理状態(自動通知、内部および外部の状態)を取得します。 | buildId |
update_build_beta_detail | ビルドのテスターへの自動通知を有効または無効にします。 | buildBetaDetailId, autoNotifyEnabled |
list_pre_release_versions | アプリの TestFlight プレリリースバージョン(バージョン文字列とプラットフォーム)を一覧表示します。 | appId, limit? |
カスタマーレビュー
| ツール | 説明 | パラメーター |
|---|---|---|
list_customer_reviews | アプリのカスタマーレビューを一覧表示します。開発者からの返信がある場合は、各レビューとともに表示します。 | appId、rating?、territory?、sort?、hasResponse?、limit? |
get_customer_review | IDでカスタマーレビューを1件取得します。開発者からの返信がある場合は、その返信も含みます。 | reviewId |
get_review_response | カスタマーレビューへの開発者からの返信を取得します(返信がない場合は null)。 | reviewId |
create_review_response | カスタマーレビューへの開発者からの返信を公開します。 | reviewId、responseBody |
delete_review_response | カスタマーレビューへの開発者からの返信を削除します。 | responseId |
サブスクリプションオファー(導入オファーと再獲得オファー)
| ツール | 説明 | パラメーター |
|---|---|---|
list_introductory_offers | サブスクリプションの導入オファーを、テリトリー ID と価格ポイント ID とともに一覧表示します。 | subscriptionId、territoryId?、limit? |
create_introductory_offer | 1つのテリトリーで、サブスクリプションの導入オファーを作成します。 | subscriptionId、duration、offerMode、numberOfPeriods、startDate?、endDate?、targetSubscriptionPlanType?、territoryId?、pricePointId? |
update_introductory_offer | 導入オファーの終了日を変更します。 | introductoryOfferId、endDate |
delete_introductory_offer | IDで導入オファーを削除します。 | introductoryOfferId |
list_win_back_offers | サブスクリプションの再獲得オファーを一覧表示します。 | subscriptionId、limit? |
create_win_back_offer | 解約したサブスクライバー向けの再獲得オファーを作成します。テリトリーごとに価格エントリーを1つ設定します。 | subscriptionId、referenceName、offerId、duration、offerMode、periodCount、customerEligibilityPaidSubscriptionDurationInMonths、customerEligibilityTimeSinceLastSubscribedInMonths、startDate、priority、prices、customerEligibilityWaitBetweenOffersInMonths?、endDate?、promotionIntent?、targetSubscriptionPlanType? |
update_win_back_offer | 再獲得オファーの適格条件、日付、優先度、またはプロモーションの意図を更新します。 | winBackOfferId、customerEligibilityPaidSubscriptionDurationInMonths?、customerEligibilityTimeSinceLastSubscribedInMonths?、customerEligibilityWaitBetweenOffersInMonths?、startDate?、endDate?、priority?、promotionIntent? |
delete_win_back_offer | IDで再獲得オファーを削除します。 | winBackOfferId |
list_win_back_offer_prices | 再獲得オファーのテリトリーごとの価格を、テリトリー ID と価格ポイント ID とともに一覧表示します。 | winBackOfferId、territoryId?、limit? |
サブスクリプションのオファーコード
| ツール | 説明 | パラメーター |
|---|---|---|
list_subscription_offer_codes | サブスクリプションのオファーコードを一覧表示します。必要に応じて、USA などのテリトリーコードで絞り込めます。 | subscriptionId、territories?、limit? |
get_subscription_offer_code | ID を指定して、コード数や状態など、サブスクリプションのオファーコードを 1 件取得します。 | offerCodeId |
create_subscription_offer_code | サブスクリプションのオファーコードを作成します。 | subscriptionId、name、customerEligibilities、offerEligibility、duration、offerMode、numberOfPeriods、autoRenewEnabled?、targetSubscriptionPlanType?、prices? |
update_subscription_offer_code | サブスクリプションのオファーコードを有効化または無効化します。 | offerCodeId、active |
create_subscription_one_time_codes | サブスクリプションのオファーコード用に、1 回限り使用できる引き換えコードをまとめて生成します。 | offerCodeId、numberOfCodes、expirationDate、environment? |
list_subscription_one_time_code_batches | サブスクリプションのオファーコード用に生成された、1 回限り使用できるコードのバッチを一覧表示します。 | offerCodeId、limit? |
get_subscription_one_time_code_values | 1 回限り使用できるコードのバッチの引き換えコードを CSV として取得します。インラインで返すか、大きなバッチの場合は savePath を指定して新しいファイルに保存します。 | oneTimeUseCodeBatchId、savePath? |
create_subscription_custom_code | サブスクリプションのオファーコード用に、有効期限を設定してカスタム(バニティ)引き換えコードを作成します。 | offerCodeId、customCode、numberOfCodes、expirationDate? |
list_subscription_custom_codes | サブスクリプションのオファーコード用に作成されたカスタムコードを一覧表示します。 | offerCodeId、limit? |
アプリ内課金のオファーコード
| ツール | 説明 | パラメーター |
|---|---|---|
list_iap_offer_codes | アプリ内課金に設定されたオファーコードを一覧表示します。 | inAppPurchaseId、limit? |
get_iap_offer_code | ID を指定して、アプリ内課金のオファーコードを 1 件取得します。 | offerCodeId |
create_iap_offer_code | テリトリーごとの価格を設定して、アプリ内課金のオファーコードを作成します。 | inAppPurchaseId、name、customerEligibilities、prices |
update_iap_offer_code | アプリ内課金のオファーコードを有効化または無効化します。 | offerCodeId、active |
create_iap_one_time_codes | オファーコード用に、1 回限り使用できる引き換えコードをまとめて生成します。 | offerCodeId、numberOfCodes、expirationDate、environment? |
list_iap_one_time_code_batches | オファーコード用に生成された、コード数と有効期限を含む、1 回限り使用できるコードのバッチを一覧表示します。 | offerCodeId、limit? |
get_iap_one_time_code_values | 1 回限り使用できるコードのバッチの引き換えコードを CSV として取得します。空でない行数とともに、インラインで返すか、大きなバッチの場合は savePath を指定して新しいファイルに保存します。 | oneTimeUseCodeBatchId、savePath? |
create_iap_custom_code | オファーコード用にカスタム引き換えコードを作成します。 | offerCodeId、customCode、numberOfCodes、expirationDate? |
list_iap_custom_codes | オファーコード用のカスタム引き換えコードを、引き換え回数と有効期限とともに一覧表示します。 | offerCodeId、limit? |
Custom Product Pages
| Tool | Description | Parameters |
|---|---|---|
list_custom_product_pages | List the custom product pages of an app, optionally filtered by visibility. | appId, visible?, limit? |
get_custom_product_page | Get one custom product page by ID. | customProductPageId |
create_custom_product_page | Create a custom product page for an app, with its first version and one localization (the app's primary locale unless locale is given). | appId, name, locale?, promotionalText?, deepLink? |
update_custom_product_page | Update a custom product page's name or visibility. | customProductPageId, name?, visible? |
delete_custom_product_page | Delete a custom product page by ID. | customProductPageId |
list_cpp_versions | List the versions of a custom product page, optionally filtered by review state. | customProductPageId, states?, limit? |
create_cpp_version | Create a new version of a custom product page, optionally with a deep link. | customProductPageId, deepLink? |
list_cpp_localizations | List the per-locale localizations of a custom product page version, optionally filtered by locale. | versionId, locales?, limit? |
create_cpp_localization | Add a locale with promotional text to a custom product page version. | versionId, locale, promotionalText? |
update_cpp_localization | Set the promotional text of a custom product page localization. | localizationId, promotionalText |
delete_cpp_localization | Delete a custom product page localization by ID. | localizationId |
Usage Examples
List Your Apps
"Show me all my apps in App Store Connect"
Claude will use list_apps to retrieve and display your apps.
Update App Description
"Update the English description for version 2.0 of MyApp to: 'A revolutionary app that simplifies your daily tasks.'"
Claude will:
- Find the app using
list_apps - Get the version using
list_app_versions - Find the English localization using
list_version_localizations - Update it using
update_version_localization
Add Japanese Localization
"Add Japanese localization to MyApp version 2.0 with description '素晴らしいアプリです' and keywords 'アプリ,便利,簡単'"
Claude will use create_version_localization with locale ja.
Add a Beta Tester
"Add [email protected] as a beta tester to the Internal Testing group for MyApp"
Claude will:
- Find the app and beta group using
list_beta_groups - Add the tester using
add_beta_tester
Set PPP Pricing
"Show me the equivalent prices for my $9.99 tier in India, Brazil, and Turkey"
Claude will:
- Find the $9.99 price point using
list_app_price_points - Get equivalent prices using
get_price_point_equalizations - Show you the PPP-adjusted prices in each territory
"Set my app to $9.99 in the US and use PPP pricing for India and Brazil"
Claude will use set_app_prices with the appropriate price point IDs for each territory.
Create a Lifetime Purchase
"Add a $99.99 lifetime unlock to MyApp with PPP pricing for India and Brazil"
Claude will:
- Create a non-consumable IAP with
create_in_app_purchase - Add a display name with
create_in_app_purchase_localization - Find the $99.99 tier with
list_in_app_purchase_price_points, then PPP equivalents withget_in_app_purchase_price_point_equalizations - Apply per-territory pricing with
set_in_app_purchase_priceand open availability withset_in_app_purchase_availability - Confirm the result with
list_in_app_purchase_prices
Check Version Status
"What's the status of all versions of MyApp?"
Claude will use list_app_versions to show version states (PREPARE_FOR_SUBMISSION, IN_REVIEW, READY_FOR_SALE, etc.)
バージョンを準備して提出する
「MyApp 2.1 の著作権を『2026 Example Inc.』に設定し、ビルド 42 を添付して、審査メモを追加し、審査に提出してください」
Claude は update_app_version、set_app_version_build(有効なビルドのみ添付できます)、update_review_detail の順に使用します。その後、create_review_submission、add_review_submission_item、submit_review_submission を使用します。提出内容に想定外の項目が含まれている場合、最後のツールは処理を拒否します。
専用ツールがない場合
「MyApp の次のバージョンで Game Center を有効にしてください」
Claude は asc_api_search で操作を検索し、asc_api_describe でリクエスト本文を確認してから、asc_api_request で呼び出します。
セキュリティ
認証情報の取り扱い
- 秘密鍵がログやエラーメッセージに記録されたり、表示されたりすることはありません
- JWT トークンは、エラー出力から自動的にマスキングされます
- Issuer IDはエラーメッセージと詳細からマスキングされます。デモアカウントのパスワードは返されず、エラーからもマスキングされます
- 読み取り専用モード(
ASC_READ_ONLY=1)は、ツール一覧だけでなく HTTP クライアント自体で書き込みをブロックします - 汎用リクエストは App Store Connect ホスト上の相対
/v1~/v3パスにのみ到達します。..を含むパス、エンコードされたパス、絶対パスは拒否されます。また、allowUnknownが設定されていない限り、Apple の仕様に準拠する必要があります。デモアカウントのパスワードと Webhook シークレットはレスポンスでマスキングされます - オファーコードの CSV ファイルは新しいファイルにのみ書き込まれ(
savePath、所有者のみのアクセス権限)、既存のファイルを上書きすることはありません - トークンのキャッシュにより、鍵の使用を最小限に抑えます(トークンの有効期間は 15 分、10 分後に更新)
パスの検証
- P8 ファイルのパスは、ディレクトリトラバーサル攻撃を防ぐために検証されます(
..は使用できません) - 絶対パスのみ解決されます
ベストプラクティス
- 認証情報をコミットしないでください — 環境変数またはシークレット管理ツールを使用します
- API キーの権限を制限してください — 必要最小限のロールを使用します(ほとんどの操作では App Manager)
- キーを定期的にローテーションしてください — 新しい API キーを生成し、古いキーを無効にします
.p8ファイルを安全に保管してください — ファイル権限を600(所有者のみ読み取り/書き込み可能)に設定します
chmod 600 /path/to/AuthKey.p8
トラブルシューティング
「Configuration error: APP_STORE_CONNECT_KEY_ID environment variable is required」
必要な環境変数がすべて設定されていることを確認してください。
APP_STORE_CONNECT_KEY_IDAPP_STORE_CONNECT_ISSUER_IDAPP_STORE_CONNECT_P8_PATHまたはAPP_STORE_CONNECT_P8_CONTENT
「Failed to read private key」
APP_STORE_CONNECT_P8_PATHのパスが正しく、絶対パスであることを確認します- ファイルの権限を確認します:
ls -la /path/to/AuthKey.p8 - Apple の有効な
.p8ファイルであることを確認します(-----BEGIN PRIVATE KEY-----で始まります)
「Authentication failed」
通常、次のいずれかを意味します。
- App Store Connect で API キーが無効化されています
- Key ID または Issuer ID が
.p8ファイルと一致していません .p8ファイルが破損しているか、不完全です
「Rate limit exceeded」
サーバーにはレート制限(1 分あたり 50 リクエスト)が組み込まれています。Apple の制限に達した場合は、次の手順を実行してください。
- 指定された再試行時間まで待ちます
- 可能な場合は操作をまとめて実行します
- サーバーは指数バックオフで自動的に再試行します
Claude にツールが表示されない場合
- サーバーが稼働していることを確認します:Claude Desktop のログを確認してください
- ご利用の OS に応じて、設定ファイルのパスが正しいことを確認します
- 設定を変更した後、Claude Desktop を再起動します
開発
前提条件
- Node.js 20+
- npm または pnpm
セットアップ
# Clone the repository
git clone https://github.com/SardorbekR/appstore-connect-mcp.git
cd appstore-connect-mcp
# Install dependencies
npm install
# Build
npm run build
# Run tests
npm test
# Lint
npm run lint
# Type check
npm run typecheck
プロジェクト構成
src/
├── index.ts # MCP server entry point
├── auth/
│ └── jwt.ts # JWT token generation & caching
├── api/
│ ├── client.ts # HTTP client with retry logic and read-only guard
│ ├── upload.ts # Shared asset upload (reserve, upload chunks, commit, poll)
│ └── types.ts # TypeScript interfaces
├── openapi/
│ ├── schema-index.json # Operation index generated from spec/openapi.oas.json
│ └── index.ts # Match, search, and describe operations
├── tools/
│ ├── index.ts # Tool registry (toolsets, read-only filtering)
│ ├── api.tools.ts # Generic asc_api_* tools
│ ├── apps.tools.ts
│ ├── versions.tools.ts
│ ├── localizations.tools.ts
│ ├── app-info.tools.ts
│ ├── beta.tools.ts
│ ├── screenshots.tools.ts
│ ├── bundle-ids.tools.ts
│ ├── devices.tools.ts
│ ├── users.tools.ts
│ ├── builds.tools.ts
│ ├── categories.tools.ts
│ └── ... # One file per domain (subscriptions, release, media, ...)
└── utils/
├── errors.ts # Error classes with redaction
└── validation.ts # Zod schemas
OpenAPI 仕様
spec/openapi.oas.json は Apple の App Store Connect OpenAPI 仕様を固定したものです(spec/README.md を参照)。テストでは、ツールが送信するすべてのリクエストをこの仕様と照合します。
npm run check-openapi # fail if src/openapi/schema-index.json is stale
npm run update-openapi # download Apple's latest spec and regenerate the index
npx tsx scripts/spec-sheet.ts "PATCH /v1/appInfos/{id}" # print an operation's resolved shape
ローカルでの実行
# Development mode with auto-reload
npm run dev
# Or run the built version
npm start
リリース
バージョンタグがプッシュされると、GitHub Actions(.github/workflows/publish.yml)からリリースが公開されます。npm では信頼されたパブリッシング(OIDC、トークン不要、プロベナンス付与)を使用し、MCP Registry では GitHub OIDC を使用します。
package.jsonとpackage-lock.json(npm version X.Y.Z --no-git-tag-version)、server.jsonの両方のフィールド、およびsrc/index.tsのSERVER_VERSIONに新しいバージョンを設定しますmainにマージしますgit tag vX.Y.Z && git push origin vX.Y.Zを実行します- 実行を承認します。公開ジョブは
release環境で待機するため、必須レビュアーがワークフローの実行を開き、Review deployments → Approve をクリックします
いずれかのバージョンフィールドがタグと異なる場合、または型チェック、Lint、テスト、OpenAPI インデックスのチェックに失敗した場合、ワークフローは公開を拒否します。
コントリビューション
- リポジトリをフォークします
- 機能ブランチを作成します:
git checkout -b feature/my-feature - 変更を加え、テストを追加します
npm testとnpm run lintを実行します- プルリクエストを送信します
謝辞
汎用 API ツール、OpenAPI インデックス形式、およびワークフローの詳細の一部(レビューの送信、アセットのアップロード、オファーの価格設定)は、rorkai/App-Store-Connect-CLI(MIT)に準拠しています。
ライセンス
MIT License。詳細は LICENSE をご覧ください。
リンク
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。