Skip to content

Commit cf51a9c

Browse files
committed
feat: add accessibility declarations tools
1 parent 3d2f657 commit cf51a9c

20 files changed

Lines changed: 1088 additions & 26 deletions

ASC-COVERAGE-MATRIX-2026-05-05.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ Source baseline:
88
- Apple Webhook notifications: https://developer.apple.com/documentation/appstoreconnectapi/webhook-notifications
99

1010
Update 2026-05-07: automated OpenAPI coverage tooling is now available. See `ASC-OPENAPI-COVERAGE-GENERATED.md` for the generated Apple 4.3 path/operation matrix.
11+
Update 2026-05-08: accessibility declaration management is covered by `accessibility_*` tools.
1112

1213
This matrix tracks current `asc-mcp` coverage against the official App Store Connect API documentation. It is intentionally product-oriented: it names what users can do today, what is missing, and which additions should come first.
1314

1415
## Executive Priority
1516

1617
P0 additions:
17-
- Accessibility declarations, App Clips, background assets, app tags, routing app coverages, and customer review summaries.
18+
- App Clips, background assets, app tags, routing app coverages, and customer review summaries.
1819

1920
P1 additions:
2021
- Webhook receiver-side signature verification, event payload decoder, and triage resources/prompts.
@@ -26,7 +27,7 @@ P1 additions:
2627
| Area | Status | Priority | Current worker keys | Missing / next |
2728
|---|---|---:|---|---|
2829
| Essentials: auth, errors, paging, uploads, rate limits | Partial | P1 | `auth` | API key inventory/revocation helpers |
29-
| App Store app metadata and release operations | Partial | P0 | `apps`, `versions`, `app_info`, `pricing`, `app_events`, `screenshots`, `custom_pages`, `ppo`, `promoted`, `review_attachments`, `reviews` | accessibility declarations; App Clips; background assets; app tags; routing app coverages; customer review summary endpoint |
30+
| App Store app metadata and release operations | Partial | P0 | `apps`, `accessibility`, `versions`, `app_info`, `pricing`, `app_events`, `screenshots`, `custom_pages`, `ppo`, `promoted`, `review_attachments`, `reviews` | App Clips; background assets; app tags; routing app coverages; customer review summary endpoint |
3031
| TestFlight builds, testers, groups, and beta app review | Partial | P0 | `builds`, `build_processing`, `build_beta`, `beta_groups`, `beta_feedback`, `beta_testers`, `beta_app`, `pre_release`, `beta_license` | beta recruitment criteria; beta app clip invocation/localization APIs |
3132
| Webhook notifications | Covered | P2 | `webhooks` | OpenAPI drift checks and receiver-side helper ergonomics |
3233
| Webhook notification receiver resources | Missing | P1 | none | signature verification helpers; event payload decoder; prompt/resource templates for event triage |
@@ -41,7 +42,7 @@ P1 additions:
4142
## Implementation Order
4243

4344
1. Add `--read-only` runtime guard so static and live validation can run safely in production-like MCP hosts.
44-
2. Add `AccessibilityWorker` and update `AppsWorker` for `accessibilityUrl`: this closes a new compliance-oriented App Store gap.
45+
2. Update `AppsWorker` for app-level `accessibilityUrl` if Apple keeps it as a separate app metadata field outside declaration resources.
4546
3. Add webhook receiver helpers: signature verification, event payload decoder, and triage prompts/resources.
4647
4. Add merchant/pass identifiers, App Clips, background assets, Game Center, and alternative distribution as larger domain workers.
4748

ASC-OPENAPI-COVERAGE-GENERATED.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# App Store Connect OpenAPI Coverage
22

3-
Generated: 2026-05-07
3+
Generated: 2026-05-08
44

55
Sources:
66
- Apple App Store Connect API overview: https://developer.apple.com/app-store-connect/api/
@@ -26,7 +26,7 @@ Unclassified paths: 0
2626

