3d-eyes

3d-eyes

Enables coding agents to visually inspect and diagnose 3D files (meshes and Gaussian splats) for defects like flipped normals or floaters, without GPU dependencies.

Category
Visit Server

README

3d-eyes 👁️

Give your coding agent eyes for 3D.

An MCP server that lets Claude Code (or any MCP client) see and diagnose 3D files - meshes and Gaussian splats - with zero GPU / OpenGL / Blender dependency. Pure numpy rendering: it runs on any machine, any container, any CI.

中文文档 · Agent Skill · Broken zoo


Your agent can write Three.js all day, but until now it debugged 3D files blind. Ask it "why is my model black?" and it guesses. With 3d-eyes it looks:

inspect_scene contact sheet of a cube with flipped normals - every face red

That's inspect_scene on a real broken file: six orthographic views plus perspective, inward-facing triangles painted red, and a JSON report that says exactly what's wrong:

{
  "severity": "error",
  "summary": "All face normals are inverted (negative enclosed volume).",
  "symptom": "Model renders dark/black or shows red faces on every side.",
  "fix": "Invert face winding: mesh.invert() in trimesh, or flip normals on export."
}

The agent fixes the file, then proves it with diff_renders:

before/after diff render

Gaussian splats too

3d-eyes speaks 3DGS: .ply (training output layout) and .splat. It renders turntable previews and runs a quality report with density-adaptive floater detection - the isolated blobs your training run left hanging in space:

splat contact sheet with floaters visible

"floaters": { "floater_count": 60, "floater_fraction": 0.0099,
              "examples": [[3.4, -2.8, 3.1], ...] }

Quickstart

# Claude Code
claude mcp add 3d-eyes -- uvx 3d-eyes

# or from source
git clone https://github.com/murphy977/3d-eyes && cd 3d-eyes
pip install -e . && claude mcp add 3d-eyes -- 3d-eyes

Then ask your agent things like:

"Check assets/robot.glb before I ship it." "My model renders black in Three.js - here's the file." "Are there floaters in scene.splat?"

For best results, install the Agent Skill so your agent knows the symptom → cause table by heart:

mkdir -p ~/.claude/skills/3d-debugging && cp skill/SKILL.md ~/.claude/skills/3d-debugging/

Tools

Tool What it does
inspect_scene(path) Contact sheet (6 ortho + perspective views) + structure stats + defect report. Red = faces seen from behind. Auto-detects splat files.
render_views(path, cameras) Custom angles: [{"azimuth": 30, "elevation": -60, "distance": 1.2, "ortho": false}] - zoom in, look underneath, get exact silhouettes.
diff_renders(path_a, path_b) Same-camera side-by-side of two files, plus both defect verdicts. Verify every fix.

Detects: flipped/inconsistent normals · degenerate faces · non-manifold edges · missing texture/buffer references · scale unit mistakes (mm vs m) · splat floaters · nearly-transparent splat bloat. Corrupt files return a parse diagnosis instead of a crash.

Formats: GLB, GLTF, OBJ, PLY, STL (meshes) · 3DGS PLY, .splat (Gaussian splats).

Try it on the broken zoo

Every defect has a minimal sample file in examples/broken-zoo/:

3d-eyes inspect examples/broken-zoo/cube_flipped_normals.obj   # all red + report
3d-eyes inspect examples/broken-zoo/torus_with_floaters.ply    # 60 floaters found
3d-eyes diff examples/broken-zoo/cube_flipped_normals.obj fixed.obj

(The CLI mirrors the MCP tools - handy for humans and CI pipelines.)

Why software rendering?

Agents run everywhere: laptops, devcontainers, CI runners, remote boxes. Any renderer that needs EGL/OSMesa/GPU drivers will eventually fail on one of them. 3d-eyes rasterizes with numpy + PIL - preview quality by design, 100% portability by design. An agent doesn't need path tracing to see that your normals are flipped.

Roadmap

  • [ ] .spz splat format
  • [ ] Texture-mapped rendering
  • [ ] USD support
  • [ ] Animation / skeleton sanity checks
  • [ ] Optional pyrender backend for high-quality output
  • [ ] Screenshot-vs-render comparison for engine-side bug isolation

Issues and PRs welcome - the codebase is small and readable on purpose.

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured