MCP
Conecta tu asistente de IA a tu cuenta: sube un vídeo, codifícalo, cífralo y publica un reproductor sin salir de la conversación. Un comando para instalarlo, y nada que mantener.
Qué es #
MCP es el protocolo con el que un asistente de IA usa herramientas externas. @airi.live/mcp es nuestro servidor: expone tu cuenta como 32 herramientas que Claude, Cursor o cualquier cliente compatible puede llamar — subir un fichero, presupuestar una codificación, lanzarla, esperar a que termine, crear un reproductor y devolverte el embed.
Corre en tu máquina, no en la nuestra. Tu credencial no sale de ahí, y los bytes de una subida van del disco al bucket directamente, sin pasar por nuestro servidor ni por el asistente.
No es un producto aparte
curl. Lo que añade es la forma: descripciones que un modelo entiende, y tres herramientas que hacen varias llamadas seguidas porque encadenarlas a mano es donde se rompen las cosas.Instalarlo #
Primero saca una credencial en Desarrolladores, marcando los permisos que quieras darle al asistente. Después, un comando:
claude mcp add airi --env AIRI_KMS_TOKEN=kms_live_... -- npx -y @airi.live/mcp
Para Claude Desktop, Cursor, Windsurf y cualquier cliente que se configure con JSON:
{ "mcpServers": { "airi": { "command": "npx", "args": ["-y", "@airi.live/mcp"], "env": { "AIRI_KMS_TOKEN": "kms_live_..." } } } }
Necesitas Node 20 o superior. No hay nada que instalar: npx lo descarga la primera vez y lo actualiza solo.
| Opción | Variable | Por defecto |
|---|---|---|
--token | AIRI_KMS_TOKEN | — (obligatorio) |
--namespace | AIRI_KMS_NAMESPACE | el de tu credencial |
--url | AIRI_KMS_URL | https://kms.airi.live |
--allow-admin | AIRI_MCP_ALLOW_ADMIN=true | desactivado |
--timeout | AIRI_KMS_TIMEOUT_MS | 60000 |
Las dos formas funcionan y la opción gana sobre la variable, pero el token va mejor en el bloque env: un argumento aparece en la lista de procesos de tu máquina y una variable de entorno no. npx @airi.live/mcp --help lo lista todo.
Usarlo #
A partir de ahí le hablas en tu idioma. Por ejemplo: *«sube ~/Vídeos/keynote.mp4, codifícalo a 1080p y 720p con DRM, y dame un embed para pegar en la web»*.
airi_storage_upload path=~/Vídeos/keynote.mp4 → id del fichero airi_encoding_quote heights=[1080,720] duration=600 → $0.16 airi_encoding_start package=hls+dash drm=true → id del trabajo airi_encoding_job wait=true → completado airi_player_create name="Web" → id del player airi_player_embed file=<id> → URL firmada + <iframe>
| Grupo | Herramientas |
|---|---|
| Almacenamiento | subir, listar, ver, firmar URL, borrar, uso |
| Codificación | presupuestar, calidades, lanzar, consultar, listar, cancelar, empaquetar |
| Reproductores | crear, listar, actualizar, borrar, embed |
| Claves DRM | crear, obtener, listar, rotar, periodos |
| Políticas | definir, listar, resolver, borrar |
| Consumo | saldo, licencias, estadísticas |
| Lo demás | descubrir endpoints, llamar a la API |
Tres hacen más de una llamada, porque la API está pensada para navegadores y un asistente no lo es. airi_storage_upload recibe una ruta y devuelve el fichero ya sellado — declaración, subida multiparte, recogida de ETags y cierre, todo dentro. airi_encoding_job con wait espera a que el trabajo termine, así que codificar es un paso y no un bucle de consultas. Y airi_player_embed devuelve el <iframe> listo junto al reproductor resuelto.
Las dos últimas son una salida de emergencia: leen la referencia de la API en vivo y ejecutan lo que encuentren. Un endpoint nuevo está disponible el día que se publica, sin esperar a que actualicemos el paquete.
Qué no puede hacer #
Le estás dando acceso a tu cuenta a un modelo de lenguaje. Hay dos cosas que el servidor se niega a hacer aunque se lo pidas, y conviene que las sepas antes de instalarlo.
No le entrega tus claves de contenido al modelo
key y el iv son el secreto AES que descifra tu vídeo, y el resultado de una herramienta queda literal en el historial del asistente — que se guarda, se reenvía y a menudo viaja a un tercero. Las herramientas de claves devuelven el identificador, las cajas PSSH y las URLs de licencia, y ocultan el resto. Se puede pedir explícitamente con includeKeyMaterial para cifrar en local con shaka-packager; codificar con drm: true no lo necesita nunca.No toca tu saldo ni tu cuenta
/v1/admin (acredita saldos, crea credenciales), /v1/auth (emite tokens de sesión) y /cas (la llamada del proveedor de DRM) están vetados independientemente de lo que permita tu token. Lo que puede hacer un agente y lo que puede hacer una credencial son preguntas distintas, y la respuesta a la primera no debería depender de lo generosa que fuera la segunda.Todo lo demás sí es alcanzable, porque es el trabajo. Borrar y codificar llevan la marca destructiveHint del protocolo, así que tu cliente puede pedirte confirmación antes de ejecutarlas, y las descripciones dicen sin rodeos qué no tiene vuelta atrás: un contentId es permanente en el proveedor de DRM, un fichero borrado no se recupera, y cancelar una codificación detiene el cobro pero no al codificador.
Dale sólo lo que necesita #
El límite real es la credencial: el servidor no puede conceder lo que tu token no tiene. Crea una para el asistente, en vez de reutilizar la tuya, marcando sólo los permisos del trabajo que le vas a pedir.
| Permiso | Qué habilita |
|---|---|
| Almacenamiento | subir, listar, firmar y borrar ficheros |
| Codificación | presupuestar, lanzar y cancelar trabajos |
| Reproductores | crear y editar reproductores y sus embeds |
| Claves y políticas | DRM, políticas de licencia, saldo y consumo |
Un asistente de sólo lectura es una credencial marcada sin escritura: podrá mirarlo todo y no cambiar nada. Y revocarla desde Desarrolladores la corta en la siguiente llamada, no dentro de un minuto.
El gasto sigue siendo tuyo
Si algo no va #
| Lo que ves | Qué pasa |
|---|---|
UNAUTHORIZED | El token está mal o fue revocado. Saca otro en Desarrolladores |
FORBIDDEN | A la credencial le falta ese permiso. Créala de nuevo marcando el que corresponda |
INSUFFICIENT_FUNDS | Sin saldo. Leer sigue funcionando; subir, codificar y crear claves no |
| «needs a concrete namespace» | Tu token no está fijado a un espacio: añade --namespace |
| El servidor no arranca | npx @airi.live/mcp --help desde una terminal te dice qué falta |
Los errores llegan al asistente con su código y una pista de qué hacer, así que en general se corrige solo y te lo cuenta. Si no, los registros del cliente MCP llevan lo que el servidor escribió.