Skip to main content
Glama

Pixal3D-MCP

A standalone MCP (Model Context Protocol) server for running Pixal3D image-to-3D inference. This makes it possible to generate high-fidelity 3D assets from a single image, or a series of 3D assets from an image sequence.

Overview

Pixal3D generates high-fidelity 3D assets from a single image. Unlike previous methods that loosely inject image features via attention, Pixal3D explicitly lifts pixel features into 3D through back-projection, establishing direct pixel-to-3D correspondences. This enables near-reconstruction-level fidelity with detailed geometry and PBR textures.

Key Features:

  • Single image to 3D mesh generation

  • Detailed geometry and PBR textures

  • Memory-efficient inference modes

  • MCP protocol support for desktop IDEs (Zed, etc.)

Related MCP server: flux-replicate-mcp

Repository Structure

Pixal3D-MCP/
├── src/pixal3d_mcp/        # Python package (MCP server implementation)
│   ├── __init__.py         # Python Init File
│   └── server.py           # MCP server with 8 tools
├── assets/                 # Sample images for testing
│   └── images/             # Test images (0_img.png, etc.)
├── tests/                  # Unit Tests
│   └── __init__.py         # Init File
│   └── test_pixal3d_mcp.py # Test Script
├── pixal3d/                # Core Pixal3D library (from TencentARC/Pixal3D)
├── mcp.json                # MCP configuration for uvx
├── Rules.json              # Rules configuration
├── pyproject.toml          # Python package config
├── environment.yaml        # Conda environment definition
├── requirements.txt        # All dependencies (PyTorch, custom wheels, etc.)
├── inference.py            # Reference CLI script
└── README.md               # This document
└── LICENSE                 # License files

Software Requirements

  • OS: Linux (Rocky Linux 9.7, Ubuntu 22.04+, etc.)

  • GPU: NVIDIA RTX series with CUDA 12.4 support

  • Python: 3.10

  • CUDA: 12.4

  • Compiler: GCC 11

Quick Start

1. Clone the Repository

git clone https://github.com/Lightfielder/Pixal3D-MCP.git
cd $HOME/Pixal3D-MCP/

2. Install Dependencies

Conda Environment

The Pixal3D-MCP/environment.yaml file exists with these contents. It allows the rapid creation of a new Conda virtual environment with the required dependencies.

name: Pixal3D
channels:
  - nvidia
  - conda-forge
dependencies:
  - python=3.10
  - pip
  - uv
  - cuda=12.4.0
  - cuda-toolkit=12.4
  - gxx_linux-64=11
  - gcc_linux-64=11
  - cmake
  - ninja
  - cupy>=13.0.0
  - pybind11
  - setuptools
  - pip:
    - --extra-index-url https://download.pytorch.org/whl/cu124
    - torch==2.6.0
    - torchvision==0.21.0
    - triton==3.2.0
    - transformers==4.57.3
    - timm==1.0.22
    - diffusers==0.37.1
    - accelerate==1.13.0
    - gradio
    - kornia==0.8.2
    - pillow==12.0.0
    - imageio==2.37.2
    - opencv-python-headless==4.12.0.88
    - trimesh==4.10.1
    - plyfile==1.1.3
    - tqdm==4.67.1
    - git+https://github.com/microsoft/MoGe.git
    - https://github.com/JeffreyXiang/Storages/releases/download/Space_Wheels_251210/flash_attn_3-3.0.0b1-cp39-abi3-linux_x86_64.whl
    - https://github.com/JeffreyXiang/Storages/releases/download/Space_Wheels_251210/cumesh-0.0.1-cp310-cp310-linux_x86_64.whl
    - https://github.com/JeffreyXiang/Storages/releases/download/Space_Wheels_251210/flex_gemm-0.0.1-cp310-cp310-linux_x86_64.whl
    - https://github.com/JeffreyXiang/Storages/releases/download/Space_Wheels_251210/o_voxel-0.0.1-cp310-cp310-linux_x86_64.whl
    - https://github.com/JeffreyXiang/Storages/releases/download/Space_Wheels_251210/nvdiffrast-0.4.0-cp310-cp310-linux_x86_64.whl
    - https://github.com/JeffreyXiang/Storages/releases/download/Space_Wheels_251210/nvdiffrec_render-0.0.0-cp310-cp310-linux_x86_64.whl

Build and Install

# Linux dnf repos
sudo dnf update -y
sudo dnf install -y epel-release
sudo dnf config-manager --set-enabled crb
sudo dnf makecache

# Add git
sudo dnf install -y git

