Compeller

resmi

Buat video musik AI dan visual reaktif audio dari lagu melalui MCP.

Apa yang bisa Anda lakukan dengan Compeller MCP?

  • Discover available styles and capabilities — call list_styles and get_capabilities to see supported styles, platforms, and aspect ratios before creating a compel.
  • Find a track for a music-driven compel — use search_music to locate a track by song or artist name, then pass its ID to create_compel_from_music.
  • Create a compel from uploaded media — use upload_media to get upload instructions, then call create_compel with the resulting primary_media_id.
  • Check account credits before rendering — call get_account_credits to see remaining minutes and quota status so you can avoid starting a render that would fail.
  • Monitor a compel and trigger final render — poll get_compel for progress, then call start_render once the compel is ready.
  • Set up push notifications for compel events — use register_webhook to receive signed compel.ready and compel.completed events instead of polling.

Dokumentasi

Endpoint MCP Compeller (/api/mcp)

Endpoint MCP Compeller mengimplementasikan Model Context Protocol sebagai pembungkus tipis JSON-RPC 2.0 di atas REST API v1 yang sudah ada. Ini ditujukan untuk integrator agen (Claude Desktop, Cursor, klien MCP kustom, DigiRAMP) yang berbicara MCP secara native daripada HTTP mentah.

  • Transport: HTTP Streamable (satu pesan JSON-RPC per HTTP POST).
  • URL: POST https://compeller.ai/api/mcp
  • Versi protokol: 2024-11-05
  • Nama / versi server: compeller-mcp / lihat hasil initialize.
  • Kontrak alat: Daftar alat di bawah ini adalah kontrak integrasi publik. Gunakan tools/list untuk set yang diiklankan saat runtime di server yang di-deploy.
  • Daftar direktori: Official MCP Registry · Smithery · Glama

smithery badge

Autentikasi

Metode anonim (discovery): initialize, tools/list, ping, notifications/initialized, ditambah alat anonim get_capabilities, get_pricing, list_styles.

Setiap alat lainnya memerlukan token API Compeller yang dikirimkan pada permintaan HTTP itu sendiri, bukan di dalam body JSON-RPC. Salah satu header berikut dapat digunakan:

Authorization: Bearer <api-token>
X-API-Token: <api-token>