2727
| Domain | Status | Priority | Apple paths | Operations | Workers | Notes |
2828
|---|---|---:|---:|---:|---|---|
29-
| App Store app metadata and release operations | Partial | P0 | 303 | 380 | `apps`, `versions`, `app_info`, `pricing`, `app_events`, `screenshots`, `custom_pages`, `ppo`, `promoted`, `review_attachments`, `reviews` | The common release workflow is strong; API 4.0 app-surface additions are the highest App Store coverage gap. |
29+
| 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`, `reviews` | The common release workflow is strong; API 4.0 app-surface additions are the highest App Store coverage gap. |
3030
| TestFlight builds, testers, groups, and beta app review | Partial | P0 | 115 | 154 | `builds`, `build_processing`, `build_beta`, `beta_groups`, `beta_feedback`, `beta_testers`, `beta_app`, `pre_release`, `beta_license` | Current TestFlight management is useful, but feedback retrieval is now core user value and should become a dedicated worker. |
3131
| 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. |
3232
| Provisioning and identifiers | Partial | P1 | 32 | 49 | `provisioning` | Core signing automation exists; Wallet and Apple Pay identifiers are useful next additions. |

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [2.3.0] - 2026-05-08
11+
12+
### Added
13+
14+
- Accessibility declaration tools (`accessibility_*`) for listing, reading, creating, updating/publishing, deleting, and relationship-only listing of App Store accessibility declarations by device family.
15+
16+
### Changed
17+
18+
- README worker counts, worker filtering docs, and coverage matrix now reflect 345 tools across 36 worker domains.
19+
1020
## [2.2.0] - 2026-05-07
1121

1222
### Added

README.md

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
## Overview
3131

32-
**asc-mcp** is a Swift-based MCP server that bridges [Claude](https://claude.ai) (or any MCP-compatible host) with the [App Store Connect API](https://developer.apple.com/documentation/appstoreconnectapi). It exposes **339 tools** across 35 worker domains, enabling you to automate your entire iOS/macOS release workflow through natural language.
32+
**asc-mcp** is a Swift-based MCP server that bridges [Claude](https://claude.ai) (or any MCP-compatible host) with the [App Store Connect API](https://developer.apple.com/documentation/appstoreconnectapi). It exposes **345 tools** across 36 worker domains, enabling you to automate your entire iOS/macOS release workflow through natural language.
3333

3434
### Key capabilities
3535

@@ -42,6 +42,7 @@
4242
- **Subscriptions** — subscription CRUD, groups, localizations, prices, offer codes, win-back offers
4343
- **Provisioning** — bundle IDs, devices, certificates, profiles, capabilities
4444
- **Marketing** — screenshots, app previews, custom product pages, A/B testing (PPO), promoted purchases
45+
- **Accessibility declarations** — manage App Store accessibility support declarations by device family
4546
- **Analytics & Metrics** — sales/financial reports, analytics reports, performance metrics, diagnostics
4647
- **Metadata management** — localized descriptions, keywords, What's New across all locales
4748
- **MCP 2025-11-25 surface** — tool annotations, output schemas for stable tools, structured JSON results, and safe result-size metadata
@@ -52,7 +53,7 @@
5253
```bash
5354
# 1. Install via Mint
5455
brew install mint
55-
mint install zelentsov-dev/asc-mcp@v2.2.0
56+
mint install zelentsov-dev/asc-mcp@v2.3.0
5657

