Red Bee MCP Server

Un servidor MCP para la plataforma OTT de Red Bee Media, que ofrece herramientas para autenticación, búsqueda de contenido, gestión de usuarios, compras y operaciones del sistema.

Documentación

Red Bee MCP Server

Servidor de Protocolo de Contexto de Modelo (MCP) para la plataforma OTT de Red Bee Media

Conéctate a los servicios de streaming de Red Bee Media desde clientes compatibles con MCP como Claude Desktop, o intégralo mediante HTTP/SSE para aplicaciones web. Este servidor proporciona 65 herramientas alineadas con la Exposure API para autenticación, búsqueda de catálogo, recomendaciones, gestión de usuarios, compras y operaciones del sistema.

PyPI version Python 3.8+

🆕 Nuevo: Modo HTTP/SSE

La versión 1.5.0 alinea las herramientas con la Exposure API actual y admite múltiples modos de funcionamiento:

  • Modo Stdio (original): Para agentes de IA locales como Claude Desktop
  • Modo HTTP: API REST con JSON-RPC para integración web
  • Modo SSE: Eventos enviados por el servidor (Server-Sent Events) para comunicación en tiempo real
  • Ambos modos: Ejecutar stdio y HTTP simultáneamente

🚀 Inicio rápido

Opción 1: Usando uvx (recomendado)

# 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

Opción 2: Usando pip

pip install redbee-mcp

# Same usage as uvx, but with redbee-mcp command
redbee-mcp --http --customer YOUR_CUSTOMER --business-unit YOUR_BU

📋 Configuración

Para Claude Desktop (modo Stdio)

Añade a tu archivo de configuración MCP de Claude Desktop:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "redbee-mcp": {
      "command": "uvx",
      "args": ["redbee-mcp", "--stdio"],
      "env": {
        "REDBEE_CUSTOMER": "CUSTOMER_NAME",
        "REDBEE_BUSINESS_UNIT": "BUSINESS_UNIT_NAME"
      }
    }
  }
}

Para aplicaciones web (modo HTTP)

Inicia el servidor HTTP:

redbee-mcp --http --customer YOUR_CUSTOMER --business-unit YOUR_BU

El servidor estará disponible en http://localhost:8000 con estos endpoints:

MétodoURLDescripción
GET/Información de la API
GET/healthComprobación de estado del servidor
POST/Solicitudes MCP JSON-RPC
GET/sseFlujo de eventos enviados por el servidor

🌐 Uso de la API HTTP/SSE

Ejemplos de solicitudes HTTP

Comprobación de estado

curl http://localhost:8000/health

Listar herramientas disponibles

curl -X POST http://localhost:8000/ \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/list",
    "id": "1"
  }'

Buscar contenido

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"
  }'

Ejemplo de integración web

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');

Eventos enviados por el servidor

Conéctate al flujo de eventos en tiempo real:

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);
  }
};

🔧 Variables de entorno

VariableObligatoriaDescripciónEjemplo
REDBEE_CUSTOMER✅ SíIdentificador de cliente de Red BeeCUSTOMER_NAME
REDBEE_BUSINESS_UNIT✅ SíUnidad de negocio de Red BeeBUSINESS_UNIT_NAME
REDBEE_EXPOSURE_BASE_URL❌ NoURL base de la APIhttps://exposure.api.redbee.live
REDBEE_USERNAME❌ NoNombre de usuario para autenticaciónuser@example.com
REDBEE_PASSWORD❌ NoContraseña para autenticaciónpassword123
REDBEE_SESSION_TOKEN❌ NoToken de sesión existenteeyJhbGciOiJIUzI1...
REDBEE_DEVICE_ID❌ NoIdentificador de dispositivoweb-browser-123
REDBEE_CONFIG_ID❌ NoID de configuraciónsandwich
REDBEE_TIMEOUT❌ NoTiempo de espera de solicitud en segundos30

Herramientas disponibles

Alineadas con Exposure API 1.0.0 (OAS 3.1).

Autenticación

  • login_user - Iniciar sesión mediante POST /v3/.../auth/login
  • create_anonymous_session - Sesión anónima mediante POST /v2/.../auth/anonymous
  • validate_session_token - Validar sesión mediante GET /v2/.../auth/session
  • logout_user - Cerrar sesión mediante DELETE /v2/.../auth/login
  • request_password_reset - Enviar un correo de restablecimiento mediante GET /v2/.../user/password/reset/{username}

Contenido

  • get_public_asset_details - Recurso público por ID o slug
  • search_content_v2 - Búsqueda de texto libre incluyendo descripciones
  • get_asset_details - Detalles del recurso (sesión anónima si es necesario)
  • get_playback_info - Derecho de reproducción mediante GET /v2/.../entitlement/{assetId}/play
  • entitle_asset - Otorgar derecho al usuario sobre un recurso
  • search_assets_autocomplete - Autocompletado de títulos
  • get_epg_for_channel - EPG para un canal (admite slugs)
  • get_epg_all_channels - EPG para todos los canales
  • get_episodes_for_season - Temporada por ID o slug
  • get_season_episodes - Episodios de la temporada N de una serie
  • get_assets_by_tag - Etiquetas únicas referenciadas por los recursos
  • list_tags / get_tag - Catálogo de etiquetas
  • list_assets - Listado del catálogo principal
  • search_multi_v3 - Búsqueda por prefijo en recursos y etiquetas
  • get_asset_collection_entries - Entradas de colección
  • get_asset_thumbnail - URL de miniatura (redirección 307)
  • get_seasons_for_series - Temporadas de una serie de TV
  • get_next_episode / get_previous_episode - Episodios adyacentes

