SketchUp MCP untuk Windows
Summary: This MCP server lets Claude Desktop drive SketchUp on Windows — building, editing, verifying, and exporting 3D models, especially converting floor plans into 3D buildings (walls, doors, windows, slabs).
build_floor_plan— turn a metric floor-plan spec into 3D walls, doors, windows, and a floor slab, already tagged and materialed; supports wall reference lines (center/left/right), door leaves, window glass, per-wall thickness/height, and automatic corner joining in one undo step.check_dimension_chains— verify plan dimension strings add up (metres) before modelling; reports conflicting chains without guessing.verify_dimensions— measure the built model and compare against the plan (outside sizes, clear room sizes, single distances), returning an OK / SELISIH report in mm.eval_ruby— run arbitrary Ruby with full SketchUp API access; the main modelling tool, with helpersSU_MCP.element,SU_MCP.container,SU_MCP.audit_model(calls time out around 15 s).Primitive editing —
create_component(cube, cylinder, sphere, cone; inches),transform_component(relative move, rotate, scale),delete_component.set_material— paint entities with one of 12 named colours (other colours via Ruby).get_selection— list what the user currently has selected (id, type, bounds).export_scene— export png/jpg/skp/obj/dae/stl to%TEMP%\sketchup_exportsand return the file path;pngfor visual checks.Note:
add_plan_view(dimensioned top-view scene) is advertised in the README but is not present in this server schema.
Allows Claude Desktop to connect to SketchUp on Windows for direct 3D modeling, including converting floor plans into 3D models with walls, doors, windows, and floor slabs; verifying model dimensions; running Ruby through the SketchUp API; exporting scenes; and managing components, materials, and selections in SketchUp.
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., "@SketchUp MCP untuk Windows Buat rumah 6 x 4 meter di SketchUp, tinggi dinding 3 meter, satu pintu di depan."
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.
SketchUp MCP untuk Windows
Menghubungkan Claude Desktop ke SketchUp di Windows, supaya Claude bisa memodelkan langsung di SketchUp, termasuk mengubah denah menjadi model 3D (dinding, bukaan pintu dan jendela, pelat lantai).
Ini adalah versi yang sudah diperbaiki dari mhyrr/sketchup-mcp (lisensi MIT). Versi aslinya membuat SketchUp membeku di Windows; lihat CHANGES.md.



