apps-add
Register individual app by bundleId or packageName. Automatically checks both stores.
Pull your App Store and Play Console listings into a local cache, edit them there, and push them back — plus create versions and update release notes across both stores.
LABSCO SUMMARY
Pulling first is what changes the workflow: once the metadata and screenshots for every locale are on disk, rewriting a subtitle across twelve languages is an editing job rather than twelve trips through two web consoles. Use the dry run before every push — it reports exactly what would change without touching the live listing, which matters most on the image upload, the slowest and least reversible part. Register the apps first; the slug is what lets later calls skip bundle ids and package names entirely.
A store-metadata workflow that runs on your own machine. It talks to App Store Connect and Google Play directly with your credentials, keeps the pulled listing data in a local cache, and pushes changes back when you ask.
Credentials for whichever stores you use, in a config file under a directory in your home folder: for App Store Connect an API key .p8 file with its issuerId and keyId, and for Google Play a service account JSON key. The project has you create that directory with restrictive permissions, since the keys sit in it. Install with npm install -g pabal-store-api-mcp and run it over stdio. Registered apps are kept in a local JSON file created by the registration tools and used by everything downstream, which is why most tools accept a registered app slug in place of a bundle id or package name. Everything runs locally — store API calls go straight from your machine, so credentials and cached listing data stay there.
One command plus credentials — npx -y pabal-store-api-mcp, then supply credentials
USE CASES
Check that both stores authenticate, register the apps from the store APIs, and confirm what is now known locally.
Pull the current metadata and screenshots to the local cache, edit it there, then push back the locales you changed.
Run the same push as a dry run and read the reported changes, rather than finding out on a live listing.
Check the latest version on each store, create the new one, and write its release notes.
Pull what is currently published on both, then update from one source of wording rather than retyping it in each console.
Register it by bundle id or package name — both stores are checked — and give it a slug the other tools can use.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
apps-addRegister individual app by bundleId or packageName. Automatically checks both stores.
apps-initQuery app list from store API and register automatically. App Store: auto-register all apps, Google Play: packageName required.
apps-searchSearch registered apps. Returns all apps if called without query.
aso-pullFetch ASO data from App Store/Google Play and save to local cache.
aso-pushPush ASO data from local cache to App Store/Google Play.
auth-checkCheck authentication status for App Store Connect / Google Play Console.
release-check-versionsCheck latest versions from App Store/Google Play.
release-createCreate a new version on App Store/Google Play. If version is not provided, checks and displays latest versions from each store.
release-pull-notesFetch release notes from App Store/Google Play.
release-update-notesUpdate release notes (What's New) for App Store/Google Play version.
BEFORE YOU INSTALL
10 tools when we connected.
Node.js >= 18
All 5 documented setups run the server on your machine.
CONTEXT COST
Rated by the size of the 10 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npm install -g pabal-store-api-mcp
mkdir -p ~/.config/pabal-mcp
chmod 700 ~/.config/pabal-mcpSave your App Store Connect API key as ~/.config/pabal-mcp/app-store-key.p8 and your Google Play service account JSON key as ~/.config/pabal-mcp/google-play-service-account.json
Create ~/.config/pabal-mcp/config.json with an appStore section (issuerId, keyId and privateKeyPath pointing at the .p8 file) and a googlePlay section (serviceAccountKeyPath pointing at the JSON key) — the repo's .config-example/config.json shows the layout
chmod 600 ~/.config/pabal-mcp/*npx -y pabal-store-api-mcp{
"mcpServers": {
"pabal-store-api-mcp": {
"command": "npx",
"args": [
"-y",
"pabal-store-api-mcp"
]
}
}
}{
"servers": {
"pabal-store-api-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"pabal-store-api-mcp"
]
}
}
}{
"mcpServers": {
"pabal-store-api-mcp": {
"command": "pabal-store-api-mcp"
}
}
}