Android Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Android Mcp Server (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.
A powerful MCP (Model Context Protocol) server that provides comprehensive Android device automation capabilities through ADB (Android Debug Bridge). This server enables AI agents and automation tools to interact with Android devices for testing, automation, and device control tasks.
https://github.com/user-attachments/assets/68f3df22-fcf1-49af-8715-fcfa05496c90
# macOS (via Homebrew)
brew install android-platform-tools
# Ubuntu/Debian
sudo apt install android-tools-adb
# Windows
# Download from: https://developer.android.com/tools/releases/platform-tools adb version
# Should output: Android Debug Bridge version x.x.xgit clone <repository-url>
cd android-mcp-server
uv syncgit clone <repository-url>
cd android-mcp-server
pip install -e .# Check if devices are detected
adb devices
# Test server startup
python -m src.serverimport asyncio
from mcp import ClientSession
async def demo_automation():
# Connect to MCP server
session = ClientSession()
# Get connected devices
devices = await session.call_tool("get_devices")
print(f"Found {devices['count']} devices")
# Take a screenshot
screenshot = await session.call_tool("take_screenshot", {
"filename": "demo_screenshot.png"
})
# Find and tap a button
elements = await session.call_tool("find_elements", {
"text": "Settings",
"clickable_only": True
})
if elements["count"] > 0:
result = await session.call_tool("tap_element", {
"text": "Settings"
})
print("Tapped Settings button")
# Run the demo
asyncio.run(demo_automation())# Start the MCP server
python -m src.server
# Or using the installed script
android-mcp-server # macOS
~/Library/Application Support/Claude/claude_desktop_config.json
# Windows
%APPDATA%/Claude/claude_desktop_config.json {
"mcpServers": {
"android-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/path/to/android-mcp-server",
"run",
"android-mcp-server"
]
}
}
}#### Using Python directly
{
"mcpServers": {
"android-mcp-server": {
"command": "python",
"args": ["-m", "src.server"],
"cwd": "/path/to/android-mcp-server"
}
}
}#### Using pip installed package
pip install -e /path/to/android-mcp-server{
"mcpServers": {
"android-mcp-server": {
"command": "android-mcp-server"
}
}
}"Take a screenshot of the current Android device screen and then find all buttons containing the word 'Settings'"
"Connect to the Android device, open the Settings app by tapping on it, then take another screenshot"
"Swipe down from the top of the screen to open the notification panel, then capture what's shown""Launch the Calculator app, perform the calculation 25 + 37, and verify the result is 62"
"Test the login flow: find the username field, enter 'testuser', find the password field, enter 'password123', then tap the login button"
"Navigate through the app's main menu by tapping each menu item and taking screenshots of each page""Extract the complete UI layout of the current screen and identify all clickable elements"
"Find all text input fields on this screen and tell me which ones are currently focused"
"Look for any accessibility issues by checking if buttons have proper content descriptions""Start monitoring logs for the 'MyApp' package and show me any errors that occur in the next 2 minutes"
"Get the last 50 lines of system logs with priority level Warning or higher"
"Monitor network-related logs while I perform the next action, then show me what was logged""Record a 30-second video of the app launch sequence, then analyze the UI responsiveness"
"Take screenshots before and after each major user action to document the user flow"
"Monitor memory usage logs while navigating through different screens of the app""List all connected Android devices and select the one with the largest screen resolution"
"Switch to device ID 'emulator-5554' and repeat the previous test sequence"
"Compare the same UI element across different devices by taking screenshots on each"find_elements before tap_element to verify elements existexact_match: false for partial text matching when element text might varymax_lines to 20-200 to avoid overwhelming the AI context windowtag_filter to focus on relevant app componentspriority level (I/W/E) based on the type of information needed./assets/ for easy accessget_device_info before starting automationget_ui_layout when element finding fails to understand the current screen structureThe server is built with a modular architecture:
Contributions are welcome! Please feel free to submit issues and pull requests.
git clone <repository-url>
cd android-mcp-server
uv sync --dev# Install test dependencies
pip install -e ".[test,dev]"
# Run full test suite with coverage
python -m pytest tests/ --cov=src --cov-fail-under=80
# Run specific test categories
python -m pytest tests/ -m "unit" # Unit tests only
python -m pytest tests/ -m "integration" # Integration tests
python -m pytest tests/ -m "not slow" # Skip slow tests
# Run code quality checks
make code-quality # or run individual tools:
flake8 src
pydocstyle src --convention=googleThis project is licensed under the MIT License - see the LICENSE file for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.