npm package: @striderlabs/mcp-disney
Description: Model Context Protocol connector for Disney+ streaming service
Latest version: 1.0.0

# @striderlabs/mcp-disney

Model Context Protocol (MCP) connector for Disney+ streaming service. Enables AI assistants to search content, manage watchlists, check viewing progress, and get personalized recommendations via Playwright browser automation.

## Installation

```bash
npm install @striderlabs/mcp-disney
```

Or run directly via npx:

```bash
npx @striderlabs/mcp-disney
```

## Authentication

Authenticated tools (watchlist, profiles, recommendations, continue watching) require Disney+ credentials.

**Recommended: Environment variables**

```bash
export DISNEY_EMAIL="your@email.com"
export DISNEY_PASSWORD="yourpassword"
```

The connector will cache session cookies in `~/.mcp-disney-session.json` (mode 0600) to avoid re-logging in on every invocation.

## Claude Desktop Configuration

Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "disney": {
      "command": "npx",
      "args": ["@striderlabs/mcp-disney"],
      "env": {
        "DISNEY_EMAIL": "your@email.com",
        "DISNEY_PASSWORD": "yourpassword"
      }
    }
  }
}
```

## Available Tools

### `search_content`
Search Disney+ for movies, shows, and shorts.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `query` | string | Yes | Title, actor, franchise, keyword |
| `content_type` | `movie` \| `series` \| `short` | No | Filter by type |

### `get_details`
Get full details for a title: cast, synopsis, rating, genres, 4K/HDR availability.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content_id` | string | Yes | ID from `search_content`, or title name |
| `content_type` | `movies` \| `series` | No | Type hint for faster navigation |

### `get_watchlist` *(auth required)*
Returns all titles saved to the current user's watchlist.

### `add_to_watchlist` *(auth required)*
Add a title to the watchlist.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content_id` | string | Yes | ID from `search_content` |

### `remove_from_watchlist` *(auth required)*
Remove a title from the watchlist.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `content_id` | string | Yes | ID from `search_content` |

### `get_continue_watching` *(auth required)*
Returns in-progress titles with playback progress percentages.

### `get_profiles` *(auth required)*
Lists all profiles on the account with name, avatar, and kids-profile flag.

### `get_recommendations` *(auth required)*
Returns personalized recommendations from the Disney+ home page.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `profile_id` | string | No | Specific profile to get recommendations for |

## Example Usage

```
User: Search for Moana on Disney+
Assistant: [calls search_content with query="Moana"]

User: Add it to my watchlist
Assistant: [calls add_to_watchlist with the content_id from search results]

User: What am I in the middle of watching?
Assistant: [calls get_continue_watching]
```

## Development

```bash
git clone ...
cd mcp-disney
npm install
npm run build
npm run dev   # ts-node for local testing
```

## Notes

- Requires an active Disney+ subscription for all authenticated operations.
- Playwright launches a headless Chromium browser; first run downloads Chromium (~130 MB).
- The connector uses stealth techniques to reduce bot-detection friction, but Disney+ may occasionally require CAPTCHA or 2FA verification.
- Session cookies are stored locally at `~/.mcp-disney-session.json` with restricted permissions.

## License

MIT