Skip to main content
Glama
melenas1414

Sony TV MCP Server

by melenas1414
README.md
# Sony TV MCP Server

Servidor Model Context Protocol (MCP) tipo **HTTP-streaming** para controlar televisores Sony mediante la API IRCC. Este servidor permite controlar tu televisor Sony a través de comandos remotos desde aplicaciones compatibles con MCP.

## 🚀 Características

- ✅ Servidor MCP HTTP-streaming (no stdio)
- ✅ Control remoto completo del televisor Sony
- ✅ Obtención dinámica de comandos IRCC disponibles
- ✅ Herramientas predefinidas para acciones comunes (encendido, volumen, canales, etc.)
- ✅ Envío de comandos personalizados por nombre o código IRCC
- ✅ Configuración sencilla mediante variables de entorno

## 📋 Requisitos previos

- Node.js 18 o superior
- Televisor Sony compatible con la API IRCC
- El televisor debe estar en la misma red local
- Clave PSK (Pre-Shared Key) del televisor configurada

## 🔧 Instalación

1. Clona el repositorio:
```bash
git clone <tu-repositorio>
cd sony-mcp
```

2. Instala las dependencias:
```bash
npm install
```

3. Copia el archivo de ejemplo de variables de entorno y configúralo:
```bash
cp .env.example .env
```

4. Edita el archivo `.env` con los datos de tu televisor:
```env
SONY_TV_IP=192.168.1.100
SONY_TV_PSK=0000
PORT=3000
```

### 🔑 Cómo obtener la clave PSK

1. En tu televisor Sony, ve a: **Configuración → Red → Control remoto por red**
2. Activa la opción "Control remoto por red"
3. Selecciona "Autenticación" y configura una clave PSK (por defecto suele ser `0000`)
4. Anota esta clave para usarla en el archivo `.env`

## 🏗️ Compilación

Compila el proyecto TypeScript:
```bash
npm run build
```

## ▶️ Ejecución

El servidor arranca como un **servidor HTTP** en el puerto configurado (por defecto 3000).

### Modo desarrollo (con watch):
```bash
npm run dev
```

### Modo producción:
```bash
npm start
```

El servidor estará disponible en `http://localhost:3000` (o el puerto que configures en PORT).

## 🛠️ Herramientas disponibles

El servidor MCP expone las siguientes herramientas:

### Comandos generales

- **`sony_tv_get_commands`**: Obtiene todos los comandos IRCC disponibles del televisor
- **`sony_tv_send_command`**: Envía un comando específico por nombre o código IRCC
  - Parámetros: `command` (string) - Nombre del comando o código IRCC

### Comandos de acceso rápido

- **`sony_tv_power`**: Enciende/apaga el televisor
- **`sony_tv_volume_up`**: Sube el volumen
- **`sony_tv_volume_down`**: Baja el volumen
- **`sony_tv_mute`**: Silencia/activa el sonido
- **`sony_tv_channel_up`**: Canal siguiente
- **`sony_tv_channel_down`**: Canal anterior
- **`sony_tv_input`**: Cambia la fuente de entrada

## 📝 Configuración en Claude Desktop

Para usar este servidor MCP con Claude Desktop, agrega la siguiente configuración a tu archivo de configuración de Claude.

**Nota importante**: Este es un servidor HTTP-streaming, por lo que la configuración es diferente a los servidores stdio tradicionales.

**macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`

**Windows**: `%APPDATA%/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "sony-tv": {
      "url": "http://localhost:3000"
    }
  }
}
```

Asegúrate de que el servidor esté ejecutándose antes de usar Claude Desktop. Puedes iniciar el servidor con:

```bash
npm start
```

O si prefieres ejecutarlo en segundo plano con un puerto diferente:

```bash
PORT=3000 npm start &
```

## 🔍 Ejemplos de uso

Una vez configurado en Claude Desktop, puedes usar comandos naturales como:

- "Enciende el televisor Sony"
- "Sube el volumen del TV"
- "Cambia de canal"
- "Silencia el televisor"
- "Muéstrame todos los comandos disponibles del TV Sony"
- "Envía el comando Home al televisor"

## 🏗️ Arquitectura

```
sony-mcp/
├── src/
│   ├── index.ts           # Servidor MCP principal
│   └── sony-client.ts     # Cliente para la API IRCC de Sony
├── .env.example           # Plantilla de configuración
├── package.json           # Dependencias del proyecto
└── tsconfig.json          # Configuración de TypeScript
```

## 🔒 Seguridad

- La clave PSK se transmite en la cabecera `X-Auth-PSK`
- Las comunicaciones se realizan solo en la red local
- No almacenes credenciales en el código fuente
- Usa el archivo `.env` para configuración sensible (incluido en `.gitignore`)

## 🤝 Contribuciones

Las contribuciones son bienvenidas. Por favor:

1. Haz un fork del proyecto
2. Crea una rama para tu feature (`git checkout -b feature/nueva-funcionalidad`)
3. Commit tus cambios (`git commit -m 'Agrega nueva funcionalidad'`)
4. Push a la rama (`git push origin feature/nueva-funcionalidad`)
5. Abre un Pull Request

## 📄 Licencia

MIT

## 🐛 Solución de problemas

### El servidor no se conecta al televisor

- Verifica que el TV esté encendido y en la misma red
- Comprueba que la IP sea correcta
- Asegúrate de que el control remoto por red esté habilitado en el TV
- Verifica que la clave PSK sea correcta

### Los comandos no funcionan

- Ejecuta primero `sony_tv_get_commands` para ver los comandos disponibles
- Algunos televisores pueden tener nombres de comandos diferentes
- Verifica que no haya firewall bloqueando la comunicación

### Errores de compilación

- Asegúrate de tener Node.js 18 o superior
- Ejecuta `npm install` para instalar todas las dependencias
- Verifica que TypeScript esté correctamente instalado

## 📚 Recursos adicionales

- [Documentación oficial de Sony sobre la API IRCC](https://pro-bravia.sony.net/develop/)
- [Model Context Protocol](https://modelcontextprotocol.io/)
- [Especificación MCP SDK](https://github.com/modelcontextprotocol/typescript-sdk)