Untuk Claude / agent AI yang diminta memasang ini: ikuti docs/INSTALL.md langkah demi langkah, lalu buat model contoh pertama di docs/MODELING.md (cek pemasangan, satu menit), lalu bangun Caroline's Farmhouse dari examples/caroline (uji modelling sungguhan). Setiap model, termasuk model uji, wajib mengikuti docs/STANDARDS.md (tag, material, susunan grup) dan lolos audit.
Pasang (satu perintah)
Buka PowerShell lalu jalankan:
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/yonnayy/sketchup-mcp-windows/main/install.ps1 | iex"Lalu:
Buka SketchUp dan buka sebuah model (lewati jendela Welcome). Server MCP menyala sendiri.
Tutup Claude Desktop sepenuhnya (ikon di tray > Quit), lalu buka lagi.
Periksa hasilnya:
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/yonnayy/sketchup-mcp-windows/main/check.ps1 | iex"Kalau semua baris [PASS], coba ketik di Claude Desktop: "Buat rumah 6 x 4 meter di SketchUp, tinggi dinding 3 meter, satu pintu di depan."
Syarat: Windows 10/11, SketchUp desktop (bukan SketchUp Web), Claude Desktop. Diuji di SketchUp 2025; versi 2021 ke atas seharusnya jalan tetapi belum diuji.
Related MCP server: SketchupMCP
Tool yang tersedia
Tool | Fungsi |
| Sebelum memodelkan: memeriksa apakah deret ukuran di denah cocok dengan ukuran totalnya |
| Denah (dalam meter) menjadi dinding, pintu, jendela, dan pelat lantai, sudah dengan tag dan material baku. Ukuran bisa mengacu ke garis as, muka luar, atau muka dalam dinding; pintu dan jendela dibuat dengan kusen dan daun, dan pintu bisa diberi engsel dan arah bukaan |
| Sesudah memodelkan: mengukur model di SketchUp dan membandingkannya dengan denah (laporan akurasi) |
| Tampak denah berdimensi: scene tampak atas yang memotong dinding, dengan angka ukuran dan nama ruang |
| Menjalankan kode Ruby di SketchUp (akses penuh ke SketchUp Ruby API), termasuk helper |
| Ekspor png/jpg/skp/obj/dae/stl; mengembalikan path file. |
| Daftar objek yang sedang dipilih pengguna |
| Primitif sederhana: cube, cylinder, sphere, cone |
| Geser (relatif), putar, skala |
| Warna dasar |
| Hapus objek berdasarkan ID |
Dokumen
docs/INSTALL.md: pemasangan langkah demi langkah dan cara verifikasi
docs/STANDARDS.md: aturan dasar model (tag, material, susunan grup) dan audit
docs/MODELING.md: cara kerja denah ke 3D, acuan ukuran dinding, laporan akurasi, model contoh pertama
examples/caroline: uji modelling sungguhan. Rumah dua lantai Caroline's Farmhouse dibangun dari 42 panggilan tool, dengan jawaban yang diharapkan
docs/DETAIL.md: atap (pelana, perisai, sandar, datar), papan dinding, lis dan shutter jendela, tiang, tangga, perabot
docs/WORKFLOW.md: panduan kerja untuk setiap proyek, dari membaca gambar sampai gambar hasil; cek tangga dan perabot, ekspor semua scene
docs/TROUBLESHOOTING.md: gejala dan solusinya
CHANGES.md: apa yang diubah dari versi asli
Lisensi
MIT, sama seperti proyek aslinya. Lihat LICENSE.
Available Tools
10 toolsbuild_floor_planA
Turn a floor plan into 3D walls, doors, windows and a floor slab, already tagged and given materials according to the house rules.
All numbers are METRES. Coordinates are [x, y] on the ground plane.
spec = {
"building": "Rumah A", # container group for the whole building
"name": "Lantai 1", # name of this floor's group
"wall_height": 3.0, # default height
"wall_thickness": 0.15, # default thickness
"base_z": 0, # floor level (use 3.2 etc. for upper floors)
"wall_ref": "center", # default for "ref" below
"walls": [ # from/to line of each wall, see "ref"
{"id": "W1", "from": [0, 0], "to": [6, 0]},
{"id": "W2", "from": [6, 0], "to": [6, 4], "thickness": 0.1, "height": 2.8}
],
"openings": [ # offset = distance from the wall's "from"
{"wall": "W1", "type": "door", "offset": 1.0, "width": 0.9, "height": 2.1},
{"wall": "W2", "type": "window", "offset": 1.2, "width": 1.5, "sill": 0.9, "height": 1.2}
],
"slab": {"outline": [[0, 0], [6, 0], [6, 4], [0, 4]], "thickness": 0.12}
}
An opening with no "sill" (or sill 0) is a door; with a sill it is a window.
Doors get a 4 cm leaf and windows a 1 cm glass pane ("infill": false for
plain holes). Walls and slab accept "material": "Dinding - Bata Ekspos".
"ref" on a wall says what its from/to line is: "center" (centreline,
the default), "left" or "right" (that face of the wall, as seen walking
from `from` to `to`; the wall body lies on the other side). Use the one
the plan is dimensioned to, or the error equals the wall thickness:
- outside dimensions of the building: trace the outline anticlockwise
with "ref": "right";
- clear (inside) dimensions of a room: trace the room anticlockwise
with "ref": "left";
- grid/axis dimensions: "center".
Where walls meet, their ends are lengthened or trimmed automatically so
corners close and walls do not overlap ("extend": false, a number, or
[start, end] in metres overrides that for one wall).
The whole plan is one undo step. The reply reports the built size and any
opening that was skipped (for example because it does not fit the wall):
read it, then call verify_dimensions and look at export_scene(format="png").
Inputs: spec (required). Returns: result
check_dimension_chainsA
Check that the dimension strings on a plan add up, BEFORE modelling.
chains = [
{"label": "Sisi depan", "segments": [1.0, 0.9, 0.5, 1.5, 2.1], "total": 6.0},
{"label": "Sisi kiri", "segments": [3.0, 3.0], "total": 6.0}
]
All numbers in metres. For every chain the segments are summed and compared
with the overall dimension. Does not need SketchUp. If any chain is in
conflict, show the user which one and ask which number wins; do not guess.
Inputs: chains (required), tolerance. Returns: result
create_componentA
Create a primitive (type: cube, cylinder, sphere, cone) as a group.
position and dimensions are in INCHES (SketchUp's internal unit).
For a cylinder, position is the corner of its bounding box (not the
centre) and dimensions are [diameter, ignored, height].
A cube placed at z=0 extrudes DOWNWARD (z from -height to 0).
For real modelling work prefer eval_ruby.
Inputs: type, position, dimensions. Returns: result
delete_componentB
Delete a component by ID
Inputs: id (required). Returns: result
eval_rubyA
Run Ruby code inside SketchUp (full SketchUp Ruby API) and return the value of the last expression as a string.
This is the main modelling tool. Rules that avoid the usual mistakes:
- Lengths are inches internally. Write 3.m, 150.mm, 15.cm, never bare numbers.
- model = Sketchup.active_model; wrap edits in
model.start_operation('name', true) ... model.commit_operation.
- A face on the ground plane (z=0) has its normal pointing down, so
pushpull(+h) would go underground: face.reverse! if face.normal.z < 0.
- Create each element with SU_MCP.element(name, kind, parent) { |ents| ... }
so it gets the standard tag and material; parent = SU_MCP.container('Rumah A').
- End with SU_MCP.audit_model; the work is done only when it says AUDIT OK.
- Make the last expression a short summary string (counts, bounds) so you
can verify the result. Calls time out after about 15 seconds, so split
very large jobs into several calls.
Inputs: code (required). Returns: result
export_sceneA
Export the current model. format: png, jpg, skp, obj, dae, stl.
The file is written to the sketchup_exports folder inside %TEMP% and its full path is
returned in content[0].text. Use format='png' to get a screenshot of the
current view so you can check the model visually.
Inputs: format. Returns: result
get_selectionA
List the entities the user currently has selected in SketchUp (id, type, bounds).
Inputs: no named parameters. Returns: result
set_materialA
Paint an entity with a named colour.
Supported names: red, green, blue, yellow, cyan, magenta, white, black,
brown, orange, gray. For any other colour use eval_ruby with
Sketchup::Color.new(r, g, b).
Inputs: id (required), material (required). Returns: result
transform_componentB
Move, rotate or scale an entity by ID.
position is a RELATIVE translation in inches (it is added to the current position, it is not an absolute target). rotation is in degrees.
Inputs: id (required), scale, position, rotation. Returns: result
verify_dimensionsA
Measure the model in SketchUp and compare it with the plan (accuracy report).
checks (metres) can mix three kinds:
{"label": "Panjang luar", "overall": "x", "expected": 6.0}
outside size of all walls along x or y; optional "building" and
"floor" (group names) limit which walls are counted
{"label": "Kamar tidur 1", "at": [1.5, 4.5], "expected": [2.8, 2.8]}
clear room size through that point: [along x, along y]
{"label": "Lebar koridor", "at": [3, 2], "axis": "y", "expected": 1.2}
one clear distance; axis is "x", "y" or an angle in degrees
"at" is any point inside the room, away from the walls. Clear distances
are measured between wall faces (doors, glass and furniture are ignored;
openings do not fool it). Add "z" (floor level) for upper floors. Leave
"expected" out to just read a dimension.
Every line is OK or SELISIH with the difference in mm. Run this after
build_floor_plan with the key dimensions from the plan, fix what differs,
and pass the report on to the user.
Inputs: checks (required), tolerance. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Most tools have distinct purposes, but eval_ruby is a universal backdoor that overlaps with create_component, transform_component, set_material, delete_component, and parts of build_floor_plan. The descriptions help by explaining when to prefer wrappers versus Ruby, but an agent may still hesitate over whether to use a narrow tool or eval_ruby for many edits.
All names are lower snake_case and follow a verb_noun or verb_phrase pattern such as get_selection, create_component, verify_dimensions, and build_floor_plan. There are no mixed conventions or vague names.
10 tools is well-scoped for a SketchUp modeling server: selection, transform, material, export, floor-plan building, dimension checks, primitive create/delete, Ruby eval, and verification. Each tool maps to a meaningful operation, even if some overlap with eval_ruby.
The set covers the core modeling lifecycle: read selection, create/delete/transform entities, assign material, export, build floor plans, check dimensions before modeling, verify after, and run arbitrary Ruby. Minor gaps remain for general querying/listing of non-selected model entities and richer scene/camera control, but eval_ruby provides a workaround.
Maintenance
Related MCP Connectors
CAD in ChatGPT and Claude: editable parts, STEP/STL/drawings, in-chat 3D, automatic checks.
Connect ChatGPT, Claude, Cursor or VS Code to your Windows PC: files, terminal, browser, apps.
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
Connect ChatGPT and Claude to your Mac, Windows or Linux with secure MCP remote access.
Related MCP Servers
- AlicenseBqualityDmaintenanceIntegration that connects Sketchup to Claude AI through the Model Context Protocol, allowing Claude to directly interact with and control Sketchup for prompt-assisted 3D modeling, scene creation, and manipulation.1028MIT
- AlicenseBqualityDmaintenanceEnables direct interaction and control of SketchUp through Claude AI using the Model Context Protocol and a TCP socket connection. It allows for prompt-assisted 3D modeling, component manipulation, and the execution of arbitrary Ruby code within the SketchUp environment.101MIT
- AlicenseAqualityBmaintenanceConnects SketchUp to Claude AI through the Model Context Protocol, enabling prompt-assisted 3D modeling, scene manipulation, and woodworking joinery operations.221,258 PyPI58MIT
- AlicenseAqualityDmaintenanceConnects Claude AI to SketchUp, allowing you to create and modify 3D models via natural language commands.217MIT