Skip to main content
Glama

appsgolem-mcp (Node / TypeScript)

Ein MCP-Server für die AppsGolem-YouTube-Cutter-API. Er ermöglicht es einem KI-Agenten (Claude Desktop, Claude Code, Cursor, …), Clips aus YouTube-Videos zu schneiden – in jedem Format, das der Web-Cutter unterstützt – und einen direkten Download-Link zurückzubekommen. Die REST-Logik lebt in einem kleinen, dependency-armen Client (src/client.ts); src/server.ts ist die dünne MCP-Tool-Schicht darüber.

Voraussetzungen

  • Node.js >= 18 (nutzt das globale fetch).

  • Ein AppsGolem-API-Schlüssel (ag_live_…) – erstelle einen in deinem Dashboard unter https://appsgolem.com/api-billing/. Guthaben wird im Voraus bezahlt; kaufe dort ein Paket oder ein Abo.

Related MCP server: ytmcp

Installation / Verbindung (keine manuelle Installation)

npx holt und startet den Server bei Bedarf – nichts muss global installiert werden.

Claude Desktop / Cursor – füge ihn zur MCP-Konfiguration des Clients hinzu (z. B. claude_desktop_config.json):

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

Claude Code – ein Befehl:

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

Der Server spricht MCP über stdio (den Transport, den diese Clients verwenden). Ein fehlender APPSGOLEM_API_KEY ist beim Start nicht fatal – der Server startet trotzdem und bewirbt seine Tools; jeder Aufruf gibt dann einen klaren config_error zurück, der dich auffordert, den Schlüssel zu setzen.

Konfiguration

Env-Variable

Erforderlich

Standard

Hinweise

APPSGOLEM_API_KEY

ja

Dein ag_live_…-Schlüssel.

APPSGOLEM_API_BASE

nein

https://appsgolem.com

Überschreiben für Self-Hosting / Entwicklung.

Preisgestaltung

1 erstellter Clip = 1 Guthaben. 2160p (4K) = 4 Guthaben pro Clip – außer audio_only, das bei 1 bleibt. Eine Quelle, die länger als 2 h ist, addiert +1 einmal pro Auftrag, aber nur, wenn ihre Dauer bekannt ist (der Aufschlag entfällt, wenn die Analyse die Dauer nicht ermitteln kann). Ein Stapel/Zusammenschnitt von N Clips kostet N pro Clip. Fehlgeschlagene Schnitte werden nie berechnet.


Tools

Der Server stellt drei Tools bereit. Ein Aufruf, der die MCP-Eingabevalidierung besteht, gibt ein strukturiertes Ergebnis zurück – das eigene JSON der API bei Erfolg oder { "error": … } bei einem Handler-/API-Fehler – und löst niemals einen Fehler auf Protokollebene aus, sodass ein Agent immer ein brauchbares Objekt erhält. (Ungültige Tool-Argumente werden vom MCP-SDK vor dem Handler abgelehnt, als reines isError-Ergebnis.)

1. cut_youtube_video

Schneidet einen Clip (oder einen Stapel von Clips) aus einem YouTube-Video. Standardmäßig wartet es, bis der Clip erstellt ist, und gibt seinen Status zurück (einschließlich download_url, sobald ein Download-Token verfügbar ist); setze wait: false, um sofort zu senden und das aktuelle Ergebnis zu erhalten (sein Zustand ist nach dem Senden normalerweise queued).

Parameter

Name

Typ

Standard

Hinweise

url

string

Erforderlich. YouTube-URL (watch / share / youtu.be). Playlists werden abgelehnt.

start

string

Clip-Start: "SS", "MM:SS" oder "HH:MM:SS" (≤ 300 h). Weglassen, wenn clips verwendet wird.

end

string

Clip-Ende, gleiche Formate (≤ 300 h). Weglassen, wenn clips verwendet wird.

resolution

string

1080p

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

mode

string

video

video · audio_only · both · nosound · short · gif · frames (siehe Modi unten).

audio_format

string

Das Ausgabeformat für audio_only: mp3 · m4a · wav · flac (Server-Standard ist mp3). both erzeugt immer MP3.

