From 9f48dd57a4bd263d1266c790e067400641defbad Mon Sep 17 00:00:00 2001 From: CRT Date: Wed, 21 Oct 2026 05:04:34 +0700 Subject: [PATCH] MCP: apple_game_center, apple_game_center_status, play_games, play_games_status (writes dry by default) --- cli/data/flags.json | 6 ++++++ cli/mcp-tools.ts | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/cli/data/flags.json b/cli/data/flags.json index 18751ba..d9d9fe4 100644 --- a/cli/data/flags.json +++ b/cli/data/flags.json @@ -359,6 +359,7 @@ "write" ], "check": [ + "achievements", "aso", "capacitor", "cordova", @@ -367,7 +368,10 @@ "expo", "flutter", "godot", + "keychain", + "leaderboards", "name", + "no-install", "react-native", "sku", "storefront", @@ -857,6 +861,7 @@ "play" ], "validate": [ + "achievements", "add-for-review", "allow-price-changes", "apple", @@ -873,6 +878,7 @@ "jobs", "keychain", "lang", + "leaderboards", "no-health", "no-install", "no-local", diff --git a/cli/mcp-tools.ts b/cli/mcp-tools.ts index 77cc405..eddb107 100644 --- a/cli/mcp-tools.ts +++ b/cli/mcp-tools.ts @@ -217,6 +217,18 @@ export const TOOLS: ToolDef[] = [ { name: 'apple_encryption', title: 'Export compliance answer', command: ['apple', 'encryption'], write: true, network: true, idempotent: true, description: 'Answer export compliance for builds from apple.usesNonExemptEncryption in the config (never guesses).', props: { build: { type: 'string', description: 'Build number (default: every build without an answer)' } }, args: i => opt('build', i.build) }, + { name: 'apple_game_center', title: 'Game Center sync', command: ['apple', 'game-center'], write: true, network: true, idempotent: true, + description: 'Game Center from the config\'s games section: switch it on for the app (gameCenterDetails) and the editable version (gameCenterAppVersions), upsert leaderboards and achievements with their localizations by vendor id (create / PATCH only what differs; never deletes or archives), then read back. Nothing is submitted: they go to review with the next version. The App ID capability is signing ensure\'s (terminal).', + args: () => [] }, + { name: 'apple_game_center_status', title: 'Game Center status', command: ['apple', 'game-center', 'status'], write: false, network: true, + description: 'Read-only: App ID GAME_CENTER capability, the app\'s Game Center detail, the version switch, leaderboards / achievements on the store vs games in the config (pending changes), the project\'s com.apple.developer.game-center entitlement.', + args: () => ['--json'] }, + { name: 'play_games', title: 'Play Games Services sync', command: ['play', 'games'], write: true, network: true, idempotent: true, + description: 'Play Games Services leaderboards and achievements from the config\'s games section through the Games Configuration API (insert / update drafts, matched by playId or the default-language name; inserts are never retried blindly). Nothing is published: the owner presses Publish in Play Console (console_plan play-games-services has the setup).', + args: () => [] }, + { name: 'play_games_status', title: 'Play Games Services status', command: ['play', 'games', 'status'], write: false, network: true, + description: 'Read-only: the games project id (config / games_APP_ID resource), leaderboards and achievements on Play vs the config (pending changes), the Android project\'s APP_ID meta-data and play-services-games-v2 dependency.', + args: () => ['--json'] }, { name: 'apple_phased_release', title: 'Phased release on / pause', command: ['apple', 'release'], write: true, network: true, idempotent: true, description: 'Turn on the 7-day phased release for the upcoming version, or pause an active one (pausing is not a rollback). Resume / complete / release are owner-only terminal commands.', props: { action: { type: 'string', enum: ['on', 'pause'] }, version: { type: 'string' }, platform }, required: ['action'],