io.github.readmigo/shipkit
Unified app publishing MCP Server for Google Play, App Store, and 10+ Chinese stores
Ask AI about io.github.readmigo/shipkit
Powered by Claude ยท Grounded in docs
I know everything about io.github.readmigo/shipkit. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
ShipKit โ Unified App Publishing MCP Server
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
| Store | Platform | Region | Authentication | Upload Format | Status |
|---|---|---|---|---|---|
| Google Play | Android | Global | OAuth 2.0 Service Account | APK/AAB | โ Available |
| Apple App Store | iOS | Global | JWT (ES256) | IPA | โ Available |
| Huawei AppGallery | Android | Global/China | OAuth 2.0 | APK/AAB | โ Available |
| Xiaomi Store | Android | China | RSA Signature | APK/AAB | โ Available |
| OPPO Store | Android | China | OAuth Token | APK/AAB | โ Available |
| Honor App Market | Android | China | OAuth 2.0 | APK/AAB | โ Available |
| Pgyer (่ฒๅ ฌ่ฑ) | Android/iOS | China | API Key | APK/IPA | โ Available |
| vivo Store | Android | China | API Key + RPA | APK/AAB | ๐ง In Development |
| Tencent MyApp (ๅบ็จๅฎ) | Android | China | AppKey + HMAC-MD5 | APK | ๐ง In Development |
| Samsung Galaxy Store | Android | Global | JWT Service Account | APK/AAB | ๐ Planned |
| HarmonyOS (้ธฟ่) | HarmonyOS | China | OAuth 2.0 (via Huawei) | HAP | ๐ Planned |
| Meizu Store | Android | China | Custom | APK/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:
| Tool | Category | Description | Parameters | Status |
|---|---|---|---|---|
store.list | Discovery | List all configured stores and their connection status | app_id? | โ Available |
store.connect | Configuration | Configure and authenticate with an app store | store, credentials, app_id? | โ Available |
app.upload | Publishing | Upload APK/AAB/IPA/HAP build artifacts to stores | app_id, version, builds[], stores? | โ Available |
app.listing | Metadata | View and update store listings (title, description, screenshots, etc.) | app_id, action (get/update), store, locale?, content? | โ Available |
app.release | Publishing | Manage release tracks, phases, and rollout percentages | app_id, version, stores, action (create/update), rollout_percentage? | โ Available |
app.status | Monitoring | Query review status, approval state, and analytics across platforms | app_id, version?, stores? | โ Available |
app.publish | Publishing | Submit app for review or publish immediately to specified stores | app_id, version, stores[], release_track?, auto_publish? | โ Available |
compliance.check | Validation | Pre-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
StoreAdapterinterface with methods likeauthenticate(),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_keyto 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
StoreAdapterinterface: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.tsand updatestore.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
- Full Architecture & Design: docs.readmigo.app/03-architecture/shipkit-design
- Store Adapter Architecture: docs.readmigo.app/03-architecture/store-adapter-architecture
- MCP Protocol Specification: docs.readmigo.app/03-architecture/mcp-server-protocol-spec
- API Design & AI Agent Integration: docs.readmigo.app/03-architecture/ai-agent-api-design
Support
- Issues & Bug Reports: GitHub Issues
- Discussions & Questions: GitHub Discussions
- Documentation Site: docs.readmigo.app/03-architecture/shipkit-design
Built with โค๏ธ for AI-native app publishing
