原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

3D Visualizer

作者:kleinicke版本 0.4.2i★ –i在你的电脑上运行
注册名称io.github.kleinicke/3d-visualizer

安装

概览

作者提供的说明(英文原文)

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

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 设计、图片与音频

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 注册中心没有列出需要填写的密钥。

你需要

  • PyPI已安装 Python 的 uv(用于 uvx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "3d-visualizer": {
      "command": "uvx",
      "args": [
        "3d-visualizer",
        "mcp",
        "--root",
        "your-value"
      ]
    }
  }
}

在终端中运行这条命令

claude mcp add 3d-visualizer -- uvx 3d-visualizer mcp --root your-value

这个服务器需要在启动命令中填入值,请复制设置后自行填写。

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "3d-visualizer": {
      "command": "uvx",
      "args": [
        "3d-visualizer",
        "mcp",
        "--root",
        "your-value"
      ]
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器需要在启动命令中填入值,请复制设置后自行填写。

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "3d-visualizer": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "3d-visualizer",
        "mcp",
        "--root",
        "your-value"
      ]
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 kleinicke 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“设计、图片与音频”中的其他服务器比较i

  • 星标数多于此分类中其他 2184 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 2184 个服务器的 31% 更新
  • 基础检查结果等于或优于此分类中其他 2184 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

3D Visualizer 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.4.2)于2个月前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。

有什么可以替代它?

同一分类中有:Figma Context MCP, Claude Real Video, Figma MCP Server

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Figma Context MCP

作者:GLips

Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.

在你的电脑上运行★ 16,165MIT5个月前更新
安装

Claude Real Video

作者:HUANGCHIHHUNGLeo

Let any LLM watch a video locally — and search everything it has ever watched.

在你的电脑上运行★ 2,284MIT2个月前更新
安装

Figma MCP Server

作者:figma

The Figma MCP server brings Figma design context directly into your AI workflow.

在云端运行★ 2,15213个月前更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

3D Visualizer — Python, CLI and MCP

Inspect point clouds, meshes and calibrated depth data in Python, notebooks or an AI conversation. The package is `3d-visualizer`, the Python import is `viz3d`, and the CLI is `3d-visualizer`. Python 3.10+ is required.

This checkout targets the next release. The public 0.4.2 package still uses the older import. For the new interface before publication, build the viewer and install ./packages/python with the extras you need.

Agent installation

These examples target 0.5.0.dev0. Development versions must be installed from this checkout until published; do not assume an unreleased version exists on PyPI.

For agents, use uv tool install or uvx; uv add is for using the library inside a Python project. Headless mode also needs Chromium installed once.

uv tool install "3d-visualizer[mcp,headless]==0.5.0.dev0"

uvx --from "3d-visualizer[headless]==0.5.0.dev0" playwright install chromium 3d-visualizer doctor --check-headless

Client configuration (replace the data directory):

{

"mcpServers": { "3d-visualizer": { "command": "uvx", "args": [ "--from", "3d-visualizer[mcp,headless]==0.5.0.dev0", "3d-visualizer-mcp", "--root", "/absolute/path/to/data" ] } } }

Install in VS Code

The VS Code link uses the current workspace as the allowed data root.

claude mcp add --transport stdio 3d-visualizer -- uvx --from "3d-visualizer[mcp,headless]==0.5.0.dev0" 3d-visualizer-mcp --root /absolute/path/to/data

The default --tools core exposes eight everyday tools. Use --tools full for depth conversion, selections, animation, alignment and export. --renderer auto uses an advertised MCP Apps host, otherwise offscreen Chromium. Use --renderer inline to require a widget or explicit browser; use --renderer headless for unattended work.

Unattended Python rendering

With the headless extra and Chromium installed:

from pathlib import Path

from viz3d import show

with show("scan.ply", headless=True) as view: state = view.inspect(detail="full") Path("preview.png").write_bytes(view.capture())

