Mmcp.market

3D Visualizer MCP server

by kleinicke·io.github.kleinicke/3d-visualizer·v0.4.2

Inspect, compare and export point clouds, meshes and calibrated depth data with inline 3D previews.

A85/100grade A
What users say
No reviews yet
Be the first
Safety scan
A85/100

full report

Adoption
Growing

19 stars38 downloads/wk

Reviews

Write one

Nobody has reviewed 3D Visualizer yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

3D Visualizer tools (27, 3 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • align_3d_clouds

    Start a registration job, then poll action=status until job.state is completed/failed; submitted is not aligned. Reuses the viewer's Rust solvers. auto: level/up-axis yaw sweep then ICP; icp: refine an already close pair; correspondences: fit >=3 non-collinear paired world XYZ landmarks. source_index moves, target_index stays fixed. align_all/refine_all hold target fixed; strategies anchor (each t

  • capture_3d_view

    Return an actual PNG of the rendered 3D canvas (maximum 1024 pixels per side) so the agent can visually inspect the result. Requires an active inline viewer or explicit browser fallback.

  • close_3d_scene

    Release a viewer's local server and temporary data. Does not delete the user's source files. Any active viewer disconnects.

  • compare_3d_clouds

    Enable linked side-by-side WebGL views with the same camera (EDL off in split mode); disable restores ordinary rendering. Distance colors left by world-space distance to right: nearest within max_distance, unmatched=NaN; paired uses corresponding decoded order and requires equal counts. Distance limit: one million combined points. Changes mark distances stale; recompute with action=recompute,left=

  • control_3d_video

    Control camera keyframes, or model animation when object_index is supplied. Model: list clips, update(index/speed), play, stop (pause), loop(enabled), goto(time in seconds, pauses). GLB/GLTF/FBX/DAE retain supported embedded animation; 3DS is static. With no object_index, manage camera keyframes: Add captures current camera. Update sets segment duration/dwell in seconds. Loop requires enabled; pla

  • export_3d_selectionwrite action

    Write the active or named subset to a NEW binary .ply under configured roots (maximum 256 MiB). Preserve decoded RGB, normals, scalar attributes, decoded indices, and original source_row when available (depth raster: pixel_v*width+pixel_u). Coordinates are object-local; header stores local_to_world and source origin. Returns a path, never point data/base64. No overwrite; not a lossless copy of the

  • inspect_3d_scene

    Inspect loaded geometry and build IDs (Python package/server and actual renderer; renderer_matches_bundle detects an old widget). Read coordinate conventions/units, camera position/direction/rotation center, projection and viewport, object transforms, opacity/color, exposure/background, selection criteria, geometry counts and bounds from the active inline viewer or explicit browser fallback. Times

  • list_3d_scenes

    List scenes owned by this MCP process and their local viewer URLs.

  • manage_3d_scene_states

    Save/restore complete camera, transforms, selection/named subsets, visibility, color, opacity and presentation. Export/import a .json under configured roots to persist after restarting. Reopen identical geometry in the same order before import; import stores a state; restore=True imports and applies it in one call. Existing files are never overwritten. Maximum 20 states, 4 MiB each. JSON does not

  • manage_3d_selections

    Name the active selection; retain up to 20 independent subsets. Toggle each name's visibility or activate/focus it. Union/intersection/subtract combine two names from the same source into a new active selection; save it to retain it. Defaults isolate=False and focus=False preserve existing visibility and camera. Empty set results return status=empty, clear the active selection, and cannot export t

  • manage_3d_views

    Save/restore named camera views for this renderer session; undo the last agent camera change (up to 50). Names are not persisted after closing/reloading the widget. Does not restore geometry or filters.

  • measure_3d_scene

    Add/list/clear visible measurements in scene units. Distance uses start/end XYZ; path_point appends end to the active path; undo removes its last point; close_path toggles closure.

  • navigate_3d_view

    Navigate without UI. Fit tightly; presets use Y-up OpenGL. Orbit angles are degrees. Pan/pivot use world XYZ. Zoom <1 moves closer. Pick uses normalized canvas XY (top-left=0,0) and sets rotation center on visible geometry, like double-click. Origin resets pivot to 0,0,0.

  • open_3d_files

    Open local point clouds/meshes/splats/animated models together. Pass scene_id to append while preserving camera and existing objects. Include explicit supporting .bin/textures for GLTF/DAE/FBX; no implicit disk or network reads. Paths must be under configured roots. Returns a persistent scene_id and local URL; inspect to verify loading.

  • open_3d_url

    Download one URL or a list of direct HTTP(S) 3D files into one scene; pass scene_id to append. Self-contained models recommended; external resources are not fetched implicitly. Download each file on the local MCP server and open it inline. This makes a network request to the supplied URL and redirects; no browser CORS is needed. Supports the same formats as local files plus gzip. Supply filename f

  • open_depth_image

    Project a depth/disparity raster inline using explicit calibration from surrounding files/context. Read viewer://depth-calibration for coefficient ordering and encoding. Calibration dimensions must match the raster; no parameter guessing. Supports NPY/NPZ, TIFF, PNG8/16, EXR, PFM and COLMAP dense .bin. Optional aligned RGB (HxWx3, 0..255), confidence and mask files. Pass scene_id to append without

  • pick_3d_point

    Pick normalized canvas XY without moving the camera. Returns hit/miss, world XYZ, object and decoded point indices and scalar attributes. Mesh/splat picks may have null indices; never infer object identity from those.

  • preview_3d_views

    Return one labeled multi-view PNG to choose a useful angle, preserving the original camera. Disable split comparison first. Includes enabled grid, legend and selection summary.

  • read_viewer_data

    App-only transport: session metadata, pending commands or bounded geometry chunks.

  • select_3d_region

    One-step select/isolate/focus with PNG preview. Select all points in an object, or intersect scalar field values, world box [minX,minY,minZ,maxX,maxY,maxZ], and plane halfspace ax+by+cz+d>=0. Creates a reversible highlighted point subset; clear restores prior visibility. Label IDs are numeric, not semantic object names: inspect attributes/pick first. No automatic segmentation; point clouds only. R

  • set_3d_appearance

    Set exposure stops, background #RRGGBB, persistent pivot axes, coordinate grid, object/color legend and UI theme. gamma_correction matches the UI toggle: true treats source RGB as linear (extra gamma appearance); false decodes sRGB before shading. Enabled grid/legend are also included in agent PNG captures. Axes may briefly appear during interaction when persistent axes are off.

  • set_3d_camera

    Partially update camera position, target (rotation center), up or vertical FOV in degrees. Rotation is absolute XYZ Euler degrees; it moves target along camera -Z at the previous pivot distance. Rotation cannot combine with target/up. Fit frames visible geometry, optionally at the new FOV. Returns applied view state.

  • set_3d_object

    Set overlay opacity (0..1), visibility, world-unit point size (or point_size_mode=adaptive for a camera-dependent 2/4/8 pixel target; point_size_pixels=1..64 explicitly sets that target and enables adaptive sizing), points/mesh representation, fixed RGB color or original/intensity/scalar coloring. Get object_index, scalar_fields and available_color_modes from inspection; these include palette indi

  • submit_viewer_replywrite action

    App-only transport: acknowledge a rendered command result.

  • transform_3d_object

    Transform one cloud/mesh without changing source files or camera. Translate/scale use vector XYZ; rotate uses vector axis plus angle degrees (90 for quarter turns); quaternion uses XYZW, normalized. Matrix is affine 4x4 COLUMN-MAJOR, matching inspection (transpose row-major UI input). Default composes current*delta in local space; world uses delta*current. pivot=center rotates/scales around the cu

  • update_3d_scenewrite action

    Replace the existing scene's geometry while preserving its camera. Omitted overlays/vectors are removed. Reuses the active inline viewer or explicit browser fallback.

  • visualize_points

    Visualize up to 20,000 XYZ points, optional RGB (integer 0..255), target overlay, or anchored vector arrows. Use files for larger data; coordinates are not automatically normalized.

Public scan report

scanner v0.1.9 · 2026-09-19 · same rubric, same numbers if you re-run it

1 medium
  • Code scan54 source files scanned20/25
  • Live reliabilityno gateway calls yet and no remote to proben/a
  • Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenancelast push 10 days ago15/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10

Findings (1)

  • mediumeval / new Function usedexec.eval
    3d_visualizer-0.4.2/ply_visualizer/_assets/292.bundle.js: …This)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==t…
Overall 85/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

What the publisher says

From the 3D Visualizer repository's README, as published. We do not edit it. Read it on GitHub

3D Visualizer

View, compare and inspect point clouds, meshes, gaussian splats, depth maps and disparity images in your editor or browser — with Rust and WebAssembly doing the heavy decoding, so files with millions of points open in seconds.

Highlights

alongside Rust geometry kernels for camera models and scan registration

  • Open large point clouds quickly, including files with millions of points
  • Decode the demanding formats in Rust/WebAssembly — LAS, LAZ, E57 and TIFF —

Python package and command-line viewer for 3D files, NumPy/PyTorch arrays and inline local notebooks (uv add 3d-visualizer)

  • Compare multiple point clouds in one view and toggle them independently
  • Convert depth and disparity images into point clouds
  • Render gaussian splat reconstructions as sorted splats or center point clouds
  • Inspect meshes as surfaces, wireframes, points and normals
  • Use Eye-Dome Lighting and brightness correction for clearer uncolored geometry
  • Measure distances and adjust camera, rotation center and view parameters
  • Use the shared viewer on the website
  • Try the local

open scenes, control the camera and inspect rendered screenshots

  • Connect AI agents through the local MCP server to

Supported formats

Model animation playback and remote URL loading are supported; see model details and remote files.

Because .bin and .json are generic extensions, neither is opened with the 3D Visualizer by default. For KITTI BIN, use Open With... or right-click and choose Open with 3D Visualizer. For a supported JSON pose, right-click and choose Load JSON as 3D Pose.

Features

Depth and Disparity to Point Cloud

Convert depth or disparity images into point clouds. Projection settings include fx, fy, cx, cy, camera distortion models, mono depth scale and bias, PNG int16 scale and disparity offset.

Eye-Dome Lighting

Use Eye-Dome Lighting to improve depth perception, especially for uncolored point clouds.

Multiple Point Clouds

Load multiple point clouds into the same view, toggle them independently and switch between them with Shift-click.

Mesh Inspection

Inspect mesh files with controls for surface, wireframe, points and normals. This is useful when checking geometry, topology or exported reconstruction results without leaving the editor.

Gaussian Splatting

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Install directly

claude mcp add 3d-visualizer -- uvx 3d-visualizer
Add to Cursor

3D Visualizer: common questions

Is 3D Visualizer MCP server safe?
Yes, by our scan: it is graded A (85/100). Read the 3D Visualizer safety report
How do I install 3D Visualizer?
It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
Does 3D Visualizer need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is 3D Visualizer maintained?
The last commit was 11 days ago (2026-09-10). The latest release is v0.4.2.

More from kleinicke