Auditing 60 App Store listings in 10 seconds
Managing a large indie app portfolio meant clicking through App Store Connect one app at a time. So I built an MCP server over the App Store Connect API — and turned an afternoon of busywork into a single sentence.
The pain
App Store Connect is built around one app at a time. When you ship dozens of small apps, the simple question “is everything healthy?” has no simple answer. To check it you open each app, then each version, then each localization — and repeat. For 60 apps that’s a few hundred clicks and the better part of an afternoon.
A few things hurt the most:
- ASO gaps are invisible at the portfolio level — a missing subtitle, an under-used 100-character keyword field, or a device size with no screenshots. Nothing tells you which apps are leaving the most on the table.
- Editing a live listing by hand is nerve-wracking: no preview of the exact diff, no character-limit check until you hit save.
- The API is powerful but low-level — JWT ES256 auth, pagination, relationship traversal — far too much friction for a quick question.
The idea
What if the question stayed a question? Instead of navigating the dashboard, I wanted to ask — and let an AI agent translate plain language into the right App Store Connect API calls. So I built an MCP server that any MCP-compatible agent (Claude, Cursor, Windsurf) can drive.
“Audit all my apps for ASO gaps and rank them by what’s missing.”
One sentence fans out across the whole account, pulls every app’s metadata, localizations, keywords and screenshot sets, and comes back with a ranked report — in about ten seconds.
What it does
Portfolio ASO audit
One call ranks every app for missing keywords, subtitles, unused keyword space, and missing screenshot sets per device.
Dry-run previews
See the exact before/after diff with character limits validated — before anything goes live.
Safe (read-only) mode
Optional enforcement blocks all writes — no accidental releases, pricing changes, or submissions.
Performance visibility
Downloads, proceeds, subscriptions, retention and engagement — pulled across the whole portfolio.
On top of 70+ first-class tools — versions, localizations, TestFlight, customer reviews (and replies), pricing, in-app purchases, signing certificates and provisioning profiles — there’s a raw_request escape hatch for anything else the App Store Connect API can do.
What changed
Open each app → each version → each localization. Hundreds of clicks, an afternoon gone, and you still weren’t sure you’d caught every gap.
“What’s the state of all my apps?” → a ranked report in ~10 seconds. Edits are previewed as diffs and guarded by safe mode, so changes are deliberate and reversible by design.
Under the hood
It’s plain Node.js (ES modules, Node ≥18, no build step), authenticating to App Store Connect with a JWT (ES256) minted from your API key. Drop it into any MCP client and point it at your credentials:
npx @fil-technology/appstore-api-mcpThe design goal was the opposite of a thin API wrapper: the common jobs should be one obvious tool with sane defaults, the risky jobs should be hard to do by accident, and the long tail should still be reachable. That balance — first-class tools, dry-run, safe mode, and a raw escape hatch — is what makes it comfortable to run a real, money-making portfolio through.