mirror of
https://github.com/Monkopedia/rouse-context.git
synced 2026-10-19 10:33:18 +00:00
TunnelClientImpl was using a bare HttpClient with no client certificate, causing the relay to return 401 on /ws (requires DeviceIdentity from mTLS). Add MtlsHttpClientFactory that loads the device cert from rouse_cert.pem and private key from Android Keystore, configuring the Ktor CIO engine's TLS certificates list. The relay still uses StubAcme so the device only has "stub-cert" on disk, which means the 401 persists until real ACME cert issuance is implemented relay-side. Updated BLOCKERS.md with diagnosis. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .claude | ||
| .github/workflows | ||
| api | ||
| app | ||
| config/detekt | ||
| core | ||
| deploy | ||
| device-tests | ||
| docs | ||
| gradle | ||
| health | ||
| integration-tests | ||
| notifications | ||
| relay | ||
| tunnel/src/test/java/com/rousecontext/tunnel/mux | ||
| work | ||
| .editorconfig | ||
| .gitignore | ||
| BLOCKERS.md | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| last_session | ||
| LICENSE | ||
| README.md | ||
| settings.gradle.kts | ||
Rouse Context
On-demand MCP (Model Context Protocol) server for Android.
Overview
Rouse Context turns your Android device into an MCP server that AI assistants can connect to on demand. Sessions are triggered via FCM push notifications — the device wakes up, provisions a per-device ACME TLS certificate, and establishes an end-to-end encrypted connection through an SNI passthrough relay. No persistent cloud sync of user data ever occurs; all context stays on the device until explicitly served over a live session.
Architecture
| Module | Purpose |
|---|---|
:app |
Main application shell — UI, session history/audit log, trust notifications, settings |
:tunnel |
FCM wakeup, ACME cert provisioning, SNI passthrough relay client, session lifecycle, wakelock management |
:mcp-core |
Thin abstractions over the MCP Kotlin SDK — defines McpServerProvider, the bindable-service contract for MCP servers |
:mcp-health |
Health Connect MCP server implementation |
Key properties
- FCM-triggered — no persistent connection; the device is woken only when a session is requested.
- E2E encrypted — TLS terminates on the device via per-device ACME certificates. The relay performs SNI passthrough only and never sees plaintext.
- No cloud sync — user data is read from on-device sources (Health Connect, etc.) and served live. Nothing is persisted in the cloud.
- Extensible — additional MCP servers can be added as new modules implementing
McpServerProvider, or installed as third-party apps binding to the same service protocol.
Building
./gradlew assembleDebug
Requires Android SDK with API 35 and JDK 17+.
License
Licensed under the Apache License, Version 2.0. See LICENSE for details.