Server data from the Official MCP Registry
Unified app publishing MCP Server for Google Play, App Store, and 10+ Chinese stores
Unified app publishing MCP Server for Google Play, App Store, and 10+ Chinese stores
Valid MCP server (1 strong, 1 medium validity signals). 15 known CVEs in dependencies (0 critical, 7 high severity) Package registry verified. Imported from the Official MCP Registry.
3 files analyzed · 16 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Unverified package source
We couldn't verify that the installable package matches the reviewed source code. Proceed with caution.
Set these up before or after installing:
Environment variable: SHIPKIT_API_KEY
Environment variable: SHIPKIT_DB_PATH
Add this to your MCP configuration file:
{
"mcpServers": {
"mcp-server": {
"args": [
"-y",
"@readmigo/shipkit-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
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.
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?
| 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 |
claude mcp add shipkit -- npx -y @readmigo/shipkit-mcp
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"
}
}
}
}
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"
}
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, ...)
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.
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.
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 |
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.
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.
MIT — See LICENSE for details
Built with ❤️ for AI-native app publishing
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption
by mcp-marketplace · Developer Tools
Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
by mcp-marketplace · Finance
Free stock data and market news for any MCP-compatible AI assistant.