SketchUp MCP (hardened fork)
Connect SketchUp to any MCP client (Claude Desktop, Claude Code, etc.) and drive it in natural language — create, transform and materialize geometry, run boolean operations, chamfer/fillet edges, build woodworking joints, and export the scene.
Provenance
- Maintained by NeoNexAI Agency (AI
consulting studio). Contact:
info@neonexai.com. - Hardened fork of mhyrr/sketchup-mcp, itself inspired by blender-mcp.
- What "hardened" means: the upstream project exposed an
eval_rubytool (arbitrary Ruby execution inside SketchUp → full disk/network access). This fork removes it entirely — Python server and Ruby extension — and the extension socket listens only on127.0.0.1. The tool surface is 13 explicit, bounded tools. Audit the code yourself before installing, as you would with any third-party software: the diff vs upstream is public.
Architecture (two pieces)
SketchUp has no external API: it can only be driven from its embedded Ruby API. Hence two components working together:
MCP client (Claude Desktop / Claude Code)
│ (MCP, stdio)
▼
MCP server (Python, this package — uvx)
│ (TCP socket 127.0.0.1:9876)
▼
SketchUp extension (Ruby, su_mcp/) ──► SketchUp
Requirements
- SketchUp 2021 or later (Windows; the Ruby extension uses only the standard SketchUp Ruby API).
- Python 3.10+ and uv/uvx (
pip install uvorwinget install astral-sh.uv).
Installation
Step 1 — SketchUp extension (Ruby)
Copy su_mcp.rb and the su_mcp/ folder from this repository into:
%AppData%\SketchUp\SketchUp 20XX\SketchUp\Plugins\
(replace 20XX with your version). Restart SketchUp, then start the server:
menu Extensions → SketchUp MCP → Start Server (listens on 127.0.0.1:9876).
Alternative: zip su_mcp.rb + su_mcp/, rename to .rbz, and install via
Window → Extension Manager → Install Extension.
Step 2 — MCP server (Python)
Pin the version you audited (recommended — avoids silently pulling future releases):
Claude Desktop — %AppData%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"sketchup": {
"command": "uvx",
"args": ["neonexai-sketchup-mcp==1.1.0"]
}
}
}
Claude Code — same block in %UserProfile%\.claude.json, or via CLI:
claude mcp add sketchup --scope user -- uvx neonexai-sketchup-mcp==1.1.0
From GitHub instead of PyPI (pin to a commit for reproducibility):
"args": ["--from", "git+https://github.com/NeoNexAI/sketchup-mcp@main", "neonexai-sketchup-mcp"]
Restart the client. First call to make: sketchup_status.
Tools (13)
| Tool | What it does |
|---|---|
sketchup_status |
Verify the connection (call first) |
sketchup_get_selection |
Ids + data of the current selection |
sketchup_create_component |
Create primitive (cube/cylinder/sphere/cone) |
sketchup_transform_component |
Move / rotate / scale by id |
sketchup_delete_component |
Delete by id |
sketchup_set_material |
Apply material/color |
sketchup_export_scene |
Export (skp/dae/obj/stl/png/jpg) |
sketchup_boolean_operation |
Union / difference / intersection of solids |
sketchup_chamfer_edges |
Bevel edges |
sketchup_fillet_edges |
Round edges |
sketchup_create_mortise_tenon |
Mortise & tenon joint |
sketchup_create_dovetail |
Dovetail joint |
sketchup_create_finger_joint |
Finger (box) joint |
Example prompts
- "Create a 200×80×40 box at the origin and apply 'Wood_Cherry'."
- "Select that piece" →
sketchup_get_selection→ "move it 50 up in Z." - "Boolean difference: subtract the cylinder (tool) from the block (target)."
- "Fillet all edges of that board with radius 1.5."
- "Export the scene to DAE."
Units: SketchUp models default to inches. Tell your assistant which units you work in (cm/m) so it converts.
What it does NOT do
- No photorealistic rendering — render plugins (V-Ray, Enscape, etc.) expose no scripting surface here; keep launching them from their own UI.
- No arbitrary code execution — by design. The 13 tools above are the whole surface.
- No network access — the extension accepts local connections only.
Configuration (env vars)
| Variable | Default | Purpose |
|---|---|---|
SKETCHUP_MCP_HOST |
127.0.0.1 |
Extension host |
SKETCHUP_MCP_PORT |
9876 |
Extension port |
SKETCHUP_MCP_TIMEOUT |
30 |
Socket timeout (seconds) |
Troubleshooting
- "No se pudo conectar con SketchUp" → the extension server is not
running:
Extensions → SketchUp MCP → Start Server. - Command errors → open SketchUp's Ruby Console (
Window → Ruby Console) for the detailed message. - Boolean operation fails → both entities must be closed (manifold) solids, not open surfaces.
License
MIT.
Metadata
Release files for neonexai-sketchup-mcp 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| neonexai_sketchup_mcp-1.1.0.tar.gz | 9.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| neonexai_sketchup_mcp-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.0 kB
Release files / neonexai_sketchup_mcp-1.1.0.tar.gz
| Download URL | neonexai_sketchup_mcp-1.1.0.tar.gz |
|---|---|
| Size | 9.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cae98d44dfd338cfd5792e8572712f1fd9f601c07876882ca809bf261ba7d0c5
|
|
BLAKE2b-256 checksum How to use checksums |
9a61e6e15630a8e69de8fa1d1ce5fb96004b8359b15c9f3de283081798f8fb97
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.8
|
Release files / neonexai_sketchup_mcp-1.1.0-py3-none-any.whl
| Download URL | neonexai_sketchup_mcp-1.1.0-py3-none-any.whl |
|---|---|
| Size | 9.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c651b7359a0d3e61c736b6c0df089d061cd8c43fd74cc98f19bc77b0b1e047f9
|
|
BLAKE2b-256 checksum How to use checksums |
73ef749fd1413daa94f4aa9f07ad68404cb933ce9cdc6e837917ad00869516bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.8
|