Phone
Controla tu teléfono Android usando comandos ADB. Requiere herramientas ADB y un dispositivo Android con depuración USB habilitada.
Documentación
📱 Complemento MCP de Phone
🌟 Un potente complemento MCP que te permite controlar tu teléfono Android con facilidad mediante comandos ADB.
Ejemplo
-
Basado en el clima de hoy según el navegador, selecciona y reproduce automáticamente música de NetEase, sin necesidad de confirmación
-
Llama a Hao desde los contactos. Si no contesta, envía un mensaje de texto diciéndole que venga a la Sala de Reuniones 101.
⚡ Inicio Rápido
📥 Instalación
Usa Python 3.10+ y uv para ejecutar en un entorno aislado:
uvx --with "mcp<2" --with requests phone-mcp
Las dependencias adicionales mantienen la compatibilidad de las versiones existentes de PyPI con la API de MCP v1 y proporcionan requests, que el módulo de mapas importa. Están declaradas en el paquete fuente actualizado, pero se necesitan para versiones anteriores.
Para una instalación persistente con uv:
uv venv --python 3.11 .venv
uv pip install --python .venv/bin/python phone-mcp "mcp<2" requests
.venv/bin/phone-cli --help
O usa el entorno virtual integrado de Python y pip en Linux/macOS:
python3 -m venv .venv
.venv/bin/python -m pip install phone-mcp "mcp<2" requests
.venv/bin/phone-cli --help
En Windows, crea el entorno con py -3 -m venv .venv, luego usa .venv\Scripts\python.exe y .venv\Scripts\phone-cli.exe en lugar de las rutas .venv/bin/ anteriores.
En Debian/Ubuntu, un error de externally-managed-environment significa que el Python del sistema está gestionado por el sistema operativo. Usa uvx o un entorno virtual; no lo omitas con sudo pip o --break-system-packages. Si venv no está disponible, instala python3-venv con el gestor de paquetes de tu sistema primero.
🔧 Configuración
Configuración del Asistente de IA
Configúralo en la configuración de tu asistente de IA (Cursor, Trae, Claude, etc.):
{
"mcpServers": {
"phone-mcp": {
"command": "uvx",
"args": [
"--with", "mcp<2",
"--with", "requests",
"phone-mcp"
]
}
}
}
Alternativamente, si instalaste con pip:
{
"mcpServers": {
"phone-mcp": {
"command": "/absolute/path/to/.venv/bin/python",
"args": [
"-m",
"phone_mcp"
]
}
}
}
Importante: Usa la ruta absoluta a Python dentro del entorno virtual donde instalaste phone-mcp, no el Python del sistema. En Linux/macOS esto es
/absolute/path/to/.venv/bin/python; en Windows usaC:\path\to\.venv\Scripts\python.exe(escapa las barras invertidas como\\en JSON). No necesitas activar el entorno antes de lanzar tu asistente de IA.
Nota: Para Cursor, coloca esta configuración en
~/.cursor/mcp.json
Uso:
- Usa comandos directamente en la conversación de Claude, por ejemplo:
Please call contact hao
⚠️ Antes de usar, asegúrate de:
- ADB esté correctamente instalado y configurado
- La depuración USB esté habilitada en tu dispositivo Android
- El dispositivo esté conectado a la computadora mediante USB
🎯 Características Principales
- 📞 Funciones de Llamada: Hacer llamadas, finalizar llamadas, recibir llamadas entrantes
- 💬 Mensajería: Enviar y recibir SMS, obtener mensajes sin procesar
- 👥 Contactos: Acceder a los contactos del teléfono, crear nuevos contactos con interacción de interfaz automatizada
- 📸 Multimedia: Capturas de pantalla, grabación de pantalla, control multimedia
- 📱 Aplicaciones: Iniciar aplicaciones, iniciar actividades específicas con intents, listar aplicaciones instaladas, finalizar aplicaciones
- 🔧 Sistema: Información de ventanas, accesos directos de aplicaciones
- 🗺️ Mapas: Buscar POIs con números de teléfono
- 🖱️ Interacción de Interfaz: Tocar, deslizar, escribir texto, presionar teclas
- 🔍 Inspección de Interfaz: Encontrar elementos por texto, ID, clase o descripción
- 🤖 Automatización de Interfaz: Esperar elementos, desplazarse para encontrar elementos
- 🧠 Análisis de Pantalla: Información estructurada de pantalla e interacción unificada
- 🌐 Navegador Web: Abrir URLs en el navegador predeterminado del dispositivo
- 🔄 Monitoreo de Interfaz: Monitorear cambios en la interfaz y esperar que elementos específicos aparezcan o desaparezcan
🛠️ Requisitos
- Python 3.10+
- Dispositivo Android con depuración USB habilitada
- Herramientas ADB
📋 Comandos Básicos
Dispositivo y Conexión
# Check device connection
phone-cli check
# Get screen size
phone-cli screen-interact find method=clickable
Comunicación
# 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"
Multimedia y Aplicaciones
# 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
Análisis de Pantalla e Interacción
# 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
Ubicación y Mapas
# Search nearby POIs with phone numbers
phone-cli get-poi 116.480053,39.987005 --keywords restaurant --radius 1000
📚 Uso Avanzado
Inicio de Aplicaciones y Actividades
El complemento proporciona múltiples formas de iniciar aplicaciones y actividades:
-
Por Nombre de Aplicación (Dos Métodos):
# Method 1: Using app command (may not work on all devices) phone-cli app camera # Method 2: Using open_app command (alternative if app command fails) phone-cli open_app camera -
Por Nombre de Paquete (Dos Métodos):
# Method 1: Using app command (may not work on all devices) phone-cli app com.android.contacts # Method 2: Using open_app command (alternative if app command fails) phone-cli open_app com.android.contacts -
Por Paquete y Actividad (Método Más Confiable):
# This method works on all devices phone-cli launch com.android.dialer/com.android.dialer.DialtactsActivity
Nota: Si encuentras problemas con los comandos
appoopen_app, usa siempre el comandolaunchcon el nombre completo del componente (paquete/actividad) para la operación más confiable.
Creación de Contactos con Automatización de Interfaz
El complemento proporciona una forma de crear contactos mediante interacción con la interfaz:
# Create a new contact with UI automation
phone-cli create-contact "John Doe" "1234567890"
Este comando:
- Abrirá la aplicación de contactos
- Navegará a la interfaz de creación de contactos
- Completará los campos de nombre y número de teléfono
- Guardará el contacto automáticamente
Automatización Basada en Pantalla
La interfaz unificada de interacción con pantalla permite a los agentes inteligentes:
- Analizar pantallas: Obtener análisis estructurado de elementos de interfaz y texto
- Tomar decisiones: Basado en patrones de interfaz detectados y acciones disponibles
- Ejecutar interacciones: A través de un sistema de parámetros consistente
Monitoreo y Automatización de Interfaz
El complemento proporciona potentes capacidades de monitoreo de interfaz para detectar cambios:
-
Monitoreo básico de interfaz:
# Monitor any UI changes with custom interval (seconds) phone-cli monitor-ui --interval 0.5 --duration 30 -
Esperar que aparezcan elementos específicos:
# Wait for text to appear (useful for automated testing) phone-cli monitor-ui --watch-for text_appears --text "Login successful" # Wait for specific ID to appear phone-cli monitor-ui --watch-for id_appears --id "confirmation_dialog" -
Monitorear la desaparición de elementos:
# Wait for text to disappear phone-cli monitor-ui --watch-for text_disappears --text "Loading..." -
Obtener informes detallados de cambios en la interfaz:
# Get raw JSON data with all UI change information phone-cli monitor-ui --raw
Consejo: El monitoreo de interfaz es especialmente útil para scripts de automatización para esperar que las pantallas de carga se completen o confirmar que las acciones han tenido efecto en la interfaz.
📚 Documentación Detallada
Para documentación completa y detalles de configuración, visita nuestro repositorio de GitHub.
🧰 Documentación de Herramientas
API de Interfaz de Pantalla
El complemento proporciona una potente interfaz de pantalla con APIs completas para interactuar con el dispositivo. A continuación se presentan las funciones clave y sus parámetros:
interact_with_screen
async def interact_with_screen(action: str, params: Dict[str, Any] = None) -> str:
"""Execute screen interaction actions"""
- Parámetros:
action: Tipo de acción ("tap", "swipe", "key", "text", "find", "wait", "scroll")params: Diccionario con parámetros específicos para cada tipo de acción
- Devuelve: Cadena JSON con resultados de la operación
Ejemplos:
# 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"""
- Parámetros:
include_screenshot: Si se debe incluir captura de pantalla codificada en base64 en el resultadomax_elements: Número máximo de elementos de interfaz a procesar
- Devuelve: Cadena JSON con análisis detallado de pantalla
create_contact
async def create_contact(name: str, phone: str) -> str:
"""Create a new contact with the given name and phone number"""
- Parámetros:
name: El nombre completo del contactophone: El número de teléfono del contacto
- Devuelve: Cadena JSON con el resultado de la operación
- Ubicación: Esta función se encuentra en el módulo 'contacts.py' e implementa automatización de interfaz para crear contactos
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"""
- Parámetros:
package_name: El nombre del paquete de la aplicación a iniciaractivity_name: La actividad específica a iniciar (opcional)
- Devuelve: Cadena JSON con el resultado de la operación
- Ubicación: Esta función se encuentra en el módulo 'apps.py'
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"""
- Parámetros:
intent_action: La acción a realizarintent_type: El tipo MIME para el intent (opcional)extras: Datos adicionales para pasar con el intent (opcional)
- Devuelve: Cadena JSON con el resultado de la operación
- Ubicación: Esta función se encuentra en el módulo 'apps.py'
📄 Licencia
Licencia Apache, Versión 2.0
Herramienta de Creación de Contactos
Esta herramienta proporciona una forma sencilla de crear contactos en un dispositivo Android usando ADB.
Requisitos Previos
- Python 3.x
- ADB (Android Debug Bridge) instalado y configurado
- Dispositivo Android conectado y autorizado para ADB
Uso
Uso Básico
Simplemente ejecuta el script:
python create_contact.py
Esto creará un contacto con valores predeterminados:
- Nombre de cuenta: "你的账户名"
- Tipo de cuenta: "com.google"
Uso Avanzado
Puedes proporcionar un nombre y tipo de cuenta personalizados usando una cadena JSON:
python create_contact.py '{"account_name": "your_account", "account_type": "com.google"}'
Salida
El script genera un objeto JSON con:
success: booleano que indica si la operación fue exitosamessage: cualquier mensaje de salida o error del comando
Ejemplo de salida exitosa:
{"success": true, "message": ""}
Manejo de Errores
- Si ADB no está disponible o el dispositivo no está conectado, el script devolverá un error
- La entrada JSON no válida resultará en un mensaje de error
- Cualquier error de comando ADB será capturado y devuelto en el campo de mensaje
Notas
- Asegúrate de que tu dispositivo Android esté conectado y autorizado para uso de ADB
- La pantalla del dispositivo debe estar desbloqueada al ejecutar el comando
- Algunos dispositivos pueden requerir permisos adicionales para modificar contactos
Aplicaciones y Accesos Directos
# Get app shortcuts (with pagination)
phone-cli shortcuts --package "com.example.app"