# Set up the Conda env
cd $HOME

# Add Miniconda virtual environment support
wget --no-check-certificate https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod -v +x Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh

# Accept the Conda license terms for the repos
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r

# Update Conda
conda update -n base -c defaults conda

# Create conda environment
cd $HOME/Pixal3D-MCP/
conda env create -f environment.yaml
conda activate Pixal3D

# Install Natten
cd $HOME
git clone --recursive https://github.com/SHI-Labs/NATTEN.git
cd NATTEN
git checkout v0.17.3
export NATTEN_CUDA_ARCH="8.6"
export TORCH_CUDA_ARCH_LIST="8.6"
export MAX_JOBS=8
export CUDA_HOME=$CONDA_PREFIX
export CUDACXX=$CONDA_PREFIX/bin/nvcc
export CPATH=$CONDA_PREFIX/include:$CPATH
export LIBRARY_PATH=$CONDA_PREFIX/lib:$LIBRARY_PATH
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH
python setup.py build_ext --inplace
pip install --editable . --no-build-isolation

# Install the Pixal3D-MCP dependencies
cd $HOME/Pixal3D-MCP/
uv pip install --no-build-isolation --extra-index-url https://download.pytorch.org/whl/cu124 -r requirements.txt

3. Hugging Face Token Setup

Pixal3D uses the Bria AI "RMGB v2.0" model. You need to agree to the RMGB model's non-commercial license terms to be able to use it. If you have not done so then Pixal3D will report the following error in the terminal whent the inference.py script is launched:

OSError: You are trying to access a gated repo.
Make sure to have access to it at https://huggingface.co/briaai/RMBG-2.0.
403 Client Error. (Request ID: Root=1-6a050af0-56492db66f4b2c0c06cf7809;6ef33523-2961-4d57-8801-b28b5d8f92fe)

Cannot access gated repo for url https://huggingface.co/briaai/RMBG-2.0/resolve/main/config.json.
Access to model briaai/RMBG-2.0 is restricted and you are not in the authorized list. Visit https://huggingface.co/briaai/RMBG-2.0 to ask for access.

Use the Hugging Face website to generate a personal access token:

  1. Go to Settings → Access Tokens page to Generate a token

  2. Click the "New token" button. Name the token something memorable like "Pixal3D". Click on the "Fine-grained" option near the top of the webpage. Do not select the "Read" option.

  3. Under the "User permissions > Repositories" section enable the checkbox next to the "Read access to contents of all public gated repos you can access" option.

  4. Click the "Generate token" button. Copy the token string that starts with "hf_".

Then run the following Hugging Face command from a Linux terminal session, to save the personal access token locally on the Linux system:

hf auth login

The output should lool like:

$ hf auth login

    _|    _|  _|    _|    _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|_|_|_|    _|_|      _|_|_|  _|_|_|_|
    _|    _|  _|    _|  _|        _|          _|    _|_|    _|  _|            _|        _|    _|  _|        _|
    _|_|_|_|  _|    _|  _|  _|_|  _|  _|_|    _|    _|  _|  _|  _|  _|_|      _|_|_|    _|_|_|_|  _|        _|_|_|
    _|    _|  _|    _|  _|    _|  _|    _|    _|    _|    _|_|  _|    _|      _|        _|    _|  _|        _|
    _|    _|    _|_|      _|_|_|    _|_|_|  _|_|_|  _|      _|    _|_|_|      _|        _|    _|    _|_|_|  _|_|_|_|

    A token is already saved on your machine. Run `hf auth whoami` to get more information or `hf auth logout` if you want to log out.
    Setting a new token will erase the existing one.
    To log in, `huggingface_hub` requires a token generated from https://huggingface.co/settings/tokens .
Enter your token (input will not be visible): 
Add token as git credential? (Y/n) y
Token is valid (permission: fineGrained).
The token `Pixal3D` has been saved to /home/vfx/.cache/huggingface/stored_tokens
Your token has been saved in your configured git credential helpers (store).
Your token has been saved to /home/vfx/.cache/huggingface/token
Login successful.
The current active token is: `Pixal3D`

4. Configure MCP Client

Add this to your MCP client settings (e.g., Zed IDE):

{
  "mcpServers": {
    "pixal3d": {
      "command": "uvx",
      "args": [
        "git+https://github.com/Lightfielder/Pixal3D-MCP.git"
      ]
    }
  }
}

How to activate the Conda Virtual Environment

conda activate Pixal3D
cd $HOME/Pixal3D-MCP/

How to Remove the Pixal3D Repo Files / Conda Virtual Environment

