Skip to main content
Glama

appsgolem-mcp (Node / TypeScript)

Un servidor MCP para la API de corte de YouTube AppsGolem. Permite que un agente de IA (Claude Desktop, Claude Code, Cursor, …) corte clips de videos de YouTube — en cualquier formato que admita el cortador web — y obtenga una URL de descarga directa. La lógica REST vive en un cliente pequeño y con pocas dependencias (src/client.ts); src/server.ts es la capa fina de herramientas MCP sobre él.

Requisitos

  • Node.js >= 18 (usa fetch global).

  • Una clave de API de AppsGolem (ag_live_…) — créala en tu panel en https://appsgolem.com/api-billing/. Los créditos son prepagados; compra un paquete o una suscripción allí.

Related MCP server: ytmcp

Instalar / conectar (sin instalación manual)

npx descarga y ejecuta el servidor bajo demanda — no hay que instalar nada globalmente.

Claude Desktop / Cursor — añade al archivo de configuración MCP del cliente (p. ej. claude_desktop_config.json):

{
  "mcpServers": {
    "appsgolem": {
      "command": "npx",
      "args": ["-y", "appsgolem-mcp"],
      "env": { "APPSGOLEM_API_KEY": "ag_live_…" }
    }
  }
}

Claude Code — un comando:

claude mcp add appsgolem -e APPSGOLEM_API_KEY=ag_live_… -- npx -y appsgolem-mcp

El servidor habla MCP sobre stdio (el transporte que usan esos clientes). La ausencia de APPSGOLEM_API_KEY no es fatal al inicio — el servidor igualmente arranca y anuncia sus herramientas; cada llamada devuelve entonces un config_error claro indicando que debes establecer la clave.

Configuración

Variable de entorno

Obligatoria

Valor por defecto

Notas

APPSGOLEM_API_KEY

Tu clave ag_live_….

APPSGOLEM_API_BASE

no

https://appsgolem.com

Anulación para autoalojado / dev.

Precios

1 clip producido = 1 crédito. 2160p (4K) = 4 créditos por clip — excepto audio_only, que sigue siendo 1. Una fuente de más de 2 h añade +1 una vez por trabajo, pero solo cuando se conoce su duración (el recargo se omite si la sonda no puede determinarla). Un lote/unión de N clips cuesta N por clip. Los cortes fallidos nunca se facturan.


Herramientas

El servidor expone tres herramientas. Una llamada que pasa la validación del esquema de entrada MCP devuelve un resultado estructurado — el propio JSON de la API en caso de éxito, o { "error": … } en cualquier fallo del manejador/API — y nunca lanza un error a nivel de protocolo, de modo que un agente siempre obtiene un objeto utilizable. (Los argumentos de herramienta no válidos son rechazados por el SDK de MCP antes de que se ejecute el manejador, como un resultado isError solo de texto.)

1. cut_youtube_video

Corta un clip (o un lote de clips) de un video de YouTube. Por defecto espera hasta que el clip se produce y devuelve su estado (incluyendo un download_url una vez que un token de descarga está listo); establece wait: false para enviar y devolver inmediatamente con el trabajo actual (su estado normalmente es queued después del envío).

Parámetros

Nombre

Tipo

Por defecto

Notas

url

string

Obligatorio. URL de YouTube de tipo watch / share / youtu.be. Las listas de reproducción se rechazan.

start

string

Inicio del clip: "SS", "MM:SS" o "HH:MM:SS" (≤ 300 h). Omitir al usar clips.

end

string

Fin del clip, mismos formatos (≤ 300 h). Omitir al usar clips.

resolution

string

1080p

144p · 240p · 360p · 480p · 720p · 1080p · 1440p · 2160p (4K; corte total ≤ 60 min).

mode

string

video

video · audio_only · both · nosound · short · gif · frames (ver Modos abajo).

audio_format

string

El formato de salida de audio_only: mp3 · m4a · wav · flac (el servidor usa mp3 por defecto). both siempre produce MP3.

bitrate

string

Bitrate de audio con pérdida 320 · 256 · 192 · 128 (por defecto 320): MP3/M4A en audio_only, MP3 en both; ignorado para WAV/FLAC.

fast

boolean

false

Copia de flujo (≈10× más rápido, alineado a keyframes); solo video / nosound / both. Mutuamente excluyente con una speed distinta de 1× — si ambos se establecen, fast gana y speed se fuerza a 1.0.

speed

number

1.0

Velocidad de reproducción 0.5 · 1 · 1.25 · 1.5 · 2. video / nosound / both / audio_only.

interval_ms

integer

2000

Intervalo de muestreo de frames: 100 · 500 · 1000 · 2000 · 5000 · 10000 (la extracción sin hoja está limitada a 1,800 JPGs en total entre todos los clips).

burn_ts

boolean

false

frames: graba la marca de tiempo de origen en cada JPG.

sheet

boolean

false

frames: devuelve un único JPG de hoja de contactos (2–80 fotogramas, un solo clip). Al establecerlo, desactiva burn_ts.

clips

array

Un array de 1–10 rangos { start, end } en lugar de start/end (un array vacío se rechaza).

stitch

boolean

false

Con 2+ clips, únelos en un solo archivo (si no, un zip de clips); ignorado para un solo clip. video / audio_only / both / short / nosound.

idempotency_key

string

Una clave estable (≤ 200 caracteres) para que una solicitud reintentada reutilice el mismo trabajo (se envía como cabecera Idempotency-Key).

wait

boolean

true

Sondea hasta que esté listo, hasta el plazo de timeout_seconds.

timeout_seconds

integer

300

Plazo de sondeo en segundos (por defecto 300). Limita solo el sondeo — el envío inicial y una solicitud de estado en curso (cada una con un tiempo de espera de solicitud de hasta 30 s) pueden extender el tiempo total de pared.

Devuelve (wait: true, por defecto) — el estado del trabajo producido. download_url está presente una vez que un token de descarga está disponible; si aún no lo está, vuelve a sondear:

{
  "id": "e48db1a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b",
  "state": "produced",
  "credits_reserved": 1,
  "created_at": "2026-08-22T12:00:00+00:00",
  "download_url": "https://appsgolem.com/v1/download/…/clip.mp4"
}

Devuelve (wait: false) — el trabajo inmediatamente, con su estado actual (normalmente queued después del envío) y sin download_url todavía; sondea get_cut_status con el id (o consulta poll_url):

{
  "id": "e48db1a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b",
  "state": "queued",
  "credits_reserved": 1,
  "poll_url": "/v1/cuts/e48db1a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b"
}

Si la espera agota el tiempo antes de que el clip esté listo, el resultado lleva "still_processing": true y el id del trabajo — sondea get_cut_status con ese id. Si el trabajo alcanza un fallo terminal, el resultado es { "error": "cut_failed", "state": "failed" | "refunded", "id": … } (y no se cobra ningún crédito).

2. get_cut_status

Comprueba un trabajo de corte por su id. Úsalo para sondear un trabajo iniciado con cut_youtube_video(wait=false) o uno que agotó el tiempo.

Nombre

Tipo

Notas

job_id

string

Obligatorio. El id del trabajo (un UUID) devuelto por cut_youtube_video.

Devuelve — el estado del trabajo; una vez producido/entregado también lleva un download_url cuando hay un token de descarga disponible (si no, vuelve a sondear):

{ "id": "e48db1a2-…", "state": "queued", "credits_reserved": 1, "created_at": "…" }

Los estados progresan accepted → queued → produced → delivered, o failed → refunded en caso de error.

3. get_account_balance

Devuelve el saldo de créditos gastables de la cuenta de la API y el límite horario actual. Sin parámetros.

Devuelve

{ "balance": 412, "hourly_cap": 60 }

Modos

mode

Salida

Opciones notables

video

Archivo de video, sin marca de agua — normalmente MP4; fast conserva el contenedor de origen (p. ej. WebM en alta resolución)

resolution, fast, speed

audio_only

mp3 / m4a / wav / flac

audio_format, bitrate, speed

both

Video + MP3 juntos, como un zip (fast puede conservar el contenedor de origen del video)

bitrate, fast, speed

nosound

Video sin pista de audio — normalmente MP4; fast conserva el contenedor de origen

resolution, fast, speed

short

Vertical 9:16 — recorte inteligente por IA cuando corresponde, si no un respaldo de letterbox desenfocado cuyo aspecto exacto depende de la fuente (Shorts / Reels / TikTok)

resolution

gif

GIF animado (≤ 5 min; sin multi-clip)

resolution

frames

Fotogramas JPG

interval_ms, burn_ts, sheet


Ejemplos de indicaciones

Como el agente elige los parámetros a partir de tu solicitud, lo manejas en lenguaje natural:

  • "Corta de 0:30 a 1:15 de https://youtu.be/dQw4w9WgXcQ en 1080p."cut_youtube_video(url, start="0:30", end="1:15")

  • "Extrae el audio de ese video de 2:00 a 5:00 como mp3."mode="audio_only", audio_format="mp3"

  • "Haz un short vertical del momento destacado de 10:00–10:45."mode="short", start="10:00", end="10:45"

  • "Convierte 0:05–0:12 en un GIF."mode="gif"

  • "Extrae una hoja de contactos de fotogramas cada 5 segundos de 1:00 a 2:00."mode="frames", interval_ms=5000, sheet=true

  • "Une 0:10–0:20 y 1:00–1:10 en un solo clip."clips=[{start:"0:10",end:"0:20"},{start:"1:00",end:"1:10"}], stitch=true

  • "Haz un corte rápido con copia de flujo de 0:00–0:30."fast=true

  • "¿Cuántos créditos de API me quedan?"get_account_balance()


Formas de resultado y error

Cada resultado de un manejador es un objeto simple (los fallos de validación de argumentos MCP son la excepción — ver la nota de Herramientas arriba). En caso de fallo, el objeto tiene un código error (la llamada a la herramienta sigue teniendo éxito):

error

Cuándo

config_error

Falta APPSGOLEM_API_KEY.

invalid_api_key

La clave fue rechazada (401).

invalid_job_id

job_id no es un UUID.

not_found

No existe tal trabajo para esta cuenta (404).

cut_failed

El trabajo alcanzó failed/refunded (nunca facturado).

network_error

Error de conexión/transporte o tiempo de espera de la solicitud agotado.

bad_request

La base/ruta de API configurada no pudo construirse en una URL.

http_error

Una respuesta ≥400 cuyo cuerpo JSON no es un objeto { error: … } (lleva status).

bad_response

Una respuesta de éxito cuyo cuerpo no es un objeto JSON (array/escalar/null), o — con wait: true — un envío de cut que volvió sin un id de trabajo utilizable.

Los errores a nivel de API (p. ej. validación 400, límite de velocidad 429) se devuelven como el cuerpo de error propio de la API más un campo status; un 429 también incluye retry_after (segundos) cuando el servidor envía Retry-After, para que un agente pueda retroceder.

Un download_url relativo (la API devuelve una ruta) se resuelve a una URL completa contra la base de API configurada solo cuando permanece en ese origen; las URL ya absolutas y las referencias fuera de origen se dejan sin cambios.


Desarrollo

npm install
npm run build      # tsc -> dist/
npm test           # builds, then runs node --test (no network)
npm start          # run the stdio server locally (key needed for calls, not startup)

Publicación

npm publish (desde este directorio) hace que npx appsgolem-mcp funcione para todos. El script prepare construye dist/ automáticamente al instalar/publicar.

Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Create AI-powered short-form video clips from YouTube videos. Supports webhook callbacks.

  • AI clips from long videos: analyze, clip, render and publish via the CutPro API.

  • YouTube transcripts, search, channels, playlists and bulk transcript jobs for AI agents. 14 tools.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/apancyborg/appsgolem-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server