This uses offscreen Chromium and the shared renderer. It requires no notebook, chat widget or visible browser window. Inspect and capture raise on renderer failure instead of returning a placeholder success.

Install with uv (recommended)

Install uv, then choose:

uv add 3d-visualizer            # Add to a Python project

uv add "3d-visualizer[notebook]" # Local notebook display support uv pip install 3d-visualizer # Install into an existing virtual environment uv tool install 3d-visualizer # Install the CLI independently uvx --from 3d-visualizer 3d-visualizer scan.ply # Run without persistent installation

The Python import is from viz3d import show. Tool installation does not add the library to a Python project or notebook kernel; use uv add or uv pip install in that environment. No Node.js build is needed for PyPI installs.

For local Jupyter, run uv run --with jupyter jupyter lab from your project and select its Python kernel. Keep that kernel alive while using the viewer.

Developing from source

From the repository root, build the bundled engine with Node 24:

npm ci

npm run build:python-viewer uv tool install ./packages/python

Or add the local library to your Python project:

uv add /absolute/path/to/checkout/packages/python

See publishing setup for releases.

Alternative: install with pip from this repository

After building the browser assets above:

python3 -m venv packages/python/.venv

packages/python/.venv/bin/python -m pip install ./packages/python packages/python/.venv/bin/3d-visualizer engine/examples/example-point-cloud.ply

On Windows, replace the environment's bin/ paths with Scripts/, e.g. packages\python\.venv\Scripts\python.exe, 3d-visualizer.exe, or jupyter.exe. After activating the environment, the command is simply:

3d-visualizer scan.ply mesh.stl

3d-visualizer --no-browser scan.ply python -m viz3d scan.ply

The command prints a local URL and keeps running until Ctrl+C. --no-browser allows an agent or another application to open that URL itself. It does not render an image or report successful browser rendering to the caller.

Python

from viz3d import show

In an interactive Python session or local notebook:

viewer = show("scan.ply", "mesh.stl") print(viewer.url)

Later:

viewer.close()

from viz3d import show

Lists, iterables, NumPy arrays, and PyTorch tensors with shape (N, 3) work.

points = [[0, 0, 0], [1, 0, 0], [0, 1, 0]] colors = [[255, 0, 0], [0, 255, 0], [0, 0, 255]]

In a script, keep Python alive while the viewer is in use.

with show(points, colors=colors) as viewer: print(viewer.url) try: viewer.wait() except KeyboardInterrupt: pass

Coordinates must be finite float32-compatible numbers. Optional colors must match the point count and contain integer RGB values in 0..255. Point arrays are serialized to a temporary binary PLY, decoded by the existing engine, and removed when the session closes. This first implementation serializes arrays row by row; it is not a zero-copy transport for very large arrays.

NumPy and PyTorch

Pass arrays and tensors directly, including RGB colors:

import numpy as np

from viz3d import show

viewer = show(np.random.default_rng(0).normal(size=(1000, 3)))

import torch

from viz3d import show

device = "cuda" if torch.cuda.is_available() else ( "mps" if torch.backends.mps.is_available() else "cpu" ) points = torch.randn(1000, 3, device=device, requires_grad=True) rgb = torch.randint(0, 256, (1000, 3), device=device, dtype=torch.uint8) viewer = show(points, colors=rgb)

No manual .detach(), .cpu(), or .numpy() needed.

Keep Python alive and call viewer.close() when finished.

  • NumPy arrays can be transposed, sliced, read-only, or non-contiguous.
  • PyTorch inputs can be CPU or GPU tensors, detached or attached to autograd. Both coordinates and colors are handled independently, so mixing devices or NumPy/PyTorch inputs works. Float16 and bfloat16 tensors are supported.
  • Visualization detaches internally, transfers to CPU, and serializes a snapshot. The original device, values, requires_grad, and autograd graph are unchanged. GPU-to-CPU transfer synchronizes; avoid calling this every training step.
  • PyTorch conversion does not depend on NumPy. CPU rows are converted in bounded chunks rather than performing a GPU scalar read for every coordinate.
  • Inputs must be real, dense (N, 3) data. For (B, N, 3) batches, use show(batch[0]); batches are deliberately not flattened automatically. Sparse, quantized, complex, nested, and data-free meta tensors are rejected with an error. RGB retains the integer-valued 0..255 convention, including floating-point tensors; normalized RGB can be passed as (rgb * 255).round().

