Python MCP server for TMDB search, Stremio library management, and Android TV playback/control over native ADB.
claude mcp add stremio-mcp -- uvx stremio-mcp-server{
"mcpServers": {
"stremio-mcp": {
"command": "uvx",
"args": ["stremio-mcp-server"],
"env": {
"TMDB_API_KEY": "<tmdb_api_key>",
"ANDROID_TV_HOST": "<android_tv_host>"
}
}
}
}TMDB_API_KEYANDROID_TV_HOSTMCP Servers overview
# Stremio MCP Server
<!-- mcp-name: io.github.netixc/stremio-mcp -->
<p align="center">
<img src="https://raw.githubusercontent.com/netixc/stremio-mcp/main/docs/assets/social-preview.png" alt="Stremio MCP connects an MCP client to Stremio on Android TV" width="100%">
</p>
[](https://github.com/netixc/stremio-mcp/actions/workflows/ci.yml)
[](https://pypi.org/project/stremio-mcp-server/)
[](https://github.com/netixc/stremio-mcp/blob/main/pyproject.toml)
[](https://github.com/netixc/stremio-mcp/blob/main/LICENSE)
A Python [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 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](https://www.stremio.com/) 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](https://developer.android.com/tools/adb#wireless-android-11)
- [Python 3.10+](https://www.python.org/downloads/)
- [uv](https://docs.astral.sh/uv/getting-started/installation/)
- [Android SDK Platform Tools](https://developer.android.com/tools/releases/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
- A free [TMDB API key](https://www.themoviedb.org/settings/api) for title search
- Optional: a [Stremio auth key](https://github.com/netixc/stremio-mcp/blob/main/docs/stremio-auth-key.md) for library access
## Installation
### PyPI package (recommended)
Run the latest published release without cloning the repository:
```bash
uvx stremio-mcp-server
```
To run the current release explicitly:
```bash
uvx --from stremio-mcp-server==0.2.0 stremio-mcp-server
```
### Source checkout
Use a source checkout for development or local modifications:
```bash
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.
```dotenv
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
```
## Pair and connect the TV
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](https://developer.android.com/tools/adb#wireless-android-11) 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.
## Configure your MCP client
Claude Desktop configuration file locations:
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
- Linux: `~/.config/Claude/claude_desktop_config.json`
### PyPI package (recommended)
Create a private environment file from the example above, then configure:
```json
{
"mcpServers": {
"stremio": {
"command": "uvx",
"args": [
"--env-file",
"/absolute/path/to/stremio.env",
"stremio-mcp-server"
]
}
}
}
```
### Source checkout
Replace both absolute paths:
```json
{
"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.
## 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` | 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.
## 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.
```
What people ask about stremio-mcp
What is netixc/stremio-mcp?
+
netixc/stremio-mcp is mcp servers for the Claude AI ecosystem. Python MCP server for TMDB search, Stremio library management, and Android TV playback/control over native ADB. It has 4 GitHub stars and was last updated today.
How do I install stremio-mcp?
+
You can install stremio-mcp by cloning the repository (https://github.com/netixc/stremio-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.
Is netixc/stremio-mcp safe to use?
+
netixc/stremio-mcp has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.
Who maintains netixc/stremio-mcp?
+
netixc/stremio-mcp is maintained by netixc. The last recorded GitHub activity is from today, with 0 open issues.
Are there alternatives to stremio-mcp?
+
Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.
Deploy stremio-mcp to your cloud
Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.
Maintain this repo? Add a badge to your README
Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.
[](https://claudewave.com/repo/netixc-stremio-mcp)<a href="https://claudewave.com/repo/netixc-stremio-mcp"><img src="https://claudewave.com/api/badge/netixc-stremio-mcp" alt="Featured on ClaudeWave: netixc/stremio-mcp" width="320" height="64" /></a>More MCP Servers
Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.
User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
An open-source AI agent that brings the power of Gemini directly into your terminal.
The fastest path to AI-powered full stack observability, even for lean teams.
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
Real-time global intelligence dashboard. AI-powered news aggregation, geopolitical monitoring, and infrastructure tracking in a unified situational awareness interface