rupa3d
Rupa3D is an MCP/CLI 3D tooling server that builds, measures, and certifies 3D assets with embedded proof.
Certified GLB checking: inspect any GLB against specs, embed a certificate in
asset.extras.rupa3d, and use the CLI gate with exit codes for CI.Exact b-rep CAD: create primitives, booleans, fillets/chamfers, 2D sketch-to-solid extrusion/revolve/loft, transform shapes, and import/export STEP/IGES/STL/GLB with exact volume/area verification.
Blender-driven modeling: run arbitrary
bpyscripts, import many 3D/2D formats, render PNG views, generate LOD chains with measured geometric error, bake texture maps, and build procedural textures.Scene and physics authoring: assemble three.js + Rapier scenes with assets, primitives, lights, cameras, environment, physics bodies, collision proxies, and publish as a single self-contained HTML page.
Analysis without Blender: measure triangle topology, texel density, VRAM waste, texture quality, and convex collision hulls with accuracy/cost metrics.
Efficient workflows: chain multiple Blender operations in one process, manage named workspaces, and read certificates without installing Rupa3D.
Provides integration with headless Blender for 3D modeling operations, including importing GLB, OBJ, FBX, STL, PLY, and SVG files, rendering, LOD generation, baking, collision proxies, and source-mesh topology analysis.
Builds 3D scenes with physics using three.js and Rapier, and publishes them as a single self-contained HTML page.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rupa3d check model.glb against the default spec and embed the certificate"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Rupa3D
3D tooling where every asset carries its own proof.
Rupa3D builds 3D — exact b-rep CAD (OpenCascade), meshes (headless Blender),
and scenes with physics (three.js + Rapier) — and then measures what it
built against closed-form references or independent measurements. The
measurements travel with the asset: a certificate embedded in the GLB at
asset.extras.rupa3d, readable with a few lines of code and no Rupa3D
installed.
It is designed to be driven by AI agents over MCP, and by CI over a command-line gate.
Status — 1.6.2 · 297 tests · MIT · on npm as
rupa3d· in the official MCP Registry asio.github.tiranyx/rupa3d. Developed and tested on Windows 11 with Node 22. Tool descriptions and messages are still in Indonesian.
Use it as an MCP server
claude mcp add rupa3d -- npx -y rupa3dOr in any MCP client configuration:
{ "mcpServers": { "rupa3d": { "command": "npx", "args": ["-y", "rupa3d"] } } }Requires Node ≥ 22.14. Workspaces live in ~/.rupa3d; override with
RUPA3D_RUANG.
Blender is optional. 23 of the 36 tools run without it:
without Blender | tools |
Check any GLB against a spec; the certificate is embedded in a copy of the file |
|
Triangle topology, texel density (pixels per metre), VRAM per texture format |
|
Convex collision hull, with how far it misses the shape |
|
Exact b-rep CAD: primitives, booleans, fillets, 2D sketch → solid, exact volume and area, STEP/IGES/STL/GLB export |
|
three.js scenes with Rapier physics, published as a single HTML page |
|
The other 13 drive headless Blender — bpy modeling, import (GLB, OBJ, FBX,
STL, PLY, SVG), renders, LOD, baking, collision proxies, source-mesh
topology. Blender is found under C:\Program Files\Blender Foundation\*, at
RUPA3D_BLENDER, or as blender on PATH.
Related MCP server: mcp-printable
What "proves" means
Every number below comes from the test suite or the documentation in this repository.
Sketch → solid. Extrusion volume is checked against area × distance (area from the shoelace formula), revolution against Pappus's theorem. Recorded errors range from 0 % to 6.03e−14 %; the tests fail above 1e−10 % for extrusion and 1e−8 % for revolution. A result that misses its reference is never saved.
Exact vs approximate. For a Ø140 mm flange the b-rep volume equals the analytic value; the best mesh tessellation tried (9,252 triangles) is off by −0.0016 %. CAD export reports which of the two you are holding (
eksak) and by how much the approximation misses.The kernel's
ok: trueis not accepted as proof. A fillet larger than half the smallest edge came backokwith a broken solid whose volume grew by 1,971 mm³ on a 6,000 mm³ box. Independent checks reject it.Physics. Free-fall time matches h = ½gt² within one simulation step at 30, 60 and 240 Hz, and the error shrinks as the step shrinks — the test guards the direction, so it cannot pass on a lucky timestep.
Compressed files. A Draco-compressed sphere receives the same certificate as its uncompressed twin: 2,208 triangles, 0 failures, 6 warnings.
Hostile files. GLBs with node cycles, out-of-range indices, forged accessor counts or oversized skins are rejected with a message naming the defect, instead of hanging or passing. Each case runs in a child process with a time limit, so a regression fails the suite instead of freezing it.
Command-line gate
npx -p rupa3d rupa periksa model.glbExit code 0 — passes every required rule. 1 — fails a required rule (fix
the asset). 2 — could not be checked (fix the tool or the input).
--json for machine output, --spek for another spec, --tempel to write a
certified copy.
Develop
npm install
npm test297 tests run against real Blender, OpenCascade and Rapier — not mocks — and
one suite talks to the server over real MCP stdio, including from a foreign
working directory the way an MCP client launches it. Tests that need a local
asset are skipped with the reason and how to obtain it; node contoh/flange-cad.mjs rebuilds the flange fixture in about 40 seconds without
Blender.
Limitations
Tool descriptions, messages and most documentation are in Indonesian.
Tested on Windows 11 only. macOS and Linux are untested.
rupa_skripruns arbitrarybpyPython inside Blender. That is the modeling capability, not a bug — but do not expose the server to untrusted input over a network.Hardening against hostile files is partial: there are no general input size limits and no process isolation yet.
It is not a replacement for Blender or Spline today.
License
MIT. Dependencies keep their own licenses — notably brepjs-opencascade
(LGPL-2.1-only). The scripts in bpy/ run inside Blender.
Documentation (Indonesian)
using Rupa3D from outside: library, MCP server, and reading the certificate without installing anything | |
specs and certificates | |
checking other people's GLB files without Blender | |
b-rep CAD over MCP, and 2D sketch → solid | |
physics, scenes and the web runtime | |
topology, textures, compressed files | |
the one-call asset pipeline, and performance | |
every release — including a Terbongkar ("exposed") section for what broke, measuring tools included |
Available Tools
36 toolsrupa_adegan_asetADestructive
Daftarkan GLB ke adegan. Yang dicatat bukan cuma jalurnya: ukuran berkas, KOTAK BATAS (dibaca dari accessor min/max glTF, tanpa memuat mesh), dan SERTIFIKATNYA kalau ada. Kotak batas itu yang membuat kesalahan skala bisa ditangkap sebelum terbit — kesalahan skala tidak muncul di daftar node, tidak menggagalkan apa pun, dan baru ketahuan kalau kebetulan kameranya menghadap ke sana.
Inputs: kunci (required), berkas (required), ruang.
rupa_adegan_baruADestructive
Mulai adegan KOSONG yang sudah sah: kamera, cahaya lingkungan, dan matahari. Menimpa adegan ruang ini. Adegan adalah DATA — ia bisa diperiksa, dibandingkan, diberi versi, dan disusun oleh siapa pun, termasuk agen lewat tool ini.
Inputs: nama, ruang.
rupa_adegan_cahayaADestructive
Atur atau tambah cahaya. id yang sudah ada akan DITIMPA, jadi tool ini juga cara mengubah matahari bawaan. Adegan tanpa satu pun cahaya berkekuatan > 0 ditolak saat terbit — ia akan terbit HITAM, dan layar hitam tanpa pesan adalah kegagalan yang paling mahal.
Inputs: id, kuat, hapus, jenis, +4 more.
rupa_adegan_kameraADestructive
Posisi, target, dan bidang pandang kamera awal. Ini kamera yang dilihat orang saat halaman pertama dibuka — orbit sesudahnya milik pembaca.
Inputs: fov, ruang, posisi, target.
rupa_adegan_lihatARead-only
Isi adegan berikut ANGKANYA: tiap node dengan ukuran DUNIA-nya, sertifikat tiap aset, dan pemeriksaan SKALA TIMPANG — node yang diagonalnya menyimpang jauh dari median adegan. Panggil ini sebelum terbit. Kesalahan skala terjadi pada adegan pertama alat ini sendiri: sebuah ikon terbit 438 satuan di adegan bermedian 1,7 karena skalanya dipakai dari ingatan tentang aset LAIN, tanpa mengukur aset itu.
Inputs: ruang.
rupa_adegan_lingkunganCDestructive
Langit gradien, paparan (tone mapping ACES), bayangan, dan kabut. Paparan adalah pengatur terang yang BENAR di alur kerja PBR — menaikkan kekuatan cahaya untuk membuat gambar lebih terang akan merusak pantulan dan bayangannya.
Inputs: ruang, paparan, bayangan, kabut_jauh, +5 more.
rupa_adegan_nodeBDestructive
Tambah, ubah, atau hapus node. jenis boleh aset (memakai GLB terdaftar) atau bentuk dasar — bentuk dasar ada supaya lantai dan latar tidak menuntut satu GLB sendiri.
peran menentukan apakah node ikut dinilai skalanya: properti = benda di panggung (dinilai), latar = lantai/dinding/langit (dikecualikan), pandu = grid/sumbu/penanda. Lantai 40 m di adegan bermedian 1,7 m BUKAN kesalahan skala, dan membedakannya lewat peran lebih jujur daripada melonggarkan ambang sampai lantai lolos.
Inputs: id, aksi, aset, nama, +25 more.
rupa_adegan_terbitADestructive
Adegan jadi SATU halaman HTML yang berdiri sendiri — orbit, klik-pilih, dan tiap objek membawa angkanya. Aset ditanam sebagai base64 di dalam halamannya, bukan ditunjuk lewat URL: halaman yang memuat asetnya lewat jaringan akan tampil sebagai LAYAR KOSONG di lingkungan ber-CSP ketat, tanpa galat yang menyebut sebabnya.
Ongkosnya diukur, bukan diabaikan: base64 membengkakkan bita sekitar 4/3, dan anggaran 16 MB diperiksa SEBELUM menulis dengan menyebut aset penyumbang terbesar. Mode mandiri menghasilkan dokumen utuh untuk server statis mana pun; mandiri: false menghasilkan potongan tanpa / untuk penerbit yang memasang kerangkanya sendiri.
Inputs: berkas (required), judul, ruang, mandiri.
rupa_bakeADestructive
Panggang detail dari mesh RAPAT ke mesh RENGGANG jadi peta tekstur. UV dibuat otomatis kalau belum ada, jarak cage DIHITUNG dari selisih kedua permukaan (bukan ditebak), dan hasilnya dilaporkan dengan cakupan UV serta variasi piksel. Arah terbalik diperiksa dari kerapatan poligon — ia tidak bisa dideteksi dari gambarnya, karena membalik arah tetap menghasilkan peta yang tampak sah.
Inputs: berkas (required), rendah (required), tinggi (required), cage, +6 more.
rupa_baruADestructive
Mulai adegan KOSONG. Menghapus isi adegan ruang kerja ini — panggil sekali di awal sebuah model, bukan di tiap langkah.
Inputs: ruang, satuan.
rupa_cad_bentukADestructive
Buat primitif b-rep bernama. Beda mendasar dengan rupa_skrip: silinder di sini disimpan sebagai SILINDER — permukaan analitik berikut toleransinya — bukan segitiga yang menghampirinya. Volumenya EKSAK, dan itu bisa dibuktikan: silinder r=7,5 t=12 memberi angka yang sama persis dengan pir^2t.
Inputs: nama (required), jenis (required), arah, jari, +8 more.
rupa_cad_booleanADestructive
Potong, gabung, atau iris dua bentuk. Arah volumenya DIPERIKSA, dan itu bukan formalitas: boolean yang gagal separuh sering mengembalikan salah satu operand utuh, yang tampak berhasil sampai ada yang mengukurnya. Hasil yang arah volumenya salah tidak pernah tersimpan.
Inputs: a (required), b (required), operasi (required), ke, +1 more.
rupa_cad_daftarBRead-only
Semua bentuk di ruang CAD ini berikut volume, luas, jumlah tepi, dan apakah bentuknya sah — bukan cuma namanya.
Inputs: ruang.
rupa_cad_eksporADestructive
Tulis bentuk ke berkas. Pembagian yang menentukan, dan tidak disebut pesan galat mana pun:
.step .iges b-rep EKSAK, permukaan analitik — untuk CAD & CNC .stl .glb .obj SEGITIGA, hampiran — untuk web & cetak
Yang kedua SELALU melenceng, berapa pun toleransinya diperkecil, jadi galatnya ikut dilaporkan. "Sudah diekspor" tanpa angka adalah kalimat yang tidak bisa dipercaya.
Inputs: nama (required), berkas (required), ruang, toleransi.
rupa_cad_filletADestructive
Bulatkan (fillet) atau serong (chamfer) tepi — SEMUA tepi, tepi searah tertentu, atau daftar indeks dari rupa_cad_tepi.
PERINGATAN YANG TERUKUR: di atas setengah sisi terkecil, fillet mengembalikan ok dengan solid RUSAK. Pada kotak 10x20x30, radius 5,001 memberi volume 7971 dari 6000 — fillet yang MENAMBAH material. Kernelnya tidak mengeluh. Tool ini menolaknya lewat dua pemeriksa bebas (isShapeValid dan arah volume), dan hasil yang gagal tidak pernah tersimpan. chamfer tidak punya masalah itu; ia gagal bersih.
Inputs: nama (required), ukuran (required), ke, arah, +3 more.
rupa_cad_imporADestructive
Baca STEP/IGES/STL dari CAD lain, lalu UKUR isinya. Impor tanpa ukur tidak memberi tahu apa pun tentang apa yang masuk — dan STEP dari dunia luar sering membawa bentuk yang tidak sah, yang baru ketahuan saat dioperasikan.
Inputs: nama (required), berkas (required), ruang.
rupa_cad_sketsaADestructive
Sketsa 2D → padat 3D: dorong (ekstrusi), putar (revolve), atau loft. Inilah cara benda nyata dimodelkan — gambar penampang, lalu bangkitkan. Satu tool ini membuka arsitektur (denah → dinding), pemodelan mesin (profil → poros/flange/wadah), dan 2D→3D (path → padat).
YANG MEMBEDAKANNYA: tiap padat DIPERIKSA terhadap RUMUS TERTUTUP. Ekstrusi dibandingkan dengan luas × jarak (luasnya dihitung shoelace dari polilinenya, bukan ditulis tangan); putar 360° dibandingkan dengan teorema Pappus (2π·R_centroid·luas). Terukur pada kernel ini: ekstrusi meleset 1e-14%, putar cocok dengan Pappus sampai 0,000000%. Hasil yang melenceng dari acuannya TIDAK disimpan.
DUA HAL YANG MENGHANCURKAN PUTAR, dijaga di depan karena galat kernelnya berupa pointer mentah yang tak terbaca: profil yang MELINTASI sumbu putar, dan sudut di luar 0..360.
Inputs: nama (required), asal, jari, sisi, +19 more.
rupa_cad_statusARead-only
Kernel b-rep OCCT: nyala atau tidak, dan bentuk apa saja yang ada di ruang ini. Panggil sekali sebelum memakai tool rupa_cad_* lain — menyalakan kernelnya makan sekitar 0,4 detik, dan sesudah itu gratis.
Inputs: ruang.
rupa_cad_tepiARead-only
Daftar tepi sebuah bentuk berikut ARAH dan PANJANGNYA. Panggil ini SEBELUM fillet selektif — tanpa daftar ini, "fillet tepi tegak saja" berarti menebak indeks, dan indeks tepi bukan sesuatu yang bisa ditebak.
Inputs: nama (required), ruang.
rupa_cad_ubahADestructive
Geser, putar, skala, atau cermin sebuah bentuk. Volumenya diperiksa terhadap yang DIHARAPKAN secara matematis: geser dan putar tidak boleh mengubahnya sama sekali, skala mengubahnya pangkat tiga. Transformasi yang menggeser volume adalah gejala matriks yang salah, dan itu tidak terlihat sampai ada yang mengukur.
Inputs: nama (required), ke, geser, ruang, +5 more.
rupa_cad_ukurBRead-only
Volume dan luas EKSAK, jumlah tepi dan muka, kotak batas — plus ongkos hampiran meshnya pada satu toleransi. Dua angka itu selalu dilaporkan bersama, disengaja: yang eksak sendirian tidak memberi tahu berapa yang HILANG saat bentuknya dikirim ke web.
Inputs: nama (required), ruang, toleransi.
rupa_eksporADestructive
Ekspor adegan ke GLB. Skala diterapkan ke verteks lebih dulu (manual three.js menyebut skala pada node sebagai sumber masalah runtime), dan hasilnya dilaporkan bersama jumlah segitiga, kotak batas, dan peringatan.
Inputs: berkas (required), draco, ruang, draco_level, +1 more.
rupa_lihatARead-only
Render beberapa sudut ke PNG dan kembalikan jalurnya — BACA gambarnya sesudah ini, jangan mengaku selesai dari angka saja. Kamera dan lampu dipasang otomatis dari kotak batas adegan, jadi objek sekecil atau sebesar apa pun tetap terbingkai. Sudut bernama: depan, belakang, kiri, kanan, atas, bawah, hero, serong; atau "yaw,pitch" dalam derajat.
Inputs: fov, mesin, ruang, sudut, +3 more.
rupa_lodADestructive
Rantai LOD dengan GALAT GEOMETRIS tiap tingkat — jarak sesungguhnya tiap simpul hasil ke permukaan asli, mutlak dan sebagai persen diagonal. Mengecilkan mesh selalu "berhasil"; yang menentukan layak atau tidak adalah berapa banyak yang hilang. Di atas 2% diagonal, siluetnya mulai terbaca berubah.
Inputs: objek, ruang, nisbah.
rupa_muatADestructive
Impor berkas 3D (.glb .gltf .obj .fbx .stl .ply) atau VEKTOR 2D (.svg) ke adegan. Untuk SVG, ekstrusi > 0 langsung menebalkannya jadi 3D — ini jalur 2D→3D paling presisi yang ada, karena memakai kurva aslinya dan bukan tebakan.
Inputs: berkas (required), ruang, ekstrusi, sisi_tabung, +1 more.
rupa_periksaADestructive
Nilai adegan terhadap SPEK, dan terbitkan SERTIFIKAT. Inilah yang membuat Rupa3D berbeda: hasilnya bukan "berhasil", melainkan daftar janji berikut angka yang membuktikan atau membantahnya. Aturan berbobot wajib menggagalkan; peringatan dilaporkan lengkap dengan angkanya tetapi tidak menjadi gerbang. Ukuran yang HILANG dihitung GAGAL — aturan yang diam-diam tidak dijalankan adalah cara paling halus sebuah pemeriksa berbohong.
Inputs: spek (required), aset, ruang, berkas, +1 more.
rupa_proksiARead-only
Bangun proksi tabrakan CEMBUNG dari sebuah GLB, berikut ongkosnya yang terukur. Titiknya bisa langsung dipasang ke rupa_adegan_node sebagai fisika.bentuk = "cembung".
Diukur dengan collider Rapier yang PERSIS akan berjalan (projectPoint), bukan dengan model hull terpisah — mengukur proksi dengan alat yang berbeda dari yang menjalankannya berarti mengukur benda yang berbeda.
PERINGATAN YANG TERUKUR: convexHull Rapier RUSAK DIAM-DIAM di atas sekitar 8.000 titik — tidak null, tidak melempar, tidak memperingatkan; ia mengembalikan collider bervolume NOL, dan benda dengan collider bervolume nol tidak menabrak apa pun: ia jatuh menembus dunia. Karena itu titiknya selalu direduksi lebih dulu dan hasilnya dijaga dua pemeriksa eksak.
Inputs: berkas (required), arah, sertakan_titik.
rupa_rantaiADestructive
Jalankan beberapa op Blender dalam SATU proses. Ini bukan kemudahan — ini perbedaan 7 kali lipat, dan angkanya diukur.
Menyalakan proses Blender cuma 449 ms; sisa 2,5–4 detik tiap panggilan adalah MUAT dan SIMPAN berkas .blend yang sama, diulang untuk setiap op. Enam op satu per satu makan 22,2 detik; enam op yang sama berantai makan 3,1 detik. Hasilnya terbukti IDENTIK bidang demi bidang, termasuk galat LOD dan dua arah galat proksi tabrakan.
RANTAI BERHENTI DI KEGAGALAN PERTAMA, dan itu disengaja: op berikutnya hampir selalu bergantung pada yang sebelumnya, dan menjalankannya di atas adegan setengah jadi menghasilkan angka yang tampak wajar untuk keadaan yang tidak pernah dimaksudkan.
YANG TIDAK BISA DIRANTAI: urutan yang punya KEPUTUSAN di tengah — misalnya memilih objek proksi tabrakan dari hasil pengukuran sebelumnya. Pecah jadi beberapa rantai di batas keputusan yang nyata; rakit.mjs memakai tiga.
Waktu per-op TIDAK diukur dalam mode ini; yang dilaporkan waktu seluruh rantai.
Inputs: ops (required), ruang.
rupa_skripADestructive
PRIMITIF PEMODELAN: jalankan Python bpy di dalam Blender headless, lalu simpan adegannya. Tersedia: bpy, bmesh, math, mathutils, RUANG (jalur ruang kerja), dan dict keluaran yang ikut dikembalikan. Tulis bentuk dari ANGKA BERNAMA, bukan nilai ajaib — itu yang membuatnya bisa diubah lagi tanpa dibangun ulang.
Inputs: kode (required), ruang.
rupa_statusARead-only
Versi Blender, akar ruang kerja, dan apakah adegannya sudah ada. Panggil sekali di awal.
Inputs: ruang.
rupa_tabrakanBDestructive
Proksi tabrakan + dua arah kesalahannya. "tembus" = permukaan asli yang berada DI LUAR proksi (benda menembus dinding); "longgar" = proksi yang jauh di luar permukaan asli (tabrakan terasa di udara kosong). Untuk mesin fisika web seperti Rapier, cembung adalah kuda bebannya — mesh_sederhana hanya untuk benda STATIS, karena trimesh dinamis tidak didukung sebagian besar mesin.
Inputs: objek, ruang, bentuk, nisbah.
rupa_teksturARead-only
Periksa TEKSTUR sebuah GLB, dan jawab pertanyaan yang sebenarnya ditanyakan orang: apakah teksturnya CUKUP untuk benda ini, atau TERLALU BESAR.
Jawabannya PIKSEL PER METER — kerapatan texel (UV per meter dunia) dikalikan ukuran tekstur. Kedua bahannya sudah ada di setiap GLB dan tidak ada alat yang mengalikannya. Di bawah ~100 px/m benda seukuran manusia buram dari dekat; di atas ~2000 px/m hampir selalu pemborosan.
TIGA PEMBOROSAN YANG TIDAK TERLIHAT DI LAYAR: peta RATA (1024² berisi satu nilai = 4 MB VRAM untuk sebuah angka), ALFA SIA-SIA (RGBA yang alfanya 255 di mana-mana = 25% memori terbuang), dan RESOLUSI SEMU (gambar 256² yang di-upscale jadi 1024² = memori empat kali lipat untuk detail yang sama persis).
Normal map diperiksa DUA syarat sekaligus: |v| mendekati 1 DAN biru tinggi. |v| sendirian tidak cukup — gambar gradien sembarang memberi |v|=1,105, cukup dekat untuk lolos.
FAKTOR ikut dilaporkan, dan itu bukan kelengkapan: di glTF nilai efektif = faktor × saluran tekstur. Melaporkan "saluran B = 255" tanpa menyebut metallicFactor: 0 mengundang kesimpulan bahwa bendanya logam penuh, padahal hasilnya nol.
Inputs: berkas (required), per_gambar, piksel_per_meter.
rupa_tekstur_buatADestructive
Bangun material PROSEDURAL di Blender, PANGGANG jadi peta gambar, lalu ganti materialnya dengan yang berbasis gambar supaya bisa diekspor.
Langkah terakhir itu yang paling mudah terlupa dan paling mahal: material prosedural Blender TIDAK BISA diekspor ke glTF sama sekali. Eksportirnya cuma mengerti nilai tetap dan peta gambar, jadi material prosedural yang indah di Blender terbit ke web sebagai ABU-ABU RATA, tanpa satu pun peringatan.
Tiga hal yang menentukan hasilnya: node gambar harus AKTIF sebelum bake (kalau tidak Blender memanggang ke tempat tak tentu dan diam saja); bake DIFFUSE bawaannya menyertakan pencahayaan sehingga bayangan lampu ikut terpanggang ke albedo; dan ruang warna harus disetel SEBELUM disimpan — albedo sRGB, sisanya Non-Color.
Inputs: keluar (required), gaya, jenis, objek, +4 more.
rupa_topologiARead-only
Periksa TOPOLOGI sebuah GLB — bagaimana verteksnya TERSAMBUNG, bukan di mana letaknya. Bekerja pada berkas dari mana pun, termasuk keluaran generator AI, tanpa perlu Blender.
Yang dilaporkan: tepi tak-manifold, tepi batas (lubang), segitiga berputar terbalik, segitiga degenerasi dan sliver, nisbah pecah verteks, sebaran kerapatan texel, dan UV di luar 0–1.
SATU HAL YANG MENENTUKAN: verteks DILAS menurut posisi sebelum dihitung. glTF memecah verteks di tiap jahitan UV, jadi menghitung manifold pada indeks mentah membuat setiap jahitan terlihat sebagai lubang — terukur pada satu aset: 30.790 mentah vs 360 setelah dilas, menggelembung 85 kali.
DAN YANG TIDAK BISA DIUKUR DARI GLB, disebut apa adanya: nisbah quad/n-gon dan pola edge loop sudah HILANG sebelum berkasnya ditulis, karena glTF selalu tersegitiga. Alat mana pun yang mengklaim menilai quad-dominance dari sebuah GLB sedang mengarang.
Inputs: berkas (required), per_primitif, toleransi_las.
rupa_topologi_sumberARead-only
Topologi SUMBER: quad, n-gon, valensi verteks, KUTUB, dan EDGE LOOP — diukur dari mesh di dalam Blender, satu-satunya tempat keempatnya masih ada.
glTF SELALU tersegitiga, jadi rupa_topologi (yang membaca GLB) menyebut keempat ukuran ini "tidak bisa diukur" di tiap keluarannya. Itu benar, dan tool ini bukan penghampirannya — ia membaca sumbernya.
KENAPA INI YANG MENENTUKAN: yang membuat aset generatif menuntut dua sampai empat jam retopology manual bukan jumlah segitiganya, melainkan tidak adanya STRUKTUR — tidak ada edge loop yang mengikuti lipatan, valensi kacau, quad tidak ada. Mesh begitu tidak bisa dideformasi, di-subdivide, atau di-UV tanpa dibangun ulang.
BATAS YANG DISEBUT: memuat GLB ke Blender TIDAK memulihkan quad-nya. Kalau mesh yang diukur seluruhnya segitiga, keluarannya memuat peringatan yang menyatakan bahwa itu bisa berarti mesh memang bertopologi segitiga ATAU informasinya sudah musnah saat impor — dan alat ini tidak bisa membedakannya. Terukur: sebuah GLB 2.976 segitiga diimpor ulang keluar sebagai 2.976 segitiga dan NOL quad.
VERTEKS BATAS dikeluarkan dari analisis kutub: valensi != 4 di tepi terbuka itu wajar, bukan cacat — bidang datar 4x4 punya seluruh tepinya bervalensi 2 atau 3.
Inputs: objek, ruang, per_objek, ambang_sebidang.
rupa_ukurARead-only
Angka untuk tiap objek mesh: segitiga, simpul, n-gon, tepi tak-manifold, simpul lepas, luas, ukuran, letak, skala, apakah skala sudah diterapkan, bahan — plus kotak batas seluruh adegan dan daftar peringatan. Inilah yang membuat hasilnya presisi; mata tidak bisa membaca skala.
Inputs: ruang.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 36 tools
Most tools have clearly distinct purposes (modeling, CAD, scene assembly, inspection), but there is some overlap between rupa_lihat and rupa_adegan_lihat (both involve viewing/checking the scene), and between rupa_ukur and rupa_cad_ukur (both measure objects). The descriptions are detailed enough to disambiguate, but an agent could hesitate between these pairs.
The naming follows a consistent rupa_ prefix with snake_case verbs (rupa_baru, rupa_muat, rupa_ukur, rupa_ekspor). The CAD and scene subdomains use rupa_cad_* and rupa_adegan_* prefixes, which is a clear pattern. Minor deviation: rupa_cad_daftar and rupa_adegan_lihat use nouns rather than verb_noun, but the overall pattern is strong.
36 tools is on the heavy side, but the server covers three distinct domains (core modeling, CAD kernel, scene assembly/publishing) plus inspection tools. Each tool has a specific job, but the count is high enough that an agent will need careful routing. It is not excessive for the scope, but it is at the upper edge of reasonable.
The tool surface is remarkably complete: modeling (create, import, script, measure, render, export, LOD, collision, bake, topology, texture), CAD (status, primitives, boolean, edges, fillet, sketch, transform, measure, export, import), and scene (new, assets, nodes, lights, camera, environment, publish). The only minor gap is no explicit tool for deleting individual objects outside the scene node tool, but rupa_adegan_node covers add/update/delete. The domain is fully covered.
Related MCP Connectors
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
OCR, transcription, file extraction, and image generation for AI agents via MCP.
100+ MCP tools for AI agents: content metadata, trade intelligence, business-expertise analysis.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceExposes 50+ Blender tools (object manipulation, materials, animation, etc.) via MCP for AI-driven 3D workflows and automation.1MIT
- AlicenseAqualityDmaintenanceConnects MCP-capable agents to Blender and OpenSCAD for AI-driven 3D modeling, with tools and rules optimized for FDM-printable geometry.2957 PyPI3MIT
- AlicenseAqualityDmaintenanceExposes 12 robotics/simulation tools from robosimtools.com as MCP tools, enabling AI agents to perform conversions (quaternion, URDF, MJCF), validation, and CAD imports locally.121MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents and software to create, edit, inspect, validate, and export CAD geometry through MCP using backend-neutral typed operations, with FreeCAD/OpenCascade as the authoritative B-rep backend and JSCAD preview.1Apache 2.0