MCP Hub
Back to servers

shipkit

Unified app publishing MCP Server for Google Play, App Store, and 10+ Chinese stores

Registry
Updated
Feb 20, 2026

Quick Install

npx -y @readmigo/shipkit-mcp

ShipKit — Unified App Publishing MCP Server

npm version License: MIT Node >= 18

AI Agent-friendly unified app publishing for Google Play, Apple App Store, Huawei AppGallery, and 10+ Chinese Android stores.

ShipKit is a Model Context Protocol (MCP) server that lets AI agents (Claude Code, Cursor, Windsurf) publish apps to multiple app stores with a single natural language command. It eliminates manual publishing workflows by providing a unified API across vastly different platform requirements.


What is ShipKit?

ShipKit bridges the gap between "Vibe Coding" (AI-assisted development) and "Vibe Shipping" (AI-assisted publishing). With ShipKit, you can ask your AI agent:

"Help me publish v2.1.0 to all stores"

And ShipKit handles the complexity: authentication, build artifact uploads, metadata translation, compliance checks, and multi-platform publishing orchestration.

Why ShipKit?

  • Unified Interface: One MCP Server for 10+ app stores with wildly different APIs
  • AI-Native Design: Built specifically for AI agents to understand, use, and automate
  • Multi-Region: Global stores (Google Play, App Store) + China-specific distribution (小米, OPPO, vivo, etc.)
  • Compliance Built-In: Pre-submission checks for ICP, privacy policies, and platform-specific requirements
  • Idempotent & Safe: All operations support idempotency keys and provide detailed error recovery suggestions

Supported Stores

StorePlatformRegionAuthenticationUpload FormatStatus
Google PlayAndroidGlobalOAuth 2.0 Service AccountAPK/AAB✅ Available
Apple App StoreiOSGlobalJWT (ES256)IPA✅ Available
Huawei AppGalleryAndroidGlobal/ChinaOAuth 2.0APK/AAB✅ Available
Xiaomi StoreAndroidChinaRSA SignatureAPK/AAB✅ Available
OPPO StoreAndroidChinaOAuth TokenAPK/AAB✅ Available
Honor App MarketAndroidChinaOAuth 2.0APK/AAB✅ Available
Pgyer (蒲公英)Android/iOSChinaAPI KeyAPK/IPA✅ Available
vivo StoreAndroidChinaAPI Key + RPAAPK/AAB🚧 In Development
Tencent MyApp (应用宝)AndroidChinaAppKey + HMAC-MD5APK🚧 In Development
Samsung Galaxy StoreAndroidGlobalJWT Service AccountAPK/AAB📋 Planned
HarmonyOS (鸿蒙)HarmonyOSChinaOAuth 2.0 (via Huawei)HAP📋 Planned
Meizu StoreAndroidChinaCustomAPK/AAB📋 Planned

Quick Start

Installation for Claude Code

claude mcp add shipkit -- npx -y @readmigo/shipkit-mcp

Installation for Claude Desktop / Cursor / Windsurf

Add to your MCP configuration file:

Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json or %APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "shipkit": {
      "command": "npx",
      "args": ["-y", "@readmigo/shipkit-mcp"],
      "env": {
        "SHIPKIT_API_KEY": "sk-your-api-key-here"
      }
    }
  }
}

Cursor (.cursor/mcp.json in your project):

{
  "mcpServers": {
    "shipkit": {
      "command": "npx",
      "args": ["-y", "@readmigo/shipkit-mcp"],
      "env": {
        "SHIPKIT_API_KEY": "sk-your-api-key-here"
      }
    }
  }
}

First-Time Setup: Connect Your Stores

You'll need to authenticate with each store. ShipKit stores credentials securely and handles token refresh automatically.

Google Play Setup

Create a service account in Google Cloud Console and download the JSON key:

$ claude
> Connect me to Google Play
> I'll need your service account key...

Provide credentials as JSON:

{
  "type": "service_account",
  "project_id": "your-project-id",
  "private_key_id": "key-id",
  "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
  "client_email": "your-sa@your-project.iam.gserviceaccount.com",
  "client_id": "123456789",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token"
}

Apple App Store Setup

Use App Store Connect API credentials (JWT-based):

{
  "issuerId": "your-issuer-id",
  "keyId": "your-key-id",
  "privateKey": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
}

Huawei AppGallery Setup

OAuth 2.0 credentials from Huawei AppGallery Connect:

{
  "clientId": "your-client-id",
  "clientSecret": "your-client-secret"
}

Usage Examples

Example 1: First Connection to Google Play

User: I want to set up Google Play publishing. Where do I start?

Claude: I'll help you connect ShipKit to Google Play. First, let me check what
stores you have configured.

> store.list()
Connected stores: []

No stores connected yet. Let me guide you through setting up Google Play:

1. Go to Google Cloud Console (https://console.cloud.google.com/)
2. Create a new service account
3. Download the JSON key file
4. Paste the key contents when ready

User: [pastes JSON key]

Claude: Great! Let me configure this...

> store.connect({
    "store": "google_play",
    "credentials": { ... }
  })

✓ Google Play connected successfully!

Let me verify by listing your apps:

> store.list()
Connected stores:
  - google_play (3 apps: com.example.app, ...)

Example 2: Check Status Across All Platforms

User: What's the status of v2.0.0 across all stores?

Claude: Let me check the review status for version 2.0.0...

> app.status({
    "app_id": "com.example.app",
    "version": "2.0.0"
  })

Status Report:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Store              Status           Days in Review    Notes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Google Play        IN_REVIEW        2                Automated review
Apple App Store    APPROVED         4                Live on App Store
Huawei AppGallery  APPROVED         5                Live in China
Xiaomi             REJECTED         -                Icon dimensions incorrect
OPPO               IN_REVIEW        1                Manual review queue
vivo               IN_QUEUE          0                Awaiting review
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Xiaomi rejected due to icon requirements. Let me get specific feedback...

> compliance.check({
    "app_id": "com.example.app",
    "stores": ["xiaomi"]
  })

Compliance Issues:
- Icon: Must be square with 18px rounded corners (you have 16px)
- Privacy Policy: Link must be in Settings > About > Privacy Policy menu

Suggested fix: Update icon and resubmit to Xiaomi.

Example 3: Publish New Version to All Stores

User: Release v2.1.0 to all stores

Claude: I'll help you release v2.1.0. Let me start by running compliance
checks across all platforms...

> compliance.check({
    "app_id": "com.example.app",
    "version": "2.1.0",
    "stores": "all"
  })

✓ All platforms passed compliance checks!

Now uploading builds...

> app.upload({
    "app_id": "com.example.app",
    "version": "2.1.0",
    "builds": [
      { "format": "aab", "path": "./build/app-release.aab" },
      { "format": "ipa", "path": "./build/app.ipa" }
    ]
  })

Upload Progress:
  Google Play          ████████████████████ 100%
  Apple App Store      ████████████████████ 100%
  Huawei AppGallery    ████████████████████ 100%
  Xiaomi               ████████████████████ 100%
  OPPO                 ████████████████████ 100%

All builds uploaded successfully!

Now publishing to all platforms...

> app.publish({
    "app_id": "com.example.app",
    "version": "2.1.0",
    "stores": "all",
    "rollout_percentage": 100
  })

Publishing Status:
  ✓ Google Play - Submitted for review
  ✓ Apple App Store - Awaiting manual review
  ✓ Huawei AppGallery - Live immediately
  ✓ Xiaomi - Submitted for review
  ✓ OPPO - Submitted for review
  ⏳ vivo - Queued for review

Release v2.1.0 submitted to all stores! I'll monitor progress and notify
you when reviews complete.

MCP Tools Reference

ShipKit provides 8 core MCP tools for app publishing operations:

ToolCategoryDescriptionParametersStatus
store.listDiscoveryList all configured stores and their connection statusapp_id?✅ Available
store.connectConfigurationConfigure and authenticate with an app storestore, credentials, app_id?✅ Available
app.uploadPublishingUpload APK/AAB/IPA/HAP build artifacts to storesapp_id, version, builds[], stores?✅ Available
app.listingMetadataView and update store listings (title, description, screenshots, etc.)app_id, action (get/update), store, locale?, content?✅ Available
app.releasePublishingManage release tracks, phases, and rollout percentagesapp_id, version, stores, action (create/update), rollout_percentage?✅ Available
app.statusMonitoringQuery review status, approval state, and analytics across platformsapp_id, version?, stores?✅ Available
app.publishPublishingSubmit app for review or publish immediately to specified storesapp_id, version, stores[], release_track?, auto_publish?✅ Available
compliance.checkValidationPre-submission compliance checks (ICP, privacy policy, icon specs, etc.)app_id, version?, stores[]✅ Available

Architecture

ShipKit uses a modular adapter pattern to handle vastly different store APIs:

┌─────────────────────────────────────┐
│   AI Tools & CI/CD Integration      │
│  (Claude Code, Cursor, Windsurf)    │
│     GitHub Actions, etc.             │
└──────────────┬──────────────────────┘
               │
               │ MCP Protocol (JSON-RPC)
               │ REST API, CLI
               ▼
┌─────────────────────────────────────┐
│      ShipKit Core Orchestrator       │
│  • Authentication Manager (unified)  │
│  • Metadata Transformer              │
│  • Job Queue (async/idempotent)      │
│  • Compliance Engine                 │
└──────────────┬──────────────────────┘
               │
    ┌──────────┼──────────┬─────────┬─────────┐
    ▼          ▼          ▼         ▼         ▼
┌────────┐ ┌───────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ Google │ │Apple  │ │Huawei│ │Xiaomi│ │OPPO  │
│ Play   │ │App    │ │ AGC  │ │Store │ │Store │
│Adapter │ │Store  │ └──────┘ └──────┘ └──────┘
└────────┘ │Adapter│
           └───────┘

           ⋮ (vivo, Samsung, HarmonyOS, etc.)

           Plus RPA fallback for incomplete APIs

Key Design Principles:

  1. Unified Interface: All stores implement the same StoreAdapter interface with methods like authenticate(), uploadBuild(), publishRelease(), getStatus(), etc.

  2. Store-Specific Handling: Each store adapter encapsulates platform-specific details (API versions, authentication strategies, metadata requirements).

  3. Async Job Queue: Long-running operations (uploads, reviews) are queued with exponential retry, progress tracking, and dead-letter handling.

  4. Idempotent Operations: Every write operation accepts an idempotency_key to prevent duplicate submissions.

  5. Credential Management: All store credentials are encrypted and stored server-side. AI agents never see raw credentials.

  6. RPA Fallback: For stores without complete APIs, Playwright browser automation provides a fallback with anti-detection measures.


Roadmap

✅ Completed (Current MVP)

  • Google Play adapter (full API support)
  • Apple App Store adapter (full API support)
  • Huawei AppGallery adapter (full API support)
  • Xiaomi Store adapter (API support)
  • OPPO Store adapter (API support)
  • Honor App Market adapter (API support)
  • Pgyer adapter (test distribution)
  • MCP Server with 8 core tools
  • CLI tool (shipkit command)
  • Basic compliance checks (ICP, privacy policy)
  • TypeScript SDK

🚧 In Development (Next Quarter)

  • vivo Store adapter (API + RPA hybrid)
  • Tencent MyApp adapter (API + RPA hybrid)
  • Enhanced compliance engine (app permissions, content ratings)
  • Web dashboard for monitoring and manual intervention
  • Webhook support for CI/CD integration
  • Multi-account management (team collaboration)

📋 Planned (Later Phases)

  • Samsung Galaxy Store adapter
  • HarmonyOS adapter (鸿蒙 NEXT)
  • Meizu Store adapter
  • Build registry integration (artifact storage/versioning)
  • Analytics aggregation (downloads, ratings, reviews across stores)
  • Python SDK
  • REST API v1.0 (stable release)
  • Commercial hosting/SaaS option

Contributing

Adding a New Store Adapter

ShipKit is designed to be extensible. Here's how to add support for a new store:

  1. Create adapter file: src/adapters/[store-name]-adapter.ts

  2. Implement StoreAdapter interface:

    export class NewStoreAdapter implements StoreAdapter {
      async authenticate(credentials: StoreCredentials): Promise<void>
      async uploadBuild(build: BuildArtifact): Promise<string>
      async createRelease(release: ReleaseConfig): Promise<string>
      async updateListing(listing: ListingUpdate): Promise<void>
      async submitForReview(version: string): Promise<void>
      async getStatus(version: string): Promise<ReviewStatus>
      async getAnalytics(version: string): Promise<Analytics>
    }
    
  3. Register adapter: Add to src/adapters/index.ts and update store.list() tool

  4. Add tests: Create test suite in src/adapters/__tests__/[store-name].test.ts

  5. Document: Update this README and add store-specific docs to docs/stores/

For detailed adapter development guide, see the Contributing section or open an issue.


License

MIT — See LICENSE for details


Documentation


Support


Built with ❤️ for AI-native app publishing

Reviews

No reviews yet

Sign in to write a review