← Kembali ke blog

Cara Kami Membina Pelayan MCP Masa Nyata untuk Godot

Di dalam seni bina Godot MCP VberAI: bagaimana pelayan Protokol Konteks Model masa nyata menghubungkan editor Godot kepada klien AI tanpa membekukan pokok scene.

Diterbitkan
  • vberai
  • godot
  • mcp
  • architecture
  • realtime

Mengapa “Masa Nyata” Penting untuk Pelayan MCP dalam Godot

Kebanyakan demo MCP berfungsi dengan dunia berbentuk REST: model bertanya, alat mengembalikan JSON, dan tiada siapa peduli jika perjalanan pergi-balik mengambil masa dua saat. Godot berbeza. Editor memiliki pokok scene langsung, import sumber, dan gelung mod main. Jika pelayan MCP anda menyekat benang utama—atau hanya melihat salinan projek yang basi—klien AI tidak lagi terasa seperti rakan juruterbang, tetapi seperti editor fail jauh dengan langkah tambahan.

Apabila kami mereka bentuk Godot MCP untuk VberAI, ringkasannya jelas:

  • Pembantu AI (Cursor, Claude, Windsurf, dan klien MCP serupa) mesti mengendalikan editor, bukan hanya membaca fail .gd dari cakera
  • Tindakan seperti mencipta nod, menamakan semula, melampirkan skrip, dan pertanyaan pemilihan mesti selesai sementara editor kekal responsif
  • Konteks mod main dan mod edit mesti kekal jujur—alat harus gagal dengan lantang apabila operasi tidak selamat semasa main

Catatan ini adalah kisah kejuruteraan: bagaimana kami membina pelayan MCP masa nyata yang duduk di sebelah Godot dan bukannya berpura-pura projek itu adalah repositori statik.

Masalah dengan MCP “Fail Sahaja” untuk Enjin

Pendekatan naif adalah menarik:

  1. Arahkan pelayan MCP ke folder projek
  2. Dedahkan read_file / write_file / list_dir
  3. Biarkan model mencipta GDScript dan berharap editor dimuat semula dengan baik

Itu berfungsi untuk laman dokumentasi. Ia gagal untuk kerja enjin kerana:

  • Pemilikan scene wujud dalam ingatan — perbezaan .tscn yang belum disimpan, scene terbuka, dan pemilihan editor tidak kelihatan pada cakera
  • Saluran paip import adalah berkeadaan — menulis PNG tidak sama dengan “sumber sedia dengan tetapan import yang betul”
  • Isyarat dan laluan nod adalah data graf — suntingan rentetan memutuskan pendawaian secara senyap
  • Latensi bertambah — setiap pengesahan “adakah nod muncul?” menjadi imbasan sistem fail penuh yang lain

Kami memerlukan permukaan MCP yang mencerminkan apa yang manusia sudah lihat dalam dok Godot: hierarki, sifat berbentuk inspektor, dan pemegang sumber—bukan hanya rentetan laluan.

Gambaran Keseluruhan Seni Bina

Pada tahap tinggi, Godot MCP adalah tiga lapisan yang bekerjasama:

Klien MCP (Cursor / Claude / …)
        │  JSON-RPC melalui stdio atau pengangkutan tempatan
        ▼
Pelayan MCP (proses jambatan VberAI Godot)
        │  baris gilir arahan + sampul hasil
        ▼
Plugin Editor Godot (GDExtension / plugin editor)
        │  panggilan tertunda pada benang utama
        ▼
Pokok Scene Editor / ResourceDB / Editor Skrip

Lapisan 1 — Permukaan alat MCP

Alat sengaja kecil dan berbentuk kata kerja:

  • godot_get_scene_tree — gambaran scene yang disunting dengan jenis nod dan laluan
  • godot_create_node / godot_set_property
  • godot_attach_script / godot_run_script_snippet (dikawal)
  • godot_list_resources / godot_get_selection

Kami mengelakkan satu alat do_anything yang besar. Alat yang lebih kecil lebih mudah untuk disahkan, lebih mudah untuk log, dan lebih sukar untuk disalahgunakan oleh model menjadi tampalan tanpa had.

Lapisan 2 — Jambatan masa nyata

Jambatan adalah tempat “masa nyata” sebenarnya wujud:

  • Saluran dua arah antara proses MCP dan plugin editor (soket tempatan atau paip bernama dalam pembangunan; binaan produk mungkin membungkus ini di belakang pembantu desktop VberAI)
  • Baris gilir arahan yang menyusun mutasi supaya dua panggilan alat yang bertindih tidak dapat berlumba dengan pokok scene
  • ID permintaan + pengakuan supaya klien MCP boleh menunggu “digunakan” tanpa mengundi sistem fail
  • Denyutan jantung / kehidupan editor supaya klien tahu bila Godot berhenti di tengah sesi

Lapisan 3 — Keselamatan benang utama dalam Godot

API UI dan scene Godot tidak bebas-benang. Plugin tidak pernah mengubah nod pada benang I/O MCP. Sebaliknya:

  1. Arahan MCP tiba pada benang jambatan
  2. Muatan dimasukkan ke dalam baris gilir
  3. Panggilan balik tertunda editor berjalan pada benang utama (call_deferred / cangkuk bingkai melahu)
  4. Sampul hasil mengembalikan kejayaan, ralat berstruktur, atau “cuba semula selepas mod main tamat”

Corak itu membosankan dengan reka bentuk. Membosankan adalah apa yang menjadikan “masa nyata” tidak menjadi “pembekuan editor rawak.”

Menjadikannya Terasa Masa Nyata (Tanpa Berbohong Tentang Latensi)

