Rouse Context
Transforme seu telefone Android em um servidor MCP sob demanda. 22 ferramentas para dados de saúde, notificações, uso de aplicativos e ações do dispositivo. Criptografia de ponta a ponta, sem sincronização em nuvem.
Documentação
Rouse Context
Seu telefone tem contexto que a IA não tem — seus dados de saúde, suas notificações, seu uso de aplicativos. O Rouse Context disponibiliza esse contexto para assistentes de IA sob demanda, sem nunca sincronizar seus dados para a nuvem.
É um aplicativo Android que transforma seu telefone em um servidor MCP. Clientes de IA como o Claude se conectam a uma URL, seu telefone acorda, e uma sessão criptografada direta é estabelecida. A IA pede o que precisa, seu telefone responde, e então ele volta a dormir. Seus dados nunca saem do seu dispositivo exceto através dessa sessão ao vivo.
Status: v1.0 lançada. Disponível em GitHub Releases. Para acesso beta no Google Play, envie um e-mail para
beta@rousecontext.com. Funciona com qualquer cliente compatível com MCP.
Começando
- Instale — baixe o APK de GitHub Releases e faça o sideload (talvez seja necessário ativar "Instalar de fontes desconhecidas" nas configurações do Android). Ou envie um e-mail para
beta@rousecontext.compara acesso beta no Google Play. Duas versões são publicadas por release — um APK FOSS sem Firebase (-foss.apk) e um APK Google (-google.apk); vejadocs/distribution.mdpara saber qual escolher e a história do F-Droid. - Configure — abra o aplicativo, toque em Começar, conceda permissões de notificação. O aplicativo registra-se no relay e provisiona os certificados TLS do seu dispositivo (~10 segundos).
- Ative uma integração — toque em Adicionar Integração na tela inicial. Escolha uma (ex.: Health Connect), conceda as permissões solicitadas, e você receberá uma URL como
https://brave-health.abc123.rousecontext.com/mcp. - Conecte seu cliente de IA — cole essa URL no Claude (Configurações → Conectores → Adicionar conector personalizado) ou em qualquer cliente MCP. A primeira conexão aciona uma aprovação OAuth no seu telefone — toque em Aprovar.
- Use — pergunte à IA sobre seus dados de saúde, envie uma notificação para si mesmo, verifique seu tempo de tela. Cada chamada de ferramenta é registrada na aba Auditoria do aplicativo.
Como Funciona
AI Client ──TLS──> Relay (SNI passthrough) ──mux WebSocket (mTLS)──> Your Phone
- Você ativa uma integração (ex.: Health Connect) e recebe uma URL como
https://brave-health.abc123.rousecontext.com/mcp(a integração é identificada pelo prefixo do hostname; o caminho é sempre/mcp) - Adicione essa URL ao Claude ou a qualquer cliente MCP
- Quando o cliente se conecta, o relay acorda seu telefone via push FCM
- Seu telefone se conecta de volta através de um WebSocket mTLS, e o relay une os dois fluxos TLS
- O cliente de IA fala diretamente com seu telefone através de TLS criptografado de ponta a ponta — o relay nunca vê o texto simples
As sessões são efêmeras. O telefone volta a dormir quando o cliente se desconecta.
Integrações
Cada integração é ativada independentemente e recebe seu próprio endpoint MCP com autorização OAuth (PKCE). 22 ferramentas em 4 integrações:
Health Connect (3 ferramentas)
Consulte dados do Android Health Connect em 36 tipos de registro em 7 categorias (atividade, corpo, sono, sinais vitais, nutrição, reprodutivo, atenção plena).
| Ferramenta | Descrição |
|---|---|
list_record_types | Lista tipos de registro do Health Connect com status de permissão |
query_health_data | Consulta registros por tipo e intervalo de tempo |
get_health_summary | Resumo de saúde entre tipos permitidos para um período |
Notificações (5 ferramentas)
Leia, pesquise e interaja com notificações do dispositivo.
| Ferramenta | Descrição |
|---|---|
list_active_notifications | Lista notificações publicadas |
search_notification_history | Pesquisa histórico de notificações por texto, pacote ou intervalo de tempo |
get_notification_stats | Contagens de notificações, principais aplicativos e hora mais movimentada para um período |
perform_notification_action | Invoca um botão de ação em uma notificação ativa |
dismiss_notification | Dispensa uma notificação ativa por chave |
Outreach (10 ferramentas)
Permite que a IA execute ações no dispositivo — abra aplicativos, abra links, envie notificações, gerencie o modo Não Perturbe.
| Ferramenta | Descrição |
|---|---|
launch_app | Abre um aplicativo instalado pelo nome do pacote |
open_link | Abre uma URL http/https no aplicativo padrão |
copy_to_clipboard | Copia texto para a área de transferência |
send_notification | Publica uma notificação com botões de ação opcionais e URL de toque para abrir |
list_installed_apps | Lista aplicativos instalados |
create_notification_channel | Cria um canal de notificação |
list_notification_channels | Lista canais de notificação criados pela IA |
delete_notification_channel | Exclui um canal de notificação criado pela IA |
get_dnd_state | Obtém o estado do modo Não Perturbe |
set_dnd_state | Define o estado do modo Não Perturbe |
Estatísticas de Uso (4 ferramentas)
Padrões de uso de aplicativos e análises de tempo de tela.
| Ferramenta | Descrição |
|---|---|
get_usage_summary | Totais de tempo de tela e principais aplicativos para um período |
get_app_usage | Uso diário para um aplicativo |
get_usage_events | Eventos brutos de primeiro plano/fundo de aplicativos em um intervalo |
compare_usage | Compara tempo de tela entre dois períodos; maiores diferenças primeiro |
Arquitetura
Aplicativo Android
| Módulo | Finalidade |
|---|---|
:app | UI Compose, DI Koin, navegação, temas |
:core:tunnel | Protocolo Mux, cliente WebSocket, aceitação TLS, CertificateStore |
:core:mcp | Roteamento de sessão MCP, servidor HTTP, OAuth (código de dispositivo + código de autorização + PKCE), gerenciamento de tokens |
:core:bridge | Pontes conectam fluxos mux de túnel a sessões MCP via TLS |
:api | Interface McpIntegration, IntegrationStateStore |
:integrations | Provedores MCP: Health Connect, outreach (chamadas/SMS/DND), estatísticas de uso, captura de notificações |
:notifications | Infraestrutura transversal de notificações, persistência de auditoria (Room) |
:work | Serviço em primeiro plano, receptor FCM, WorkManager |
:core:testfixtures | Fixtures compartilhadas para testes de nível de integração que iniciam o binário real do relay |
Servidor Relay (relay/)
Binário Rust em um pequeno VPS. Gerencia:
- Passagem TLS — roteia conexões de clientes de IA para dispositivos via SNI, nunca encerra o TLS interno
- WebSocket Mux — multiplexa múltiplas sessões de clientes em uma única conexão de dispositivo
- Despertar FCM — envia notificações push para acordar dispositivos adormecidos
- Certificados ACME — emite certificados TLS por dispositivo via Google Trust Services DNS-01 (API Cloudflare); Let's Encrypt também é suportado
- Proteção contra bots — prefixo de URL secreto validado antes de acordar o dispositivo, além de limite de FCM e limitação de taxa por IP
Segurança
- Criptografado de ponta a ponta — TLS termina no seu telefone. O relay faz apenas passagem SNI.
- Sem sincronização em nuvem — os dados são lidos de fontes no dispositivo e servidos ao vivo. Nada é armazenado remotamente.
- Certificados ACME por dispositivo — certificados por dispositivo via Google Trust Services (DNS-01), chave privada no Android Keystore (com suporte de hardware).
- Autenticação de dispositivo mTLS — o relay autentica o dispositivo por certificado de cliente antes de permitir conexões.
- Prefixo de URL secreto — cada URL de dispositivo inclui um segredo rotacionável por integração (
brave-health.abc123.rousecontext.com, ondebrave-healthé{adjective}-{integrationId}). Bots que descobrem o subdomínio do dispositivo não podem acordá-lo sem o segredo. - OAuth por cliente — cada cliente de IA deve ser autorizado via aprovação no dispositivo antes de acessar ferramentas.
- Trilha de auditoria — cada invocação de ferramenta é registrada localmente com argumentos, resposta e duração.
Compilação
Android
./gradlew assembleDebug
Requer Android SDK (compileSdk 36, targetSdk 36, minSdk 24). A compilação requer JDK 21 (JAVA_HOME=/usr/lib/jvm/java-21-openjdk).
Relatório de cobertura
./gradlew koverHtmlReport
Agrega cobertura de linhas + ramos em todos os testes de unidade de cada módulo e na camada
:core:tunnel:integrationTest (subprocesso real do relay). O HTML fica em
build/reports/kover/html/index.html. O CI publica o mesmo relatório como um
artefato test-coverage além de um resumo por módulo em cada PR.
Relay
cd relay
cargo build --release
Testes de ponta a ponta
Os testes e2e conduzem um dispositivo real através de adb via um host (tipicamente local na LAN)
executando adb. A propriedade de sistema adb.host é obrigatória e o padrão é vazio
— a tarefa :e2e:e2eTest falha rapidamente se não estiver definida. O serial do dispositivo é opcional e
só é necessário se vários dispositivos estiverem conectados a esse host.
./gradlew :e2e:e2eTest \
-Dadb.host=<your-dev-host> \
-Dadb.serial=<your-device-serial>
O módulo :device-tests tem um executor separado que compila um APK apontando para um
relay em execução local. Também requer um IP de LAN acessível a partir do dispositivo:
./gradlew :device-tests:test -Dlan.ip=<your-lan-ip>
Sem lan.ip, os testes de dispositivo são ignorados corretamente via suposições JUnit.
Status
v1.0 lançada. 22 ferramentas em 4 integrações, despertar a frio em ~3 segundos, criptografia de ponta a ponta. Veja docs/design/ para documentos de design detalhados e política de privacidade.
Licença
Licenciado sob a Apache License, Versão 2.0. Veja LICENSE para detalhes.