Skip to main content
Glama
SketchUp MCP untuk Windows

SketchUp MCP untuk Windows

by yonnayy

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.

Rumah contoh 6 x 6 m: denah lewat build_floor_plan, atap lewat eval_ruby

Pintu dan jendela dibuat lengkap dengan kusen dan daun

Tampak denah berdimensi dari model yang sama, dibuat lewat add_plan_view

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:

  1. Buka SketchUp dan buka sebuah model (lewati jendela Welcome). Server MCP menyala sendiri.

  2. Tutup Claude Desktop sepenuhnya (ikon di tray > Quit), lalu buka lagi.

  3. 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

check_dimension_chains

Sebelum memodelkan: memeriksa apakah deret ukuran di denah cocok dengan ukuran totalnya

build_floor_plan

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

verify_dimensions

Sesudah memodelkan: mengukur model di SketchUp dan membandingkannya dengan denah (laporan akurasi)

add_plan_view

Tampak denah berdimensi: scene tampak atas yang memotong dinding, dengan angka ukuran dan nama ruang

eval_ruby

Menjalankan kode Ruby di SketchUp (akses penuh ke SketchUp Ruby API), termasuk helper SU_MCP.element dan SU_MCP.audit_model

export_scene

Ekspor png/jpg/skp/obj/dae/stl; mengembalikan path file. png dipakai untuk melihat hasil

get_selection

Daftar objek yang sedang dipilih pengguna

create_component

Primitif sederhana: cube, cylinder, sphere, cone

transform_component

Geser (relatif), putar, skala

set_material

Warna dasar

delete_component

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 tools
build_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

    A3.9/5.0

    Scored across 10 tools

    Disambiguation3/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivitySlowing
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Enables 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.
      10
      1
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Connects SketchUp to Claude AI through the Model Context Protocol, enabling prompt-assisted 3D modeling, scene manipulation, and woodworking joinery operations.
      22
      1,258 PyPI
      58
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Connects Claude AI to SketchUp, allowing you to create and modify 3D models via natural language commands.
      21
      7
      MIT