AI Tools · Developer docs · Windows
Open3D MCP server: setup & tool reference
Open3D Viewer for Windows ships a local Model Context Protocol server. Any MCP client can open 3D files, take screenshots, inspect geometry, check printability and edit meshes in the running app. Everything stays on your PC. Looking for the plain-English overview? See AI Tools.
How it works
- The app is the server. While Open3D Viewer is open with AI Tools on, it listens on
127.0.0.1:5717, on your own PC only. - The bridge speaks MCP over stdio. Clients launch
open3d-mcp.exe, which forwards each tool call to the app. On Store installs it's reachable through the app-execution alias%LOCALAPPDATA%\Microsoft\WindowsApps\open3d-mcp.exe. - Each call needs a token. It's generated per user and shown in Settings → AI Tools, and the bridge passes it as
--token. - Tools act on what's on screen. That's whatever model is open in the viewer.
open_fileloads a new one, even if the window is minimised.
Requirements: Windows 10 or 11, Open3D Viewer from the Microsoft Store (1.3.4 or later), and an MCP-capable client. The iPhone and Android apps don't include the MCP server.
One-click setup
- Open Open3D Viewer → Settings → AI Tools and turn it on.
- Click Install next to your client. Open3D writes the
open3dentry into that client's config file and leaves your other servers alone. - Fully quit and reopen the client so it loads the new server.
- Keep Open3D Viewer running while you use it.
Manual config per client
Use this if you'd rather edit the file yourself or your client isn't listed. Replace <token> with the token from Settings → AI Tools, and <user> with your Windows user folder name. In JSON, backslashes must be doubled.
| Client | Config file | Key |
|---|---|---|
| Claude Desktop | %APPDATA%\Claude\claude_desktop_config.json | mcpServers |
| Cursor | %APPDATA%\Cursor\User\globalStorage\.cursor\mcp.json | mcpServers |
| Windsurf | %APPDATA%\Windsurf\User\mcp_config.json | mcpServers |
| Google Antigravity (CLI & IDE) | %USERPROFILE%\.gemini\config\mcp_config.json | mcpServers |
| Zed | %APPDATA%\Zed\settings.json | context_servers |
| Codex / ChatGPT Desktop | %USERPROFILE%\.codex\config.toml | [mcp_servers.open3d] |
JSON clients (Claude Desktop, Cursor, Windsurf, Antigravity)
{
"mcpServers": {
"open3d": {
"command": "C:\\Users\\<user>\\AppData\\Local\\Microsoft\\WindowsApps\\open3d-mcp.exe",
"args": ["--token", "<token>"]
}
}
}
Zed
Same entry, under context_servers in Zed's settings.json:
"context_servers": {
"open3d": {
"command": "C:\\Users\\<user>\\AppData\\Local\\Microsoft\\WindowsApps\\open3d-mcp.exe",
"args": ["--token", "<token>"]
}
}
Codex CLI / Codex IDE / ChatGPT Desktop
[mcp_servers.open3d]
command = "C:\\Users\\<user>\\AppData\\Local\\Microsoft\\WindowsApps\\open3d-mcp.exe"
args = ["--token", "<token>"]
Don't point clients at the copy inside C:\Program Files\WindowsApps\…. Windows blocks other apps from running files in that folder. Use the WindowsApps alias above. Open3D also keeps a fallback copy in its own local data folder and repairs older configs automatically at startup.
HTTP endpoint
For clients that take a server URL instead of a command, Settings → AI Tools shows a one-shot MCP JSON-RPC endpoint:
http://127.0.0.1:5717/mcp?token=<token>
It only listens on localhost. Web-only chat apps (web ChatGPT, web Gemini) can't reach it unless you tunnel it yourself, which isn't recommended. Clients with no MCP support at all can't use it either.
Tool reference
94 working tools. Units are whatever the scene is declared in (get_scene_units). Mesh formats default to millimetres; glTF is converted from metres. Every edit can be undone with undo_edit or reset_edits, and nothing is written to disk unless you call save_edits.
Open, look & inspect
open_file | Open a 3D file from disk in the viewer and wait for it to load. |
get_model_info | File name, path, format, triangle count and bounds of the open model. |
screenshot | PNG of the viewer as the user sees it. |
set_view · zoom_to | Camera presets (top, front, side, iso); frame a mesh, the selection or the whole scene. |
get_viewer_size | Canvas size in pixels. |
set_shading · set_background | Solid / wireframe / x-ray style drawing; background colour. |
set_clipping_plane | Non-destructive cross-section along any plane. |
read_file | Raw bytes of the open file (base64). |
get_world_bbox · mesh_stats | Bounding box; triangle/vertex counts, edge lengths, surface area. |
get_geometry | Vertex and index arrays of a mesh. |
raycast_ray · distance_to_mesh | Arbitrary ray hits; signed distance from a point to a surface. |
get_scene_units · set_scene_units | Read or declare what one world unit means. |
Pins (annotations)
annotate | Drop a numbered pin with an optional label. |
get_pins · update_pin · remove_pin · clear_annotations | List, relabel, remove one, or remove all pins. |
3D-print checks & prep
manifold_check | Watertightness / open edges. |
wall_thickness_check | Faces on walls thinner than a minimum (default 0.8 mm), thinnest wall, per-mesh breakdown; can paint them on screen. |
overhang_check | Faces past the support-free angle (default 45°); can highlight them. |
estimate_print | Material and time estimate. |
scale_to_dimension | Scale so an axis measures exactly a target size. |
drop_to_bed · center_on_origin | Sit the model on the build plate; centre it. |
Repair
repair_mesh | Runs the safe repairs in one go. |
fill_holes · list_boundary_loops · fill_boundary_loop · bridge_boundary_loops | Find hole rims; fill all, fill one, or join two with a tube. |
weld_vertices · recalculate_normals · flip_normals | Merge duplicate vertices; fix shading and inside-out faces. |
remove_loose_geometry · smooth_boundary · smooth_region | Delete floating specks; smooth rims or an area. |
Meshes & transforms
hide_mesh · show_mesh · delete_mesh · duplicate_mesh | Scene-graph basics. |
translate_mesh · rotate_mesh · scale_mesh | Move, rotate and scale. |
mirror · symmetrize · array · radial_array | Mirror, make symmetric, linear and circular copies. |
add_primitive | Box, sphere, cylinder or torus. |
merge_meshes · split_by_components · split_component_at | Combine meshes; split into connected parts. |
boolean_union · boolean_difference · boolean_intersection | CSG between two meshes. |
cut_by_plane | Slice a mesh along any plane. |
decimate · subdivide | Reduce or increase triangle count. |
Face selection & editing
select_faces_flood_from_point · select_faces_by_normal · select_faces_in_box · select_faces_near_point · select_from_screen_click | Build a face selection several ways. |
invert_selection · clear_selection · selection_status | Manage the selection. |
delete_selected_faces · separate_selected_into_mesh | Delete or split off the selection. |
delete_faces_in_box · keep_faces_in_box · delete_faces_near_point · keep_faces_near_point | Direct face deletion by region. |
Materials & textures
set_material · apply_material_preset · tune_material | PBR colour / metal / roughness; presets like walnut, brass, chrome; fine-tune. |
list_materials · select_by_material | What's in the scene and which meshes use it. |
check_uvs · generate_uvs | Inspect or create UVs. |
set_texture_folder · load_texture · set_material_texture · apply_pbr_pack · list_textures · unload_texture | Texture from a folder you allow. |
Edit history & saving
undo_edit · redo_edit · reset_edits · edit_status | Undo stack. |
save_edits | Write the edited scene to GLB or STL at a path you choose. |
list_meshes, measure and raycast_screen are listed too but are reserved and return "not implemented yet". Use get_model_info, raycast_ray and distance_to_mesh instead.
Example prompts
- "Open
C:\prints\bracket.stl, check it for printing and tell me what would fail." - "Find walls thinner than 1 mm and show them to me."
- "Fill the holes, make it 80 mm tall, drop it on the bed and save it as
bracket_fixed.stl." - "Make the chair walnut and the legs brushed steel, then screenshot it from the front."
Troubleshooting
"Cannot reach Open3D Viewer"
The app isn't running or AI Tools is off. Open Open3D Viewer, check Settings → AI Tools is on, then retry.
The client doesn't list any Open3D tools
Fully quit the client (including from the system tray) and reopen it. Most clients only read their MCP config at launch. Then check the open3d entry is in the file from the table above.
"Access is denied" starting the server
The config points inside C:\Program Files\WindowsApps. Click Install again in Settings → AI Tools, or switch the command to the %LOCALAPPDATA%\Microsoft\WindowsApps\open3d-mcp.exe alias.
Unauthorized / bad token
The token was regenerated. Re-run Install, or paste the current token from Settings → AI Tools.
Still stuck?
Email [email protected] with your client name and version. AI apps change often, and we fix setup problems quickly.
Privacy & security
- The server binds to
127.0.0.1only and requires the per-user token. - Open3D sends nothing to us. What your AI client sends to its own cloud (screenshots, tool results) follows that client's policy.
- Texture tools only read from folders you allow (
set_texture_folder). Files are only written when you callsave_edits.