Labsco
hao-cyber logo

Phone

β˜… 238

from hao-cyber

Control your Android phone using ADB commands. Requires ADB tools and an Android device with USB debugging enabled.

πŸ”₯πŸ”₯πŸ”₯βœ“ VerifiedFreeNeeds API keys

πŸ“± Phone MCP Plugin

Downloads

🌟 A powerful MCP plugin that lets you control your Android phone with ease through ADB commands.

Example

  • Based on today's weather by browser, automatically select and play netease music, no confirmation needed play_mucic_x2

  • Call Hao from the contacts. If he doesn't answer, send a text message telling him to come to Meeting Room 101. call_sms_x2

δΈ­ζ–‡ζ–‡ζ‘£

🎯 Key Features

  • πŸ“ž Call Functions: Make calls, end calls, receive incoming calls
  • πŸ’¬ Messaging: Send and receive SMS, get raw messages
  • πŸ‘₯ Contacts: Access phone contacts, create new contacts with automated UI interaction
  • πŸ“Έ Media: Screenshots, screen recording, media control
  • πŸ“± Apps: Launch applications, launch specific activities with intents, list installed apps, terminate apps
  • πŸ”§ System: Window info, app shortcuts
  • πŸ—ΊοΈ Maps: Search POIs with phone numbers
  • πŸ–±οΈ UI Interaction: Tap, swipe, type text, press keys
  • πŸ” UI Inspection: Find elements by text, ID, class or description
  • πŸ€– UI Automation: Wait for elements, scroll to find elements
  • 🧠 Screen Analysis: Structured screen information and unified interaction
  • 🌐 Web Browser: Open URLs in device's default browser
  • πŸ”„ UI Monitoring: Monitor UI changes and wait for specific elements to appear or disappear

πŸ“‹ Basic Commands

Device & Connection

# Check device connection
phone-cli check

# Get screen size
phone-cli screen-interact find method=clickable

Communication

# Make a call
phone-cli call 1234567890

# End current call
phone-cli hangup

# Send SMS
phone-cli send-sms 1234567890 "Hello"

# Get received messages (with pagination)
phone-cli messages --limit 10

# Get sent messages (with pagination)
phone-cli sent-messages --limit 10

# Get contacts (with pagination)
phone-cli contacts --limit 20

# Create a new contact with UI automation
phone-cli create-contact "John Doe" "1234567890"

Media & Apps

# Take screenshot
phone-cli screenshot

# Record screen
phone-cli record --duration 30

# Launch app (may not work on all devices)
phone-cli app camera

# Alternative app launch method using open_app (if app command doesn't work)
phone-cli open_app camera

# Close app
phone-cli close-app com.android.camera

# List installed apps (basic info, faster)
phone-cli list-apps

# List apps with pagination
phone-cli list-apps --page 1 --page-size 10

# List apps with detailed info (slower)
phone-cli list-apps --detailed

# Launch specific activity (reliable method for all devices)
phone-cli launch com.android.settings/.Settings

# Launch app by package name (may not work on all devices)
phone-cli app com.android.contacts

# Alternative launch by package name (if app command doesn't work)
phone-cli open_app com.android.contacts

# Launch app by package and activity (most reliable method)
phone-cli launch com.android.dialer/com.android.dialer.DialtactsActivity

# Open URL in default browser
phone-cli open-url google.com

Screen Analysis & Interaction

# Analyze current screen with structured information
phone-cli analyze-screen

# Unified interaction interface
phone-cli screen-interact <action> [parameters]

# Tap at coordinates
phone-cli screen-interact tap x=500 y=800

# Tap element by text
phone-cli screen-interact tap element_text="Login"

# Tap element by content description
phone-cli screen-interact tap element_content_desc="Calendar"

# Swipe gesture (scroll down)
phone-cli screen-interact swipe x1=500 y1=1000 x2=500 y2=200 duration=300

# Press key
phone-cli screen-interact key keycode=back

# Input text
phone-cli screen-interact text content="Hello World"

# Find elements
phone-cli screen-interact find method=text value="Login" partial=true

# Wait for element
phone-cli screen-interact wait method=text value="Success" timeout=10

# Scroll to find element
phone-cli screen-interact scroll method=text value="Settings" direction=down max_swipes=5

