After Effects MCP · Avanzado
Learning loop — el MCP crece con tu workflow
AE MCP arranca con 220+ tools. A medida que lo usas, va registrando las llamadas JSX que más repites — y tú (o Claude) puedes promover esos patrones a tools nuevas, con esquema MCP y parámetros, sin rebuild ni reiniciar After Effects. Es un sistema único de Synthetic, no lo tiene ningún otro MCP de Adobe.
Por qué importa
- · Menos tokens. Claude llama un tool con 2 args en lugar de generar 30 líneas de JSX.
- · Menos errores. Tool con schema validado, no JSX generado de cero cada vez.
- · Aprende del uso real. Los patrones que se promueven son los que tú realmente repites.
- · 100% reversible. Es un archivo JSON en tu PC. Borra una línea y el tool desaparece.
Cómo funciona
run_jsx_json ─▶ journal.jsonl ─▶ analyze.mjs ─▶ (tú eliges) ─▶ promote.mjs ─▶ wrappers.json
JSX libre cada llamada detecta shapes template tool nuevo
repetidos + JSON vivo al reconectar
params candidatos el cliente MCPCuatro pasos, totalmente local:
1. Journal automático
Cada vez que un cliente MCP llama una tool, el server agrega una línea a ~/.synthetic-ae-mcp/journal.jsonl. Los calls a run_jsx / run_jsx_json guardan el código completo (son los candidatos); el resto solo guarda nombre + keys de args (sin payloads). El journaling es best-effort: si falla la escritura, el tool call sigue normal.
2. Analyze: detecta patrones repetidos
# desde el repo del MCP (clonado o vía npx) node scripts/analyze.mjs # reporte human-readable node scripts/analyze.mjs --json # output JSON para scripting node scripts/analyze.mjs --min 3 # subir el umbral (default 2)
El analyzer normaliza el JSX (saca comentarios, reemplaza strings y números con tokens), agrupa por signature, y para cada shape que aparece ≥2 veces te muestra: cuántas veces se ejecutó, qué posiciones de literales varían (esos son tus params), y un sample del código.
3. Promote: crear el tool nuevo
Define un spec JSON con name + template + tipos de params. Ejemplo: quieres un tool que aplique frameRate=X a todos los comps que contengan un texto:
{
"name": "ae_set_framerate_batch",
"description": "Cambia el frameRate de todos los comps que contienen <pattern>.",
"code": "var n = 0; for (var i = 1; i <= app.project.numItems; i++) { var it = app.project.item(i); if (it instanceof CompItem && it.name.indexOf({{pattern}}) >= 0) { it.frameRate = {{fps}}; n++; } } __write({ ok: true, updated: n });",
"params": [
{ "name": "fps", "type": "number", "required": true, "description": "Frame rate de destino" },
{ "name": "pattern", "type": "string", "required": false, "default": "", "description": "Substring a buscar en el nombre del comp (vacío = todos)" }
]
}node scripts/promote.mjs spec.json # OK promoted 'ae_set_framerate_batch' (2 params) -> ~/.synthetic-ae-mcp/wrappers.json # Reconnect the MCP (or restart the client) to see the new tool.
4. Live: el tool aparece en tu cliente
El server lee wrappers.json fresco en cada tools/list. Reconectas Claude Desktop / Cursor / Codex y ya tienes ae_set_framerate_batch(fps, pattern) disponible como cualquier tool nativa, con su schema MCP completo. Internamente, cuando Claude lo llama, el server llena el template y lo despacha vía run_jsx_json — sin cambiar la arquitectura ni recompilar.
Tipos de parámetro
| Tipo | Cómo se renderiza en JSX |
|---|---|
| string | String JSON-escapeado: "hola" → "hola" |
| number | Literal numérico: 24 → 24 |
| boolean | true / false |
| array | JSON literal: [1,2,3] → [1,2,3] |
| object | JSON literal: {"a":1} → {"a":1} |
| raw | Inserción verbatim (avanzado) |
Privacidad y seguridad
- · Todo es local:
~/.synthetic-ae-mcp/es una carpeta en tu PC. Nada se sube a ningún server. - · El journal solo registra calls de run_jsx[_json] con el código completo. El resto de los tools graban nombre + keys (sin valores).
- · Si quieres cambiar la carpeta: define
AE_MCP_DATA_DIRen tu config MCP. - · Para resetear: borra
~/.synthetic-ae-mcp/.