viznoir
viznoir is a headless, AI-agent-friendly MCP server that gives AI agents full access to VTK's rendering pipeline for cinema-quality scientific visualization, analysis, and animation of simulation data across 50+ file formats — no GUI required.
Rendering
render— Field visualization as PNG with configurable colormap, camera, and resolutioncinematic_render— Publication-quality rendering with PCA-based auto-framing, 3-point lighting, SSAO, FXAA, and PBR materialsbatch_render— Render multiple fields from the same dataset in one callvolume_render— Volume render 3D data (CT, MRI, CFD) with transfer function presets
Filters & Processing
slice,contour,clip,streamlines— Cut planes, iso-surfaces, clipping, and vector field visualizationexecute_pipeline— Fully custom VTK pipelines with 20+ supported filters
Analysis & Inspection
inspect_data— Metadata: bounds, arrays, timesteps, multiblock structureinspect_physics— Vortex detection (Q-criterion), critical points, boundary conditions, derived quantities (Re, Ma, etc.)extract_stats— Statistical summaries (min/max/mean/std) per fieldauto_postprocess— Autonomous inspect → visualize → evaluate → refine workflow
Probing
plot_over_line— Sample field values along a line for 1D plotsintegrate_surface— Integrate fields over surfaces for forces/fluxesprobe_timeseries— Sample a field at a fixed point across all timesteps
Animation
animate— Time-series or camera-orbit animations with 7 physics-aware presets (streamline growth, clip sweep, warp oscillation, etc.), output as MP4, WebM, GIF, or PNG framessplit_animate— Synchronized multi-pane animations combining 3D views and time-series graphs
Comparison & Composition
compare— Side-by-side or difference-map comparison of two datasets with shared colorbarcompose_assets— Compose assets into story, grid, slides, or video layouts (supports LaTeX equations)
Export
preview_3d— Export to glTF/glB for interactive 3D viewing in a browser
Key Highlights
Supports 50+ formats: OpenFOAM, VTK, CGNS, Exodus, STL, glTF, and more
Fully headless (EGL/OSMesa) — no display server needed
Compatible with Claude Code, Cursor, Windsurf, Gemini CLI, and any MCP client
Covers 10+ scientific domains: CFD, FEA, medical imaging, geoscience, molecular, automotive, and more
Supports exporting cinematic 3D visualizations and physics-based animations of simulation data to the glTF format for high-fidelity rendering and web display.
Enables the generation of scientific data summaries and publication-ready visualization outputs in LaTeX format for use in technical reports and papers.
viznoir
VTK is all you need. Cinema-quality science visualization for AI agents.

One prompt → physics analysis → cinematic renders → LaTeX equations → publication-ready story.
What it does
An MCP server that gives AI agents full access to VTK's rendering pipeline — no ParaView GUI, no Jupyter notebooks, no display server. Your agent reads simulation data, applies filters, renders cinema-quality images, and exports animations, all headless.
Works with: Claude Code · Cursor · Windsurf · Gemini CLI · any MCP client
Quick Start
1. Install
pip install viznoir
# With optional extras
pip install "viznoir[mesh]" # meshio + trimesh (50+ formats)
pip install "viznoir[composite]" # Pillow + matplotlib (split_animate)
pip install "viznoir[all]" # everythingRequires Python ≥3.10. VTK wheel auto-installed (EGL headless rendering supported).
2. Verify
mcp-server-viznoir --help # server entry point
python -c "import viznoir; print(viznoir.__version__)"3. Use with an MCP client
Add to your MCP client config (claude_desktop_config.json, ~/.cursor/mcp.json, etc.):
{
"mcpServers": {
"viznoir": {
"command": "mcp-server-viznoir",
"env": {
"VIZNOIR_DATA_DIR": "/path/to/your/simulation/data",
"VIZNOIR_OUTPUT_DIR": "/path/to/output"
}
}
}
}Then ask your AI agent:
"Open cavity.foam, render the pressure field with cinematic lighting, then create a physics decomposition story."
4. Or use as a Python library (advanced)
All tool implementations are importable as async functions. You provide a VTKRunner and await the result:
import asyncio
from viznoir.core.runner import VTKRunner
from viznoir.tools.inspect import inspect_data_impl
from viznoir.tools.render import render_impl
async def main():
runner = VTKRunner()
meta = await inspect_data_impl(file_path="cavity.foam", runner=runner)
print(meta["fields"], meta["timesteps"])
result = await render_impl(
file_path="cavity.foam",
field_name="p",
runner=runner,
colormap="Cool to Warm",
camera="isometric",
width=1920, height=1080,
output_filename="pressure.png",
)
print(result.file_path)
asyncio.run(main())See docs for the full tool reference.
Capabilities
Category | Tools |
Rendering |
|
Filters |
|
Analysis |
|
Probing |
|
Animation |
|
Comparison |
|
Export |
|
22 tools · 12 resources · 4 prompts · 50+ file formats (OpenFOAM, VTK, CGNS, Exodus, STL, glTF, …)
Showcase — 10 Domains, One Pipeline
Every frame below is a single MCP tool call. No GUI, no post-processing, no ParaView. Annotations are rendered inside the 3D scene via VTK-native text actors and leader lines — no Photoshop, no matplotlib overlay.
|
|
|
|
|
Medical CT skull volume | CFD Combustion streamlines | Thermal Heatsink gradient | Geoscience Seismic wavefield | Automotive DrivAerML · 8.8M cells |
|
|
|
|
|
Molecular H₂O electron density | Vascular Cerebral aneurysm MRA | Planetary Bennu · 196K triangles | Structural Cantilever FEA stress | Volume Thermal threshold |
Physics-Aware Animations
Seven presets convert raw simulation data into publication-ready motion — each binds a rendering primitive to a physical phenomenon.
Preset | Physics | Rendering |
| Lagrangian advection | Particle path-line extension over time |
| Pressure gradient cross-section | Moving clip plane |
| CT density classification | Progressive isosurface stacking |
| Orbital topology | Isovalue sweep with camera orbit |
| Structural mode shape | Warp-by-vector harmonic displacement |
| Oblique illumination | Rotating key light for material reveal |
| Feature hierarchy | Threshold peeling from outside → in |
Story Composition (compose_assets)

Inspect → render → annotate → compose → narrate. One prompt produces a 4-panel physics decomposition with LaTeX-rendered governing equations.
Layouts: story (vertical narrative) · grid (N×M comparison) · slides (16:9 keynote) · video (MP4 with transitions)
Full interactive gallery: https://kimimgo.github.io/viznoir/#showcase
Architecture
prompt "Render pressure from cavity.foam"
│
MCP Server 22 tools · 12 resources · 4 prompts
│
VTK Engine readers → filters → renderer → camera
│ EGL/OSMesa headless · cinematic lighting
Physics Layer topology analysis · context parsing
│ vortex detection · stagnation points
Animation 7 physics presets · easing · timeline
│ transitions · compositor · video export
Output PNG · WebP · MP4 · GLTF · LaTeXNumbers
22 MCP tools | 24 VTK filters |
10 domains | 19 native file formats |
6/6 VTK data types | 50+ formats via meshio |
Documentation
Homepage: kimimgo.github.io/viznoir
Developer docs: kimimgo.github.io/viznoir/docs — full tool reference, domain gallery, architecture guide
License
MIT
Maintenance
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kimimgo/viznoir'
If you have feedback or need assistance with the MCP directory API, please join our Discord server









