Point Claude — or any client that speaks the Model Context Protocol — at your sets, and it can read their state and drive the TV: press keys, switch power, replay a recorded session. The agent acts with the rights of the person who connected it, never more, and every action is audited as that person. Ask it "which of my TVs are online?" or "open the Smart Hub on the office TV."
Numbered on the diagram: 0 the user connects once — either they paste a personal access token, or they click Connect and sign in through OAuth, which issues the token. Then, per request: 1 the AI client sends that token to the MCP server; 2 the server — holding no credential of its own — forwards it to the relay; 3 the relay resolves the token to {you, your live role}, enforces exactly the same access rules and audit as the web app, and forwards the command to your site agent and the TV. The MCP server is a thin, stateless pipe; the relay stays the single authority.
list_sets · get_health · list_recordings · get_stats —
plain reads, ACL-filtered to exactly the sets you can see. "Which TVs are online, and what did they record
today?"
Press a sequence of remote keys, in order — "HOME RIGHT OK". The agent takes control of a free
TV automatically; it can't wrest it from someone who's using it.
Type straight into the TV's focused input — a search box, a login form — instead of arrow-keying an on-screen keyboard. Replaces the field's content; an empty send clears it.
Ask the TV what's installed (list_apps — titles, ids, versions), then start any of it by id —
get the app under test on screen in one step and drive it with send_keys and
send_text.
Switch the TV's mains via its smart plug — on, off, or cycle (the
last-resort remote restart). Waits for the plug's confirmation.
Replay a recording's exact key-track onto a TV — reproduce a saved session on demand, on the same set or a different one.
Whichever you choose, the agent ends up holding a token that maps to your local account with your live role. There is no separate identity and no third-party login — Screenwhere is its own authority.
In Settings → Access tokens, create a token (shown once), name it, and paste it into your MCP client. Long-lived, revoke-only. Simplest to set up.
Add /mcp as a connector; the client opens our sign-in, you log in with your existing
account (password + 2FA) and pick a scope. Short-lived token, auto-refreshed. Nothing to copy-paste.
On the OAuth consent screen you grant either read only or read + control. A read-only connection can look — sets, health, recordings, stats — but can't change anything or drive a TV; the relay enforces that server-side, so a read-only token is powerless to control even if a client tried. You can see every connected app, and its scope, in Settings → Connected apps, and disconnect any of them in one click — "sign out everywhere" drops them too.
The full design, the token model and the tests are in
docs/MCP-PLAN.md and mcp/README.md. See also the
architecture and what shipped.