Red Bee MCP Server

Um servidor MCP para a plataforma OTT da Red Bee Media, oferecendo ferramentas para autenticação, busca de conteúdo, gerenciamento de usuários, compras e operações do sistema.

Documentação

Red Bee MCP Server

Servidor de Model Context Protocol (MCP) para a Plataforma OTT da Red Bee Media

Conecte-se aos serviços de streaming da Red Bee Media a partir de clientes compatíveis com MCP, como o Claude Desktop, ou integre via HTTP/SSE para aplicações web. Este servidor fornece 65 ferramentas alinhadas com a Exposure API para autenticação, busca no catálogo, recomendações, gerenciamento de usuários, compras e operações de sistema.

PyPI version Python 3.8+

🆕 Novo: Modo HTTP/SSE

Versão 1.5.0 alinha as ferramentas com a Exposure API atual e suporta múltiplos modos de operação:

  • Modo Stdio (original): Para agentes de IA locais como o Claude Desktop
  • Modo HTTP: API REST com JSON-RPC para integração web
  • Modo SSE: Server-Sent Events para comunicação em tempo real
  • Ambos os Modos: Execute stdio e HTTP simultaneamente

🚀 Início Rápido

Opção 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

Opção 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

📋 Configuração

Para Claude Desktop (Modo Stdio)

Adicione ao seu arquivo de configuração MCP do 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 Aplicações Web (Modo HTTP)

Inicie o servidor HTTP:

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

O servidor estará disponível em http://localhost:8000 com estes endpoints:

MétodoURLDescrição
GET/Informações da API
GET/healthVerificação de saúde do servidor
POST/Requisições MCP JSON-RPC
GET/sseFluxo de Server-Sent Events

🌐 Uso da API HTTP/SSE

Exemplos de Requisições HTTP

Verificação de Saúde

curl http://localhost:8000/health

Listar Ferramentas Disponíveis

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

Buscar Conteúdo

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

Exemplo de Integração 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');

Server-Sent Events

Conecte-se ao fluxo de eventos em tempo 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);
  }
};

🔧 Variáveis de Ambiente

VariávelObrigatóriaDescriçãoExemplo
REDBEE_CUSTOMER✅ SimIdentificador de cliente Red BeeCUSTOMER_NAME
REDBEE_BUSINESS_UNIT✅ SimUnidade de negócio Red BeeBUSINESS_UNIT_NAME
REDBEE_EXPOSURE_BASE_URL❌ NãoURL base da APIhttps://exposure.api.redbee.live
REDBEE_USERNAME❌ NãoNome de usuário para autenticaçãouser@example.com
REDBEE_PASSWORD❌ NãoSenha para autenticaçãopassword123
REDBEE_SESSION_TOKEN❌ NãoToken de sessão existenteeyJhbGciOiJIUzI1...
REDBEE_DEVICE_ID❌ NãoIdentificador de dispositivoweb-browser-123
REDBEE_CONFIG_ID❌ NãoID de configuraçãosandwich
REDBEE_TIMEOUT❌ NãoTempo limite de requisição em segundos30

Ferramentas Disponíveis

Alinhadas com a Exposure API 1.0.0 (OAS 3.1).

Autenticação

  • login_user - Login via POST /v3/.../auth/login
  • create_anonymous_session - Sessão anônima via POST /v2/.../auth/anonymous
  • validate_session_token - Validar sessão via GET /v2/.../auth/session
  • logout_user - Logout via DELETE /v2/.../auth/login
  • request_password_reset - Enviar e-mail de redefinição via GET /v2/.../user/password/reset/{username}

