🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@readmigo/shipkit-mcp

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@readmigo/shipkit-mcp

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

latest
Source
npmnpm
Version
0.1.1
Version published
Maintainers
1
Created
Source

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 @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": ["@readmigo/shipkit-mcp"],
      "env": {
        "SHIPKIT_API_KEY": "sk-your-api-key-here"
      }
    }
  }
}

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

{
  "mcpServers": {
    "shipkit": {
      "command": "npx",
      "args": ["@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:

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

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

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

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

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

  • 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:

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

  • 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>
    }
    
  • Register adapter: Add to src/adapters/index.ts and update store.list() tool

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

  • 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

Keywords

mcp

FAQs

Package last updated on 20 Feb 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts