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

rouse-context MCP server

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.

Home screen with active integrations and audit log    Integration setup with URL to copy    OAuth approval screen

Primeros Pasos

  1. 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.com para acceso beta en Google Play. Se publican dos versiones por lanzamiento — un APK FOSS sin Firebase (-foss.apk) y un APK Google (-google.apk); consulta docs/distribution.md para saber cuál elegir y la historia de F-Droid.
  2. 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).
  3. 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.
  4. 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.
  5. Ú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
  1. 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)
  2. Añades esa URL a Claude o a cualquier cliente MCP
  3. Cuando el cliente se conecta, el relay activa tu teléfono mediante push FCM
  4. Tu teléfono se conecta de vuelta a través de un WebSocket mTLS, y el relay empalma los dos flujos TLS
  5. 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).

HerramientaDescripción
list_record_typesLista los tipos de registro de Health Connect con estado de permisos
query_health_dataConsulta registros por tipo y rango de tiempo
get_health_summaryResumen de salud en los tipos permitidos para un período

Notificaciones (5 herramientas)

Lee, busca e interactúa con las notificaciones del dispositivo.

HerramientaDescripción
list_active_notificationsLista las notificaciones publicadas
search_notification_historyBusca en el historial de notificaciones por texto, paquete o rango de tiempo
get_notification_statsConteos de notificaciones, aplicaciones principales y hora más ocupada para un período
perform_notification_actionInvoca un botón de acción en una notificación activa
dismiss_notificationDescarta 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.

HerramientaDescripción
launch_appLanza una aplicación instalada por nombre de paquete
open_linkAbre una URL http/https en la aplicación predeterminada
copy_to_clipboardCopia texto al portapapeles
send_notificationPublica una notificación con botones de acción opcionales y URL de apertura al tocar
list_installed_appsLista las aplicaciones instaladas
create_notification_channelCrea un canal de notificaciones
list_notification_channelsLista los canales de notificaciones creados por IA
delete_notification_channelElimina un canal de notificaciones creado por IA
get_dnd_stateObtiene el estado de No Molestar
set_dnd_stateEstablece el estado de No Molestar

Estadísticas de Uso (4 herramientas)

Patrones de uso de aplicaciones y análisis de tiempo de pantalla.

HerramientaDescripción
get_usage_summaryTotales de tiempo de pantalla y aplicaciones principales para un período
get_app_usageUso por día para una aplicación
get_usage_eventsEventos brutos de primer plano/fondo de aplicaciones en un rango
compare_usageCompara el tiempo de pantalla entre dos períodos; mayores diferencias primero

Arquitectura

Aplicación Android

MóduloPropósito
:appUI Compose, DI Koin, navegación, temas
:core:tunnelProtocolo Mux, cliente WebSocket, aceptación TLS, CertificateStore
:core:mcpEnrutamiento de sesiones MCP, servidor HTTP, OAuth (código de dispositivo + código de autorización + PKCE), gestión de tokens
:core:bridgeLos puentes conectan flujos mux del túnel a sesiones MCP mediante TLS
:apiInterfaz McpIntegration, IntegrationStateStore
:integrationsProveedores MCP: Health Connect, outreach (llamadas/SMS/DND), estadísticas de uso, captura de notificaciones
:notificationsInfraestructura transversal de notificaciones, persistencia de auditoría (Room)
:workServicio en primer plano, receptor FCM, WorkManager
:core:testfixturesFixtures 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, donde brave-health es {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.