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."
The numbered steps carry the sequence. The thing to notice is what the middle of it does not hold.
The MCP server has no credential of its own. It cannot reach a single television on its own behalf, there is nothing in it worth stealing, and it keeps no state between requests — it passes your token along and forgets it. That is deliberate: a façade that could act by itself would be a second place where access is decided, and there is exactly one.
That one is the relay, and it resolves your token to your account with the role you hold right now — not the one you had when the token was issued. Demote someone and their agent's reach shrinks on the very next request; remove them from a team and the sets go with it. Every command the agent sends is checked against the same rules as the web app and written into the same audit log under your name, so an agent can never quietly become a way to do what the person driving it could not do by hand.
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.