cd $HOME

conda deactivate
conda env remove -n Pixal3D
sudo rm -rf $HOME/Pixal3D-MCP/
cd $HOME

Direct CLI Usage

The MCP server wraps the underlying Pixal3D CLI:

conda activate Pixal3D
cd $HOME/Pixal3D-MCP/

export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
python inference.py --image assets/images/0_img.png --output ./output.glb --max_num_tokens 12288

The terminal should show a result like:

python inference.py --image assets/images/0_img.png --output ./output.glb --max_num_tokens 12288
[SPARSE] Conv backend: flex_gemm; Attention backend: flash_attn_3
 _______  ___   __   __  _______  ___      _______  ______          __   __  _______  _______
|       ||   | |  |_|  ||   _   ||   |    |       ||      |        |  |_|  ||       ||       |
|    _  ||   | |       ||  |_|  ||   |    |___    ||  _    | ____  |       ||       ||    _  |
|   |_| ||   | |       ||       ||   |     ___|   || | |   ||____| |       ||       ||   |_| |
|    ___||   |  |     | |       ||   |___ |___    || |_|   |       |       ||      _||    ___|
|   |    |   | |   _   ||   _   ||       | ___|   ||       |       | ||_|| ||     |_ |   |
|___|    |___| |__| |__||__| |__||_______||_______||______|        |_|   |_||_______||___|    
     Pixal3D generates high-fidelity 3D assets from a single image
======================================================================

GPU Memory: 0.00GB allocated
[Pipeline] Loading from TencentARC/Pixal3D...
[ATTENTION] Using backend: flash_attn_3
/home/vfx/miniconda3/envs/Pixal3D/lib/python3.10/site-packages/timm/models/layers/__init__.py:49: FutureWarning: Importing from timm.models.layers is deprecated, please import via timm.layers
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.layers", FutureWarning)
/home/vfx/miniconda3/envs/Pixal3D/lib/python3.10/site-packages/timm/models/registry.py:4: FutureWarning: Importing from timm.models.registry is deprecated, please import via timm.models
  warnings.warn(f"Importing from {__name__} is deprecated, please import via timm.models", FutureWarning)
[Pipeline] Loaded successfully
[Pipeline] low_vram = True
[Pipeline] Moving to GPU...
[Pipeline] On GPU
GPU Memory: 0.00GB allocated
[ImageCond] Loading SS model...
  SS model loaded
GPU Memory: 1.13GB allocated
[Inference] Processing image: assets/images/0_img.png
  Using default camera parameters
[ImageCond] Loading Shape 512 model...
  Loading NAF upsampler for shape 512...
Using cache found in /home/vfx/.cache/torch/hub/valeoai_NAF_main
GPU Memory: 2.27GB allocated
[ImageCond] Loading Shape 1024 model...
  Loading NAF upsampler for shape 1024...
Using cache found in /home/vfx/.cache/torch/hub/valeoai_NAF_main
GPU Memory: 3.40GB allocated
[ImageCond] Loading Texture model...
  Loading NAF upsampler for texture...
Using cache found in /home/vfx/.cache/torch/hub/valeoai_NAF_main
GPU Memory: 4.54GB allocated
[Inference] Running 3D generation pipeline...
Sampling sparse structure (proj): 100%|██████████████████████████████████████████████████████████████████████████| 12/12 [00:06<00:00,  1.92it/s]
Sampling shape SLat (proj): 100%|████████████████████████████████████████████████████████████████████████████████| 12/12 [00:07<00:00,  1.58it/s]
Sampling HR shape SLat (proj, 1024): 100%|███████████████████████████████████████████████████████████████████████| 12/12 [00:44<00:00,  3.70s/it]
Sampling texture SLat (proj): 100%|██████████████████████████████████████████████████████████████████████████████| 12/12 [00:26<00:00,  2.17s/it]
[Memory] Unloading models...
GPU Memory: 0.39GB allocated
[Inference] Extracting GLB...
Cleaning mesh:  33%|███████████████████████████████▋                                                               | 2/6 [00:04<00:09,  2.49s/it]/home/vfx/miniconda3/envs/Pixal3D/lib/python3.10/site-packages/cumesh/remeshing.py:220: UserWarning: Using torch.cross without specifying the dim arg is deprecated.
Please either pass the dim explicitly or simply use torch.linalg.cross.
The default value of dim will change to agree with that of linalg.cross in a future release. (Triggered internally at /pytorch/aten/src/ATen/native/Cross.cpp:62.)
  normals0 = torch.cross(mesh_vertices[atempt_triangles_0[:, 1]] - mesh_vertices[atempt_triangles_0[:, 0]], mesh_vertices[atempt_triangles_0[:, 2]] - mesh_vertices[atempt_triangles_0[:, 0]])