5758
# 2. Add to Claude Code with env vars (simplest setup)
5859
claude mcp add asc-mcp \
@@ -84,7 +85,7 @@ Or use a JSON config file — see [Configuration](#configuration) below.
8485
brew install mint
8586

8687
# Install asc-mcp from GitHub
87-
mint install zelentsov-dev/asc-mcp@v2.2.0
88+
mint install zelentsov-dev/asc-mcp@v2.3.0
8889

8990
# Register in Claude Code
9091
claude mcp add asc-mcp -- ~/.mint/bin/asc-mcp
@@ -95,13 +96,13 @@ To install a specific branch or tag:
9596
```bash
9697
mint install zelentsov-dev/asc-mcp@main # main branch
9798
mint install zelentsov-dev/asc-mcp@develop # develop branch
98-
mint install zelentsov-dev/asc-mcp@v2.2.0 # specific tag
99+
mint install zelentsov-dev/asc-mcp@v2.3.0 # specific tag
99100
```
100101

101102
To update to the latest version:
102103

103104
```bash
104-
mint install zelentsov-dev/asc-mcp@v2.2.0 --force
105+
mint install zelentsov-dev/asc-mcp@v2.3.0 --force
105106
```
106107

107108
### Option B: Build from Source
@@ -361,7 +362,7 @@ Add to `~/.codeium/windsurf/mcp_config.json`:
361362
}
362363
```
363364
364-
> **Note:** Windsurf has a 100-tool limit. The server exposes 339 tools by default, so you must use `--workers` to select a subset. See [Worker Filtering](#worker-filtering) below.
365+
> **Note:** Windsurf has a 100-tool limit. The server exposes 345 tools by default, so you must use `--workers` to select a subset. See [Worker Filtering](#worker-filtering) below.
365366
366367
</details>
367368
@@ -370,14 +371,14 @@ Add to `~/.codeium/windsurf/mcp_config.json`:
370371
371372
### Worker Filtering
372373
373-
The server exposes **339 tools** across 35 worker domains. Some MCP clients impose a tool limit (e.g., Windsurf caps at 100). Use `--workers` to enable only the workers you need:
374+
The server exposes **345 tools** across 36 worker domains. Some MCP clients impose a tool limit (e.g., Windsurf caps at 100). Use `--workers` to enable only the workers you need:
374375
375376
```bash
376377
# Only load apps, builds, and version lifecycle tools
377378
asc-mcp --workers apps,builds,versions
378379
379-
# Full release workflow subset (~60 tools, fits within any client limit)
380-
asc-mcp --workers apps,builds,versions,reviews,beta_groups,iap
380+
# Full release + App Store compliance subset (~96 tools, fits within 100-tool clients)
381+
asc-mcp --workers apps,accessibility,builds,versions,reviews,beta_groups,iap
381382
382383
# Monetization focus
383384
asc-mcp --workers apps,iap,subscriptions,offer_codes,winback,pricing,promoted
@@ -423,6 +424,7 @@ The generated report records Apple spec metadata, path and operation counts, dom
423424
| `company` | `company_` | 3 | Multi-account management |
424425
| `auth` | `auth_` | 4 | JWT token tools |
425426
| `apps` | `apps_` | 9 | App listing, metadata, localizations |
427+
| `accessibility` | `accessibility_` | 6 | App Store accessibility declarations |
426428
| `webhooks` | `webhooks_` | 8 | Webhook notifications and deliveries |
427429
| `xcode_cloud` | `xcode_cloud_` | 30 | Xcode Cloud products, workflows, build runs, artifacts, issues, test results, and SCM |
428430
| `builds` | `builds_` | 4 | Build management |
@@ -462,7 +464,7 @@ When connected to an LLM client, tool definitions consume context tokens. Here's
462464
463465
| Configuration | Tools | ~Tokens |
464466
|---|---:|---:|
465-
| All workers (default) | 339 | **~38,000** |
467+
| All workers (default) | 345 | **~39,000** |
466468
| Release workflow: `apps,builds,versions,reviews` | ~57 | ~7,000 |
467469
| Monetization: `apps,iap,subscriptions,pricing` | ~78 | ~9,000 |
468470
| TestFlight: `apps,builds,beta_groups,beta_testers` | ~56 | ~6,000 |
@@ -471,11 +473,11 @@ When connected to an LLM client, tool definitions consume context tokens. Here's
471473
472474
**Heaviest workers:** Xcode Cloud (30 tools), Subscriptions (29 tools), InAppPurchases (24 tools), Provisioning (17 tools), Screenshots (16 tools).
473475
474-
For Claude (200K context) ~38K tokens is about 19% of the window. For clients with smaller context windows, use `--workers` to reduce the footprint.
476+
For Claude (200K context) ~39K tokens is about 20% of the window. For clients with smaller context windows, use `--workers` to reduce the footprint.
475477
476478
## Available Tools
477479
478-
**339 tools** organized across 35 worker domains (use `--workers` to filter — see [Worker Filtering](#worker-filtering)):
480+
**345 tools** organized across 36 worker domains (use `--workers` to filter — see [Worker Filtering](#worker-filtering)):
479481
480482
<details>
481483
<summary><strong>Company Management</strong> — 3 tools</summary>
@@ -517,6 +519,20 @@ For Claude (200K context) ~38K tokens is about 19% of the window. For clients wi
517519
518520
</details>
519521
522+
<details>
523+
<summary><strong>Accessibility Declarations</strong> — 6 tools</summary>
524+
525+
| Tool | Description |
526+
|------|-------------|
527+
| `accessibility_list` | List accessibility declarations for an app |
528+
| `accessibility_get` | Get one accessibility declaration |
529+
| `accessibility_create` | Create a declaration for a device family |
530+
| `accessibility_update` | Update support flags or publish a declaration |
531+
| `accessibility_delete` | Delete a declaration |
532+
| `accessibility_list_relationships` | List declaration relationship IDs for an app |
533+
534+
</details>
535+
520536
<details>
521537
<summary><strong>Webhook Notifications</strong> — 8 tools</summary>
522538
@@ -1100,11 +1116,12 @@ Sources/asc-mcp/
11001116
│ ├── HTTPClient.swift # Actor-based HTTP with retry logic
11011117
│ ├── JWTService.swift # ES256 JWT token generation
11021118
│ └── CompaniesManager.swift # Multi-account management
1103-
└── Workers/ # MCP tool implementations (35 worker domains + MainWorker router)
1119+
└── Workers/ # MCP tool implementations (36 worker domains + MainWorker router)
11041120
├── MainWorker/WorkerManager # Central tool registry & routing
11051121
├── CompaniesWorker/ # company_* tools
11061122
├── AuthWorker/ # auth_* tools
11071123
├── AppsWorker/ # apps_* tools
1124+
├── AccessibilityWorker/ # accessibility_* tools
11081125
├── BuildsWorker/ # builds_* tools
11091126
├── BuildProcessingWorker/ # builds_*_processing tools
11101127
├── BuildBetaDetailsWorker/ # builds_*_beta_* tools

SECURITY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
| Version | Supported |
66
|---------|-----------|
7+
| 2.3.x | Yes |
78
| 2.2.x | Yes |
89
| 2.1.x | Yes |
910
| 2.0.x | Yes |

Sources/asc-mcp/Core/ASCCoverageInventory.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,12 @@ enum ASCCoverageInventory {
6767
status: .partial,
6868
priority: .p0,
6969
workerKeys: [
70-
"apps", "versions", "app_info", "pricing", "app_events",
70+
"apps", "accessibility", "versions", "app_info", "pricing", "app_events",
7171
"screenshots", "custom_pages", "ppo", "promoted", "review_attachments", "reviews"
7272
],
7373
coveredCapabilities: [
7474
"apps, app info, version lifecycle, review responses",
75+
"accessibility declarations",
7576
"pricing and availability",
7677
"in-app events",
7778
"screenshots and app previews",
@@ -81,7 +82,6 @@ enum ASCCoverageInventory {
8182
"review attachments"
8283
],
8384
missingCapabilities: [
84-
"accessibility declarations",
8585
"App Clips and advanced App Clip experiences",
8686
"background assets",
8787
"app tags",

Sources/asc-mcp/Core/Application.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public func runApplication(options: AppRuntimeOptions = AppRuntimeOptions()) asy
4444
After selecting a company, use:
4545
- auth_* — authentication
4646
- apps_* — app management and metadata
47+
- accessibility_* — App Store accessibility declarations by device family
4748
- webhooks_* — webhook notifications and delivery diagnostics
4849
- xcode_cloud_* — Xcode Cloud products, workflows, builds, artifacts, issues, test results, and SCM resources
4950
- builds_* — build management
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import Foundation
22

33
enum ServerVersion {
4-
static let current = "2.2.0"
4+
static let current = "2.3.0"
55
}

Sources/asc-mcp/EntryPoint.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ struct ASCMCPApp {
6767
}
6868

6969
let validWorkers: Set<String> = [
70-
"company", "auth", "apps", "webhooks", "xcode_cloud", "builds", "build_processing", "build_beta",
70+
"company", "auth", "apps", "accessibility", "webhooks", "xcode_cloud", "builds", "build_processing", "build_beta",
7171
"versions", "reviews", "beta_groups", "beta_feedback", "beta_testers", "iap",
7272
"provisioning", "app_info", "pricing", "users", "app_events", "analytics",
7373
"subscriptions", "offer_codes", "winback", "intro_offers", "promo_offers",

0 commit comments

Comments
 (0)