Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Rupa3D

NPM · RUPA3D · SCANNED SEP 20

Checks GLB assets against a spec without Blender and embeds the measured proof inside the GLB.

Available components

70 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 33 of 103 dependencies flagged as unhealthy (1 deprecated). View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability66
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 8773 tokens (~243/item across 36 items; 36 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management20
  • Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage89
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 66% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 36 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 37 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the Rupa3D MCP server?

Rupa3D runs locally as an npm package, launched with npx -y rupa3d. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · rupa3d

# add to Claude Code
claude mcp add tiranyx-rupa3d -- npx -y rupa3d
// .cursor/mcp.json
{
  "mcpServers": {
    "tiranyx-rupa3d": {
      "command": "npx",
      "args": [
        "-y",
        "rupa3d"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "tiranyx-rupa3d": {
      "command": "npx",
      "args": [
        "-y",
        "rupa3d"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add tiranyx-rupa3d -- npx -y rupa3d
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "tiranyx-rupa3d": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "rupa3d"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add tiranyx-rupa3d --command npx --arg -y --arg rupa3d
# ~/.hermes/config.yaml
mcp_servers:
  tiranyx-rupa3d:
    command: "npx"
    args: ["-y", "rupa3d"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "tiranyx-rupa3d": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "rupa3d"
      ]
    }
  }
}
# add to Vellum
assistant mcp add tiranyx-rupa3d -t stdio -c npx -a -y rupa3d
// mcp.json
{
  "mcpServers": {
    "tiranyx-rupa3d": {
      "command": "npx",
      "args": [
        "-y",
        "rupa3d"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

  • 17 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 +15
    • Malware scan: unverified → pass security
  • 15 Sept 26 +6
    • Malware scan: unverified → pass security
    • Source repository: fail → pass security
    • Security disclosure: unverified → fail functional
    • Stability: unverified → 0.03 functional
    • Package version: 1.6.1 → 1.6.2 functional
  • 14 Sept 26 47

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Analysed npm/rupa3d@1.6.2

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 103 packages
Packages resolved 103
Deprecated 1
Stale 32
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 36 exposed · ~8,220 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
rupa_adegan_aset ~165

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.

NameTypeReqDescription
berkasstringyesJalur absolut .glb
kuncistringyesNama pendek untuk menyebut aset ini di node.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_adegan_baru ~108

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.

NameTypeReqDescription
namastringNama adegan; jadi judul halaman saat terbit.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_adegan_cahaya ~154

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.

NameTypeReqDescription
bayanganboolean
hapusboolean
idstring
jenisstring
kuatnumber
posisiarray
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
warnastring

No output schema declared.

No examples provided.

rupa_adegan_kamera ~86

Posisi, target, dan bidang pandang kamera awal. Ini kamera yang dilihat orang saat halaman pertama dibuka — orbit sesudahnya milik pembaca.

NameTypeReqDescription
fovnumber
posisiarray
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
targetarray

No output schema declared.

No examples provided.

rupa_adegan_lihat ~134

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.

NameTypeReqDescription
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_adegan_lingkungan ~167

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.

NameTypeReqDescription
bayanganboolean
kabut_dekatnumber
kabut_jauhnumber
kabut_matiboolean
kabut_warnastring
langit_atasstring
langit_bawahstring
paparannumber
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_adegan_node ~666

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.

NameTypeReqDescription
aksistring
asetstringKunci aset terdaftar; wajib kalau jenis = aset.
bayanganboolean
beningnumberTransmisi kaca 0..1.
fisika_bentukstringBentuk collider. DINYATAKAN, bukan diturunkan dari bentuk visualnya: collider yang mengikuti mesh persis adalah trimesh, dan trimesh tidak bisa dinamis di mesin fisika web mana pun.
fisika_gesekannumber
fisika_hapusbooleanBuang fisika dari node ini.
fisika_jenisstringJenis badan. Kosongkan kalau node ini tidak ikut fisika.
fisika_kendalibooleanNode ini dikendalikan pemain (WASD + lompat).
fisika_kerapatannumberkg/m3.
fisika_massanumberkg. Sebutkan massa ATAU kerapatan, jangan keduanya - Rapier menerima keduanya dan diam-diam mengabaikan salah satunya.
fisika_pantulnumberRestitusi 0..1.
fisika_titikarrayWAJIB untuk bentuk `cembung`: larik datar [x,y,z,...] dari rupa_proksi. Maksimum 4096 titik (12288 angka) - convexHull Rapier rusak diam-diam di atas ~8.000 titik dan mengembalikan collider bervolume…
fisika_ukuranarrayUkuran collider kalau berbeda dari ukuran visualnya.
idstringWajib untuk ubah/hapus; kosong saat tambah = dibuatkan.
jenisstring
kekasarannumber
logamnumber
namastring
pancarnumber
peranstring
posisiarray
putararrayDerajat, XYZ.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
skala
tampakboolean
tembusnumberKebalikan opasitas sederhana.
ukuranarrayUntuk bentuk dasar; tidak berlaku pada aset.
warnastring

No output schema declared.

No examples provided.

rupa_adegan_terbit ~232

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 <html>/<head> untuk penerbit yang memasang kerangkanya sendiri.

NameTypeReqDescription
berkasstringyesJalur absolut .html tujuan.
judulstring
mandiriboolean
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_bake ~237

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.

NameTypeReqDescription
berkasstringyesJalur absolut PNG tujuan.
cagenumberKosongkan supaya dihitung dari selisih permukaan.
contohinteger
jarak_sinarnumber
jenisstring
margininteger
rendahstringyesMesh tujuan (renggang) — yang akan dipakai di game/web.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
tinggistringyesMesh sumber (rapat) — yang punya detailnya.
ukuraninteger

No output schema declared.

No examples provided.

rupa_baru ~66

Mulai adegan KOSONG. Menghapus isi adegan ruang kerja ini — panggil sekali di awal sebuah model, bukan di tiap langkah.

NameTypeReqDescription
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
satuanstring

No output schema declared.

No examples provided.

rupa_cad_bentuk ~297

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 pi*r^2*t.

NameTypeReqDescription
araharraySumbu untuk silinder/kerucut/torus; bawaan [0,0,1].
jarinumbersilinder / bola / kerucut (jari bawah).
jari_atasnumberkerucut; 0 = lancip.
jari_besarnumbertorus: jari lingkaran besar.
jari_kecilnumbertorus: jari penampang.
jenisstringyes
namastringyesNama bentuk di ruang CAD; satu segmen, tanpa pemisah jalur.
pusatarray
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
sumbuarrayelipsoid: [a, b, c].
tingginumber
ukuranarraykotak: [x, y, z].

No output schema declared.

No examples provided.

rupa_cad_boolean ~138

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.

NameTypeReqDescription
astringyesBentuk dasar.
bstringyesBentuk alat.
kestringNama hasil; kosong = timpa `a`.
operasistringyes
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_cad_daftar ~56

Semua bentuk di ruang CAD ini berikut volume, luas, jumlah tepi, dan apakah bentuknya sah — bukan cuma namanya.

NameTypeReqDescription
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_cad_ekspor ~203

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.

NameTypeReqDescription
berkasstringyesJalur absolut; formatnya diambil dari ekstensinya.
namastringyesNama bentuk di ruang CAD; satu segmen, tanpa pemisah jalur.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
toleransinumberHanya berlaku untuk format bersegitiga.

No output schema declared.

No examples provided.

rupa_cad_fillet ~302

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.

NameTypeReqDescription
arahstringHanya tepi yang sejajar sumbu ini.
jenisstring
kestringNama hasil; kosong = timpa asalnya.
namastringyesNama bentuk di ruang CAD; satu segmen, tanpa pemisah jalur.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
tepiarrayDaftar indeks tepi dari `rupa_cad_tepi`. Menimpa `arah`.
ukurannumberyesRadius fillet, atau jarak chamfer. Batas amannya setengah sisi terkecil.

No output schema declared.

No examples provided.

rupa_cad_impor ~106

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.

NameTypeReqDescription
berkasstringyes
namastringyesNama untuk menyimpannya di ruang ini.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_cad_sketsa ~655

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.

NameTypeReqDescription
asalnumberGeseran sepanjang normal bidang.
bidangstringBidang gambarnya. Ekstrusi terjadi pada arah NORMAL bidang ini.
jaraknumberekstrusi: sejauh mana didorong.
jarinumberlingkaran / polisegi
jari_besarnumberelips
jari_kecilnumberelips
jenisstringBentuk profil 2D-nya.
lebarnumberpersegi
lurusbooleanloft: sisi lurus antar penampang, bukan melengkung.
mulaiarraypath: titik awal pena.
namastringyesNama untuk menyimpan hasilnya.
operasistring
profil_loftarrayloft: daftar profil, bentuknya sama dengan bidang profil di atas.
puntirnumberekstrusi: derajat puntiran sepanjang jaraknya. Volumenya tidak berubah — geseran tidak menambah material — dan itu justru yang mengujinya.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
segmenarraypath: urutan segmen. Jalurnya ditutup otomatis.
sisiintegerpolisegi
sudutnumberputar: derajat.
sumbuarrayputar: sumbu putarnya; bawaan [0,0,1].
teksstring
tinggi_loftarrayloft: posisi tiap profil sepanjang normal bidang; harus sepanjang profil_loft.
tinggi_profilnumberpersegi (tinggi 2D-nya, bukan ekstrusi)
ukuran_teksnumber

No output schema declared.

No examples provided.

rupa_cad_status ~87

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.

NameTypeReqDescription
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_cad_tepi ~113

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.

NameTypeReqDescription
namastringyesNama bentuk di ruang CAD; satu segmen, tanpa pemisah jalur.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_cad_ubah ~211

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.

NameTypeReqDescription
cermin_normalarray
geserarray
kestringNama bentuk di ruang CAD; satu segmen, tanpa pemisah jalur.
namastringyesNama bentuk di ruang CAD; satu segmen, tanpa pemisah jalur.
putar_sudutnumberDerajat.
putar_sumbuarray
putar_titikarray
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
skalanumber

No output schema declared.

No examples provided.

rupa_cad_ukur ~125

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.

NameTypeReqDescription
namastringyesNama bentuk di ruang CAD; satu segmen, tanpa pemisah jalur.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
toleransinumber

No output schema declared.

No examples provided.

rupa_ekspor ~143

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.

NameTypeReqDescription
berkasstringyesJalur absolut tujuan .glb
dracobooleanKompresi Draco: berkas jauh lebih kecil, tapi pemuatnya butuh decoder Draco.
draco_levelinteger
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
terapkan_transformasiboolean

No output schema declared.

No examples provided.

rupa_lihat ~192

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.

NameTypeReqDescription
contohinteger
fovnumber
latar_tembusboolean
mesinstringCYCLES untuk kaca/pembiasan yang benar; EEVEE jauh lebih cepat tapi menampilkan kaca sebagai susu buram.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
sudutarray
ukuraninteger

No output schema declared.

No examples provided.

rupa_lod ~144

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.

NameTypeReqDescription
nisbaharrayPecahan segitiga yang DIPERTAHANKAN per tingkat, sama seperti Decimate modifier.
objekstringNama mesh; kosong = semua mesh di adegan.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_muat ~339

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.

NameTypeReqDescription
berkasstringyesJalur absolut berkas yang diimpor.
ekstrusinumberHanya untuk SVG: ketebalan. Path ber-FILL (spline tertutup) di-extrude jadi lempeng padat; path ber-STROKE (spline terbuka, ikon bergaya garis) di-bevel jadi tabung bulat berjari-jari ini — memperlak…
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
sisi_tabungintegerResolusi bevel untuk path ber-stroke; 3 = 16 sisi, cukup halus dan murah.
tebal_nisbinumberCara yang DISARANKAN untuk menyebut ketebalan: pecahan dari diagonal kotak batas hasil impor (mis. 0.02 = 2%). Menimpa `ekstrusi`. Satuan absolut tidak bisa ditebak — SVG 64x64 masuk sebagai objek se…

No output schema declared.

No examples provided.

rupa_periksa ~337

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.

NameTypeReqDescription
asetstringNama aset untuk dicatat di sertifikat.
berkasstringGLB yang diukur LANGSUNG, tanpa Blender. Ini yang seharusnya dipakai untuk aset yang sudah jadi — termasuk keluaran generator mana pun. Sertifikat menggambarkan berkas yang ditempelinya, jadi angkany…
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
spekstringyesJalur berkas spek JSON. Spek bawaan ikut paket dan boleh disebut relatif: spek/aset-generatif.json (GLB umum, 25 aturan), spek/kora-3d-penuh.json (35 aturan).
tempel_kestringJalur GLB yang akan DISALIN lalu ditempeli sertifikat pada `asset.extras.rupa3d`. Berkas asal tidak pernah ditulisi.

No output schema declared.

No examples provided.

rupa_proksi ~286

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.

NameTypeReqDescription
arahintegerBanyak arah penopang. Makin banyak makin rapat proksinya, dan ongkos ketepatannya ikut dilaporkan supaya bisa dipilih dengan angka.
berkasstringyesJalur absolut .glb
sertakan_titikbooleanSertakan larik titiknya. Matikan kalau cuma ingin angkanya.

No output schema declared.

No examples provided.

rupa_rantai ~358

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.

NameTypeReqDescription
opsarrayyesDaftar op berurutan. Tiap entri memuat `op` plus argumen yang sama dengan tool tunggalnya — mis. { "op": "lod", "nisbah": [0.5, 0.25] }.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_skrip ~127

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.

NameTypeReqDescription
kodestringyes
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_status ~50

Versi Blender, akar ruang kerja, dan apakah adegannya sudah ada. Panggil sekali di awal.

NameTypeReqDescription
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_tabrakan ~201

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.

NameTypeReqDescription
bentukstring
nisbahnumberPenyederhanaan untuk `cembung` (bawaan 0,15) dan `mesh_sederhana` (0,25). Hull mentah bisa ribuan segitiga; mesin fisika ingin puluhan.
objekstring
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_tekstur ~408

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.

NameTypeReqDescription
berkasstringyesJalur absolut .glb
per_gambarbooleanSertakan rincian tiap gambar.
piksel_per_meterbooleanHitung px/meter. Menuntut pembacaan topologi juga, jadi sedikit lebih lambat.

No output schema declared.

No examples provided.

rupa_tekstur_buat ~356

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.

NameTypeReqDescription
contohinteger
gayastring
jenisarray
keluarstringyesDirektori tujuan peta PNG.
kuat_bumpnumberKekuatan relief yang dipanggang ke normal map. Terlalu rendah menghasilkan peta yang praktis RATA — sah, tetapi memakan VRAM penuh tanpa membawa informasi. Terukur: 0,6 memberi jangkauan 125–130 dari…
objekstringNama mesh; kosong = yang terbesar di adegan.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.
ukuraninteger

No output schema declared.

No examples provided.

rupa_topologi ~388

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.

NameTypeReqDescription
berkasstringyesJalur absolut .glb
per_primitifbooleanSertakan rincian tiap primitif. Angka gabungan DIJUMLAHKAN bukan dirata-rata: rata-rata menenggelamkan satu primitif rusak parah di antara tiga puluh yang sehat.
toleransi_lasnumberJarak maksimum dua titik dianggap sama. Kosongkan supaya diturunkan dari diagonal berkasnya (1e-6 x diagonal) — ambang MUTLAK akan melas seluruh model milimeter jadi satu titik.

No output schema declared.

No examples provided.

rupa_topologi_sumber ~478

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.

NameTypeReqDescription
ambang_sebidangnumberDerajat. Quad yang keempat verteksnya menyimpang lebih dari ini dihitung TAK SEBIDANG — Blender, mesin game, dan eksportir glTF masing-masing memilih diagonal segitiganya sendiri, jadi bayangannya be…
objekstringSatu objek mesh; kosong = seluruh mesh di adegan.
per_objekbooleanSertakan rincian tiap objek.
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

rupa_ukur ~105

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.

NameTypeReqDescription
ruangstringNama ruang kerja; tiap ruang punya adegan.blend sendiri.

No output schema declared.

No examples provided.

Common questions

What is the Rupa3D MCP server?

Rupa3D is an MCP server listed in the public MCP registry as io.github.tiranyx/rupa3d. Checks GLB assets against a spec without Blender and embeds the measured proof inside the GLB. This page covers its npm package (rupa3d).

Is the Rupa3D MCP server safe to use?

Rupa3D scores 70 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Rupa3D MCP server expose?

Rupa3D exposes 36 tools: rupa_status, rupa_baru, rupa_muat, rupa_skrip, rupa_ukur, and 31 more. Their descriptions and schemas cost roughly 8,220 tokens of context every time the server is loaded.

Is the Rupa3D MCP server still maintained?

Rupa3D is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Rupa3D MCP server under?

Rupa3D declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.