Rouse Context
Convierte tu teléfono Android en un servidor MCP bajo demanda. 22 herramientas para datos de salud, notificaciones, uso de aplicaciones y acciones del dispositivo. Cifrado de extremo a extremo, sin sincronización en la nube.
Documentación
Rouse Context
Tu teléfono tiene contexto que la IA no tiene — tus datos de salud, tus notificaciones, tu uso de aplicaciones. Rouse Context hace que ese contexto esté disponible para los asistentes de IA bajo demanda, sin sincronizar nunca tus datos a la nube.
Es una aplicación Android que convierte tu teléfono en un servidor MCP. Clientes de IA como Claude se conectan a una URL, tu teléfono se activa, y se establece una sesión cifrada directa. La IA pide lo que necesita, tu teléfono responde, y luego vuelve a dormirse. Tus datos nunca salen de tu dispositivo excepto a través de esa sesión en vivo.
Estado: v1.0 publicada. Disponible en GitHub Releases. Para acceso beta en Google Play, envía un correo a
beta@rousecontext.com. Funciona con cualquier cliente compatible con MCP.
Primeros Pasos
- Instala — descarga el APK desde GitHub Releases e instálalo manualmente (puede que necesites habilitar "Instalar desde fuentes desconocidas" en la configuración de Android). O envía un correo a
beta@rousecontext.compara acceso beta en Google Play. Se publican dos versiones por lanzamiento — un APK FOSS sin Firebase (-foss.apk) y un APK Google (-google.apk); consultadocs/distribution.mdpara saber cuál elegir y la historia de F-Droid. - Configura — abre la aplicación, toca Comenzar, concede los permisos de notificación. La aplicación se registra con el relay y aprovisiona los certificados TLS de tu dispositivo (~10 segundos).
- Habilita una integración — toca Añadir Integración en la pantalla de inicio. Elige una (por ejemplo, Health Connect), concede los permisos solicitados, y obtendrás una URL como
https://brave-health.abc123.rousecontext.com/mcp. - Conecta tu cliente de IA — pega esa URL en Claude (Configuración → Conectores → Añadir conector personalizado) o en cualquier cliente MCP. La primera conexión activa una aprobación OAuth en tu teléfono — toca Aprobar.
- Úsalo — pregunta a la IA sobre tus datos de salud, envíate una notificación, revisa tu tiempo de pantalla. Cada llamada de herramienta se registra en la pestaña Auditoría de la aplicación.
Cómo Funciona
AI Client ──TLS──> Relay (SNI passthrough) ──mux WebSocket (mTLS)──> Your Phone
- Habilitas una integración (por ejemplo, Health Connect) y obtienes una URL como
https://brave-health.abc123.rousecontext.com/mcp(la integración se identifica por el prefijo del hostname; la ruta es siempre/mcp) - Añades esa URL a Claude o a cualquier cliente MCP
- Cuando el cliente se conecta, el relay activa tu teléfono mediante push FCM
- Tu teléfono se conecta de vuelta a través de un WebSocket mTLS, y el relay empalma los dos flujos TLS
- El cliente de IA habla directamente con tu teléfono a través de TLS cifrado de extremo a extremo — el relay nunca ve el texto plano
Las sesiones son efímeras. El teléfono vuelve a dormirse cuando el cliente se desconecta.
Integraciones
Cada integración se habilita de forma independiente y tiene su propio endpoint MCP con autorización OAuth (PKCE). 22 herramientas en 4 integraciones:
Health Connect (3 herramientas)
Consulta datos de Android Health Connect en 36 tipos de registros en 7 categorías (actividad, cuerpo, sueño, vitales, nutrición, reproductiva, atención plena).
| Herramienta | Descripción |
|---|---|
list_record_types | Lista los tipos de registro de Health Connect con estado de permisos |
query_health_data | Consulta registros por tipo y rango de tiempo |
get_health_summary | Resumen de salud en los tipos permitidos para un período |
Notificaciones (5 herramientas)
Lee, busca e interactúa con las notificaciones del dispositivo.
| Herramienta | Descripción |
|---|---|
list_active_notifications | Lista las notificaciones publicadas |
search_notification_history | Busca en el historial de notificaciones por texto, paquete o rango de tiempo |
get_notification_stats | Conteos de notificaciones, aplicaciones principales y hora más ocupada para un período |
perform_notification_action | Invoca un botón de acción en una notificación activa |
dismiss_notification | Descarta una notificación activa por clave |
Outreach (10 herramientas)
Permite que la IA realice acciones en el dispositivo — lanzar aplicaciones, abrir enlaces, enviar notificaciones, gestionar No Molestar.
| Herramienta | Descripción |
|---|---|
launch_app | Lanza una aplicación instalada por nombre de paquete |
open_link | Abre una URL http/https en la aplicación predeterminada |
copy_to_clipboard | Copia texto al portapapeles |
send_notification | Publica una notificación con botones de acción opcionales y URL de apertura al tocar |
list_installed_apps | Lista las aplicaciones instaladas |
create_notification_channel | Crea un canal de notificaciones |
list_notification_channels | Lista los canales de notificaciones creados por IA |
delete_notification_channel | Elimina un canal de notificaciones creado por IA |
get_dnd_state | Obtiene el estado de No Molestar |
set_dnd_state | Establece el estado de No Molestar |
Estadísticas de Uso (4 herramientas)
Patrones de uso de aplicaciones y análisis de tiempo de pantalla.
| Herramienta | Descripción |
|---|---|
get_usage_summary | Totales de tiempo de pantalla y aplicaciones principales para un período |
get_app_usage | Uso por día para una aplicación |
get_usage_events | Eventos brutos de primer plano/fondo de aplicaciones en un rango |
compare_usage | Compara el tiempo de pantalla entre dos períodos; mayores diferencias primero |
Arquitectura
Aplicación Android
| Módulo | Propósito |
|---|---|
:app | UI Compose, DI Koin, navegación, temas |
:core:tunnel | Protocolo Mux, cliente WebSocket, aceptación TLS, CertificateStore |
:core:mcp | Enrutamiento de sesiones MCP, servidor HTTP, OAuth (código de dispositivo + código de autorización + PKCE), gestión de tokens |
:core:bridge | Los puentes conectan flujos mux del túnel a sesiones MCP mediante TLS |
:api | Interfaz McpIntegration, IntegrationStateStore |
:integrations | Proveedores MCP: Health Connect, outreach (llamadas/SMS/DND), estadísticas de uso, captura de notificaciones |
:notifications | Infraestructura transversal de notificaciones, persistencia de auditoría (Room) |
:work | Servicio en primer plano, receptor FCM, WorkManager |
:core:testfixtures | Fixtures compartidos para pruebas de nivel de integración que inician el binario real del relay |
Servidor Relay (relay/)
Binario Rust en un VPS pequeño. Maneja:
- Paso TLS — enruta conexiones de clientes de IA a dispositivos mediante SNI, nunca termina el TLS interno
- WebSocket Mux — multiplexa múltiples sesiones de clientes sobre una conexión de dispositivo
- Activación FCM — envía notificaciones push para activar dispositivos dormidos
- Certificados ACME — emite certificados TLS por dispositivo mediante Google Trust Services DNS-01 (API de Cloudflare); Let's Encrypt también es compatible
- Protección contra bots — prefijo de URL secreto validado antes de activar el dispositivo, además de limitación FCM y límite de velocidad por IP
Seguridad
- Cifrado de extremo a extremo — TLS termina en tu teléfono. El relay solo hace paso SNI.
- Sin sincronización en la nube — los datos se leen de fuentes locales del dispositivo y se sirven en vivo. Nada se almacena de forma remota.
- Certificados ACME por dispositivo — certificados por dispositivo mediante Google Trust Services (DNS-01), clave privada en Android Keystore (respaldada por hardware).
- Autenticación de dispositivo mTLS — el relay autentica el dispositivo mediante certificado de cliente antes de permitir conexiones.
- Prefijo de URL secreto — cada URL de dispositivo incluye un secreto rotable por integración (
brave-health.abc123.rousecontext.com, dondebrave-healthes{adjective}-{integrationId}). Los bots que descubran el subdominio del dispositivo no pueden activarlo sin el secreto. - OAuth por cliente — cada cliente de IA debe ser autorizado mediante aprobación en el dispositivo antes de acceder a las herramientas.
- Rastro de auditoría — cada invocación de herramienta se registra localmente con argumentos, respuesta y duración.
Compilación
Android
./gradlew assembleDebug
Requiere Android SDK (compileSdk 36, targetSdk 36, minSdk 24). La compilación requiere JDK 21 (JAVA_HOME=/usr/lib/jvm/java-21-openjdk).
Informe de cobertura
./gradlew koverHtmlReport
Agrega cobertura de líneas y ramas en todas las pruebas unitarias de cada módulo y en el nivel
:core:tunnel:integrationTest (subproceso real del relay). El HTML se genera en
build/reports/kover/html/index.html. CI publica el mismo informe como un
artefacto test-coverage además de un resumen por módulo en cada PR.
Relay
cd relay
cargo build --release
Pruebas de extremo a extremo
Las pruebas e2e manejan un dispositivo real a través de adb mediante un host (típicamente local en LAN) que ejecuta adb. La propiedad del sistema adb.host es obligatoria y su valor predeterminado es vacío
— la tarea :e2e:e2eTest falla rápidamente si no está configurada. El serial del dispositivo es opcional y
solo se necesita si hay múltiples dispositivos conectados a ese host.
./gradlew :e2e:e2eTest \
-Dadb.host=<your-dev-host> \
-Dadb.serial=<your-device-serial>
El módulo :device-tests tiene un ejecutor separado que compila un APK apuntando a un
relay que se ejecuta localmente. También requiere una IP LAN alcanzable desde el dispositivo:
./gradlew :device-tests:test -Dlan.ip=<your-lan-ip>
Sin lan.ip, las pruebas de dispositivo se omiten limpiamente mediante supuestos de JUnit.
Estado
v1.0 publicada. 22 herramientas en 4 integraciones, activación en frío en ~3 segundos, cifrado de extremo a extremo. Consulta docs/design/ para documentos de diseño detallados y la política de privacidad.
Licencia
Licenciado bajo la Apache License, Versión 2.0. Consulta LICENSE para más detalles.