# Monitor UI for changes
phone-cli monitor-ui --interval 0.5 --duration 30

# Monitor UI until specific text appears
phone-cli monitor-ui --watch-for text_appears --text "Welcome"

# Monitor UI until specific element ID appears
phone-cli monitor-ui --watch-for id_appears --id "login_button"

# Monitor UI until specific element class appears
phone-cli monitor-ui --watch-for class_appears --class-name "android.widget.Button"

# Monitor UI changes with output as raw JSON
phone-cli monitor-ui --raw

Location & Maps

# Search nearby POIs with phone numbers
phone-cli get-poi 116.480053,39.987005 --keywords restaurant --radius 1000

πŸ“š Detailed Documentation

For complete documentation and configuration details, visit our GitHub repository.

🧰 Tool Documentation

Screen Interface API

The plugin provides a powerful screen interface with comprehensive APIs for interacting with the device. Below are the key functions and their parameters:

interact_with_screen

async def interact_with_screen(action: str, params: Dict[str, Any] = None) -> str:
    """Execute screen interaction actions"""
  • Parameters:
    • action: Type of action ("tap", "swipe", "key", "text", "find", "wait", "scroll")
    • params: Dictionary with parameters specific to each action type
  • Returns: JSON string with operation results

Examples:

# Tap by coordinates
result = await interact_with_screen("tap", {"x": 100, "y": 200})

# Tap by element text
result = await interact_with_screen("tap", {"element_text": "Login"})

# Swipe down
result = await interact_with_screen("swipe", {"x1": 500, "y1": 300, "x2": 500, "y2": 1200, "duration": 300})

# Input text
result = await interact_with_screen("text", {"content": "Hello world"})

# Press back key
result = await interact_with_screen("key", {"keycode": "back"})

# Find element by text
result = await interact_with_screen("find", {"method": "text", "value": "Settings", "partial": True})

# Wait for element to appear
result = await interact_with_screen("wait", {"method": "text", "value": "Success", "timeout": 10, "interval": 0.5})

# Scroll to find element
result = await interact_with_screen("scroll", {"method": "text", "value": "Privacy Policy", "direction": "down", "max_swipes": 8})

analyze_screen

async def analyze_screen(include_screenshot: bool = False, max_elements: int = 50) -> str:
    """Analyze the current screen and provide structured information about UI elements"""
  • Parameters:
    • include_screenshot: Whether to include base64-encoded screenshot in result
    • max_elements: Maximum number of UI elements to process
  • Returns: JSON string with detailed screen analysis

create_contact

async def create_contact(name: str, phone: str) -> str:
    """Create a new contact with the given name and phone number"""
  • Parameters:
    • name: The contact's full name
    • phone: The phone number for the contact
  • Returns: JSON string with operation result
  • Location: This function is found in the 'contacts.py' module and implements UI automation to create contacts

launch_app_activity

async def launch_app_activity(package_name: str, activity_name: Optional[str] = None) -> str:
    """Launch an app using package name and optionally an activity name"""
  • Parameters:
    • package_name: The package name of the app to launch
    • activity_name: The specific activity to launch (optional)
  • Returns: JSON string with operation result
  • Location: This function is found in the 'apps.py' module

launch_intent

async def launch_intent(intent_action: str, intent_type: Optional[str] = None, extras: Optional[Dict[str, str]] = None) -> str:
    """Launch an activity using Android intent system"""
  • Parameters:
    • intent_action: The action to perform
    • intent_type: The MIME type for the intent (optional)
    • extras: Extra data to pass with the intent (optional)
  • Returns: JSON string with operation result
  • Location: This function is found in the 'apps.py' module

πŸ“„ License

Apache License, Version 2.0

Contact Creation Tool

This tool provides a simple way to create contacts on an Android device using ADB.

Error Handling

  • If ADB is not available or device is not connected, the script will return an error
  • Invalid JSON input will result in an error message
  • Any ADB command errors will be captured and returned in the message field

Notes

  • Make sure your Android device is connected and authorized for ADB use
  • The device screen should be unlocked when running the command
  • Some devices might require additional permissions to modify contacts

Apps & Shortcuts

# Get app shortcuts (with pagination)
phone-cli shortcuts --package "com.example.app"