Finalizing mesh: 100%|█████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:12<00:00,  2.00s/it]
[Done] GLB saved to: ./output.glb

On NVIDIA RTX GPUs with limited memory you might get a terminal result from Pixal3D with a CUDA out of memory error like this:

torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 1024.00 MiB. GPU 0 has a total capacity of 23.54 GiB of which 265.62 MiB is free. Process 3256 has 264.75 MiB memory in use. Including non-PyTorch memory, this process has 22.52 GiB memory in use. Of the allocated memory 22.13 GiB is allocated by PyTorch, and 39.62 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation.  See documentation for Memory Management  (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)

Available Tools

Conda Environment Tools

Tool

Description

list_conda_envs

List all available conda environments

load_conda_env

Load env vars from a conda environment

get_conda_env_status

Get current conda environment status

Pixal3D Inference Tools

Tool

Description

load_pipeline

Load Pixal3D models into GPU memory

unload_pipeline

Free GPU memory

run_inference

Convert single image to 3D GLB

run_inference_sequence

Convert image sequence to 3D meshes

preview_images

Generate image thumbnail previews (fast)

preview_model

Render GLB models to preview PNGs

preview_model_sequence

Render GLB sequence to preview PNGs

get_memory_status

Check GPU memory usage

cleanup_memory

Run garbage collection

Typical Workflow

// 1. Discover available conda environments
{"method": "tools/call", "params": {"name": "list_conda_envs", "arguments": {}}}

// 2. Load your conda environment
{"method": "tools/call", "params": {"name": "load_conda_env", "arguments": {"env_name": "Pixal3D"}}}

// 3. Load the Pixal3D pipeline
{"method": "tools/call", "params": {"name": "load_pipeline", "arguments": {}}}

// 4. Run inference
{"method": "tools/call", "params": {"name": "run_inference", "arguments": {"image": "assets/images/0_img.png", "output": "result.glb", "max_num_tokens": 12288}}}

// 5. Cleanup when done
{"method": "tools/call", "params": {"name": "unload_pipeline", "arguments": {}}}

run_inference Parameters

Parameter

Type

Required

Default

Description

image

string

yes

-

Path to input image

output

string

no

./output.glb

Output GLB path

seed

integer

no

42

Random seed

max_num_tokens

integer

no

4096

Memory limit

run_inference_sequence Parameters

Parameter

Type

Required

Default

Description

input_path

string

yes

-

Path to an image in the sequence

output_template

string

no

auto