Conteúdo

  • get_public_asset_details - Ativo público por ID ou slug
  • search_content_v2 - Busca de texto livre incluindo descrições
  • get_asset_details - Detalhes do ativo (sessão anônima se necessário)
  • get_playback_info - Direito de reprodução via GET /v2/.../entitlement/{assetId}/play
  • entitle_asset - Conceder direito de acesso ao usuário para um ativo
  • search_assets_autocomplete - Autocompletar título
  • get_epg_for_channel - EPG para um canal (slugs suportados)
  • get_epg_all_channels - EPG para todos os canais
  • get_episodes_for_season - Temporada por ID ou slug
  • get_season_episodes - Episódios da temporada N de uma série
  • get_assets_by_tag - Tags únicas referenciadas por ativos
  • list_tags / get_tag - Catálogo de tags
  • list_assets - Listagem principal do catálogo
  • search_multi_v3 - Busca por prefixo em ativos e tags
  • get_asset_collection_entries - Entradas de coleção
  • get_asset_thumbnail - URL de miniatura (redirecionamento 307)
  • get_seasons_for_series - Temporadas de uma série de TV
  • get_next_episode / get_previous_episode - Episódios adjacentes

Descoberta

  • get_watch_next - Lista de assistir em seguida (funciona sem login)
  • get_user_recommendations - Recomendações personalizadas
  • get_continue_watching - Trilha de continuar assistindo
  • get_last_viewed_offset - Marcadores de reprodução
  • get_continue_tvshow - Episódio em andamento para uma série

Gerenciamento de Usuários

  • signup_user - Criar conta (emailAddress torna-se nome de usuário)
  • 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 assistir

Compras

  • get_account_purchases / get_account_transactions / get_active_purchases
  • get_offerings - Ofertas para um país (detectado por IP se omitido)
  • initialize_purchase - Tipos de pagamento e preço com desconto (experimental)
  • purchase_product_offering / cancel_purchase_subscription
  • get_stored_payment_methods / add_payment_method / delete_payment_method
  • get_account_products - Produtos com direito vs sem direito

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 - Status de canal ao vivo
  • get_user_devices / delete_user_device
  • get_client_config - Páginas e componentes whitelabel
  • get_document - Política de privacidade, termos, documentos de consentimento

🧪 Testes

Testar Servidor HTTP

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

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

Testar 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

Testar 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

🏗️ Arquitetura

Design Multi-Modo

O servidor é arquitetado com separação clara de responsabilidades:

  • McpHandler: Lógica de negócio central compartilhada entre todos os modos
  • Stdio Server: Interface MCP stdio tradicional para agentes de IA
  • HTTP Server: Interface REST/SSE baseada em FastAPI para aplicações web
  • CLI: Interface de linha de comando multi-modo

Estrutura de Arquivos

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

📖 Exemplos de Uso

Buscar Filmes Franceses (Modo Stdio)

Pergunte ao seu assistente de IA:

"Busque documentários franceses sobre natureza"

Buscar Conteúdo (Modo HTTP)

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

Obter Informações de 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"
}

Autenticação de Usuário

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

🚀 Implantação em Produção

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

Configuração de Ambiente

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

Serviço 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

🔒 Considerações de Segurança

Configuração CORS

Para implantações HTTP em produção, configure o CORS corretamente em 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"],
)

📝 Referência da API

O Red Bee MCP Server fornece acesso à Exposure API da Red Bee Media através de:

  • Ferramentas MCP: Para agentes de IA e aplicações locais
  • HTTP/JSON-RPC: Para aplicações web e integração remota
  • Server-Sent Events: Para atualizações em tempo real

Cada ferramenta inclui:

  • Validação de entrada com parâmetros obrigatórios e opcionais
  • Tratamento abrangente de erros e mensagens
  • Segurança de tipos para todas as entradas e saídas
  • Documentação detalhada e exemplos

🛠️ Desenvolvimento

Requisitos

  • Python 3.8+
  • MCP SDK
  • pydantic para validação de dados
  • FastAPI e uvicorn para o modo HTTP

Desenvolvimento 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

📄 Licença

Licença MIT - consulte o arquivo LICENSE para detalhes.

🆘 Suporte

Para problemas e dúvidas:

🔗 Relacionados