# Red Bee MCP Server
**Model Context Protocol (MCP) Server for Red Bee Media OTT Platform**
Connect to Red Bee Media streaming services from MCP-compatible clients like Claude Desktop, or integrate via HTTP/SSE for web applications. This server provides 33 tools for authentication, content search, user management, purchases, and system operations.
[](https://badge.fury.io/py/redbee-mcp)
[](https://www.python.org/downloads/)
## ๐ New: HTTP/SSE Mode
**Version 1.4.0** now supports multiple operating modes:
- **Stdio Mode** (original): For local AI agents like Claude Desktop
- **HTTP Mode**: REST API with JSON-RPC for web integration
- **SSE Mode**: Server-Sent Events for real-time communication
- **Both Modes**: Run stdio and HTTP simultaneously
## ๐ Quick Start
### Option 1: Using uvx (Recommended)
```bash
# Test the server
uvx redbee-mcp --help
# Stdio mode (original)
uvx redbee-mcp --stdio --customer YOUR_CUSTOMER --business-unit YOUR_BU
# HTTP mode (new)
uvx redbee-mcp --http --customer YOUR_CUSTOMER --business-unit YOUR_BU
# Both modes simultaneously
uvx redbee-mcp --both --customer YOUR_CUSTOMER --business-unit YOUR_BU
```
### Option 2: Using pip
```bash
pip install redbee-mcp
# Same usage as uvx, but with redbee-mcp command
redbee-mcp --http --customer YOUR_CUSTOMER --business-unit YOUR_BU
```
## ๐ Configuration
### For Claude Desktop (Stdio Mode)
Add to your Claude Desktop MCP configuration file:
**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows**: `%APPDATA%/Claude/claude_desktop_config.json`
```json
{
"mcpServers": {
"redbee-mcp": {
"command": "uvx",
"args": ["redbee-mcp", "--stdio"],
"env": {
"REDBEE_CUSTOMER": "CUSTOMER_NAME",
"REDBEE_BUSINESS_UNIT": "BUSINESS_UNIT_NAME"
}
}
}
}
```
### For Web Applications (HTTP Mode)
Start the HTTP server:
```bash
redbee-mcp --http --customer YOUR_CUSTOMER --business-unit YOUR_BU
```
The server will be available at `http://localhost:8000` with these endpoints:
| Method | URL | Description |
|--------|-----|-------------|
| GET | `/` | API information |
| GET | `/health` | Server health check |
| POST | `/` | JSON-RPC MCP requests |
| GET | `/sse` | Server-Sent Events stream |
## ๐ HTTP/SSE API Usage
### Example HTTP Requests
#### Health Check
```bash
curl http://localhost:8000/health
```
#### List Available Tools
```bash
curl -X POST http://localhost:8000/ \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/list",
"id": "1"
}'
```
#### Search Content
```bash
curl -X POST http://localhost:8000/ \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "search_content_v2",
"arguments": {
"query": "french films",
"types": "MOVIE",
"pageSize": 5
}
},
"id": "search-1"
}'
```
### Web Integration Example
```javascript
class RedBeeMCPClient {
constructor(baseUrl = 'http://localhost:8000') {
this.baseUrl = baseUrl;
}
async callTool(toolName, arguments) {
const response = await fetch(this.baseUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'tools/call',
params: { name: toolName, arguments },
id: Date.now().toString()
})
});
return response.json();
}
async searchContent(query, options = {}) {
return this.callTool('search_content_v2', {
query,
types: options.types || 'MOVIE,TV_SHOW',
pageSize: options.pageSize || 10,
...options
});
}
}
// Usage
const mcp = new RedBeeMCPClient();
const results = await mcp.searchContent('comedy movies');
```
### Server-Sent Events
Connect to real-time event stream:
```javascript
const eventSource = new EventSource('http://localhost:8000/sse');
eventSource.onmessage = function(event) {
const data = JSON.parse(event.data);
console.log('Event received:', data.type);
if (data.type === 'welcome') {
console.log('Connected with client ID:', data.client_id);
} else if (data.type === 'tools') {
console.log('Available tools:', data.tools.length);
}
};
```
## ๐ง Environment Variables
| Variable | Required | Description | Example |
|----------|----------|-------------|---------|
| `REDBEE_CUSTOMER` | โ
Yes | Red Bee customer identifier | `CUSTOMER_NAME` |
| `REDBEE_BUSINESS_UNIT` | โ
Yes | Red Bee business unit | `BUSINESS_UNIT_NAME` |
| `REDBEE_EXPOSURE_BASE_URL` | โ No | API base URL | `https://exposure.api.redbee.live` |
| `REDBEE_USERNAME` | โ No | Username for authentication | `user@example.com` |
| `REDBEE_PASSWORD` | โ No | Password for authentication | `password123` |
| `REDBEE_SESSION_TOKEN` | โ No | Existing session token | `eyJhbGciOiJIUzI1...` |
| `REDBEE_DEVICE_ID` | โ No | Device identifier | `web-browser-123` |
| `REDBEE_CONFIG_ID` | โ No | Configuration ID | `sandwich` |
| `REDBEE_TIMEOUT` | โ No | Request timeout in seconds | `30` |
## Available Tools
### ๐ Authentication
- `login_user` - Authenticate with username/password
- `create_anonymous_session` - Create anonymous session
- `validate_session_token` - Validate existing session
- `logout_user` - Logout and invalidate session
### ๐บ Content Management
- `get_public_asset_details` - Get asset details via public endpoint (no auth)
- `search_content_v2` - Search V2: free text query in asset fields (including descriptions)
- `get_asset_details` - Get detailed asset information
- `get_playback_info` - Get streaming URLs and playback info
- `search_assets_autocomplete` - Autocomplete search suggestions
- `get_epg_for_channel` - Get Electronic Program Guide for a channel
- `get_episodes_for_season` - Get all episodes in a season
- `get_assets_by_tag` - Get assets by tag type (e.g., origin)
- `list_assets` - List assets with advanced filters
- `search_multi_v3` - Multi-search for assets, tags, and participants
- `get_asset_collection_entries` - Get collection entries for an asset collection
- `get_asset_thumbnail` - Get thumbnail URL for an asset at a specific time
- `get_seasons_for_series` - Get all seasons for a TV series
### ๐ค User Management
- `signup_user` - Create new user account
- `change_user_password` - Change user password
- `get_user_profiles` - Get user profiles
- `add_user_profile` - Add new user profile
- `select_user_profile` - Select active profile
- `get_user_preferences` - Get user preferences
- `set_user_preferences` - Set user preferences
### ๐ณ Purchases & Transactions
- `get_account_purchases` - Get user purchases
- `get_account_transactions` - Get transaction history
- `get_offerings` - Get available product offerings
- `purchase_product_offering` - Purchase a product
- `cancel_purchase_subscription` - Cancel subscription
- `get_stored_payment_methods` - Get saved payment methods
- `add_payment_method` - Add new payment method
### โ๏ธ System Operations
- `get_system_config` - Get platform configuration
- `get_system_time` - Get server time
- `get_user_location` - Get user location by IP
- `get_active_channels` - Get active TV channels
- `get_user_devices` - Get registered devices
- `delete_user_device` - Delete a device
## ๐งช Testing
### Test HTTP Server
```bash
# Start the server
redbee-mcp --http --customer DEMO --business-unit DEMO
# In another terminal, run the test script
python example_usage.py
```
### Test Stdio Mode
```bash
# Using uvx
REDBEE_CUSTOMER=CUSTOMER_NAME REDBEE_BUSINESS_UNIT=BUSINESS_UNIT_NAME uvx redbee-mcp --stdio
# Using pip installation
REDBEE_CUSTOMER=CUSTOMER_NAME REDBEE_BUSINESS_UNIT=BUSINESS_UNIT_NAME redbee-mcp --stdio
```
### Test MCP Protocol Manually
```bash
# Initialize and list tools
echo '{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {"roots": {"listChanged": true}}, "clientInfo": {"name": "test", "version": "1.0.0"}}}
{"jsonrpc": "2.0", "method": "notifications/initialized"}
{"jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {}}' | uvx redbee-mcp --stdio
```
## ๐๏ธ Architecture
### Multi-Mode Design
The server is architected with clean separation of concerns:
- **McpHandler**: Core business logic shared between all modes
- **Stdio Server**: Traditional MCP stdio interface for AI agents
- **HTTP Server**: FastAPI-based REST/SSE interface for web apps
- **CLI**: Multi-mode command line interface
### File Structure
```
src/redbee_mcp/
โโโ handler.py # Core business logic
โโโ server.py # Stdio MCP server
โโโ http_server.py # HTTP/SSE server
โโโ cli.py # Multi-mode CLI
โโโ models.py # Data models
โโโ tools/ # Tool modules
โโโ auth.py
โโโ content.py
โโโ purchases.py
โโโ system.py
โโโ user_management.py
```
## ๐ Usage Examples
### Search for French Movies (Stdio Mode)
Ask your AI assistant:
> "Search for French documentaries about nature"
### Search for Content (HTTP Mode)
```javascript
const mcp = new RedBeeMCPClient();
const results = await mcp.searchContent('french documentaries', {
types: 'MOVIE',
locale: ['fr'],
pageSize: 10
});
```
### Get TV Show Information
```python
# First search for a TV show
{
"query": "Game of Thrones",
"types": "TV_SHOW"
}
# Then get its seasons
{
"assetId": "tv-show-asset-id"
}
```
### User Authentication
```python
{
"username": "user@example.com",
"password": "password123",
"remember_me": true
}
```
## ๐ Production Deployment
### Docker
```dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install -e .
EXPOSE 8000
# HTTP mode
CMD ["redbee-mcp", "--http", "--host", "0.0.0.0", "--port", "8000"]
```
### Environment Setup
```bash
export REDBEE_CUSTOMER="your-customer"
export REDBEE_BUSINESS_UNIT="your-business-unit"
export REDBEE_EXPOSURE_BASE_URL="https://exposure.api.redbee.live"
```
### Systemd Service
```ini
# /etc/systemd/system/redbee-mcp-http.service
[Unit]
Description=Red Bee MCP HTTP Server
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/redbee-mcp
Environment=REDBEE_CUSTOMER=your-customer
Environment=REDBEE_BUSINESS_UNIT=your-business-unit
ExecStart=/usr/local/bin/redbee-mcp --http --host 0.0.0.0 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
```
## ๐ Security Considerations
### CORS Configuration
For production HTTP deployments, configure CORS properly in `http_server.py`:
```python
self.app.add_middleware(
CORSMiddleware,
allow_origins=["https://yourdomain.com"], # Specify allowed domains
allow_credentials=True,
allow_methods=["GET", "POST"],
allow_headers=["Content-Type"],
)
```
## ๐ API Reference
The Red Bee MCP Server provides access to Red Bee Media Exposure API through:
- **MCP Tools**: For AI agents and local applications
- **HTTP/JSON-RPC**: For web applications and remote integration
- **Server-Sent Events**: For real-time updates
Each tool includes:
- Input validation with required and optional parameters
- Comprehensive error handling and messages
- Type safety for all inputs and outputs
- Detailed documentation and examples
## ๐ ๏ธ Development
### Requirements
- Python 3.8+
- MCP SDK
- aiohttp for HTTP requests
- pydantic for data validation
- FastAPI and uvicorn for HTTP mode
### Local Development
```bash
# Clone and install
git clone https://github.com/tamsibesson/redbee-mcp
cd redbee-mcp
pip install -e .
# Run in development mode
PYTHONPATH=src python -m redbee_mcp --http --customer TEST --business-unit TEST
```
## ๐ License
MIT License - see LICENSE file for details.
## ๐ Support
For issues and questions:
- GitHub Issues: https://github.com/tamsibesson/redbee-mcp/issues
- Red Bee Media Documentation: https://www.redbeemedia.com/
## ๐ Related
- [Model Context Protocol](https://modelcontextprotocol.io/)
- [Claude Desktop](https://claude.ai/desktop)
- [Red Bee Media](https://www.redbeemedia.com/)
- [FastAPI](https://fastapi.tiangolo.com/)