Output mesh template (e.g., mesh_####.glb)

frame_start

integer

no

auto

Starting frame number

frame_end

integer

no

auto

Ending frame number

frame_step

integer

no

1

Process every N frames

seed

integer

no

42

Random seed

max_num_tokens

integer

no

4096

Memory limit

auto_detect

boolean

no

true

Auto-detect sequence pattern

Supported Sequence Patterns:

Style

Example

Padding

Local files

render_0001.png

4 digits

Maya

render_0001.png

4 digits

Maya hash

render.####.png

variable

After Effects

sequence_0001.png

4 digits

Fusion dot

image.0001.png

variable

printf

image%04d.png

4 digits

Nuke/Foundry

image.%04d.png

4 digits

Houdini/SideFX

image.$F4.png

1-9 digits

IFL (Image File List)

sequence.ifl

per-line filenames

Network/Archive Paths:

Style

Example

HTTP/HTTPS

https://example.com/image_0001.png

FTP

ftp://server.com/images/

ZIP Archive

/path/archive.zip/image.png

TAR Archive

/path/archive.tar.gz/frame_001.png

preview_images Parameters

Parameter

Type

Required

Default

Description

image_paths

array

no

-

Array of image paths to preview

input_path

string

no

-

Single image, URL, archive member, or pattern

max_size

integer

no

256

Max thumbnail dimension in pixels

Supported Input Types:

  • Local files: image.png, frames_####.png

  • URLs: https://example.com/image.png

  • Archives: /path/archive.zip/member.png

  • IFL files: sequence.ifl

Example:

// Preview a local sequence
{"method": "tools/call", "params": {"name": "preview_images", "arguments": {"input_path": "frames/image_0001.png"}}}

// Preview from URL
{"method": "tools/call", "params": {"name": "preview_images", "arguments": {"input_path": "https://example.com/image.png"}}}

// Preview from archive
{"method": "tools/call", "params": {"name": "preview_images", "arguments": {"input_path": "/data/archive.zip/frame_001.png"}}}

// Preview specific images
{"method": "tools/call", "params": {"name": "preview_images", "arguments": {"image_paths": ["a.png", "b.png", "c.png"]}}}

preview_model Parameters

Render GLB 3D models to preview PNG images using the 3d-to-image package.

Parameter

Type

Required

Default

Description

glb_paths

array

no

-

Array of GLB file paths (supports URLs, archives)

input_path

string

no

-

Single GLB, URL, archive member, or pattern

max_size

integer

no

512

Max preview dimension in pixels

Supported Input Types:

  • Local files: model.glb, meshes_####.glb

  • URLs: https://example.com/model.glb

  • Archives: /path/archive.zip/model.glb

Example:

// Preview a GLB sequence
{"method": "tools/call", "params": {"name": "preview_model", "arguments": {"input_path": "meshes_####.glb"}}}
// Preview from URL
{"method": "tools/call", "params": {"name": "preview_model", "arguments": {"input_path": "https://example.com/model.glb"}}}
// Preview from archive
{"method": "tools/call", "params": {"name": "preview_model", "arguments": {"input_path": "/data/archive.zip/model.glb"}}}
// Preview specific GLB files
{"method": "tools/call", "params": {"name": "preview_model", "arguments": {"glb_paths": ["a.glb", "b.glb"]}}}

preview_model_sequence Parameters

Render a GLB sequence with optional frame range filtering.

Parameter

Type

Required

Default

Description

input_path

string

yes

-

Sequence pattern or IFL file

frame_start

integer

no

-

Starting frame number

frame_end

integer

no

-

Ending frame number

max_size

integer

no

512

Max preview dimension

Example:

{"method": "tools/call", "params": {"name": "preview_model_sequence", "arguments": {"input_path": "output_####.glb", "frame_start": 1, "frame_end": 10}}}

Memory Management

If you encounter out of memory errors, try adjusting max_num_tokens:

Value

Quality

Memory Usage

1024

Minimal

Lowest

2048

Lower

Low

4096

Default

Medium

12288

Higher

High

Example with higher memory:

{"method": "tools/call", "params": {"name": "run_inference", "arguments": {"image": "photo.png", "max_num_tokens": 12288}}}

Sample Images

Sample images are included in the assets/images/ folder:

  • 0_img.png - Classic test image

  • Various other test images in .png, .webp, .jpg formats.

GitHub Repos:

Documentation:

Tools & Credits

ASCII Art Banner: The CLI banner in inference.py was generated using TAAG - Text to ASCII Art Generator by Patrick Gillespie.

License

  • Pixal3D (upstream): Non-commercial license (See TencentARC/Pixal3D repo for the EULA terms & conditions)

Available Tools

12 tools
cleanup_memoryA

Clean up GPU memory by running garbage collection and clearing CUDA cache.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses the mechanism (garbage collection and clearing CUDA cache), but does not state side effects, prerequisites, or whether cleanup is safe while models or inference jobs are active.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It efficiently states the action and the mechanism.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-parameter maintenance action, the description explains what it does and how. It lacks richer behavioral context about impact on loaded pipelines, but that gap is modest given the tool's low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The empty schema means there are no parameter semantics to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Clean up') and resource ('GPU memory'), plus the mechanism used. It is clear what the tool does, but it does not explicitly differentiate itself from sibling tools such as get_memory_status or unload_pipeline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool, when not to use it, or which alternatives to prefer. Usage is only implied by the action itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_conda_env_statusB

Get the current conda environment status and configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It implies a read via "Get" but never states that it is side-effect free, what happens if no environment is loaded, or what "status and configuration" actually contains. For a zero-annotation tool this is thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy; nothing needs trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No annotations and no output schema exist, so the description is the only source of information about behavior and returns, yet it says nothing about what fields are reported or how the active environment is determined. For a status tool this leaves real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate; the baseline for a zero-parameter tool applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb ("Get") with a specific resource ("current conda environment status and configuration"), so the agent knows this is a read of the active environment. It does not, however, distinguish itself from close siblings like list_conda_envs or load_conda_env, which also touch conda environments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus list_conda_envs, load_conda_env, or get_memory_status, and no mention of prerequisites (e.g. that an environment must already be loaded). The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_memory_statusB

