Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ASC-COVERAGE-MATRIX-2026-05-05.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Source baseline:
- Apple API 4.0 release notes: https://developer.apple.com/documentation/appstoreconnectapi/app-store-connect-api-4-0-release-notes
- Apple Webhook notifications: https://developer.apple.com/documentation/appstoreconnectapi/webhook-notifications

Update 2026-05-07: automated OpenAPI coverage tooling is now available. See `ASC-OPENAPI-COVERAGE-GENERATED.md` for the generated Apple 4.4.1 path/operation matrix.
Update 2026-05-07: automated OpenAPI coverage tooling is now available. See `ASC-OPENAPI-COVERAGE-GENERATED.md` for the generated Apple 4.5 path/operation matrix.
Update 2026-05-08: accessibility declaration management is covered by `accessibility_*` tools.
Update 2026-05-08: local webhook receiver helpers are available for signature verification, payload parsing, and event/delivery triage.
Update 2026-07-20: Apple 4.4.1 versioned commerce metadata, plan-type-aware subscription availability, adjusted equalizations, and generic review submissions are covered.
Expand Down
18 changes: 9 additions & 9 deletions ASC-OPENAPI-COVERAGE-GENERATED.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
# App Store Connect OpenAPI Coverage

Generated: 2026-07-21
Generated: 2026-09-24

Sources:
- Apple App Store Connect API overview: https://developer.apple.com/app-store-connect/api/
- Apple App Store Connect API documentation: https://developer.apple.com/documentation/appstoreconnectapi
- Apple OpenAPI specification download: https://developer.apple.com/sample-code/app-store-connect/app-store-connect-openapi-specification.zip

Spec: App Store Connect API 4.4.1 (OpenAPI 3.0.1)
Apple paths: 966
Apple operations: 1263
Classified paths: 966
Spec: App Store Connect API 4.5 (OpenAPI 3.0.1)
Apple paths: 973
Apple operations: 1270
Classified paths: 973
Unclassified paths: 0

## Priority Gaps

- P0 App Store app metadata and release operations: Partial, 303 Apple paths, 380 operations.
- P0 App Store app metadata and release operations: Partial, 304 Apple paths, 381 operations.
- P0 TestFlight builds, testers, groups, and beta app review: Partial, 115 Apple paths, 154 operations.
- P1 Provisioning and identifiers: Partial, 32 Apple paths, 49 operations.
- P1 Reporting, analytics, metrics, and diagnostics: Partial, 47 Apple paths, 56 operations.
Expand All @@ -25,23 +25,23 @@ Unclassified paths: 0

| Domain | Status | Priority | Apple paths | Operations | Workers | Notes |
|---|---|---:|---:|---:|---|---|
| App Store app metadata and release operations | Partial | P0 | 303 | 380 | `apps`, `accessibility`, `versions`, `app_info`, `pricing`, `app_events`, `screenshots`, `custom_pages`, `ppo`, `promoted`, `review_attachments`, `review_submissions`, `reviews`, `export_compliance` | The common release workflow includes strict version filtering and paging, safe phased-release controls, generic review submissions, App Info-owned age-rating inspection, app search keywords, expanded Custom Product Page and PPO workflows, promoted ordering, and verified screenshot and preview ordering. Remaining app-surface operations stay explicitly phased. |
| App Store app metadata and release operations | Partial | P0 | 304 | 381 | `apps`, `accessibility`, `versions`, `app_info`, `pricing`, `app_events`, `screenshots`, `custom_pages`, `ppo`, `promoted`, `review_attachments`, `review_submissions`, `reviews`, `export_compliance` | The common release workflow includes strict version filtering and paging, safe phased-release controls, generic review submissions, App Info-owned age-rating inspection, app search keywords, expanded Custom Product Page and PPO workflows, promoted ordering, and verified screenshot and preview ordering. Remaining app-surface operations stay explicitly phased. |
| TestFlight builds, testers, groups, and beta app review | Partial | P0 | 115 | 154 | `builds`, `build_uploads`, `build_processing`, `export_compliance`, `build_beta`, `beta_groups`, `beta_feedback`, `beta_testers`, `beta_app`, `pre_release`, `beta_license`, `metrics` | Core TestFlight administration, resumable build uploads, and dedicated beta feedback retrieval are covered. Six recruitment tools and five usage-metric tools map twelve additional Apple operations; beta App Clip APIs remain the main gap. |
| Essentials: auth, errors, paging, uploads, rate limits | Partial | P1 | 0 | 0 | `auth` | Core runtime behavior is covered; OpenAPI drift is now generated from Apple's official specification. |
| Provisioning and identifiers | Partial | P1 | 32 | 49 | `provisioning` | Core signing automation exists; Wallet and Apple Pay identifiers are useful next additions. |
| Reporting, analytics, metrics, and diagnostics | Partial | P1 | 47 | 56 | `analytics`, `metrics` | Performance, power, and TestFlight usage metrics are covered; summaries and recommendations remain high UX leverage. |
| Webhook notification receiver resources | Partial | P1 | 0 | 0 | `webhooks` | Local receiver helpers are now available and remain read-only; future work can add deployable receiver templates and reusable playbooks. |
| Xcode Cloud workflows and builds | Partial | P1 | 56 | 59 | `xcode_cloud` | Covers read-heavy CI dashboards plus start/rebuild build runs; destructive workflow/product management remains intentionally deferred. |
| Alternative distribution | Missing | P2 | 21 | 28 | none | Region- and entitlement-sensitive APIs should be opt-in and strongly documented. |
| Game Center | Missing | P2 | 238 | 337 | none | Large domain; should be added only after OpenAPI-driven scaffolding is in place. |
| Game Center | Missing | P2 | 244 | 343 | none | Large domain; should be added only after OpenAPI-driven scaffolding is in place. |
| In-app purchases, subscriptions, and offers | Partial | P2 | 172 | 218 | `iap`, `subscriptions` | Apple 4.4.1 versioned metadata, generic review submission handoff, plan-type-aware subscription availability, and adjusted equalizations are covered. Legacy product-scoped tools remain explicit compatibility paths; an authoritative fully paginated subscription inventory is still pending. |
| Users, access, and sandbox testers | Partial | P2 | 13 | 20 | `users`, `sandbox` | User management is serviceable; API key operations should remain carefully annotated as high-risk. |
| Webhook notifications | Covered | P2 | 6 | 8 | `webhooks` | Covers app webhooks, individual webhook reads, create/update/delete, delivery listing, redelivery, ping testing, and local receiver diagnostics. |

## Missing Apple Domains

- Alternative distribution: 21 paths, 28 operations.
- Game Center: 238 paths, 337 operations.
- Game Center: 244 paths, 343 operations.

## Unclassified Apple Paths

Expand Down
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Breaking Changes

- `subscriptions_list_price_point_adjusted_equalizations` now requires `plan_types`. App Store Connect API 4.5 marks `filter[planType]` as required on `GET /v1/subscriptionPricePoints/{id}/adjustedEqualizations`, where 4.4.1 left it optional, so a call without it produced a request that Apple's current contract rejects. The input schema now lists `plan_types` as required, and a missing or empty value fails locally before any network request. Pass `MONTHLY`, `UPFRONT`, or both. `subscriptions_list_price_point_equalizations` is unchanged because Apple keeps its plan filter optional.

### Changed

- Re-baselined the operation contract from App Store Connect API 4.4.1 to 4.5 after a spec-level review. Each expired decision was re-stamped only where its Apple item is unchanged, or re-decided where 4.5 changed it. The new `apps_performanceOverviews_getToManyRelated` operation is deferred, the six new Game Center operations stay under the Game Center scope rules, and the new optional inputs `gracRatingClassificationNumber` on `app_versions_update_age_rating` and `marketSettings` and `multiSeatStatus` on `subscriptions_update` are intentionally omitted for now.
- The operation manifest maps 476 Apple operations, explicitly defers 425, and scopes out 369; all 1,270 pinned Apple 4.5 operations remain accounted for without overlap.
- The optional-input pin is fully classified at 2,907 total: 1,121 bound, 40 internally controlled, 1,746 intentionally omitted, and 0 unclassified; its identity SHA-256 is `0ce3ff14568f841643559c359bc91827290535925c3665172fda81d499f81ce1`.
- The generated OpenAPI coverage report and the coverage inventory baseline now track Apple 4.5: 973 paths and 1,270 operations, all classified.

### Compatibility

- The public catalog remains at 502 tools with no renamed inputs or removed response fields. Apart from the now-required `plan_types` above, existing calls are unchanged.

## [4.1.6] - 2026-08-22

