Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component...
npx skills add Cap-go/capacitor-skills --skill "capacitor-mcp"
Install specific skill from multi-skill repository
# Description
Model Context Protocol (MCP) tools for Capacitor mobile development. Covers device management, app deployment, log streaming, and automated testing via MCP. Use this skill when users want to automate mobile development tasks or integrate AI agents with mobile tooling.
# SKILL.md
name: capacitor-mcp
description: Model Context Protocol (MCP) tools for Capacitor mobile development. Covers device management, app deployment, log streaming, and automated testing via MCP. Use this skill when users want to automate mobile development tasks or integrate AI agents with mobile tooling.
Capacitor MCP Tools
Guide to using Model Context Protocol (MCP) for Capacitor mobile development automation.
When to Use This Skill
- User wants to automate mobile development
- User asks about MCP integration
- User wants AI-assisted mobile testing
- User needs programmatic device control
- User wants to stream logs via MCP
What is MCP?
MCP (Model Context Protocol) is an open standard for connecting AI models to external tools and data sources. For Capacitor development, MCP enables:
- Automated app deployment
- Real-time log streaming
- Device management
- Screenshot capture
- Automated testing
Setting Up MCP for Capacitor
1. Install MCP Server
# Install the Capacitor MCP server
bun add -g @anthropic/mcp-server-capacitor
2. Configure MCP
Create ~/.config/mcp/capacitor.json:
{
"mcpServers": {
"capacitor": {
"command": "mcp-server-capacitor",
"args": ["--project", "/path/to/your/capacitor/app"]
}
}
}
3. Available MCP Tools
iOS MCP Tools
Device Management
// List available iOS devices
mcp.ios.listDevices()
// Returns: [{ name: "iPhone 15", udid: "xxx", state: "Booted" }]
// Boot a simulator
mcp.ios.bootSimulator({ name: "iPhone 15 Pro" })
// Shutdown simulator
mcp.ios.shutdownSimulator({ udid: "xxx" })
App Deployment
// Build iOS app
mcp.ios.build({
scheme: "App",
configuration: "Debug",
destination: "platform=iOS Simulator,name=iPhone 15"
})
// Install app on device
mcp.ios.install({
device: "booted",
appPath: "./ios/App/build/Debug-iphonesimulator/App.app"
})
// Launch app
mcp.ios.launch({
device: "booted",
bundleId: "com.yourapp.id"
})
Log Streaming
// Stream logs from iOS device
const logStream = mcp.ios.streamLogs({
device: "booted",
predicate: 'process == "App"',
level: "debug"
})
logStream.on('log', (entry) => {
console.log(entry.timestamp, entry.level, entry.message)
})
// Stop streaming
logStream.stop()
Screenshots
// Capture screenshot
mcp.ios.screenshot({
device: "booted",
outputPath: "./screenshot.png"
})
// Record video
mcp.ios.recordVideo({
device: "booted",
outputPath: "./recording.mp4",
duration: 30 // seconds
})
Android MCP Tools
Device Management
// List connected Android devices
mcp.android.listDevices()
// Returns: [{ name: "Pixel 8", serial: "xxx", state: "device" }]
// Start emulator
mcp.android.startEmulator({ avd: "Pixel_8_API_34" })
// Kill emulator
mcp.android.killEmulator({ serial: "emulator-5554" })
App Deployment
// Build Android app
mcp.android.build({
variant: "debug",
projectPath: "./android"
})
// Install APK
mcp.android.install({
serial: "emulator-5554",
apkPath: "./android/app/build/outputs/apk/debug/app-debug.apk"
})
// Launch app
mcp.android.launch({
serial: "emulator-5554",
package: "com.yourapp.id",
activity: ".MainActivity"
})
Log Streaming
// Stream logcat
const logStream = mcp.android.logcat({
serial: "emulator-5554",
package: "com.yourapp.id",
level: "D"
})
logStream.on('log', (entry) => {
console.log(entry.tag, entry.level, entry.message)
})
// Stop streaming
logStream.stop()
// Get recent logs
const recentLogs = mcp.android.getLogcat({
serial: "emulator-5554",
lines: 100,
filter: "Capacitor:*"
})
Screenshots
// Capture screenshot
mcp.android.screenshot({
serial: "emulator-5554",
outputPath: "./screenshot.png"
})
// Record screen
mcp.android.recordScreen({
serial: "emulator-5554",
outputPath: "./recording.mp4",
duration: 30
})
Capacitor CLI MCP Tools
Project Management
// Sync web assets to native
mcp.capacitor.sync({ platform: "ios" })
mcp.capacitor.sync({ platform: "android" })
// Run capacitor commands
mcp.capacitor.run({
platform: "ios",
target: "iPhone 15 Pro"
})
// Open native IDE
mcp.capacitor.open({ platform: "ios" })
Plugin Management
// List installed plugins
mcp.capacitor.listPlugins()
// Add plugin
mcp.capacitor.addPlugin({ name: "@capgo/capacitor-native-biometric" })
// Update plugins
mcp.capacitor.updatePlugins()
Automated Testing with MCP
UI Testing
// Define test scenario
async function testLogin() {
// Launch app
await mcp.ios.launch({ bundleId: "com.yourapp.id" })
// Wait for app ready
await mcp.ios.waitForElement({
device: "booted",
accessibility: "login-button"
})
// Capture initial state
await mcp.ios.screenshot({ outputPath: "./test-login-1.png" })
// Tap element
await mcp.ios.tap({
device: "booted",
accessibility: "login-button"
})
// Type text
await mcp.ios.typeText({
device: "booted",
accessibility: "email-input",
text: "[email protected]"
})
// Assert element exists
const element = await mcp.ios.findElement({
device: "booted",
accessibility: "welcome-message"
})
if (element) {
console.log("Login test passed!")
}
}
Performance Testing
// Monitor performance during test
async function performanceTest() {
// Start performance monitoring
const perfMonitor = mcp.ios.startPerformanceMonitoring({
device: "booted",
metrics: ["cpu", "memory", "fps"]
})
// Run test scenario
await runTestScenario()
// Stop and get results
const results = perfMonitor.stop()
console.log("Average CPU:", results.cpu.average)
console.log("Peak Memory:", results.memory.peak)
console.log("Average FPS:", results.fps.average)
}
MCP Server Implementation
Creating Custom MCP Tools
// mcp-server.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js"
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
const server = new Server({
name: "capacitor-mcp",
version: "1.0.0"
}, {
capabilities: {
tools: {}
}
})
// Register iOS log streaming tool
server.setRequestHandler("tools/call", async (request) => {
if (request.params.name === "ios_stream_logs") {
const { device, predicate } = request.params.arguments
const process = spawn("xcrun", [
"simctl", "spawn", device, "log", "stream",
"--predicate", predicate
])
// Stream logs back to client
process.stdout.on("data", (data) => {
server.sendNotification("log", { data: data.toString() })
})
return { content: [{ type: "text", text: "Log streaming started" }] }
}
})
// Start server
const transport = new StdioServerTransport()
await server.connect(transport)
Integration Examples
Claude Desktop Integration
Add to ~/.config/claude/claude_desktop_config.json:
{
"mcpServers": {
"capacitor": {
"command": "node",
"args": ["/path/to/capacitor-mcp-server/index.js"],
"env": {
"CAPACITOR_PROJECT": "/path/to/your/app"
}
}
}
}
VS Code Integration
Install MCP extension and configure:
// .vscode/settings.json
{
"mcp.servers": {
"capacitor": {
"command": "mcp-server-capacitor",
"args": ["--project", "${workspaceFolder}"]
}
}
}
Available MCP Servers for Mobile
| Server | Description |
|---|---|
mcp-server-capacitor |
Capacitor project management |
mcp-server-ios |
iOS device/simulator control |
mcp-server-android |
Android device/emulator control |
mcp-server-appium |
Mobile UI testing |
Resources
- MCP Specification: https://modelcontextprotocol.io
- MCP SDK: https://github.com/modelcontextprotocol/sdk
- Anthropic MCP Servers: https://github.com/anthropics/mcp-servers
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.