Get current GPU memory usage and pipeline status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. The word 'Get' weakly implies a read-only, non-mutating operation, but nothing states whether the call blocks, what granularity of pipeline status is returned, or whether it has any side effects or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler, and the resource being queried is front-loaded. It is arguably too terse to be maximally useful, but it wastes nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status tool with no output schema, the description conveys enough to call it correctly: it reports GPU memory usage and pipeline status. Remaining gaps (return shape, refresh semantics) are minor given the tool's low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description appropriately adds nothing about arguments because there are none to describe.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Get') and two concrete resources ('GPU memory usage', 'pipeline status'), which clearly separates it from mutating siblings like cleanup_memory, load_pipeline, and unload_pipeline. It does not, however, explicitly contrast itself with the status-style siblings (get_conda_env_status), so differentiation is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool to call before or after pipeline operations to inspect state, but the description gives no explicit when-to-use, no prerequisites, and no routing against alternatives such as cleanup_memory or get_conda_env_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_conda_envsA

List all available conda environments. Use this to discover what conda environments you can load with load_conda_env.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. 'List all available' strongly implies a read-only enumeration, but it says nothing about the return format, whether it is safe/non-mutating, or whether conda must be installed. Adequate but thin for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the purpose first, then the workflow pointer. Every clause earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-param, no-output-schema listing tool the description covers purpose and usage adequately. The only real gap is not describing what the returned environment list looks like, which is minor given the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There are no parameter semantics to add or omit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (conda environments) with scope ('all available'), and links to the sibling load_conda_env. It does not differentiate from the similarly named get_conda_env_status, which an agent could confuse it with, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to use it: 'to discover what conda environments you can load with load_conda_env'. That names the downstream tool and the discovery intent. No explicit when-not guidance or exclusion of get_conda_env_status, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_conda_envA

Load environment variables from a conda environment. Use this when the MCP server is launched from a desktop app (like Zed) without the conda environment pre-activated.

ParametersJSON Schema
NameRequiredDescriptionDefault
env_nameNoName of the conda environment to load (default: Pixal3D)Pixal3D

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses the launch-context trigger but says nothing about side effects: whether existing environment variables are overwritten, whether the change persists for the session or affects other running tools, or whether it can fail when the env does not exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, with the action front-loaded and the usage condition immediately after. Nothing needs trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-param, no-output-schema tool the description is mostly adequate, but it omits whether the load is session-scoped or permanent and what happens on failure. Those gaps matter for a tool that mutates the server's process environment.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single env_name parameter is fully documented with its type and default, so the schema does the heavy lifting. The description adds no format or naming conventions beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: loading environment variables from a conda environment. The action is unambiguous and implicitly distinct from sibling read tools like get_conda_env_status and list_conda_envs, but it never names those siblings or explicitly contrasts itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear triggering condition: use when the MCP server is launched from a desktop app (like Zed) without the conda environment pre-activated. That implies the when-not case (conda already active), but no alternative tool or recovery path is named for those other scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_pipelineA

Load the Pixal3D pipeline and all required models into GPU memory. This must be called before running inference.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses a real side effect — models are copied into GPU memory — which is the key behavioral fact an agent needs. However, it omits load duration, idempotency (what happens if already loaded), GPU-memory failure modes, and whether loading evicts anything.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the action and its effect front-loaded before the ordering constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, no-output-schema setup tool, the description covers what happens and the required ordering. It omits return/status information and behavior when a pipeline is already loaded or GPU memory is insufficient, but nothing critical is missing for invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is empty, so there is nothing to document; baseline 4 applies. The description correctly implies no configuration is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ("Load") plus specific resource ("the Pixal3D pipeline and all required models into GPU memory"). It is immediately distinguishable from the inverse sibling unload_pipeline and from run_inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the prerequisite: "This must be called before running inference," which pins down ordering relative to run_inference. It does not state when not to call it (e.g., if the pipeline is already resident) or point at unload_pipeline, so it falls short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_imagesA

Generate thumbnail previews for images without running inference. Fast, non-blocking operation that returns instant visual feedback. Supports sequences, IFL files, and glob patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_sizeNoMaximum thumbnail dimension in pixels (default: 256)
input_pathNoSingle image, sequence pattern, or IFL file (alternative to image_paths)
image_pathsNoArray of image paths to preview (alternative to input_path)

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses genuinely useful traits — no inference cost, non-blocking, instant feedback — which tell the agent this is a cheap preview path. It does not describe the return format (thumbnail bytes vs. saved files) or any limits, so the disclosure is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core purpose and followed by behavioral and input-format details. 'Fast, non-blocking operation that returns instant visual feedback' is slightly redundant but earns its place by signaling cheapness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description covers purpose and input formats but leaves the return shape unresolved — an agent cannot tell whether thumbnails are returned as data, URLs, or written to disk. Adequate but with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, and the description adds value by enumerating supported input forms (sequences, IFL files, glob patterns) that map to input_path. It does not clarify the input_path/image_paths mutual exclusivity beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Generate thumbnail previews for images') and clarifies it happens 'without running inference,' which separates it from run_inference. It does not explicitly name the sibling it competes with (preview_model), but the resource itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'without running inference' phrasing implies when this tool is preferred over run_inference, and 'Supports sequences, IFL files, and glob patterns' hints at accepted input contexts. However, there is no explicit when-to-use/when-not guidance and no mention of the preview_model siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_modelB