Training previews

All updates reuse the same browser tab/inline view and preserve its camera. The viewer receives change notifications and loads the newest revision; intermediate revisions can be skipped. Publish at a useful training interval, not every forward pass. Serialization and GPU transfer are synchronous. Updates replace the scene; manual files added to that scene are also replaced on the next update.

viewer = show(initial_points)

In your training loop, e.g. every 100 steps:

if step % 100 == 0: viewer.update(prediction[0], target=target[0], step=step)

Prediction is orange and target cyan. Supply colors= to override prediction RGB. Targets may have a different number of points. This is a geometric overlay, not a computed nearest-neighbor error metric. Visibility can be toggled in the standard file panel. Use Pause updates to inspect one revision and Fit scene to reset the framing explicitly.

Batch and augmentation inspection
from viz3d import show_batch

viewer = show_batch(batch, target=target_batch) viewer.update_batch(next_batch, target=next_targets, step=step)

A list of differently sized point arrays also works:

viewer = show_batch([original, augmented], labels=["Original", "Augmented"])

The sample selector switches batches in one scene and retains the camera. Colors, targets, and vectors (when supplied) must match the batch size. Batch snapshots serialize every sample; select a small inspection subset for large training batches. Only the chosen sample is loaded by the browser.

Gradient and displacement arrows
# After loss.backward(); non-leaf predictions need retain_grad() beforehand.

viewer.update( points, vectors=points.grad, vector_scale=-learning_rate, max_vectors=256, step=step, )

Arrows are anchored at the corresponding input points. Negative learning-rate scaling shows a plain gradient-descent direction; it is not an exact Adam or momentum optimizer step. To inspect the actual update, pass measured coordinate displacements instead. Nonzero arrows are magenta. Up to max_vectors evenly spaced vectors are displayed (default 256, maximum 2000). All supplied vector rows are validated; no autograd hooks or gradient computation are installed by this operation.

Layer inspection with a removable forward hook
viewer = show(initial_points)

with viewer.inspect_layer(model, select=lambda output: output[0], every=100): train(model)

For dictionary outputs use a selector such as lambda output: output"points". The selector must return (N, 3) coordinates, not arbitrary feature channels. The hook captures the first forward call and then every every calls. It returns None, preserving the model's output. A visualization error disables the hook, emits a warning and is accessible as inspection.error; it does not invalidate training. The context manager removes the hook, while the caller owns the viewer session's lifetime. inspection.close() also removes it explicitly.

Run viewer updates in the main process, on one rank in distributed training, and outside compiled model code. GPU-to-CPU transfer introduces synchronization. PyTorch forward hooks.

The server binds only to 127.0.0.1, uses a random session URL, and serves only the explicitly supplied files and bundled viewer assets. Source files remain on your machine; the package does not upload them. Keep file paths available for the life of the session. Do not share the session URL with untrusted code.

Inline Jupyter notebooks

In a local Jupyter notebook, return the viewer as the last expression in a cell. Browser auto-opening is disabled when a notebook kernel is detected:

viewer = show(points)

viewer # Interactive viewer appears in the output cell.

Or display explicitly, using the notebook extra:

viewer.display(height=480, ui="collapsed")

Settings are collapsed by default. A compact toolbar keeps Settings, Fit scene, Pause updates, and the batch selector accessible. Choose ui="full" to show settings immediately or ui="none" for a presentation-only canvas with mouse controls. In UI-free m

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx