SketchUp integration through the Model Context Protocol — NeoNexAI hardened fork (no arbitrary code execution)
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file neonexai_sketchup_mcp-1.1.0.tar.gz.
File metadata
- Download URL: neonexai_sketchup_mcp-1.1.0.tar.gz
- Upload date:
- Size: 9.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cae98d44dfd338cfd5792e8572712f1fd9f601c07876882ca809bf261ba7d0c5
|
|
| MD5 |
47e2c0889e56ddf2c13ebaf19fa140fb
|
|
| BLAKE2b-256 |
9a61e6e15630a8e69de8fa1d1ce5fb96004b8359b15c9f3de283081798f8fb97
|
File details
Details for the file neonexai_sketchup_mcp-1.1.0-py3-none-any.whl.
File metadata
- Download URL: neonexai_sketchup_mcp-1.1.0-py3-none-any.whl
- Upload date:
- Size: 9.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c651b7359a0d3e61c736b6c0df089d061cd8c43fd74cc98f19bc77b0b1e047f9
|
|
| MD5 |
4ba657f29c0a69d94b57aa664c44965d
|
|
| BLAKE2b-256 |
73ef749fd1413daa94f4aa9f07ad68404cb933ce9cdc6e837917ad00869516bf
|