
Research
/Security News
Popular npm Packages in the keyv and Cacheable Namespaces Compromised in Active Supply Chain Attack
Popular npm packages keyv and cacheable compromised.
stremio-mcp-server
Advanced tools
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_KEYis 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.
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 fixesRun the latest published release without cloning the repository:
uvx stremio-mcp-server
To run the current release explicitly:
uvx --from stremio-mcp-server==0.2.0 stremio-mcp-server
Use a source checkout for development or local modifications:
git clone https://github.com/netixc/stremio-mcp.git
cd stremio-mcp
uv sync --locked
cp .env.example .env
Edit .env with your TV endpoint and API keys. The file is ignored by Git; never commit it.
TMDB_API_KEY=your_tmdb_api_key
ANDROID_TV_HOST=192.168.1.100
ANDROID_TV_PORT=37139
STREMIO_AUTH_KEY=
# ADB_PATH=/absolute/path/to/adb
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:
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.
Claude Desktop configuration file locations:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonCreate a private environment file from the example above, then configure:
{
"mcpServers": {
"stremio": {
"command": "uvx",
"args": [
"--env-file",
"/absolute/path/to/stremio.env",
"stremio-mcp-server"
]
}
}
}
Replace both absolute paths:
{
"mcpServers": {
"stremio": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/stremio-mcp",
"run",
"--env-file",
"/absolute/path/to/stremio-mcp/.env",
"stremio-mcp"
]
}
}
}
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.
| 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.
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 |
| Tool | Purpose | External access and side effects |
|---|---|---|
search | Search movies, TV shows, and optional years | Sends read-only requests to TMDB |
play | Open a movie or specific episode by title or IMDb ID | May query TMDB/Stremio, opens Stremio, and sends a center key press |
library | List, continue, search, check, add, or remove items | Contacts Stremio; add and remove mutate the account |
tv_control | Volume, playback, navigation, and power controls | Sends commands to the physical Android TV |
playback_status | Read current Stremio playback diagnostics | Reads Android media-session, audio-track liveness, and extractor diagnostics |
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. Series playback requires both a season and an episode.
Library reads report found, not found, and unavailable as distinct outcomes. 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. This means a transient Stremio failure can never be mistaken for "this item does not exist" and overwrite existing watch state.
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.
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.
Test one boundary at a time:
adb devices -l — confirms the TV connection.tt1375666” — confirms ADB and Stremio deep linking.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.
adb disconnect TV_IP:CONNECTION_PORT
adb connect TV_IP:CONNECTION_PORT
adb devices -l
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.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.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.tv_control or a physical remote..env.The server opens these Stremio deep links through ADB:
Movie: stremio:///detail/movie/{imdb_id}/{imdb_id}
Series: stremio:///detail/series/{imdb_id}/{imdb_id}:{season}:{episode}
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.
Credential-free checks use mocks and do not contact TMDB, Stremio, or an Android device:
uv sync --locked
uv run --locked python -m unittest discover -s tests -v
uv run --locked python -m compileall -q src tests
uv build
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 for io.github.netixc/stremio-mcp.
STREMIO_AUTH_KEY like a password; it permits library reads and writes.~/.android/adbkey..env, MCP client configuration, auth keys, device IPs, or ADB keys in issues or logs.Licensed under the MIT License.
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.
FAQs
MCP server for controlling Stremio on Android TV via ADB
We found that stremio-mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Popular npm packages keyv and cacheable compromised.

Security News
A misconfiguration gave three Anthropic models internet access, and one, believing it was in a simulation, shipped a credential-stealing package to PyPI.

Security News
/Company News
Socket has joined the new Composer and Packagist sponsorship program as a launch sponsor, supporting the team that keeps PHP's package ecosystem secure.