Open source
Your App Store listing, editable from the terminal.
ascapi is a free, open-source Rust CLI for Apple's App Store Connect API. Read and rewrite names, subtitles, descriptions, keywords, and what's-new copy across every locale; push screenshots; issue signing certificates and provisioning profiles. The same binary runs as an MCP server, so your coding agent can do it too.
cargo install smbcloud-ascapi-cli — Apache-2.0, free forever.
MCP
The store page as a set of tools.
Start it with --mcp and every command becomes an MCP tool over stdio. An agent that just translated your description can write it to the Swedish localization itself, without a human relaying it through the App Store Connect website.
cargo install smbcloud-ascapi-cli
ascapi apps list --bundle-id com.example.app
ascapi --mcpRegistered in the MCP registry as io.github.smbcloudXYZ/ascapi.
Why it exists
Release chores shouldn't need a browser tab and a login.
Adding a language to a listing, fixing a keyword field, or regenerating a profile after a capability change are all small jobs that turn into an afternoon once they run through a web UI. They're API calls. ascapi makes them one command each, and the same command your agent can call.
One binary, no Ruby
cargo install and you have the `ascapi` command. No gems to resolve, no bundler, no lockfile drift on a CI runner that only needed to change a subtitle.
Your agent gets the same commands
`ascapi --mcp` serves the same operations as MCP tools over stdio. The CLI and the MCP server call one shared crate, so the two can't drift apart.
Metadata and signing together
Listings, localizations, and screenshots on one side; certificates and provisioning profiles on the other. Key pairs and CSRs are generated on your machine.
What it covers
Two halves of a release, in one command tree.
Metadata and signing are separate crates that know nothing about each other, so neither drags the other along. They just happen to ship in the same binary, because they show up in the same week of your release.
App metadata
Apps, app infos, per-platform App Store versions, and the localizations that carry name, subtitle, description, keywords, promotional text, and what's-new.
Screenshots
Create the per-device-class screenshot sets on a version localization, then upload the image binaries into them.
Bundle IDs
Register a new bundle identifier or look up the resource id an existing one hides behind.
Signing
List, issue, and revoke the team's signing certificates, and create, download, or delete provisioning profiles across the iOS, macOS, tvOS, and Mac App Store types.
ascapi vs. fastlane
fastlane does far more. ascapi does less, with less to install.
fastlane is a full release toolchain and has been for years. If you only ever reach for the parts that talk to App Store Connect, ascapi is that slice as a single binary — with an MCP server attached, so an agent can drive it directly.
Pick ascapi if
- You want listing edits scriptable in CI without installing a Ruby toolchain first.
- You want a coding agent reading and updating store metadata over MCP, in the session it's already in.
- You'd like to see the request body before anything touches a live listing.
- You want the tool that writes your keywords to also issue the profile that signs the build.
fastlane still fits if
- You need the full pipeline: build, sign, upload to TestFlight, manage beta groups.
- You ship to Google Play from the same automation.
- You already have lanes that work and nothing about them hurts.
FAQ
Common questions
Is ascapi free and open source?
Yes. It's Apache-2.0 licensed and published on crates.io. Install it with `cargo install smbcloud-ascapi-cli`, which puts the `ascapi` binary on your path.
Does it work with Claude Code and Cursor?
Yes. `ascapi --mcp` is a standard MCP server over stdio, so any MCP-compatible client can call it. It's listed in the MCP registry as io.github.smbcloudXYZ/ascapi.
What credentials does it need?
An App Store Connect API key ID, your issuer ID, and that key's .p8 private key file — the same three values Xcode and altool use. Pass them as flags or as ASC_API_KEY, ASC_ISSUER_ID, and ASC_PRIVATE_KEY_PATH. If the path is omitted it falls back to ~/.appstoreconnect/private_keys/AuthKey_<key-id>.p8, matching Xcode's own convention.
Can it create a brand-new app?
No, and neither can anything else: Apple has no create-app endpoint. What ascapi can do is register the bundle ID, and create an App Store Version for a platform an existing app doesn't have yet — which is what "add visionOS to this app" means at the API level.
Can it upload a build to TestFlight?
No. ascapi covers metadata and signing. Binaries stay with xcodebuild, altool, and notarytool.
Why did my edit come back as a 409?
App Store Connect only accepts writes while the record is in an editable state, such as PREPARE_FOR_SUBMISSION or DEVELOPER_REJECTED. Once a version is READY_FOR_SALE, WAITING_FOR_REVIEW, or IN_REVIEW, it's locked. List the app info and version states first and the rejection stops being a surprise.
Get started
One install away from never opening that web form again.
The command tree documents itself — ascapi --help and ascapi <command> --help are always current. Setup, credentials, and the crate layout are on GitHub.