Search, play, and control Stremio on Android TV over native ADB.
The Model Context Protocol (MCP) server connects an MCP client to Stremio on Android TV using native ADB. It provides search, play, and control capabilities for Stremio from a remote MCP client. The project is published on PyPI and maintained in a GitHub repository.
🛠️ Key Features
Search Stremio content
Play media
Control Stremio on Android TV via native ADB
🚀 Use Cases
Remote media-center interactions for Android TV
Integrating Stremio control into MCP-based developer workflows
Building tooling around Stremio using MCP
⚡ Developer Benefits
MCP-compatible server for Stremio on Android TV
Uses native ADB for device connectivity
Repository available for implementation reference and CI status
⚠️ Limitations
Target environment is Android TV (via ADB); scope for other platforms is not specified
A Python Model Context Protocol (MCP) server for searching TMDB, opening Stremio content on Android TV, controlling playback over ADB, and optionally accessing your Stremio library.
IMPORTANT
This server can control a physical Android TV and, when STREMIO_AUTH_KEY is configured, add or remove items from your Stremio library. ADB grants powerful device access. Review tool requests, keep credentials private, and disable Wireless Debugging when you are not using it.
What it does
Searches TMDB for movies and TV shows and returns IMDb IDs.
Opens a movie or a specific series episode in Stremio on Android TV.
Sends navigation, playback, volume, and power commands through native ADB.
Reads device-dependent playback title, state, position, and duration data.
Optionally lists, searches, adds, and removes Stremio library items.
Requirements
Android TV with Stremio installed and configured with working addons
For modern Wireless Debugging on TV: Android TV / Google TV running Android 13 (API 33) or higher, per Google's wireless adb requirements
Android SDK Platform Tools (adb) — install a current release and keep it updated; use at least the wireless-debugging era of Platform Tools (30.0.0+, when adb pair landed). Prefer the latest stable from the Platform Tools page for mDNS and TLS fixes
This project is published on PyPI as stremio-mcp-server. A separate,
unrelated project is published as stremio-mcp; installing that name does not
install this server. The stremio-mcp console script below is provided by the
stremio-mcp-server distribution.
Source checkout
Use a source checkout for development or local modifications:
This server talks to the TV through the native Platform Tools adb client, not a pure-Python ADB library. That is intentional: modern Wireless Debugging negotiates TLS (STLS) and this project needs a full shell for intents, key events, and media-session diagnostics. Pure-Python clients that only speak legacy ADB-over-TCP do not cover that path.
On the TV, enable Developer options and Wireless debugging. Menu names vary by manufacturer. Official wireless debugging for TV requires Android 13+; see Google's Connect to a device over Wi-Fi guide.
Modern Wireless Debugging displays separate pairing and connection ports (often ephemeral). Pair once, then connect with the current connection port:
bash
adb pair TV_IP:PAIRING_PORT
# Enter the temporary pairing code shown on the TV.
adb connect TV_IP:CONNECTION_PORT
adb devices -l
Set ANDROID_TV_PORT to the connection port, not the temporary pairing port. The device must appear as device, not offline or unauthorized. Wireless Debugging ports may change after a reboot or after debugging is toggled. On newer Platform Tools and Android versions, a previously paired device may also reconnect via mDNS when it returns to a trusted network; still configure the explicit connection port when the UI shows one.
Legacy network debugging may use port 5555 (adb tcpip after USB); only use that workflow when your TV explicitly documents it. Prefer Wireless Debugging on supported TVs.
Restart the MCP client after changing configuration. You can instead place the variables directly in the client configuration's env object, but that file must remain private.
Configuration
Variable
Required for
Sensitive
Description
ANDROID_TV_HOST
Playback and TV tools
Local network detail
Android TV IP address
ANDROID_TV_PORT
Playback and TV tools
No
Current ADB connection port; defaults to legacy 5555
TMDB_API_KEY
search and title-based play with source="search"
Yes
TMDB credential. A v4 read access token is sent as an Authorization header; a legacy v3 key has no header form and is sent as a query parameter
STREMIO_AUTH_KEY
library and library-based play
Yes
Account token used for Stremio library reads and writes; sent in the HTTPS request body only
ADB_PATH
Optional
No
Native ADB executable; defaults to adb on PATH
Features initialize independently. For example, TMDB search works without a TV connection, while direct IMDb playback does not require TMDB. Leave STREMIO_AUTH_KEY empty to disable library access.
Network bounds
Every HTTP request uses one shared async client with explicit timeouts, a bounded response size, and a bounded connection pool, so a slow or unreachable service cannot stall other tool calls or device controls. The defaults are safe; override them only when a slow link makes them too tight. An unparsable or out-of-range value is reported by variable name and replaced with the default.
Variable
Default
Description
STREMIO_MCP_CONNECT_TIMEOUT
5
Seconds to establish a connection
STREMIO_MCP_READ_TIMEOUT
20
Seconds to wait for response data
STREMIO_MCP_WRITE_TIMEOUT
20
Seconds to send request data
STREMIO_MCP_POOL_TIMEOUT
5
Seconds to wait for a pooled connection
STREMIO_MCP_MAX_RESPONSE_BYTES
4194304
Maximum TMDB/Cinemeta response body
STREMIO_MCP_LIBRARY_MAX_RESPONSE_BYTES
16777216
Maximum Stremio library response body
STREMIO_MCP_MAX_CONNECTIONS
8
Maximum simultaneous connections
STREMIO_MCP_MAX_CONCURRENT_REQUESTS
4
Maximum simultaneous TMDB requests during a fan-out search
Tools and effects
Tool
Purpose
External access and side effects
search
Read-only TMDB discovery for movies/TV and IMDb IDs
Sends bounded read-only requests to TMDB; never changes the TV or account
play
Open a movie or episode by direct IMDb ID or by title
Requires ADB; title search may query TMDB or the library, opens Stremio, and attempts a center key press
library
Read the account or add/remove explicit items
Requires the Stremio auth key; only add and remove persist account changes
tv_control
Send volume, playback, navigation, or power commands
Sends commands to the physical Android TV; playback stop verifies its post-condition
playback_status
Read the current Stremio playback snapshot
Reads only Stremio-scoped media-session, audio-track, uptime, and extractor diagnostics
Use search for TMDB discovery and library with action=search for the personal Stremio collection. Use play to open content, tv_control for remote-like commands, and playback_status to inspect what is actually playing. All five tools return plain text rather than structured result objects.
Library mutations require an explicit IMDb ID and content type. Search first when a title is ambiguous; title-based play otherwise uses the first matching result. For play title searches, source=search requires both season and episode for TV; source=library can use a saved episode or default to S1E1. Direct series playback also requires both numbers. play reports an accepted Android intent, not a verified stream or center-key action.
Library reads report empty, not found, and unavailable outcomes distinctly. Mutations fail closed: add and remove abort without writing whenever the preceding read failed, returned an item whose _id is not exactly the requested ID, returned duplicate or unrequested rows, or returned an item of a different content type. Re-adding and removing are account mutations that preserve watch state; removal is a soft delete and writes are verified with a follow-up read.
search reports a TMDB outage as an error rather than as "no results". When an automatic search reaches only one of the movie and TV halves, it returns the half that succeeded and appends a (partial results — …) note. tv_control does not verify ordinary key effects; use playback_status for a snapshot, whose stalled state means a claimed PLAYING session lacked corroborating live Stremio audio. Do not send navigate/select unless Stremio has the intended focus.
Example prompts
text
Search for Dune movies from 2021.
Play movie tt1375666.
Play Breaking Bad season 1 episode 1.
Pause playback.
What's currently playing?
Search my Stremio library for Severance.
Add movie tt1375666 to my library.
See the usage examples for accurate tool-level workflows and safer search-then-play examples.
Verify the setup
Test one boundary at a time:
adb devices -l — confirms the TV connection.
Ask the MCP client to list tools — should show the five tools above.
“Search for Inception” — confirms the TMDB key and network access.
“Play movie tt1375666” — confirms ADB and Stremio deep linking.
“List my Stremio library” — optionally confirms the Stremio auth key.
The play tool confirms that Android accepted the Stremio intent, then attempts a center key press; it does not verify the key press or guarantee that an addon supplied a stream. Stremio may show a source list that requires tv_control or a physical remote.
Confirm the computer and TV are on the same LAN and client isolation is disabled.
Use the current connection port, not the pairing port.
Accept the authorization prompt on the TV.
If pairing is stale, forget the computer on the TV and pair again.
On macOS, grant Local Network permission under Privacy & Security → Local
Network to the adb binary itself. A reliable pattern is to start the ADB
server once from a permitted GUI terminal, then let the MCP server and other
tools act as localhost clients of that existing server.
A failure reported as local_network_denied means the MCP server itself
reached the TV over raw TCP while adb could not, so the network is fine:
apply the two macOS steps above instead of debugging routing.
Do not run adb kill-server or adb start-server from automated tooling: that
can discard a permitted server and recreate it under a process without the
required macOS permission.
Stremio opens but content does not play
Launch Stremio manually once and sign in.
Confirm that your Stremio addons provide streams for the title.
Select a source with tv_control or a physical remote.
For direct IMDb or TMDB title playback of a series, provide both season and episode; library playback can use its saved episode or default to S1E1.
Search or library access fails
Confirm the relevant key is present and has no quotes or extra spaces.
Playback status is scoped to Stremio's media-session block. Claimed playing is corroborated with a started media AudioTrack for the session owner so Exo-player error / stale sessions are reported as stalled instead of healthy playback. Position is estimated from Android's monotonic playback clock only while playback is live, and duration may fall back to media-extractor diagnostics.
Playback stop verifies post-conditions (no active Stremio playback). When media-session stop is ignored, the server tries pause+back and, if needed, a bounded am force-stop com.stremio.one fallback, and reports failure if the session still plays.
Development
Credential-free checks use mocks and do not contact TMDB, Stremio, or an Android device:
See CONTRIBUTING.md for the contribution workflow, CHANGELOG.md for release notes, and SECURITY.md for vulnerability reporting and credential-redaction guidance.
server.json is the metadata published to the official MCP Registry. The
canonical entry is linked in Availability.
Availability
Canonical sources for this server. Anything published elsewhere is not maintained here.
Treat STREMIO_AUTH_KEY like a password; it permits library reads and writes.
Network failures are logged and returned as a category, host, and status code only. Configured credentials and secret-bearing query strings are stripped from every log record and every error the server returns, including tracebacks and third-party HTTP request logs.
ADB failures are logged and returned as a bounded category with guidance only, such as unreachable, unauthorized, offline, or timeout; device endpoints, raw ADB output, and command payloads are never logged or returned.
Treat ADB authorization as device-control access and protect ~/.android/adbkey.
Never post .env, MCP client configuration, auth keys, device IPs, or ADB keys in issues or logs.
Review account and device mutations before approving them in your MCP client.
Disable Wireless Debugging and revoke credentials when they are no longer needed.
This project is not affiliated with or endorsed by Stremio, TMDB, or Anthropic. It does not provide media or bypass Stremio addon requirements. Use it only with devices and accounts you are authorized to control.
Install
Configuration
Environment variables
ANDROID_TV_HOST
Android TV IP address for playback and device control
ANDROID_TV_PORTdefault 5555
Current ADB connection port
TMDB_API_KEYsecret
TMDB API key for title search
STREMIO_AUTH_KEYsecret
Stremio account token for library reads and writes