“Masa nyata” di sini tidak bermaksud latensi sifar ajaib. Ia bermaksud gelung maklum balas sepadan dengan cara manusia bekerja dalam editor.

Gambaran vs aliran

Prototaip awal mengembalikan keseluruhan pokok scene pada setiap panggilan. Itu runtuh pada persediaan dunia terbuka yang besar. Kami bertukar kepada:

  • Gambaran cetek secara lalai (akar + satu tahap, atau fokus pemilihan)
  • Bacaan skop laluan apabila model sudah mengetahui subpokok
  • Token perubahan pilihan supaya panggilan seterusnya boleh bertanya “apa yang berubah sejak X?” dan bukannya menyusun semula segala-galanya

Hasil mesra-diff

Hasil alat termasuk:

  • Rentetan NodePath kanonik
  • Nama jenis (CharacterBody2D, Control, …)
  • Kunci sifat yang memetakan dengan bersih ke medan inspektor
  • Amaran eksplisit apabila tulis digunakan tetapi scene masih kotor / belum disimpan

Model berulang lebih cepat apabila hasil kelihatan seperti keadaan UI, bukan seperti catatan blog teks bebas.

Kelakuan mod main terhad

Mod main adalah tempat separuh daripada tiket “AI merosakkan projek saya” bermula. Peraturan kami:

ModDibenarkanDiblokir atau berget
EditMutasi scene, pertanyaan sumberPadam projek yang merosakkan tanpa pengesahan
MainKebanyakannya baca / pertanyaan nod runtimeSuntingan struktur pada scene yang disunting
PeralihanPetunjuk tunggu / cuba semulaNo-op senyap

Ralat yang jelas mengalahkan kepintaran. Jika model tidak boleh mengedit semasa main, respons MCP mengatakannya dalam bentuk berstruktur—supaya klien boleh memberitahu pengguna untuk berhenti main, kemudian cuba semula.

Masalah Sukar yang Kami Hadapi (dan Kekalkan)

1. Editor bukan pangkalan data

Susunan nod, hubungan pemilik, dan scene pek berinteraksi dengan cara yang kelihatan mudah dalam GIF dan kemas dalam .tscn. Kami bergantung pada API Godot sendiri (Node, EditorInterface, pemuat sumber) daripada mencipta model scene selari yang akan hanyut.

2. Skrip vs scene sebagai dua sumber kebenaran

Melampirkan skrip tidak sama dengan memastikan skrip itu mengkompil dan nama kelas diselesaikan. Pelayan melaporkan hasil kompil/lampiran secara berasingan. Itu menghentikan kelas kegagalan “alat kata berjaya, Inspektor tiada apa-apa.”

3. Sesi berbilang tetingkap / berbilang projek

Pembangun membuka lebih daripada satu contoh Godot. Jambatan mengikat pada ID sesi editor yang eksplisit supaya panggilan alat tidak jatuh ke projek yang salah selepas tidur semalaman + buka semula.

4. Sempadan keselamatan

Pelayan MCP yang boleh menulis semula scene adalah berkuasa. Pengangkutan tempatan-pertama, senarai benarkan alat eksplisit, dan tiada eksfiltrasi awan senyap pokok projek penuh adalah tidak boleh dirunding. “Pembantu AI” dan “shell jauh ke atas permainan anda” mesti kekal kategori produk yang berbeza.

Bagaimana Ini Sesuai Di Samping AI Studio dan VberAI Lain

Godot MCP adalah pengendali enjin. Bahagian pelengkap:

  • VberAI Studio (AI Studio) — struktur reka-ke-enjin untuk hierarki Figma/PSD → Control; MCP kemudian menyambung butang dan menamakan semula nod selepas import
  • Unity MCP / Cocos MCP — idea MCP yang sama, hos editor dan peraturan keselamatan berbeza
  • AI Super Matting — membersihkan alfa sebelum tekstur menjadi sumber enjin yang kemudian ditugaskan oleh MCP

Tesis bersama: AI harus menyentuh permukaan produksi langsung (editor, aset, scene), bukan hanya repositori sebagai teks.

Petua Praktikal Jika Anda Membina MCP Enjin Sendiri

  1. Baris gilir mutasi pada benang utama enjin — jangan sekali-kali berpura-pura enjin permainan adalah pelayan tanpa kongsi
  2. Utamakan alat kecil dengan skema — pengesahan mengalahkan puisi prompt
  3. Kembalikan NodePath dan jenis, bukan prosa — model memerlukan pemegang yang boleh dikendalikan
  4. Kodkan mod main/edit dalam setiap respons — kekaburan di sini memusnahkan kepercayaan
  5. Ukur perjalanan pergi-balik ke “kelihatan dalam dok” — bukan hanya masa pengekodan JSON

Jika anda hanya mengoptimumkan proses MCP dan mengabaikan jambatan editor, anda akan menghantar gelung halusinasi yang pantas.

Kesimpulan

Membina pelayan MCP masa nyata untuk Godot bermakna memperlakukan editor sebagai kolaborator langsung: jambatan selamat-benang utama yang berbaris; alat yang berbentuk seperti tindakan editor; dan kejujuran tentang had mod main. MCP fail sahaja lebih mudah—dan tidak lengkap untuk kerja asli-scene.

Mahukan laluan yang dihantar dan bukannya prototaip hujung minggu? Mulakan dengan VberAI Godot MCP, sambungkan klien MCP pilihan anda, dan cuba panggilan alat pertama yang remeh: senaraikan pokok scene semasa, kemudian cipta satu nod di bawah pemilihan. Gelung tunggal itu—kueri → mutasi → lihat dalam dok—adalah produk. Segala-galanya adalah kejuruteraan kebolehpercayaan di sekelilingnya.

Panduan lain yang mungkin anda suka