# app-publish

Manage App Store Connect and Google Play Console from an AI assistant. Update listings, upload builds, handle reviews, and submit app versions.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 39
- Author: mikusnuz
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/mikusnuz/app-publish-mcp
- Updated: 2026-10-19
- HTML: https://affpapa.org/en/nevibecode/mcp/app-publish

## What it does

app-publish connects an assistant to App Store Connect and Google Play Console. It can edit store descriptions and keywords, upload screenshots and builds, manage reviews and beta testers, handle in-app purchases, check review status, and submit versions for review.

You need a signed `.aab` or `.apk` for Android, or a signed `.ipa` for iOS. The server performs supported store-side tasks; it does not compile apps or manage signing keys. A new app still needs initial setup in the relevant console, so this server cannot take an app from source code to a signed release.

In Claude Code, it runs through `npx` and reads credentials from environment variables. The install example uses Apple API credentials along with `GOOGLE_CLIENT_SECRET` and `GOOGLE_REFRESH_TOKEN`; another configuration uses a Google service account path.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `APPLE_KEY_ID`, `APPLE_KEY_TYPE`, `APPLE_ISSUER_ID`, `APPLE_P8_PATH`, `GOOGLE_SERVICE_ACCOUNT_PATH`, `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, `GOOGLE_REFRESH_TOKEN`, `APPLE_VENDOR_NUMBER`, `APP_PUBLISH_READ_ONLY` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env APPLE_KEY_ID=<APPLE_KEY_ID> --env APPLE_KEY_TYPE=<APPLE_KEY_TYPE> --env APPLE_ISSUER_ID=<APPLE_ISSUER_ID> --env APPLE_P8_PATH=<APPLE_P8_PATH> --env GOOGLE_SERVICE_ACCOUNT_PATH=<GOOGLE_SERVICE_ACCOUNT_PATH> --transport stdio app-publish -- npx -y app-publish-mcp
```
Replace <…> with your own values. 13 more environment variables are in the server README

### Codex

**Platform CLI**
```bash
codex mcp add app-publish --env APPLE_KEY_ID=<APPLE_KEY_ID> --env APPLE_KEY_TYPE=<APPLE_KEY_TYPE> --env APPLE_ISSUER_ID=<APPLE_ISSUER_ID> --env APPLE_P8_PATH=<APPLE_P8_PATH> --env GOOGLE_SERVICE_ACCOUNT_PATH=<GOOGLE_SERVICE_ACCOUNT_PATH> -- npx -y app-publish-mcp
```
Replace <…> with your own values. 13 more environment variables are in the server README

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "app-publish": {
            "command": "npx",
            "args": [
                "-y",
                "app-publish-mcp"
            ],
            "env": {
                "APPLE_KEY_ID": "<APPLE_KEY_ID>",
                "APPLE_KEY_TYPE": "<APPLE_KEY_TYPE>",
                "APPLE_ISSUER_ID": "<APPLE_ISSUER_ID>",
                "APPLE_P8_PATH": "<APPLE_P8_PATH>",
                "GOOGLE_SERVICE_ACCOUNT_PATH": "<GOOGLE_SERVICE_ACCOUNT_PATH>"
            }
        }
    }
}
```
Replace <…> with your own values. 13 more environment variables are in the server README

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "app-publish": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "app-publish-mcp"
            ],
            "env": {
                "APPLE_KEY_ID": "<APPLE_KEY_ID>",
                "APPLE_KEY_TYPE": "<APPLE_KEY_TYPE>",
                "APPLE_ISSUER_ID": "<APPLE_ISSUER_ID>",
                "APPLE_P8_PATH": "<APPLE_P8_PATH>",
                "GOOGLE_SERVICE_ACCOUNT_PATH": "<GOOGLE_SERVICE_ACCOUNT_PATH>"
            }
        }
    }
}
```
Replace <…> with your own values. 13 more environment variables are in the server README

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e APPLE_KEY_ID=<APPLE_KEY_ID> -e APPLE_KEY_TYPE=<APPLE_KEY_TYPE> -e APPLE_ISSUER_ID=<APPLE_ISSUER_ID> -e APPLE_P8_PATH=<APPLE_P8_PATH> -e GOOGLE_SERVICE_ACCOUNT_PATH=<GOOGLE_SERVICE_ACCOUNT_PATH> app-publish npx -y app-publish-mcp
```
Replace <…> with your own values. 13 more environment variables are in the server README

## When to use it
- edit an app’s store description and keywords
- upload screenshots and attach them to a version
- submit a build for store review
- check an app’s review status
- reply to a Google Play review

## Example prompts
- Update the app description and keywords in App Store Connect.
- Upload the screenshots for this version and submit it for review.
- Check the review status and draft a reply to the Google Play review.

## Similar
- [mobile-mcp](https://affpapa.org/en/nevibecode/mcp/mobile-mcp.md) — MCP server · ★ 9946
- [mobilerun](https://affpapa.org/en/nevibecode/mcp/mobilerun.md) — MCP server · ★ 9751
- [e2e](https://affpapa.org/en/nevibecode/mcp/e2e.md) — MCP server · ★ 11912
- [XcodeBuildMCP](https://affpapa.org/en/nevibecode/mcp/xcodebuildmcp.md) — MCP server · ★ 6505
- [ShipSwift](https://affpapa.org/en/nevibecode/mcp/shipswift.md) — MCP server · ★ 3244
- [agent-device](https://affpapa.org/en/nevibecode/mcp/agent-device.md) — MCP server · ★ 5149

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
