Mutator

Redacta y prueba formatos que convierten una foto de producto o sitio web en videos para TikTok e Instagram, y lee los resultados. No puede publicar.

Servidor MCP alojado

npx add-mcp 'https://mutator.app/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Servidor MCP

Conecta un agente de IA (Claude, ChatGPT, Cursor, cualquier cosa que hable Model Context Protocol) a un espacio de trabajo de Mutator, para que pueda encontrar automatizaciones, probarlas, leer lo que ocurrió e informar sobre los resultados.

Endpoint: https://mutator.app/mcp

Lo único que debes saber

Ninguna herramienta de este servidor puede publicar nada.

No es un alcance que puedas ampliar ni un permiso que puedas otorgar. Es la forma del servidor. Un agente puede crear una ejecución, observarla, leer lo que produjo y contártelo; una persona abre Mutator y decide si algo de eso llega a una cuenta real.

Tampoco puede hacerlo la API pública, desde que se eliminaron las aprobaciones el 20 de septiembre de 2026: una ejecución no publica nada en absoluto, y una publicación solo existe cuando una persona ha colocado un archivo concreto en la programación de una cuenta concreta, en Mutator, con su nombre en la decisión. No hay ninguna clave de ningún alcance que llegue a eso. Consulta lo que el marketing pueda afirmar al respecto y lo que se les dijo a las revisiones de la plataforma.

Conexión

Dos formas de acceso, y ambas llegan exactamente a las mismas herramientas:

  • OAuth, para clientes que solo reciben la dirección: conectores de Claude y ChatGPT, Claude Code y cualquier cliente que siga la especificación de autorización de MCP. El cliente abre Mutator en un navegador, el propietario del espacio de trabajo inicia sesión, elige el espacio de trabajo y decide si puede iniciar ejecuciones.
  • Una clave de API como token de portador, para clientes configurados con una cabecera: las mismas claves que usa la API pública, creadas en Configuración → Claves de API. Consulta la documentación de la API pública, que indica qué alcanza una clave en cada plan.

Cualquiera de las dos necesita al propietario del espacio de trabajo, en cualquier plan de pago. read llega a todas las herramientas excepto a las cuatro de escritura: mutator_start_run, mutator_create_automation, mutator_save_automation_graph y mutator_set_schedule. Otorga solo lectura a menos que el agente realmente necesite crear o ejecutar cosas. Nada, en ningún caso, puede publicar.

Claude o ChatGPT

En Claude, añade un conector personalizado en Configuración → Conectores. En ChatGPT, añade un conector con OAuth. Pega https://mutator.app/mcp y nada más, luego aprueba en la ventana que abre Mutator. Las aplicaciones conectadas aparecen en Configuración → Claves de API, donde cada una puede desconectarse.

Claude Code

claude mcp add --transport http mutator https://mutator.app/mcp

Luego ejecuta /mcp en Claude Code e inicia sesión. Para usar una clave en su lugar, añade --header "Authorization: Bearer loop_sk_..." al comando.

Cualquier cosa con configuración JSON

{
  "mcpServers": {
    "mutator": {
      "type": "http",
      "url": "https://mutator.app/mcp",
      "headers": { "Authorization": "Bearer loop_sk_..." }
    }
  }
}

Cómo funciona OAuth aquí

Mutator es su propio servidor de autorización y /mcp su único recurso protegido, siguiendo la especificación de autorización de MCP (2025-06-18 y posteriores):

  • Una solicitud sin clave ni token recibe 401 con WWW-Authenticate: Bearer resource_metadata="https://mutator.app/.well-known/oauth-protected-resource/mcp". El protocolo de negociación incluía: un cliente que recibiera un 200 de initialize nunca ofrecería iniciar sesión.
  • Metadatos: /.well-known/oauth-protected-resource (RFC 9728) y /.well-known/oauth-authorization-server (RFC 8414).
  • Los clientes se registran en /oauth/register (RFC 7591). Los clientes públicos usan solo PKCE; un cliente que no indique método de autenticación recibe un secreto.
  • /oauth/authorize usa el flujo de código con PKCE (solo S256) y un resource de https://mutator.app/mcp (RFC 8707). La persona aprueba en /connect, que muestra dónde se enviará la respuesta. El nombre de una aplicación es su propia afirmación; la dirección de redirección se fija al registrarse.
  • /oauth/token emite un token de acceso por una hora y un token de actualización por 90 días, rotado en cada uso. Un token de actualización presentado de nuevo después de haberse canjeado finaliza la conexión. /oauth/revoke (RFC 7009) también la finaliza.
  • Un token de acceso se acepta solo en /mcp, nunca en /api/v1, y deja de funcionar en el momento en que se revoca la conexión o el espacio de trabajo abandona un plan de pago, como una clave.

Comprueba que funciona pidiendo al agente que llame a mutator_whoami, o desde una terminal:

curl -s https://mutator.app/mcp -H "Authorization: Bearer loop_sk_..." -H "content-type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

GET https://mutator.app/mcp no necesita clave ni token y devuelve una descripción del servidor y sus herramientas, útil para comprobar la accesibilidad y para cualquier cosa que catalogue servidores MCP.

