Skip to main content
Glama
ToungaGH

SketchUp MCP for SketchUp Make 2017

by ToungaGH

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
SKETCHUP_MCP_HOSTNoThe URL of the SketchUp plugin's HTTP server. Only needed if the port was changed in the .rb file (e.g. http://127.0.0.1:8765).http://127.0.0.1:8080
SKETCHUP_MCP_UNITNoThe unit used for lengths taken and returned by the tools. Allowed values: m, cm, mm, inch. Internal tolerances are fixed real-world sizes. Independent of the units SketchUp displays.m

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_model_infoA

Get general information about the currently open SketchUp model: name, file path, unit system, entity/layer/material counts.

list_layersA

List all layers (tags) in the SketchUp model with their visibility.

list_materialsA

List all materials in the SketchUp model with their colors and textures.

list_entitiesA

List entities (faces, edges, groups, component instances) in the model or inside a named group. All lengths and coordinates are in metres.

list_componentsA

List all component definitions in the SketchUp model.

get_selectionA

Get the current SketchUp selection: for each entity, its type, id, persistent_id, tag (layer), and world-space bounds; faces also get their normal and a point on their plane. Coordinates are in metres, in world coordinates (the active group/component's transform is applied). All lengths and coordinates are in metres.

selectA

Replace the SketchUp selection with the given entities, so the user can see what the assistant means before something changes. Identify entities by 'ids' (persistent_id values, stable across sessions — NOT the 'id'/entityID field, which changes every session) or by 'group_names'. Selection is limited to the currently active editing context (top level, or whatever group/component the user has open for edit): a target nested elsewhere is replaced by its top-level container within that context, and the reply's 'notes' explain the substitution.

zoom_toA

Zoom/frame the SketchUp camera to fit the given entities (by 'ids' = persistent_id values, or 'group_names'). Does not modify the model.

screenshotA

Capture the SketchUp viewport as a PNG image. All temporary state changes made to take the shot (camera, hidden tags/entities, section plane, guide visibility) are rolled back afterwards, and the model's modified flag is left as it was found — this never creates an undo step. All lengths and coordinates are in metres.

list_wall_planesA

List vertical (wall-like) faces in a group, grouped by their plane coordinate along an axis (faces within 1.5mm of each other are clustered into one plane; each member's exact coordinate is still reported). Only faces aligned to the X or Y axis are considered (not diagonal walls). Replaces manually scripting this. All lengths and coordinates are in metres.

measureA

Measure distances. Three modes (provide exactly one): (1) point_a + point_b: straight-line distance. (2) face_id_a + face_id_b (persistent_id values): perpendicular distance from face B's centroid to face A's plane, plus centroid-to-centroid distance. (3) axis + at (+ optional group): a probe line along 'axis' at the given fixed coordinates on the other two axes. Returns every face the line crosses, in order (coordinate, containing group, normal_sign, material), plus the gaps between consecutive crossings — which are room widths and wall thicknesses directly. With 'group', groups nested inside it are scanned too, and each crossing names the innermost group it belongs to, which may be one of those nested groups. All lengths and coordinates are in metres.

audit_geometryA

Check a group (or every top-level group, if 'group' is omitted) for geometry problems: stray edges (0 faces), open edges (1 face), non-manifold edges (>2 faces), duplicate edges (same endpoints, separate edge entities — the cause of 'deleting a line deletes the wall'), near-coincident vertex pairs (<2mm, different vertex objects), tiny faces (<0.005 m², reported with the nested group they live in, counted per group in tiny_faces_by_group; faces inside closed solids such as frame end faces are skipped and only counted), non-planar faces, and mergeable coplanar seams (same material/orientation). Always recurses into nested groups. Each issue category is capped at 50 example items plus a total count. Without 'group', only the counts per group are returned (pass details:true for the example items too, which can be very long); audit one group to see where its issues are. Duplicate edges and near-coincident vertices carry a cross_group flag (the two sit in different groups: inherent and harmless) with separate counts. All lengths and coordinates are in metres.

changes_sinceA

Check whether the model has changed since a previous look. Pass the 'token' string you got back last time; omit it on the first call. Returns the current token, the model's modified flag, and whether it changed since the given token. The counter is scoped per file path, bumped by a model observer on every commit/undo/redo — read-only, does not itself count as a change. The token embeds a per-plugin-load session id, so a token from before SketchUp (or the plugin) restarted is always treated as changed rather than risking a false 'unchanged' against a fresh session.

move_planeA

Move every vertex lying on one axis-aligned plane of a group, by (to - from). This is the wall-move / room-resize operation. Takes exactly one undo step, aborts without changing anything if any face would end up non-planar, deletes edges the move stranded, and reports before/after counts (faces, edges, open edges, near-coincident vertices) so the result can be checked with audit_geometry. Refuses a move that would shift only some of a face's corners lying on that plane — which tilts the face without splitting it or making it non-planar — or that would change a face from vertical/horizontal. Reaches into nested groups inside the target group. Refuses by default if the vertices would span more than one collection — name them in 'include' or drop them with 'exclude'. Use dry_run:true to see what would change without changing it. All lengths and coordinates are in metres.

remap_planesA

Move several parallel planes of a group at once, in a single undo step. Aborts without changing anything if any vertex lies strictly between the mapped planes without a rule covering it — that vertex would stay put while its neighbours move, which is the silent-distortion failure mode. Use 'shift_beyond' to carry everything past a coordinate along by a fixed delta. Same post-check, tilt guard, collection guard and change report as move_plane. Reaches into nested groups inside the target group. All lengths and coordinates are in metres.

cut_openingA

Cut a rectangular opening (door/window) through a wall: holes in both wall faces, plus the side and head reveal faces, each oriented to point into the opening. The host group is found at any nesting depth and its composed world transform is used, so a wall nested inside another group works. from_floor:true means the opening starts at the wall's bottom: the bottom face is split and the middle removed, and no sill face is made. Refuses if an opening already exists there, so it cannot double-cut. New points snap onto existing vertices within ~3.5mm. Self-checks with classify_point (open at the centre of both faces, still covered just outside each edge and above the head) and reports the result. One undo step. Optionally builds the frame as a single U-shaped prism in one go. All lengths and coordinates are in metres.

fill_openingA

Fill a rectangular opening back in: removes the reveal faces, refills both wall faces copying material and orientation from the coplanar neighbour, closes the bottom again for a from_floor opening, and erases the seams so each wall side is a single face. Takes the same rectangle arguments as cut_opening. Refuses if both wall faces are already solid there. One undo step. All lengths and coordinates are in metres.

merge_coplanarA

Erase the seam edges between coplanar faces in a group that share the same orientation and the same front/back materials, merging them back into single faces. One undo step, same post-check and change report as move_plane. Use audit_geometry's mergeable_coplanar_seams to see what it would touch, or dry_run:true here.

weld_verticesA

Merge near-coincident vertex pairs in a group by moving one onto the other, which is what fixes the 'deleting a line deletes the wall' problem. Only welds vertices within the same entities collection — two vertices in different groups are genuinely separate points. With cross_group:true it instead snaps near-coincident vertices that sit in different groups/components (e.g. a wall group and its parent) exactly onto each other, moving the one in the nested group (keep:'outer', default) or the outer one (keep:'inner'); the vertices stay separate points, but the sub-millimetre gap disappears. One undo step; aborts if the weld would split or fold a face. Check the near_coincident_vertices delta in the report. All lengths and coordinates are in metres.

add_dimensionA

Add a real linear dimension entity between two points (not a text label). Placed on the given tag, default 'Dimensions'. One undo step. All lengths and coordinates are in metres.

saveA

Save the current SketchUp model in place. Fails if the model has never been saved.

save_copyA

Save a copy of the model alongside the original as '_.skp', leaving the open file untouched. Defaults the suffix to a timestamp. Use this to take a backup before a risky batch of edits.

create_faceB

Create a flat face (polygon) in SketchUp from an ordered list of 3D points. All coordinates are in METRES (the plugin converts to SketchUp's internal inches). All lengths and coordinates are in metres.

create_edgeB

Create a line segment (edge) between two 3D points. All lengths and coordinates are in metres.

create_groupB

Create an empty named group in SketchUp, optionally on a layer.

create_boxC

Create a 3-D box (rectangular prism) as a named group, by specifying width, depth, height in metres. Optionally provide an origin [x, y, z] for the base corner. All lengths and coordinates are in metres.

create_circleB

Create a circle in SketchUp from a center point, normal vector, and radius. Returns edges forming the circle. All lengths and coordinates are in metres.

create_arcB

Create an arc in SketchUp. Specify center, radius, start/end angles in degrees. All lengths and coordinates are in metres.

create_polygonC

Create a regular polygon (triangle, pentagon, hexagon, etc.) with n sides. All lengths and coordinates are in metres.

push_pullA

Push/pull a face by a specified distance. Positive distance extrudes outward, negative pulls inward. All lengths and coordinates are in metres.

follow_meB

Extrude a face along a path (array of edge IDs). This is SketchUp's Follow Me tool.

move_entityB

Move (translate) an entity by a vector [x, y, z]. All lengths and coordinates are in metres.

rotate_entityB

Rotate an entity around an axis by a given angle in degrees. All lengths and coordinates are in metres.

scale_entityB

Scale an entity. Provide a single number for uniform scaling, or [x, y, z] array for non-uniform scaling. All lengths and coordinates are in metres.

create_componentB

Create a new (empty) component definition and place one instance in the model. Returns the definition name and instance ID. All lengths and coordinates are in metres.

place_componentB

Place an instance of an existing component definition into the model at a given origin. All lengths and coordinates are in metres.

create_roof_trussA

Create engineered roof trusses with accurate geometry based on professional truss analysis. Supports king post (simple, up to 26') and fink/W-truss (most common, 20-60'). NOTE: unlike every other tool, this one uses US units (span in feet, other lengths in inches). Trusses include proper web patterns, angled members, and realistic connections. Use construction://roof-trusses resource for detailed guidance.

execute_rubyA

Execute arbitrary Ruby code inside SketchUp. The code runs at the top level (not inside the plugin's SU_MCP module; call its helpers as SU_MCP.name) and has full access to the SketchUp Ruby API (Sketchup, Geom, UI, etc.). Returns the result of the last expression and any puts/print output. SketchUp Make 2017 (Ruby 2.2): do NOT use Ruby 2.3+ syntax such as &. or <<~. The raw API works in inches: write lengths with SketchUp's unit helpers, e.g. 3.5.m or 20.cm. Solid-tool methods (union, subtract, intersect, trim, split, outer_shell) are SketchUp Pro only and fail in Make. Wrap edits in model.start_operation('Name', true) / model.commit_operation for a single undo step. Use with care — this can modify or delete model data.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
Roof Truss Design GuideComprehensive guide for roof truss design including types, dimensions, and code requirements
Framing StandardsStandard framing practices for walls, floors, headers, and openings
Stair Design StandardsBuilding code requirements, design formulas, stair types, and calculation methods

TDQS

A3.5/5.0

Scored across 38 tools

Disambiguation4/5

Most tools target a clearly distinct operation, and create_* primitives (face, edge, circle, arc, polygon) are distinguishable by shape. The one soft overlap is move_plane vs remap_planes and measure vs audit_geometry, but their descriptions explain the boundaries well enough to avoid misselection.

Naming Consistency4/5

Names are consistently snake_case and verb-first (list_materials, create_face, cut_opening, move_entity). A few are bare verbs (select, save, measure, push_pull, follow_me), which is a minor deviation but still readable and predictable.

Tool Count3/5

38 tools is heavy and above the comfortable 15-25 band, but the domain is broad (read/model info, creation primitives, transforms, opening cut/fill, geometry cleanup, audit, file ops, Ruby escape hatch), so most tools earn their place. It is on the borderline of over-scoped rather than clearly excessive.

Completeness4/5

Coverage is strong across read, create, transform, clean-up, audit and save workflows, with an execute_ruby fallback that fills most gaps. Minor holes remain: no explicit delete/erase-entity tool, no material creation/assignment, and no layer creation.

Maintenance

ActivityMaintained
ResponsivenessNo issues