### Fixed
Expand Down
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -531,9 +531,9 @@ swift run asc-mcp openapi-contract-check \
--strict
```

The manifest is pinned to Apple API 4.4.1 by version, SHA-256, path count, and operation count. It currently maps 476 Apple operations, explicitly defers 424, and scopes out 363, covering all 1,263 operations without overlap. CI fails when the Apple document changes, a mapped operation moves or disappears, a public tool or worker drifts from the manifest, an input field loses its binding, response lineage becomes invalid, or a deferred decision expires. Unexposed optional Apple parameters are warnings so they remain visible in the generated backlog.
The manifest is pinned to Apple API 4.5 by version, SHA-256, path count, and operation count. It currently maps 476 Apple operations, explicitly defers 425, and scopes out 369, covering all 1,270 operations without overlap. CI fails when the Apple document changes, a mapped operation moves or disappears, a public tool or worker drifts from the manifest, an input field loses its binding, response lineage becomes invalid, or a deferred decision expires. Unexposed optional Apple parameters are warnings so they remain visible in the generated backlog.

Manifest schema v2 also accounts for every optional Apple query and request-body input as publicly bound, internally controlled, intentionally omitted with a reviewed reason, or still unclassified. The checked-in `optionalInputCoveragePin` records the exact current totals and a SHA-256 digest of the sorted input identities and dispositions; `--strict` rejects a missing pin or any count- or identity-level drift. The pin makes phased remediation auditable and regression-safe, but it is not a claim that every optional Apple input is already public. The v4.1.3 pin is 2,905 total: 1,122 bound, 40 internally controlled, 1,743 intentionally omitted, and 0 unclassified. Its identity SHA-256 is `c975f4e4eebb62ec87864a73fbf72bb8841f644108e54e6ffb25168bcf2a2766`.
Manifest schema v2 also accounts for every optional Apple query and request-body input as publicly bound, internally controlled, intentionally omitted with a reviewed reason, or still unclassified. The checked-in `optionalInputCoveragePin` records the exact current totals and a SHA-256 digest of the sorted input identities and dispositions; `--strict` rejects a missing pin or any count- or identity-level drift. The pin makes phased remediation auditable and regression-safe, but it is not a claim that every optional Apple input is already public. The Apple 4.5 pin is 2,907 total: 1,121 bound, 40 internally controlled, 1,746 intentionally omitted, and 0 unclassified. Its identity SHA-256 is `0ce3ff14568f841643559c359bc91827290535925c3665172fda81d499f81ce1`.

`--strict` is the merge- and tag-time release gate. Every declared `target` or `broken` tool remains an error in reports, and a regression test pins their exact state. The current baseline has no `target` or `broken` implementations and no implementation drift, so any implementation that leaves `asBuilt`, any structural contract error, or any optional-input coverage drift blocks both merges and releases. `--structural-strict` remains available only for local phased remediation work.

Expand Down Expand Up @@ -1175,10 +1175,10 @@ Includes sales, financial, app summary, analytics report request, report, instan
| `promoted_update` | Update promotion visibility or enabled state |
| `promoted_delete` | Delete a promotion |
| `promoted_reorder` | Replace and verify the complete promoted-purchase order for an app |
| `promoted_upload_image` | Deprecated: returns migration guidance; the endpoint is absent from pinned Apple OpenAPI 4.4.1 |
| `promoted_get_image` | Deprecated: returns migration guidance; the endpoint is absent from pinned Apple OpenAPI 4.4.1 |
| `promoted_delete_image` | Deprecated: returns migration guidance; the endpoint is absent from pinned Apple OpenAPI 4.4.1 |
| `promoted_get_image_for_purchase` | Deprecated: returns migration guidance; the relationship is absent from pinned Apple OpenAPI 4.4.1 |
| `promoted_upload_image` | Deprecated: returns migration guidance; the endpoint is absent from pinned Apple OpenAPI 4.5 |
| `promoted_get_image` | Deprecated: returns migration guidance; the endpoint is absent from pinned Apple OpenAPI 4.5 |
| `promoted_delete_image` | Deprecated: returns migration guidance; the endpoint is absent from pinned Apple OpenAPI 4.5 |
| `promoted_get_image_for_purchase` | Deprecated: returns migration guidance; the relationship is absent from pinned Apple OpenAPI 4.5 |

</details>

Expand Down
4 changes: 2 additions & 2 deletions Sources/asc-mcp/Core/ASCCoverageInventory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ struct ASCCoverageArea: Sendable {
}

enum ASCCoverageInventory {
static let snapshotDate = "2026-07-21"
static let appleAPIVersionBaseline = "4.4.1"
static let snapshotDate = "2026-09-24"
static let appleAPIVersionBaseline = "4.5"

static let areas: [ASCCoverageArea] = [
ASCCoverageArea(
Expand Down
Loading
Loading