App Publisher MCP
An MCP (Model Context Protocol) server built for vibe coders - generate app icons with AI, auto-resize for iOS/Android, and publish to app stores, all from your AI coding assistant.
Stop wasting time on Figma for app icons or manually resizing images for every screen density. Just describe what you want, and let AI handle the rest.
What It Does
| Tool | Description |
|---|---|
generate_icon | Generate app icons using Google Gemini AI |
resize_icons | Auto-resize to all iOS & Android required sizes |
generate_splash | Generate splash screen designs with AI |
generate_screenshot | Generate app store screenshot mockups |
setup_fastlane | Generate fastlane config for store publishing |
publish_ios | Publish to App Store via fastlane |
publish_android | Publish to Google Play via fastlane |
configure_api_key | Set your Gemini API key |
configure_model | Choose AI model (speed vs quality) |
get_status | Check current configuration |
Quick Start
1. Install in Claude Code
claude mcp add app-publisher -- npx @seungmanchoi/app-publisher-mcp
Or with environment variables:
claude mcp add app-publisher \
-e GEMINI_API_KEY=your_api_key_here \
-e GEMINI_MODEL=gemini-2.5-flash-image \
-- npx @seungmanchoi/app-publisher-mcp
2. Manual Configuration
Add to your Claude Code MCP config (~/.claude.json):
{
"mcpServers": {
"app-publisher": {
"command": "npx",
"args": ["@seungmanchoi/app-publisher-mcp"],
"env": {
"GEMINI_API_KEY": "your_api_key_here",
"GEMINI_MODEL": "gemini-2.5-flash-image"
}
}
}
}
3. Restart Claude Code
After adding the MCP server, restart Claude Code to connect.
Getting Your API Keys
Google Gemini API Key (Required)
The Gemini API key is needed for AI image generation (icons, splash screens, screenshots).
Step-by-Step
- Go to Google AI Studio
- Sign in with your Google account
- Click "Create API key"
- Select a Google Cloud project (or create a new one)
- Copy the generated API key (starts with
AIza...)
Set the API Key
Option A: Environment variable (recommended)
claude mcp add app-publisher \
-e GEMINI_API_KEY=AIzaSy... \
-- npx @seungmanchoi/app-publisher-mcp
Option B: Runtime configuration
Once the MCP is connected, use the configure_api_key tool:
"Set my Gemini API key to AIzaSy..."
Option C: Config file
The key is stored in ~/.app-publisher/config.json and persists across sessions.
Pricing
| Model | Price per Image | Speed | Quality |
|---|---|---|---|
gemini-2.5-flash-image | ~$0.039 | 3-5 sec | Standard |
gemini-3-pro-image-preview | ~$0.035 (4K: ~$0.24) | 10-15 sec | Best |
Google provides a free tier with generous limits for development. Check Google AI pricing for current rates.
Apple App Store Connect (For iOS Publishing)
Required only if you want to publish to the App Store.
Step-by-Step
- Go to App Store Connect
- Sign in with your Apple Developer account ($99/year membership required)
- Go to Users and Access > Integrations > App Store Connect API
- Click "Generate API Key"
- Give it a name (e.g., "app-publisher-mcp")
- Select "Admin" role
- Download the
.p8private key file (you can only download it once!) - Note down:
- Key ID (e.g.,
ABC1234567) - Issuer ID (shown at the top of the page)
- Key ID (e.g.,
Where to Get Apple Developer Account
- Go to Apple Developer Program
- Click "Enroll"
- Sign in with your Apple ID
- Pay $99/year membership fee
- Wait for approval (usually 24-48 hours)
Google Play Console (For Android Publishing)
Required only if you want to publish to Google Play.
Step-by-Step
- Go to Google Play Console
- Sign in with your Google account (one-time $25 registration fee)
- Go to Setup > API access
- Click "Link" to connect to a Google Cloud project
- Under Service accounts, click "Create new service account"
- In Google Cloud Console:
- Create a new service account
- Name it (e.g., "app-publisher-mcp")
- Grant role: Service Account User
- Create a JSON key for the service account:
- Go to Keys tab > Add Key > Create new key > JSON
- Download the JSON key file
- Back in Google Play Console:
- Click "Grant access" next to the service account
- Grant "Release manager" permission
Where to Get Google Play Developer Account
- Go to Google Play Console signup
- Sign in with your Google account
- Pay $25 one-time registration fee
- Complete developer profile
- Verify identity (may take a few days)
Fastlane (For Store Publishing)
Required only if you want to use the publish_ios or publish_android tools.
# macOS
brew install fastlane
# or via Ruby
gem install fastlane
Usage Examples
Generate an App Icon
"Generate an app icon for a meditation app - a lotus flower with calm blue and purple gradient"
The AI will create a professional app icon and save it to ~/app-publisher-assets/.
Resize for All Platforms
"Resize the icon at ~/app-publisher-assets/icon_xxx.png for both iOS and Android"
This generates:
- iOS: 15 sizes (20px ~ 1024px) + Xcode
Contents.json - Android: 6 sizes (mdpi ~ xxxhdpi) + Play Store 512x512
Generate Store Screenshots
"Generate a screenshot mockup for a fitness app showing a workout dashboard with progress charts"
Set Up Fastlane
"Set up fastlane for my project at ~/myapp with bundle ID com.example.myapp"
This creates:
fastlane/Fastfile- Build and deploy lanesfastlane/Appfile- App configurationfastlane/metadata/- Store listing metadata structure
Publish to Stores
"Publish my iOS app to the App Store. Project is at ~/myapp"
"Publish my Android app to the internal testing track"
Generated Icon Sizes
iOS (15 icons + Contents.json)
| Usage | Sizes |
|---|---|
| Notification | 20@2x (40px), 20@3x (60px) |
| Settings | 29@2x (58px), 29@3x (87px) |
| Spotlight | 40@2x (80px), 40@3x (120px) |
| App | 60@2x (120px), 60@3x (180px) |
| iPad | 20, 29, 40, 76, 76@2x (152px), 83.5@2x (167px) |
| App Store | 1024x1024 |
The generated Contents.json is fully compatible with Xcode - just drag the AppIcon.appiconset folder into your asset catalog.
Android (6 icons)
| Density | Size | Folder |
|---|---|---|
| mdpi | 48x48 | mipmap-mdpi |
| hdpi | 72x72 | mipmap-hdpi |
| xhdpi | 96x96 | mipmap-xhdpi |
| xxhdpi | 144x144 | mipmap-xxhdpi |
| xxxhdpi | 192x192 | mipmap-xxxhdpi |
| Play Store | 512x512 | - |
AI Model Selection
| Model | Best For | Speed | Quality |
|---|---|---|---|
gemini-2.5-flash-image | Rapid prototyping, iteration | Fast (3-5s) | Good |
gemini-3-pro-image-preview | Final assets, 4K output | Slower (10-15s) | Best |
Set your preferred model:
"Set the model to gemini-3-pro-image-preview"
Or use environment variable:
GEMINI_MODEL=gemini-3-pro-image-preview
Configuration Priority
Settings are resolved in this order (highest priority first):
- Per-request parameter -
modelparameter in tool calls - Environment variable -
GEMINI_API_KEY,GEMINI_MODEL - Config file -
~/.app-publisher/config.json - Default -
gemini-2.5-flash-image
Vibe Coding Workflow
This MCP is designed for the vibe coding workflow - build your app with AI, then ship it:
1. Build your app with Claude Code
2. "Generate an icon for my app" → AI creates the icon
3. "Resize it for iOS and Android" → All sizes generated
4. "Set up fastlane and publish" → App goes to stores
No design skills needed. No Figma. No manual resizing. Just vibe and ship.
Troubleshooting
"Gemini API key not configured"
Set your API key using one of the methods described in Getting Your API Keys.
"This model only supports text output"
The model you're using doesn't support image generation. Switch to gemini-2.5-flash-image or gemini-3-pro-image-preview.
"fastlane is not installed"
Install fastlane: brew install fastlane (macOS) or gem install fastlane (Ruby).
Icon looks wrong at small sizes
Try a simpler icon design. Complex designs don't work well at 20x20 or 29x29 pixels. Use bold shapes and minimal detail.
MCP not connecting
- Restart Claude Code after adding the MCP server
- Check the server config in
~/.claude.json - Verify Node.js is installed:
node --version
Development
git clone https://github.com/seungmanchoi/app-publisher-mcp.git
cd app-publisher-mcp
npm install
npm run build
npm run lint
License
MIT