Esa misma URL abre una página en un navegador. Una dirección sirve para ambos: una solicitud que pida text/html obtiene la página, y todo lo demás (un POST, o un GET que envíe */* o application/json) obtiene el protocolo. Nada del endpoint cambió para un cliente que ya lo usaba.

Crear una automatización

Un agente lee el vocabulario antes de escribir: mutator_list_brands para la marca a la que pertenece la automatización, mutator_list_step_types para los pasos que existen, mutator_list_formats para los formatos de contenido y mutator_list_connections para la cuenta que debe nombrar un paso de publicación; no hay un campo "publicar en TikTok", solo "publicar en esta conexión, que resulta ser TikTok".

Luego mutator_create_automation con un grafo de nodos { key, type, position, config } y aristas { sourceKey, targetKey }. La mayoría de los ajustes tienen valores predeterminados, así que config: {} suele ser suficiente. Dos ramas desde un mismo paso es cómo se produce la misma idea de dos maneras.

Un grafo inválido se guarda de todos modos, con los problemas devueltos como issues. Esto es deliberado: a medio construir es un estado normal para un borrador, y fallar toda la llamada perdería el trabajo. Dos ajustes se rechazan directamente al guardar en lugar de al ejecutar, porque el ejecutor los rechaza horas después, una vez que alguien ha activado y se ha ido: varias versiones de un mismo vídeo y un lote de imágenes que no sea 1 o exactamente 4.

Herramientas

HerramientaAlcanceQué hace
mutator_whoamilecturaA qué espacio de trabajo llega esta clave y qué puede hacer
mutator_list_automationslecturaCada automatización con id, nombre y estado
mutator_get_automationlecturaUna automatización: estado, programación, límites de gasto
mutator_list_runslecturaEjecuciones recientes de una automatización
mutator_get_runlecturaUna ejecución, con detalle por paso
mutator_list_approvalslecturaSiempre vacío: las aprobaciones se eliminaron
mutator_get_analyticslecturaCómo funcionó el contenido publicado
mutator_get_spend_limitslecturaTechos diarios y mensuales, y lo que queda
mutator_start_runescrituraIniciar una ejecución. En seco por defecto
mutator_list_brandslecturaLas marcas a las que puede pertenecer una automatización
mutator_list_connectionslecturaCuentas conectadas y el id que necesita un paso de publicación
mutator_list_formatslecturaLos formatos de contenido y los nichos que les convienen
mutator_list_step_typeslecturaCada paso con el que se puede construir una automatización
mutator_create_automationescrituraCrear una automatización. Solo borrador
mutator_save_automation_graphescrituraReemplazar sus pasos. Solo borrador
mutator_set_scheduleescrituraEstablecer cuándo se ejecutaría. Guardado desactivado

En seco por defecto

mutator_start_run se ejecuta en seco a menos que quien llama pase dryRun: false. Una ejecución en seco omite la publicación (y la programación de una repetición), no la generación. No es gratuita: create y understand ignoran dryRun, así que una ejecución en seco hace las mismas llamadas de generación de pago que una ejecución real, cuesta los mismos créditos o cargos del proveedor y se comprueba contra los mismos límites de gasto (src/server/engine/runs.ts, el comentario sobre assertSpendWithinCaps).

La API pública deja dryRun sin definir y deja que el motor decida, lo cual es correcto para una integración que alguien escribió a propósito. Aquí quien llama es un modelo que puede haber inferido toda la llamada de una sola frase, así que la lectura segura del silencio es "pruébalo": lo que genere se detiene antes de cualquier cuenta social. Eso limita lo que una llamada errónea puede publicar, no lo que puede gastar, por eso la descripción de la herramienta le dice al modelo que inicie una ejecución solo cuando el usuario quiera una.

idempotencyKey es obligatorio, de 8 a 80 caracteres, y se espacia por clave en el camino. Reintentar con el mismo valor devuelve la ejecución original en lugar de iniciar una segunda.

Qué no es este servidor

  • No es un activador. Un agente puede crear una automatización y guardarla como borrador. No puede activarla. Eso es seguro porque un borrador realmente no puede ejecutarse: no tiene versión activa, el programador solo dispara automatizaciones activas, y createRun rechaza todo disparador excepto test a menos que la automatización esté activa, lo que ninguna clave de API puede establecer. La activación es donde una persona lee lo que se construyó y asume la responsabilidad, así que permanece en Mutator.
  • No es un publicador. Arriba.
  • No es un servicio de tendencias. No hay datos de viralidad, tendencias o descubrimiento en este producto. mutator_list_formats devuelve un catálogo escrito a mano, y un nicho lo ordena en lugar de filtrarlo. Un agente al que se le pidan "formatos virales" puede ofrecer estos; no puede decir que ninguno esté en tendencia.
  • No tiene estado. No se emite ningún id de sesión, así que cualquier réplica responde a cualquier solicitud y un despliegue no pierde nada. Cada llamada lleva su propia clave.

Notas de implementación

El servidor habla JSON-RPC directamente en lugar de usar el SDK oficial. MCP es JSON-RPC 2.0 con cuatro métodos que importan a un servidor solo de herramientas: initialize, tools/list, tools/call, ping; y el valor del SDK está en los transportes que asumen un proceso de larga duración que posee un socket. Un manejador de ruta de Next no es ninguna de las dos cosas.

La autenticación, la limitación de velocidad y la configuración de errores se comparten con la API pública, y el endpoint no lleva alcance propio: para alcanzarlo solo se necesita una clave o token válidos, y las herramientas de escritura comprueban el alcance ellas mismas en el momento de la llamada. Exigir write en la puerta bloquearía las claves de solo lectura fuera de initialize.

Sin cabeceras CORS, deliberadamente. Cada cliente MCP que importa se conecta desde un servidor o un proceso de escritorio, y la autenticación es un token de portador en lugar de una cookie, así que no hay nada que un navegador pueda ser engañado para enviar.

Las versiones de protocolo habladas son 2025-06-18, 2025-03-26 y 2024-11-05. Una versión desconocida se responde con la más reciente en lugar de rechazarse.