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 --mcp

Registered 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.

Area
ascapi
fastlane
Runtime
One Rust binary from crates.io
Ruby, a Gemfile, and bundler
Scope
App Store Connect metadata and code signing
The whole release pipeline, including builds and uploads
Agent access
Built-in MCP server (`ascapi --mcp`)
Shell out to a lane and parse the output
Before it writes
`--dry-run` prints the exact request body
Varies by action
Platforms covered
Apple only
Apple and Android

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.

ascapi — App Store Connect from the CLI and MCP | smbCloud