Server MCP

taploka-mcp memungkinkan agen coding menerbitkan game dengan bicara ke arcade lewat Model Context Protocol. Isinya satu berkas tanpa dependensi dan butuh Node 20 atau lebih baru.

Pasang

taploka-mcp adalah server MCP stdio biasa, jadi agen mana pun yang bicara MCP bisa menjalankannya: Claude Code, Codex CLI, Cursor, Windsurf, Gemini CLI, VS Code Copilot, dan lainnya yang membaca blok mcpServers. Claude Code menulis entri sendiri dengan satu baris:

claude mcp add taploka -- npx -y taploka-mcp@latest

Harness lain memakai registrasi yang sama dalam bentuk JSON, di tempat konfigurasi masing-masing (~/.codex/config.toml untuk Codex, .cursor/mcp.json untuk Cursor, .vscode/mcp.json untuk VS Code, ~/.gemini/settings.json untuk Gemini CLI):

{
  "mcpServers": {
    "taploka": {
      "command": "npx",
      "args": ["-y", "taploka-mcp@latest"]
    }
  }
}

Lalu sambungkan:

npx -y taploka-mcp@latest login

login meminta kode pendek ke arcade, membuka halaman persetujuan, lalu menyimpan kunci yang diberikan di ~/.taploka/credentials.json dengan izin khusus pemilik. Lihat Harness API untuk apa yang terjadi di balik layar.

Perintah Efek
login [--url=…] [--profile=…] Sambungkan mesin ini ke sebuah arcade: arcade resmi, kecuali --url menunjuk arcade buatan sendiri
whoami [--profile=…] Tampilkan arcade mana yang ditunjuk sebuah profil
logout [--profile=…] Lupakan sebuah profil
help Cara pakai

Tanpa perintah, skripnya bicara MCP lewat stdio, dan begitulah klien menjalankannya.

Tool

push_game

Unggah bundle lalu rilis.

Argumen Arti
zip Path ke ZIP atau ke folder. Folder di-zip lokal, melewati dotfile dan node_modules.
title Nama game. Di push pertama slug diturunkan dari sini; setelah itu diabaikan.
game Slug game yang sudah ada. Pakai ini di setiap push setelah yang pertama.
rollout Persentase pemain yang disajikan versi ini, 0-100. Default 100.
changelog Catatan pendek yang disimpan bersama versinya.
draft Simpan dan validasi tanpa merilis. Default false.

Mengembalikan nomor versi, status, rollout, jumlah berkas, URL main, dan daftar lengkap pemeriksaan validasi.

update_game

Ubah apa yang dilihat pemain. Hanya kolom yang kamu kirim yang tersentuh.

game (wajib), title, tagline, description, translations (teks toko per bahasa), cover (path gambar lokal), cover_url, banner (path gambar lokal), banner_url, screenshots (path gambar lokal, sampai 6: mengganti seluruh set), screenshots_url (URL yang sudah di-host), categories (slug huruf kecil, maksimal 5), features (offline, leaderboard, cloud_save), orientation, max_score, max_score_per_second, cumulative_score, sort_order, coin_price, shop.

coin_price adalah yang membuat game premium: angka membuatnya tetap bisa dilihat, tapi memulai sesi butuh pembelian koin (baris game_unlocks dibuat saat pembayaran), null mengembalikannya jadi gratis. Pembeliannya mengkredit pemilik game dan unlock-nya permanen. Lihat Koin dan toko.

translations adalah pengecualian kedua: dia mengganti seluruh peta. Tulis title, tagline, dan description dalam bahasa Indonesia, bahasa rumah arcade, lalu taruh versi Inggrisnya di translations.en. Hanya tagline dan description yang diterjemahkan, dan kode bahasa yang tidak diiklankan arcade dibuang, bukan disimpan, jadi baca dulu kode yang diterima lewat game_status.

update_game(game: 'rosok-garage', translations: {
  en: { tagline: 'Fix junk, sell gold.', description: 'Run the yard, chase the record.' },
})

shop adalah pengecualian dari "hanya kolom yang kamu kirim": dia mengganti seluruh daftar harga koin game itu, dan menonaktifkan sku mana pun yang tidak ikut disebut.

update_game(game: 'rosok-garage', shop: [
  { sku: 'engine_lv2', title: 'Mesin Lv2', coin_price: 800 },
  { sku: 'fuel', title: 'Bensin', coin_price: 150, type: 'consumable' },
])

Lihat Koin dan toko untuk apa yang dilakukan game dengan daftar itu.

cover diunggah apa adanya (PNG, JPEG, atau WebP, sampai 3 MB) dan arcade meng-encode ulang jadi WebP yang diskalakan muat 1200x800. Kirim gambar sumbernya, tidak perlu dikonversi atau dikecilkan dulu.

banner lewat unggahan yang sama dan merupakan gambar lebar (sekitar 1200x500) untuk hero beranda dan header halaman detail game kamu. Dibiarkan kosong, kedua slot itu memakai sampul.

list_games

Semua game dengan status, jumlah versi, versi yang tayang, dan URL main.

game_status

Satu game secara rinci: metadata, tangga versi lengkap dengan rollout dan ukurannya, total skor, URL main, dan URL papan peringkat. Daftar languages-nya adalah kode bahasa yang diterima translations.

Profil

Satu profil untuk satu arcade. Login lagi dengan nama profil untuk menambah target lain:

npx -y taploka-mcp@latest login --profile=prod --url=https://your-arcade.example.com
claude mcp add taploka-prod -e TAPLOKA_PROFILE=prod -- npx -y taploka-mcp@latest

Sebuah profil tidak pernah jatuh ke pengaturan profil lain. Kalau sebuah profil tidak punya kunci, push-nya berhenti dengan pesan, bukan diam-diam menghubungi server yang berbeda.

Lingkungan

Variabel lingkungan menang atas kredensial tersimpan, persis yang dibutuhkan mesin build.

Variabel Arti
TAPLOKA_URL Arcade yang dituju. Hanya untuk arcade buatan sendiri: bawaannya adalah arcade resmi
TAPLOKA_KEY Token harness
TAPLOKA_PROFILE Memilih profil: prod membaca TAPLOKA_PROD_URL dan TAPLOKA_PROD_KEY
TAPLOKA_NO_BROWSER Isi apa saja untuk mencegah login membuka browser

Tanpa URL, profil default mengarah ke arcade taploka resmi (atau URL aplikasi ini sendiri saat dijalankan dari repo ini). Kunci dari environment tetap tidak pernah dipasangkan dengan URL sisa login.

Dukungan protokol

Servernya melayani dua era. Klien di MCP 2026-07-28 mendapat server/discover, versioning _meta per permintaan, resultType, petunjuk cache di tools/list, dan structuredContent di hasilnya. Klien yang masih memakai handshake initialize (2025-11-25, 2025-06-18) dijawab dalam bentuk yang mereka harapkan. Versi yang tidak didukung dibalas error -32022 yang menyebutkan versi apa saja yang tersedia.