Render GLB models to preview PNG images using 3d-to-image. Fast, non-blocking. Supports single files, sequences, and IFL files.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_sizeNoMaximum preview dimension in pixels (default: 512)
glb_pathsNoArray of GLB file paths to preview (alternative to input_path)
input_pathNoSingle GLB, sequence pattern, or IFL file (alternative to glb_paths)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It does add one genuine behavioral trait beyond the schema — 'Fast, non-blocking' — which tells the agent the call returns asynchronously rather than waiting on the render. It omits other important traits: where the PNG output is written, whether a pipeline/model must be loaded first, and how errors surface.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with the core action front-loaded and the behavioral note ('Fast, non-blocking') placed immediately after, so the most important information is read first. Nothing is padded, though the closing capabilities sentence is partly redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should explain the result of a render: where the PNGs land, what a sequence returns, and any prerequisite pipeline state. It covers the input side adequately (via the schema) but leaves the output and precondition side of a rendering tool under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (max_size, glb_paths, input_path) are already documented, including the 'alternative to' relationship. The description's mention of 'single files, sequences, and IFL files' restates the input_path schema description rather than adding new format or syntax detail, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Render GLB models to preview PNG images') plus the underlying engine ('3d-to-image'), so the agent knows exactly what it produces. It does not, however, differentiate itself from the sibling preview_model_sequence, and its claim to support 'sequences and IFL files' actively overlaps with that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus preview_model_sequence, preview_images, or any of the load/unload pipeline siblings. The sentence about supported input types is descriptive capability, not usage guidance, so the agent must infer selection from names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_model_sequenceC

Render a GLB model sequence to preview PNG images with optional frame range filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_sizeNoMaximum preview dimension in pixels (default: 512)
frame_endNoEnding frame number (optional)
input_pathNoSequence pattern or IFL file for GLB files
frame_startNoStarting frame number (optional)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it discloses very little. It does not say whether PNGs are written to disk or returned, where they are stored, whether the pipeline/model must be loaded first (a load_pipeline sibling exists), or whether the operation has side effects or costs. 'Render' implies output generation but the mechanics are unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that states the input format, the output format, and the key optional capability with zero filler. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a rendering tool with no annotations and no output schema, the description is too thin: it omits where previews are written, whether a pipeline must be loaded beforehand, and how the sequence pattern is resolved. The agent lacks enough context to invoke this correctly against its siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters including their optionality and defaults. The description adds only a restatement of 'optional frame range filtering', which maps to frame_start/frame_end but contributes no syntax or format detail beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Render), resource (GLB model sequence) and output (preview PNG images), which clearly distinguishes it from the single-model preview_model sibling. However, it does not explicitly reference the siblings it differs from, so the agent must infer the distinction from the word 'sequence' alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no prerequisites, and no naming of alternatives such as preview_model or preview_images. The phrase 'optional frame range filtering' hints at the frame parameters but does not tell the agent when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_inferenceC

Run Pixal3D image-to-3D inference. CLI-style args: --image --output --seed --max_num_tokens

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed (--seed, default: 42)
imageYesPath to input image (--image)
outputNoOutput GLB path (--output, default: ./output.glb)./output.glb
max_num_tokensNoMax tokens for memory management (--max_num_tokens, lower = less memory)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about whether the model/pipeline must already be loaded, expected runtime, GPU/memory implications, or whether it is a blocking long-running operation. Only 'max_num_tokens, lower = less memory' hints at behavior, and that is already in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action followed by the argument list; no wasted wording. It is terse to the point of omitting necessary context, but that is a completeness issue rather than verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a GPU inference tool with no annotations and no output schema, the description should explain the prerequisite pipeline state and what it returns (a GLB file at --output, presumably). Neither is stated, leaving critical invocation knowledge missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented with its CLI flag and default. The description merely restates the flag names, adding no semantics beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Run Pixal3D image-to-3D inference', which tells an agent exactly what the tool produces. However it never distinguishes itself from the sibling run_inference_sequence, so an agent must guess which entry point to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus run_inference_sequence, and no mention of prerequisites such as loading pipeline (load_pipeline) or a conda environment (load_conda_env) first, which the sibling set strongly implies are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_inference_sequenceB