bitrate

string

Bitrate für verlustbehaftetes Audio 320 · 256 · 192 · 128 (Standard 320): MP3/M4A bei audio_only, MP3 bei both; wird bei WAV/FLAC ignoriert.

fast

boolean

false

Stream-Kopie (≈10× schneller, an Keyframes ausgerichtet); nur video / nosound / both. Nicht kombinierbar mit einer speed ≠ 1× – wenn beides gesetzt ist, gewinnt fast und speed wird auf 1.0 erzwungen.

speed

number

1.0

Wiedergabegeschwindigkeit 0.5 · 1 · 1.25 · 1.5 · 2. Nur video / nosound / both / audio_only.

interval_ms

integer

2000

Abtastintervall für frames: 100 · 500 · 1000 · 2000 · 5000 · 10000 (bei Nicht-Kontaktbogen-Extraktion gedeckelt auf 1.800 JPGs insgesamt über alle Clips).

burn_ts

boolean

false

frames: brennt den Quell-Zeitstempel auf jedes JPG.

sheet

boolean

false

frames: gibt ein einzelnes Kontaktbogen-JPG zurück (2–80 Frames, einzelner Clip). Deaktiviert burn_ts.

clips

array

Ein Array aus 1–10 { start, end }-Bereichen statt start/end (ein leeres Array wird abgelehnt).

stitch

boolean

false

Bei 2+ clips: fügt sie zu einer Datei zusammen (sonst ein ZIP der Clips); wird bei einem einzelnen Clip ignoriert. Nur video / audio_only / both / short / nosound.

idempotency_key

string

Ein stabiler Schlüssel (≤ 200 Zeichen), damit ein wiederholter Request denselben Auftrag wiederverwendet (wird als Idempotency-Key-Header gesendet).

wait

boolean

true

Wartet, bis fertig, bis zum timeout_seconds-Polling-Deadline.

timeout_seconds

integer

300

Polling-Deadline in Sekunden (Standard 300). Sie begrenzt nur das Polling – die ursprüngliche Übermittlung und ein Statusabruf (jeweils bis zu 30 s Request-Timeout) können die Gesamtzeit verlängern.

Rückgabe (wait: true, Standard) – der erzeugte Auftragsstatus. download_url ist vorhanden, sobald ein Download-Token verfügbar ist; falls noch nicht, erneut abfragen:

{
  "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"
}

Rückgabe (wait: false) – der Auftrag sofort, mit seinem aktuellen Zustand (nach dem Senden normalerweise queued) und noch ohne download_url; frage get_cut_status mit der id ab (oder rufe poll_url auf):

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

Wenn das Warten abläuft, bevor der Clip fertig ist, enthält das Ergebnis "still_processing": true und die Auftrags-id – frage get_cut_status mit dieser id ab. Wenn der Auftrag einen endgültigen Fehler erreicht, lautet das Ergebnis { "error": "cut_failed", "state": "failed" | "refunded", "id": … } (und es wird kein Guthaben berechnet).

2. get_cut_status

Überprüft einen Schneideauftrag anhand seiner id. Verwende es, um einen Auftrag abzufragen, der mit cut_youtube_video(wait=false) gestartet wurde oder dessen Zeit abgelaufen ist.

Name

Typ

Hinweise

job_id

string

Erforderlich. Die Auftrags-id (eine UUID), die von cut_youtube_video zurückgegeben wurde.

Rückgabe – der Zustand des Auftrags; sobald er erstellt/geliefert ist, enthält er außerdem eine download_url, wenn ein Download-Token verfügbar ist (sonst erneut abfragen):

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

Zustände durchlaufen accepted → queued → produced → delivered oder bei einem Fehler failed → refunded.

3. get_account_balance

Gibt das ausgabefähige Guthaben des API-Kontos und das aktuelle Stundenlimit zurück. Keine Parameter.

Rückgabe

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

Modi

mode

Ausgabe

Wichtige Optionen

video

Videodatei ohne Wasserzeichen – normalerweise MP4; fast erhält den Quellcontainer (z. B. WebM bei hoher Auflösung)

