Ai Driven Mobile Automation — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Ai Driven Mobile Automation (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Professional mobile test automation framework with AI-powered test generation, Page Object Model support, and AWS Bedrock integration.
Supported Platforms: iOS | Android Python Version: 3.8+ License: MIT
Before you start, ensure you have:
python --version node --version
npm --version📖 Detailed Setup Guide: For complete step-by-step instructions including: - System requirements verification - Virtual environment setup - Appium server configuration - AWS Bedrock integration (AI-powered tests) - Device configuration (iOS/Android) - Troubleshooting guide
>
→ See [SETUP.md](https://github.com/youcanautomate-yca/ai-driven-mobile-automation/blob/main/SETUP.md) (Recommended for first-time users)
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install appium-mcp
pip install appium-mcp📖 Detailed PyPI Installation Guide: See PYPI_INSTALL.md for complete step-by-step instructions
git clone https://github.com/youcanautomate-yca/ai-driven-mobile-automation.git
cd ai-driven-mobile-automation
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -e .For complete Appium setup guide including prerequisites → See [INSTALLATION.md](https://github.com/youcanautomate-yca/ai-driven-mobile-automation/blob/main/INSTALLATION.md)
Appium server must be running for appium-mcp to work.
# Install globally (one-time)
npm install -g appium
# Install drivers
appium driver install xcuitest # iOS
appium driver install uiautomator2 # Android# Terminal 1: Start Appium (runs on port 4723)
appium
# You should see:
# [Appium] Welcome to Appium v2.x.x
# ...
# [Appium] Server listening on http://127.0.0.1:4723Once installed, you have access to these commands:
appium-mcp-chatbotPerfect for beginners - guides you through test generation step-by-step.
appium-mcp-run-yaml my_workflow.yamlExecute predefined test workflows from YAML files.
appium-mcp-generate-tests workflow.jsonAuto-generate test scripts from recorded interactions.
appium-mcp-serverStart the Model Context Protocol server for integration.
Create a file login_test.yaml:
version: "1.0"
description: "Login test"
platform: "ios"
device_name: "iPhone 14"
bundle_id: "com.example.app"
app_path: "/path/to/app.app"
workflow:
LoginScreen:
- "Take a screenshot to see the app"
- "Tap on the email field"
- "Type [email protected]"
- "Tap on the password field"
- "Type MyPassword123"
- "Tap the Sign In button"
- "Wait 2 seconds for login to complete"
HomeScreen:
- "Take a screenshot to verify login success"
- "Verify that Welcome message is visible"Run it:
appium-mcp-run-yaml login_test.yamlCreate purchase_flow.yaml:
version: "1.0"
description: "Complete purchase flow"
platform: "android"
device_name: "emulator"
app_package: "com.myapp"
app_activity: ".MainActivity"
workflow:
HomePage:
- "Take screenshot"
- "Scroll down to see products"
- "Tap on first product"
ProductPage:
- "Take screenshot"
- "Tap on size selector"
- "Choose size M"
- "Tap Add to Cart button"
- "Verify item added message"
CartPage:
- "Tap on shopping cart icon"
- "Take screenshot"
- "Tap Checkout button"
CheckoutPage:
- "Enter shipping address"
- "Enter payment details"
- "Tap Place Order"
- "Verify order confirmation"Run it:
appium-mcp-run-yaml purchase_flow.yamlversion: "1.0" # YAML version (required)
description: "Test description" # What this test does
platform: "ios" or "android" # Target platform (required)
device_name: "iPhone 14" # Device name/simulator
bundle_id: "com.example.app" # iOS bundle ID
app_package: "com.example.app" # Android package (Android only)
app_activity: ".MainActivity" # Android activity (Android only)
app_path: "/path/to/app.app" # Path to app binary
workflow: # Test steps
ScreenName: # Group steps by screen
- "Natural language prompt" # AI executes this
- "Another step"
- "..."
NextScreen:
- "Step 1"
- "Step 2"Example: Write one line:
"Tap on the email field and type [email protected]"A generates Python code:
class LoginPage:
def enter_email(self, email):
self.find_element("email_field").send_keys(email)Save as test_app.yaml:
version: "1.0"
description: "Simple app test"
platform: "ios"
device_name: "iPhone 14"
bundle_id: "com.testapp"
app_path: "./app/TestApp.app"
workflow:
Start:
- "Take a screenshot"
- "Tap the start button"
- "Wait 1 second"
- "Take final screenshot"appiumcd my_project
source venv/bin/activate
appium-mcp-run-yaml test_app.yamlgenerated_tests/test_app.pypage_objects/StartPage.pyscreenshots/Use appium-mcp as a Python library:
from appium_mcp import MobileAutomationFramework
from appium.options.ios import XCUITestOptions
# Initialize framework
framework = MobileAutomationFramework()
# Create options
options = XCUITestOptions()
options.device_name = "iPhone 14"
options.bundle_id = "com.example.app"
# Create session
driver = framework.create_session(options)
# Use driver like standard Appium
driver.find_element("xpath", "//XCUIElementTypeButton[@name='Login']").click()
# Generate test code from session
test_code = framework.generate_test("my_test")
print(test_code)
# Cleanup
driver.quit()# Make sure Appium is running
appium
# Check if running on correct port
curl http://localhost:4723/status# Restart Appium
appium --port 4723
# Verify config
appium-mcp-run-yaml --help"Take a screenshot"# Reinstall in clean environment
python -m venv fresh_env
source fresh_env/bin/activate
pip install appium-mcpMIT License - see LICENSE file for details
Contributions welcome! Please:
The server is organized into modular components:
ai-driven-mobile-automation/
├── server.py # Main MCP server and tool registration
├── session_store.py # Global driver and session management
├── command.py # Core Appium command execution
├── logger.py # Logging utilities
├── tools_session.py # Session management tools
├── tools_interactions.py # Element interaction tools
├── tools_navigations.py # Navigation tools
├── tools_app_management.py # App management tools
├── tools_context.py # Context switching tools
├── tools_ios.py # iOS-specific tools
├── tools_test_generation.py # Test generation tools
├── tools_documentation.py # Documentation/help tools
├── requirements.txt # Python dependencies
└── README.md # This fileselect_platform - Select iOS or Android platformselect_device - Select target devicecreate_session - Create new Appium sessiondelete_session - Delete active sessionopen_notifications - Open notifications panelappium_click - Click on elementappium_find_element - Find element by strategy/selectorappium_double_tap - Double tap elementappium_long_press - Long press elementappium_drag_and_drop - Drag element to targetappium_press_key - Press keyappium_set_value - Set text valueappium_get_text - Get element textappium_get_active_element - Get focused elementappium_screenshot - Take screenshotappium_element_screenshot - Screenshot of elementappium_get_orientation - Get device orientationappium_set_orientation - Set device orientationappium_handle_alert - Handle alert dialogsappium_scroll - Scroll up/down/left/rightappium_scroll_to_element - Scroll until element visibleappium_swipe - Perform swipe gestureappium_activate_app - Activate installed appappium_install_app - Install appappium_uninstall_app - Uninstall appappium_terminate_app - Terminate running appappium_list_apps - List installed appsappium_is_app_installed - Check if app installedappium_deep_link - Open deep linkappium_get_contexts - Get available contextsappium_switch_context - Switch between contextsappium_boot_simulator - Boot iOS simulatorappium_setup_wda - Setup WebDriverAgentappium_install_wda - Install WebDriverAgentappium_generate_locators - Generate element locatorsappium_generate_tests - Generate test scriptsappium_answer_appium - Answer Appium questionsSimple, clean YAML workflows. Define screen names, write prompts, let AI handle everything else!
Create workflow.yml:
version: "1.0"
description: "Login and purchase"
platform: "ios"
device_name: "iPhone 16"
bundle_id: "com.example.ecommerce"
# Screen-based workflow - group prompts by screen
workflow:
LoginScreen:
- "Enter email [email protected]"
- "Enter password mypassword"
- "Click login button"
HomeScreen:
- "Click first product"
- "View product details"
CartScreen:
- "Add item to cart"
- "Click checkout"
CheckoutScreen:
- "Enter shipping address"
- "Enter payment details"
- "Complete purchase"
OrderConfirmationScreen:
- "Take screenshot"appium-mcp-run-yaml workflow.ymlFor each prompt:
From this YAML:
LoginScreen:
- "Enter email [email protected]"AI generates:
class LoginScreen:
def login(self, email, password):
self.email_field.send_keys(email)
self.password_field.send_keys(password)
self.login_button.click()import asyncio
from mcp.client import StdioClient
async def main():
# Create client
client = StdioClient("python", ["server.py"])
# Call a tool
result = await client.call_tool(
"select_platform",
{"platform": "ios"}
)
print(result)
asyncio.run(main())Each tool includes:
name: Unique tool identifierdescription: Human-readable descriptioninputSchema: JSON schema for parametersexecute: Async function that implements the toolAll tools return a status JSON response:
{
"status": "success|error|warning",
"message": "Human-readable message",
...tool-specific fields
}Logs are written to stderr with format:
[TOOL START] tool_name: arguments
[TOOL END] tool_name
[TOOL ERROR] tool_name: error messageTo add new tools:
tools_*.py fileserver.py in the register_tools() functionSame as parent appium-mcp project.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.