Run Pixal3D inference on an image sequence. Supports Maya, After Effects, and Fusion filename conventions. Auto-detects frame padding, sequence pattern, and frame range.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoRandom seed (default: 42)
frame_endNoEnding frame number (auto-detected if not specified)
frame_stepNoProcess every N frames (default: 1)
input_pathYesPath to an image in the sequence or sequence pattern (e.g., 'frames/image_0001.png')
auto_detectNoAuto-detect sequence pattern from filename (default: true)
frame_startNoStarting frame number (auto-detected if not specified)
max_num_tokensNoMemory limit (default: 4096)
output_templateNoOutput mesh template (e.g., 'output_####.glb', 'mesh.%04d.glb')

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the naming conventions supported and that padding/pattern/range are auto-detected, but this overlaps with the auto_detect, frame_start, and frame_end schema descriptions and says nothing about runtime cost, blocking behavior, or output artifacts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action and followed by supporting capability details. Nothing is padded, though the third sentence largely restates schema-level auto-detection behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter inference tool with no annotations and no output schema, the description is adequate but thin. It never indicates that this is likely a heavy/long-running GPU operation, whether results are written to files (implied only by output_template), or how the returned data should be interpreted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every one of the 8 parameters is already documented in the schema with defaults and examples. The description adds only the generic claim of auto-detection and doesn't clarify interaction between auto_detect and explicit frame_start/frame_end, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run Pixal3D inference on an image sequence') and the supported host conventions (Maya, After Effects, Fusion), which clearly separates it from generic siblings like run_inference. It does not, however, explicitly name run_inference or say how the sequence variant differs from the single-image variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and description: use this when your input is a frame sequence rather than a single image. There is no explicit 'use this instead of run_inference when...' routing, no prerequisites, and no note on when auto-detection should be turned off.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unload_pipelineA

Unload the Pixal3D pipeline and free GPU memory.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It does state the meaningful side effect (GPU memory is freed), but omits whether the call is idempotent, what happens if no pipeline is loaded, or whether the pipeline can be reloaded afterward.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the action, the target, and the outcome with zero filler. Nothing to trim and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, no-output-schema lifecycle tool, the description covers the essential contract. The only gap is behavioral edge cases (no-op/idempotency, error when nothing is loaded) that no structured field supplies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. The baseline of 4 applies; the description correctly implies no arguments are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Unload') + resource ('the Pixal3D pipeline') + the effect ('free GPU memory'), which cleanly distinguishes it from the load_pipeline sibling. It stops short of naming cleanup_memory or get_memory_status, so differentiation is implicit rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: unload when you are done with the pipeline and want GPU memory back. But with siblings like cleanup_memory and get_memory_status present, the description never says when to prefer this over those alternatives, nor whether a pipeline must be loaded first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updatesv0.1.0
    • First observedcleanup_memory
    • First observedget_conda_env_status
    • First observedget_memory_status
    • First observedlist_conda_envs
    • First observedload_conda_env
    • First observedload_pipeline
    • First observedpreview_images
    • First observedpreview_model
    • First observedpreview_model_sequence
    • First observedrun_inference
    • First observedrun_inference_sequence
    • First observedunload_pipeline

TDQS

A3.6/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have clearly distinct purposes (pipeline load/unload, inference, memory status vs cleanup, conda env management). The main overlap risk is between run_inference/run_inference_sequence and preview_model/preview_model_sequence, where the singular vs sequence variants could be confused, though the descriptions distinguish them adequately.

Naming Consistency5/5

All 12 tools use a consistent snake_case verb_noun pattern (load_pipeline, run_inference, get_memory_status, preview_model_sequence). Verb prefixes (load/unload/run/get/cleanup/list/preview) are used predictably throughout.

Tool Count5/5

12 tools is well-scoped for a 3D inference server, with distinct functional clusters (pipeline lifecycle, inference, memory, conda env, previews). Each tool appears to earn its place without redundancy.

Completeness4/5

The surface covers pipeline lifecycle, inference, memory management, conda environment handling, and preview rendering for both images and models. Minor gaps exist (e.g., no explicit batch/config inspection or pipeline config tools), but core workflows are well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers