Pixal3D-MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Pixal3D-MCPgenerate a 3D model from this image"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 filesSoftware 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.whlBuild 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.txt3. 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:
Go to Settings → Access Tokens page to Generate a token
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.
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.
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 loginThe 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 $HOMEDirect 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 12288The 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.glbOn 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 all available conda environments |
| Load env vars from a conda environment |
| Get current conda environment status |
Pixal3D Inference Tools
Tool | Description |
| Load Pixal3D models into GPU memory |
| Free GPU memory |
| Convert single image to 3D GLB |
| Convert image sequence to 3D meshes |
| Generate image thumbnail previews (fast) |
| Render GLB models to preview PNGs |
| Render GLB sequence to preview PNGs |
| Check GPU memory usage |
| 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 |
| string | yes | - | Path to input image |
| string | no |
| Output GLB path |
| integer | no |
| Random seed |
| integer | no |
| Memory limit |
run_inference_sequence Parameters
Parameter | Type | Required | Default | Description |
| string | yes | - | Path to an image in the sequence |
| string | no | auto | Output mesh template (e.g., |
| integer | no | auto | Starting frame number |
| integer | no | auto | Ending frame number |
| integer | no |
| Process every N frames |
| integer | no |
| Random seed |
| integer | no |
| Memory limit |
| boolean | no |
| Auto-detect sequence pattern |
Supported Sequence Patterns:
Style | Example | Padding |
Local files |
| 4 digits |
Maya |
| 4 digits |
Maya hash |
| variable |
After Effects |
| 4 digits |
Fusion dot |
| variable |
printf |
| 4 digits |
Nuke/Foundry |
| 4 digits |
Houdini/SideFX |
| 1-9 digits |
IFL (Image File List) |
| per-line filenames |
Network/Archive Paths:
Style | Example |
HTTP/HTTPS |
|
FTP |
|
ZIP Archive |
|
TAR Archive |
|
preview_images Parameters
Parameter | Type | Required | Default | Description |
| array | no | - | Array of image paths to preview |
| string | no | - | Single image, URL, archive member, or pattern |
| integer | no |
| Max thumbnail dimension in pixels |
Supported Input Types:
Local files:
image.png,frames_####.pngURLs:
https://example.com/image.pngArchives:
/path/archive.zip/member.pngIFL 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 |
| array | no | - | Array of GLB file paths (supports URLs, archives) |
| string | no | - | Single GLB, URL, archive member, or pattern |
| integer | no |
| Max preview dimension in pixels |
Supported Input Types:
Local files:
model.glb,meshes_####.glbURLs:
https://example.com/model.glbArchives:
/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 |
| string | yes | - | Sequence pattern or IFL file |
| integer | no | - | Starting frame number |
| integer | no | - | Ending frame number |
| integer | no |
| 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 imageVarious other test images in
.png,.webp,.jpgformats.
Web Links
GitHub Repos:
https://github.com/TencentARC/Pixal3D (Original)
https://github.com/Lightfielder/Pixal3D-MCP (This Repo)
Documentation:
Tools & Credits
ASCII Art Banner: The CLI banner in inference.py was generated using TAAG - Text to ASCII Art Generator by Patrick Gillespie.
Font: Modular
Settings: Width=80, Spacing=4
License
Pixal3D (upstream): Non-commercial license (See TencentARC/Pixal3D repo for the EULA terms & conditions)
Available Tools
12 toolscleanup_memoryA
Clean up GPU memory by running garbage collection and clearing CUDA cache.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| env_name | No | Name of the conda environment to load (default: Pixal3D) | Pixal3D |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| max_size | No | Maximum thumbnail dimension in pixels (default: 256) | |
| input_path | No | Single image, sequence pattern, or IFL file (alternative to image_paths) | |
| image_paths | No | Array of image paths to preview (alternative to input_path) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| max_size | No | Maximum preview dimension in pixels (default: 512) | |
| glb_paths | No | Array of GLB file paths to preview (alternative to input_path) | |
| input_path | No | Single GLB, sequence pattern, or IFL file (alternative to glb_paths) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| max_size | No | Maximum preview dimension in pixels (default: 512) | |
| frame_end | No | Ending frame number (optional) | |
| input_path | No | Sequence pattern or IFL file for GLB files | |
| frame_start | No | Starting frame number (optional) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Random seed (--seed, default: 42) | |
| image | Yes | Path to input image (--image) | |
| output | No | Output GLB path (--output, default: ./output.glb) | ./output.glb |
| max_num_tokens | No | Max tokens for memory management (--max_num_tokens, lower = less memory) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Random seed (default: 42) | |
| frame_end | No | Ending frame number (auto-detected if not specified) | |
| frame_step | No | Process every N frames (default: 1) | |
| input_path | Yes | Path to an image in the sequence or sequence pattern (e.g., 'frames/image_0001.png') | |
| auto_detect | No | Auto-detect sequence pattern from filename (default: true) | |
| frame_start | No | Starting frame number (auto-detected if not specified) | |
| max_num_tokens | No | Memory limit (default: 4096) | |
| output_template | No | Output mesh template (e.g., 'output_####.glb', 'mesh.%04d.glb') |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
12 tool updates
v0.1.0- First observed
cleanup_memory - First observed
get_conda_env_status - First observed
get_memory_status - First observed
list_conda_envs - First observed
load_conda_env - First observed
load_pipeline - First observed
preview_images - First observed
preview_model - First observed
preview_model_sequence - First observed
run_inference - First observed
run_inference_sequence - First observed
unload_pipeline
TDQS
Scored across 12 tools
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.
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.
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.
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
Related MCP Connectors
MCP server for Qwen Image 3 AI image generation
MCP server for Hailuo (MiniMax) AI video generation
MCP server for OpenAI API (chat completions, image generation, embeddings) via AceDataCloud
MCP server for Wan AI video generation
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for integrating with Rodin Gen-2 API to generate 3D models from text descriptions or images.6MIT
- AlicenseNot gradedqualityDmaintenanceA simple MCP server for generating images using Flux models via the Replicate API.280 npmMIT
- AlicenseAqualityBmaintenanceMCP server for Pixmax API enabling generation of images, video, text, audio, and 3D across dozens of models like Midjourney, Kling, and ElevenLabs.10MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for generating 3D assets from images or text using Hunyuan3D on Apple Silicon Mac, with web UI and Codex Image Gen integration.-