Token diterbitkan per User Compeller (token yang sama digunakan oleh /api/v1/*). Agen dapat memperolehnya melalui salah satu dari dua cara:

  1. Minta pengguna untuk login, buka Account → API Access, tampilkan token, dan tempelkan ke penyimpanan rahasia agen.
  2. Gunakan endpoint login yang ada dan kirim access_token sebagai token bearer. Tidak diperlukan atau diharapkan header Cookie:
curl -s -X POST https://compeller.ai/api/login \
  -H 'Content-Type: application/json' \
  -d '{"username":"[email protected]","password":"..."}'

Pengguna normal menerima username dan access_token. roles hanya muncul untuk akun dengan peran di luar ROLE_COMPELLER dasar; refresh_token dan expires_in hanya muncul jika tidak kosong.

  1. Atau tukarkan kredensial melalui v1 auth helper, yang mengembalikan token API persisten:
curl -s -X POST https://compeller.ai/api/v1/auth/token \
  -H 'Content-Type: application/json' \
  -d '{"email":"[email protected]","password":"..."}'

Token yang hilang atau tidak valid muncul sebagai kesalahan alat (isError: true) dengan pesan "API token required." / "Invalid API token.", bukan sebagai kesalahan JSON-RPC, sehingga klien MCP dapat meminta kredensial kepada pengguna.

Metode JSON-RPC

MetodeTujuanHasil HTTP
initializeHandshake kapabilitas. Mengembalikan protocolVersion, serverInfo, capabilities.200 hasil JSON-RPC
notifications/initializedPengakuan klien. Tidak ada body respons.204
tools/listDaftar setiap alat dengan skema + deskripsi.200 hasil JSON-RPC
tools/callPanggil alat. params = {name, arguments}.200 hasil JSON-RPC (kesalahan alat kembali sebagai {isError: true, content: [...]})
pingKeepalive no-op.200 JSON-RPC result: {}

Metode yang tidak dikenal mengembalikan kesalahan JSON-RPC -32601 Method not found. Nama alat yang tidak dikenal mengembalikan -32602 Unknown tool. Body JSON yang cacat mengembalikan -32700 Parse error. jsonrpc yang hilang/salah atau method yang hilang mengembalikan -32600 Invalid Request.

Alat

Semua alat mengembalikan satu entri content dari type: text yang bidang text-nya adalah output terstruktur berformat JSON. Saat gagal, bentuk respons yang sama dikembalikan dengan isError: true dan pesan kesalahan yang dapat dibaca manusia di content[0].text — tidak pernah sebagai error JSON-RPC.

Discovery (tanpa auth)

AlatInputMengembalikan
get_capabilitiesproductName, version, capabilities[], spec_url, enums (styles, target_platforms, aspect_ratios), auth, media_limits, rate_limits
get_pricingplans[] dengan id, name, monthlyUsd, features[]
list_stylesstyles[] dengan id, name (id adalah nilai persis yang diterima create_compel / create_compel_from_music untuk style)

Media dan musik (memerlukan auth kecuali disebutkan)

AlatWajibOpsionalMengembalikan
search_musicquerylimitHasil pencarian musik publik yang cocok untuk create_compel_from_music. Tidak memerlukan auth.
upload_medianame, mime_type, typeInstruksi unggahan yang menunjuk ke POST /api/v1/media
search_mediatype (audio/image/video/text), limit (≤100, default 20), offsetmedia[], paging

Compels (memerlukan auth)

AlatWajibOpsionalMengembalikan
create_compel_from_musictrack_idtitle, style, target_platform, aspect_ratio, artist_contextcompel_id, status, next_action
create_compeltitle, primary_media_idstyle, target_platform, aspect_ratio, artist_contextcompel_id, status: QUEUED
get_compelcompel_idcompel_id, title, status, progress_percent, stage, rendering_id, created_at, human_url, next_action
start_rendercompel_idMemulai rendering akhir saat compel siap; mengembalikan status dan tindakan selanjutnya.
cancel_compelcompel_idMembatalkan compel yang sedang berlangsung (idempoten — yang sudah DIBATALKAN berhasil); mengembalikan compel_id, status: CANCELLED, stage.
list_compelslimit (≤100), offsetcompels[], paging
search_compelsquerylimitcompels[], count

style, target_platform, dan aspect_ratio dibatasi oleh enum dalam skema alat (lihat get_capabilities.enums); nilai style berasal langsung dari list_styles.

Akun (memerlukan auth)

AlatInputMengembalikan
get_account_creditsplan, minutes_remaining, free_minutes_remaining, paid_minutes_remaining, minutes_total, quota_exceeded, api_eligible, billing_url — panggil sebelum render mahal untuk membuat keputusan yang sadar biaya.

Renderings (memerlukan auth)

AlatWajibMengembalikan
list_renderingscompel_idcompel_id, renderings[] dengan rendering_id, status, download_url
get_renderingrendering_idrendering_id, compel_id, status, download_url

download_url menunjuk ke GET /api/v1/renderings/{id}/download (mendukung HTTP Range). Respons compel/rendering yang selesai juga menyertakan handoff react dengan unduhan REACT gratis (https://compeller.ai/download/desktop) dan URL pelajari lebih lanjut (https://compeller.ai/react) sehingga agen dapat memberi tahu pengguna cara mengalami compel sebagai sistem pertunjukan langsung.

Webhooks (memerlukan auth)

Agen yang terintegrasi dengan Compeller dapat mendaftar sendiri untuk notifikasi push bertanda tangan dari peristiwa siklus hidup compel alih-alih melakukan polling get_compel. Berlangganan ke compel.ready untuk mengetahui saat compel dapat dirender (lalu panggil start_render) tanpa polling; compel.completed / compel.failed adalah peristiwa terminal.

AlatWajibOpsionalMengembalikan
register_webhookurl (HTTPS, ≤2048 karakter)events[] — default ke ["*"]; nilai yang dikenal: *, compel.ready, compel.completed, compel.failedwebhook_id, url, events, secret (dikembalikan tepat sekali), active, created_at
list_webhookswebhooks[]webhook_id, url, events, active, created_at, updated_at. Rahasia tidak pernah dikembalikan oleh alat ini.
update_webhookwebhook_idurl, events[], active — setidaknya satuwebhook_id, url, events, active, created_at, updated_at. Rahasia tidak pernah dikembalikan; gunakan rotate_webhook_secret untuk itu.
delete_webhookwebhook_idwebhook_id, deleted: true
test_webhook_deliverywebhook_idwebhook_id, event_id, event_type: "webhook.test", delivered, response_status?, response_body_preview?, latency_ms, error?. Sinkron — alat menunggu respons endpoint integrator (maks 5 detik). Rahasia tidak pernah dikembalikan.
rotate_webhook_secretwebhook_idwebhook_id, url, events, active, secret (baru — dikembalikan tepat sekali), created_at, updated_at. Rahasia lama langsung tidak berlaku.

Nama peristiwa yang tidak dikenal secara diam-diam diciutkan ke wildcard *; ini mencerminkan POST /api/v1/webhooks sehingga agen tidak pernah membuat langganan no-op.

Pengiriman bersifat setidaknya sekali. Setiap peristiwa dicoba segera dan, jika endpoint Anda tidak dapat dijangkau atau mengembalikan non-2xx, dicoba ulang dengan backoff — hingga total 6 percobaan (segera, lalu setelah 1m, 5m, 30m, 2j, 6j). Setiap percobaan membawa X-Compeller-Event-Id yang sama dan body bertanda tangan yang identik byte, jadi deduplikasi pada id tersebut. Jika semua percobaan habis, peristiwa dihapus; rekonsiliasi melalui get_compel.

register_webhook menolak tujuan yang menunjuk ke infrastruktur internal dengan kesalahan alat: loopback, rentang privat RFC1918, link-local (termasuk IP metadata cloud seperti 169.254.169.254), IPv6 ULA, CGNAT, multicast, alamat tidak ditentukan, dan nama host yang berakhiran .local / .internal / .localhost. Pemeriksaan yang sama dijalankan ulang saat pengiriman terhadap DNS yang diselesaikan pada setiap percobaan, sehingga nama host yang mengikat ulang ke IP yang diblokir setelah pendaftaran dilewati untuk percobaan itu (dicatat); jika tetap diblokir, ia hanya menghabiskan anggaran coba ulangnya dan kemudian dihapus.

test_webhook_delivery mengirim peristiwa webhook.test sintetis dengan tanda tangan HMAC-SHA256 dan menunggu secara sinkron respons endpoint. Ini mengabaikan events yang dilanggan endpoint (selalu dikirim) dan menerapkan pemeriksaan keamanan URL yang sama seperti pengiriman nyata. Respons non-2xx muncul sebagai delivered: false tetapi panggilan MCP itu sendiri tetap berhasil — hasilnya adalah payload.

update_webhook menerima salah satu dari url, events, active (setidaknya satu). Validasi URL mencerminkan register_webhook. Rahasia tidak pernah dikembalikan oleh alat ini.

rotate_webhook_secret mencetak rahasia penandatanganan hex 64 karakter baru, mengembalikannya tepat sekali, dan langsung membatalkan rahasia sebelumnya. Simpan rahasia baru saat diterima sebelum pengiriman nyata berikutnya.

Setiap pengiriman ditandatangani persis seperti jalur REST — lihat bagian Webhooks openapi.yaml untuk kontrak envelope dan header lengkap.

Contoh sesi

# 1. Handshake
curl -s https://compeller.ai/api/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}'

# 2. List tools
curl -s https://compeller.ai/api/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

# 3. Register a webhook (auth required)
curl -s https://compeller.ai/api/mcp \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <api-token>' \
  -d '{
        "jsonrpc":"2.0",
        "id":3,
        "method":"tools/call",
        "params":{
          "name":"register_webhook",
          "arguments":{
            "url":"https://hooks.my-agent.io/compeller",
            "events":["compel.completed","compel.failed"]
          }
        }
      }'

Respons untuk langkah 3 adalah result JSON-RPC yang berisi content[0].text — itu sendiri adalah dokumen JSON dengan webhook_id, secret, dll. Simpan secret segera; server tidak akan mengembalikannya lagi.

Kode kesalahan

KodeArtiPenyebab
-32700Kesalahan parseBody bukan JSON yang valid
-32600Permintaan Tidak Validjsonrpc hilang/salah, method hilang, body kosong
-32601Metode tidak ditemukanMetode JSON-RPC tidak dikenal
-32602Parameter tidak validAlat tidak dikenal, name alat hilang, bentuk params buruk
-32603Kesalahan internalPengecualian tidak tertangani (dicatat di sisi server)

Kegagalan tingkat alat (validasi, auth, tidak ditemukan) dikembalikan di dalam respons JSON-RPC yang berhasil sebagai {result: {isError: true, content: [{type: "text", text: "..."}]}}. Ini sesuai konvensi MCP — memungkinkan LLM melihat dan menampilkan kegagalan secara verbatim. Pohon keputusan audio agen: jika pengguna menyediakan MP3/WAV/FLAC, gunakan upload_media lalu create_compel; jika pengguna hanya menyediakan string lagu/artis, gunakan search_music lalu create_compel_from_music; jangan mensintesis nada kecuali secara eksplisit diminta untuk menghasilkan audio uji.