resolution, fast, speed

audio_only

mp3 / m4a / wav / flac

audio_format, bitrate, speed

both

Video + MP3 zusammen, als ZIP (fast kann den Quellcontainer des Videos erhalten)

bitrate, fast, speed

nosound

Video ohne Tonspur – normalerweise MP4; fast erhält den Quellcontainer

resolution, fast, speed

short

Hochformat 9:16 – KI-Smart-Crop, wenn anwendbar, sonst ein Letterbox-Blur-Fallback, dessen genaues Seitenverhältnis von der Quelle abhängt (Shorts / Reels / TikTok)

resolution

gif

Animiertes GIF (≤ 5 min; kein Multi-Clip)

resolution

frames

JPG-Standbilder

interval_ms, burn_ts, sheet


Beispielaufforderungen

Da der Agent die Parameter aus deiner Anfrage auswählt, steuerst du ihn in natürlicher Sprache:

  • „Schneide 0:30 bis 1:15 aus https://youtu.be/dQw4w9WgXcQ in 1080p."cut_youtube_video(url, start="0:30", end="1:15")

  • „Hol mir den Ton dieses Videos von 2:00 bis 5:00 als MP3."mode="audio_only", audio_format="mp3"

  • „Mach ein vertikales Short aus dem Highlight 10:00–10:45."mode="short", start="10:00", end="10:45"

  • „Mach aus 0:05–0:12 ein GIF."mode="gif"

  • „Extrahiere ein Kontaktbogen mit Frames alle 5 Sekunden von 1:00 bis 2:00."mode="frames", interval_ms=5000, sheet=true

  • „Füge 0:10–0:20 und 1:00–1:10 zu einem Clip zusammen."clips=[{start:"0:10",end:"0:20"},{start:"1:00",end:"1:10"}], stitch=true

  • „Mach einen schnellen Stream-Copy-Schnitt von 0:00–0:30."fast=true

  • „Wie viele API-Guthaben habe ich noch?"get_account_balance()


Ergebnis- und Fehlerformen

Jedes Ergebnis eines Handlers ist ein einfaches Objekt (MCP-Argumentvalidierungsfehler sind die Ausnahme – siehe Hinweis zu den Tools oben). Bei einem Fehler enthält das Objekt einen error-Code (der Tool-Aufruf gelingt trotzdem):

error

Wann

config_error

APPSGOLEM_API_KEY fehlt.

invalid_api_key

Der Schlüssel wurde abgelehnt (401).

invalid_job_id

job_id ist keine UUID.

not_found

Kein solcher Auftrag für dieses Konto (404).

cut_failed

Der Auftrag hat den Status failed/refunded erreicht (wurde nie abgerechnet).

network_error

Verbindungs-/Transportfehler oder Anforderungs-Timeout.

bad_request

Die konfigurierte API-Basis/der konfigurierte API-Pfad konnte nicht zu einer URL zusammengesetzt werden.

http_error

Eine ≥400-Antwort, deren JSON-Body kein { error: … }-Objekt ist (trägt status).

bad_response

Eine Erfolgsantwort, deren Body kein JSON-Objekt ist (Array/Skalar/null), oder — mit wait: true — eine Cut-Übermittlung, die ohne eine verwendbare Job-id zurückkam.

API-Fehler (z. B. Validierungs-400, Rate-Limit-429) werden als eigener Fehler-Body der API plus ein status-Feld zurückgegeben; eine 429 enthält außerdem retry_after (Sekunden), wenn der Server Retry-After sendet, damit ein Agent eine Pause einlegen kann.

Eine relative download_url (die API gibt einen Pfad zurück) wird nur dann zu einer vollständigen URL gegen die konfigurierte API-Basis aufgelöst, wenn sie auf dieser Origin bleibt; bereits absolute URLs und Verweise außerhalb der Origin bleiben unverändert.


Entwicklung

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)

Veröffentlichung

npm publish (aus diesem Verzeichnis) macht npx appsgolem-mcp für alle funktionsfähig. Das prepare-Skript erstellt dist/ automatisch bei Installation/Veröffentlichung.

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