Descubrimiento

  • get_watch_next - Lista "ver a continuación" (funciona sin iniciar sesión)
  • get_user_recommendations - Recomendaciones personalizadas
  • get_continue_watching - Carril "continuar viendo"
  • get_last_viewed_offset - Marcadores de reproducción
  • get_continue_tvshow - Episodio en curso de una serie

Gestión de usuarios

  • signup_user - Crear cuenta (emailAddress se convierte en nombre de usuario)
  • change_user_password / change_user_email
  • get_user_details / update_user_details
  • get_user_profiles / add_user_profile / select_user_profile
  • update_user_profile / delete_user_profile
  • get_user_preferences / set_user_preferences
  • get_preference_list / add_asset_to_list / remove_asset_from_list - favoritos / listas de seguimiento

Compras

  • get_account_purchases / get_account_transactions / get_active_purchases
  • get_offerings - Ofertas para un país (detectado por IP si se omite)
  • initialize_purchase - Tipos de pago y precio con descuento (experimental)
  • purchase_product_offering / cancel_purchase_subscription
  • get_stored_payment_methods / add_payment_method / delete_payment_method
  • get_account_products - Productos con derecho vs. sin derecho

Sistema

  • get_system_config - GET /v2/.../system/config
  • get_system_time - GET /v2/time
  • get_user_location - GET /v2/location
  • get_active_channels / get_channel_onnow - Estado de canales en vivo
  • get_user_devices / delete_user_device
  • get_client_config - Páginas y componentes de marca blanca
  • get_document - Política de privacidad, términos, documentos de consentimiento

🧪 Pruebas

Probar el servidor HTTP

# Start the server
redbee-mcp --http --customer DEMO --business-unit DEMO

# In another terminal, run the test script
python example_usage.py

Probar el modo Stdio

# 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

Probar el protocolo MCP manualmente

# 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

🏗️ Arquitectura

Diseño multimodo

El servidor está diseñado con una separación clara de responsabilidades:

  • McpHandler: Lógica de negocio principal compartida entre todos los modos
  • Servidor Stdio: Interfaz MCP stdio tradicional para agentes de IA
  • Servidor HTTP: Interfaz REST/SSE basada en FastAPI para aplicaciones web
  • CLI: Interfaz de línea de comandos multimodo

Estructura de archivos

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
    ├── _common.py
    ├── auth.py
    ├── content.py
    ├── discovery.py
    ├── purchases.py
    ├── system.py
    └── user_management.py

📖 Ejemplos de uso

Buscar películas francesas (modo Stdio)

Pregunta a tu asistente de IA:

"Busca documentales franceses sobre naturaleza"

Buscar contenido (modo HTTP)

const mcp = new RedBeeMCPClient();
const results = await mcp.searchContent('french documentaries', {
  types: 'MOVIE',
  locale: ['fr'],
  pageSize: 10
});

Obtener información de un programa de TV

# First search for a TV show
{
  "query": "Game of Thrones",
  "types": "TV_SHOW"
}

# Then get its seasons
{
  "assetId": "tv-show-asset-id"
}

Autenticación de usuario

{
  "username": "user@example.com",
  "password": "password123",
  "remember_me": true
}

🚀 Despliegue en producción

Docker

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"]

Configuración del entorno

export REDBEE_CUSTOMER="your-customer"
export REDBEE_BUSINESS_UNIT="your-business-unit"
export REDBEE_EXPOSURE_BASE_URL="https://exposure.api.redbee.live"

Servicio Systemd

# /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

🔒 Consideraciones de seguridad

Configuración de CORS

Para despliegues HTTP en producción, configura CORS correctamente en http_server.py:

self.app.add_middleware(
    CORSMiddleware,
    allow_origins=["https://yourdomain.com"],  # Specify allowed domains
    allow_credentials=True,
    allow_methods=["GET", "POST"],
    allow_headers=["Content-Type"],
)

📝 Referencia de la API

El Red Bee MCP Server proporciona acceso a la Exposure API de Red Bee Media mediante:

  • Herramientas MCP: Para agentes de IA y aplicaciones locales
  • HTTP/JSON-RPC: Para aplicaciones web e integración remota
  • Eventos enviados por el servidor: Para actualizaciones en tiempo real

Cada herramienta incluye:

  • Validación de entrada con parámetros obligatorios y opcionales
  • Manejo integral de errores y mensajes
  • Seguridad de tipos para todas las entradas y salidas
  • Documentación detallada y ejemplos

🛠️ Desarrollo

Requisitos

  • Python 3.8+
  • SDK de MCP
  • pydantic para validación de datos
  • FastAPI y uvicorn para el modo HTTP

Desarrollo local

# 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

📄 Licencia

Licencia MIT: consulta el archivo LICENSE para más detalles.

🆘 Soporte

Para problemas y preguntas:

🔗 Relacionados