AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
MCP unreviewed MIT Self-run

Daz Mcp Server

mcp-bluemoonfoundry-daz-mcp-server · by bluemoonfoundry

MCP server wrapping the DazScriptServer HTTP plugin for DAZ Studio

No reviews yet
0 installs
39 views
0.0% view→install

Install

$ agentstack add mcp-bluemoonfoundry-daz-mcp-server

Open-source listing, not yet scanned by AgentStack. Follow the source repository for install instructions.

Security review

⚠ Flagged

1 finding(s); flagged for manual review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures
  • high Pipes remote content directly into a shell (remote code execution).

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Reliability & compatibility

Not yet reviewed
0 installs to date
no reviews yet
2mo ago

Declared compatibility

Claude CodeClaude DesktopCursorWindsurf

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Daz Mcp Server? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

vangard-daz-mcp

Version 0.4.0 | MCP Server for DAZ Studio

A Model Context Protocol (MCP) server that exposes DAZ Studio operations to Claude and other MCP clients. Built on FastMCP and wraps the DazScriptServer HTTP plugin.


What Is This?

This MCP server allows Claude (via Claude Desktop or other MCP clients) to control DAZ Studio directly:

  • Query scene information (figures, cameras, lights, spatial positions)
  • Read and modify node properties (transforms, morphs)
  • Discover and apply morphs, including searching by name pattern
  • Traverse and manipulate scene hierarchies (parent/child, skeleton)
  • Apply emotional expressions to characters
  • Coordinate multi-character interactions (look-at, reach-toward, hug, handshake)
  • Execute batch operations (set multiple properties in one call, 5-10x faster)
  • Control cameras and viewport (orbit, frame, presets)
  • Create keyframe animations and export as image sequences
  • Trigger synchronous or asynchronous renders with cancellation support
  • Apply professional lighting presets and cinematography composition rules
  • Browse and query the DAZ content library
  • Save and restore named scene checkpoints
  • Generate complete scenes from natural language descriptions
  • Create multi-camera shot sequences (orbit, push-in, shot-reverse-shot)
  • Choreograph animated conversations with dialogue beats
  • Record and replay operation macros for workflow automation
  • Execute arbitrary DazScript code
  • Access comprehensive DazScript documentation and examples

The server acts as a bridge: MCP Clientvangard-daz-mcpDazScriptServer pluginDAZ Studio 4.5+ or 6.25+


Prerequisites

Before using this server, you need:

  1. DAZ Studio installed and running — compatible with:
  • DAZ Studio 4.5+ (legacy/classic versions)
  • DAZ Studio 6.25+ (current versions)
  1. DazScriptServer plugin — must match your DAZ Studio version:
  • Download from: https://github.com/bluemoonfoundry/daz-script-server
  • Install the DS4 build for DAZ Studio 4.x, or the DS6 build for DAZ Studio 6.x
  • Plugin must be running on port 18811 (default)
  • Authentication must be configured (API token auto-generated on first run)
  1. Python 3.11+ for running the MCP server
  2. uv package manager (recommended) or pip

Installation

1. Install uv (if you don't have it)

macOS / Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Windows (PowerShell):

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

See uv installation docs for other options.

2. Clone and install

# Clone the repository
git clone https://github.com/bluemoonfoundry/daz-mcp-server.git
cd daz-mcp-server

# Install dependencies (creates .venv automatically)
uv sync

# Verify it works
uv run vangard-daz-mcp --help

Using pip (alternative)

git clone https://github.com/bluemoonfoundry/daz-mcp-server.git
cd daz-mcp-server

pip install .

# Run the server
vangard-daz-mcp

Configuration

Environment Variables

Configure the server via environment variables:

| Variable | Default | Description | |----------|---------|-------------| | DAZ_HOST | localhost | DazScriptServer hostname | | DAZ_PORT | 18811 | DazScriptServer port | | DAZ_TIMEOUT | 30.0 | Request timeout in seconds (increase for long renders) | | DAZ_API_TOKEN | (from file) | API token for authentication | | DAZ_CONTENT_BROWSER_URL | http://localhost:8080 | Content browser API URL (if using a separate content service) |

Authentication

The server automatically reads the API token from ~/.daz3d/dazscriptserver_token.txt (the file created by DazScriptServer).

Override with environment variable:

export DAZ_API_TOKEN="your-token-here"

Important: DazScriptServer must have authentication enabled (default). The MCP server cannot connect without a valid token.


MCP Client Configuration

Claude Desktop

Config file location:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

macOS / Linux:

{
  "mcpServers": {
    "vangard-daz-mcp": {
      "command": "uv",
      "args": [
        "run",
        "--project",
        "/absolute/path/to/daz-mcp-server",
        "vangard-daz-mcp"
      ],
      "env": {
        "DAZ_HOST": "localhost",
        "DAZ_PORT": "18811"
      }
    }
  }
}

Windows:

{
  "mcpServers": {
    "vangard-daz-mcp": {
      "command": "uv",
      "args": [
        "run",
        "--project",
        "C:\\Users\\YourName\\daz-mcp-server",
        "vangard-daz-mcp"
      ],
      "env": {
        "DAZ_HOST": "localhost",
        "DAZ_PORT": "18811"
      }
    }
  }
}

Replace the path with the actual location where you cloned the repo. Use --project (not --directory) so uv run picks up the project's .venv.

After saving the config, restart Claude Desktop. The DAZ Studio tools will appear in Claude's tool palette.


Cursor

Add to .cursor/mcp.json in your project, or ~/.cursor/mcp.json for global access:

{
  "mcpServers": {
    "vangard-daz-mcp": {
      "command": "uv",
      "args": [
        "run",
        "--project",
        "/absolute/path/to/daz-mcp-server",
        "vangard-daz-mcp"
      ],
      "env": {
        "DAZ_HOST": "localhost",
        "DAZ_PORT": "18811"
      }
    }
  }
}

VS Code (GitHub Copilot / MCP extension)

Add to .vscode/mcp.json in your workspace:

{
  "servers": {
    "vangard-daz-mcp": {
      "type": "stdio",
      "command": "uv",
      "args": [
        "run",
        "--project",
        "/absolute/path/to/daz-mcp-server",
        "vangard-daz-mcp"
      ],
      "env": {
        "DAZ_HOST": "localhost",
        "DAZ_PORT": "18811"
      }
    }
  }
}

Verifying the connection

After configuration, ask your MCP client:

Check if DAZ Studio is running

Claude will call daz_status. A successful response looks like:

{ "running": true, "version": "1.3.0" }

If it fails, see the [Troubleshooting](#troubleshooting) section below.


Domain Reference Files (SKILL files)

The repository ships six SKILL files — curated knowledge documents that you can ask Claude (or any MCP client) to read before working in a particular area of DAZ Studio. They exist because LLMs have reasonable general knowledge about 3D software but will make confident, wrong assumptions about DAZ Studio specifics — inverted rotation signs, broken API methods, generation-specific bone names, and so on. Loading the right SKILL file before a task corrects those assumptions and produces dramatically better results.

How to use them

Ask Claude to read the relevant file at the start of a session or task:

Read the file SKILL_DAZ_STUDIO.md before we begin.
Before writing any DazScript code, read SKILL_DAZSCRIPT.md.

You can load more than one if your task spans domains:

Read SKILL_DAZ_STUDIO.md and SKILL_CINEMA.md — we're going to set up a portrait shot.

SKILL file reference

| File | Domain | Load when… | |------|--------|------------| | [SKILL_DAZ_STUDIO.md](SKILLDAZSTUDIO.md) | DAZ Studio conventions | Starting any session — covers coordinate system inversions, camera Y-rotation being backwards, bone rotation limits, and known tool limitations | | [SKILL_DAZSCRIPT.md](SKILLDAZSCRIPT.md) | DazScript API | Writing or debugging custom scripts via daz_execute — documents verified-working API patterns and a list of broken/wrong methods to avoid | | [SKILL_SCENE.md](SKILLSCENE.md) | Scene management | Working with scene hierarchy, content library, spatial layout, materials, or batch operations | | [SKILL_ACTORS.md](SKILLACTORS.md) | Characters & posing | Working with morphs, emotions, body language, gaze direction, wardrobe, or multi-character interactions | | [SKILL_CINEMA.md](SKILLCINEMA.md) | Cameras, lighting & rendering | Composing shots, setting up lighting rigs, animating cameras, or running renders | | [SKILL_DEVELOPMENT.md](SKILL_DEVELOPMENT.md) | MCP server internals | Modifying or extending the MCP server itself — module layout, how to add tools, the script registry |


When to load SKILL_DAZ_STUDIO.md

This is the most important file and the one most likely to save you from a frustrating session. Key things it corrects:

  • Camera Y rotation is inverted — positive values turn the camera left, not right. Every other 3D application does this the other way.
  • daz_look_at_point applies rotations in the wrong direction — always verify in the viewport and correct manually.
  • daz_orbit_camera_around aims at the figure's root (feet), not the face — use explicit world-space coordinates for portrait work instead.
  • Genesis 9 faces +Z by default — "in front of" a character is at a positive Z coordinate.
  • Focal distance requires true 3D distance — using Z distance alone throws portrait shots out of focus.

Available Tools

📚 Documentation Tools

daz_script_help

Get DazScript documentation, examples, and best practices.

Arguments:

  • topic (string, default "overview"): Documentation topic to retrieve

Available Topics:

  • overview - DazScript environment basics
  • gotchas - Critical mistakes that cause timeouts or errors
  • camera - Camera creation, positioning, and aiming
  • light - Light creation, types, and three-point lighting
  • environment - Iray environment settings and lighting modes
  • scene - Scene management (new, save, load, selection)
  • properties - Node properties, transforms, and morphs
  • content - Browsing and loading content from library
  • coordinates - Coordinate system and positioning reference
  • posing - Figure posing, bone hierarchy, morphs vs poses, rotation gotchas
  • morphs - Morph discovery, searching, value ranges, and management
  • hierarchy - Scene hierarchy, parent-child relationships, parenting operations
  • interaction - Multi-character interaction, look-at mechanics, world-space posing
  • batch - Batch operations patterns and performance optimization
  • viewport - Viewport and camera control, spherical positioning, presets
  • animation - Keyframe animation, timeline control, image sequence export
  • rendering - Rendering workflows, multi-camera, batch render, animation export

Returns: Formatted documentation with examples

Use when: Before writing custom DazScript code to learn correct patterns and avoid common mistakes.

Example:

daz_script_help("camera")  # Get camera documentation
daz_script_help("gotchas") # Learn critical gotchas

🔍 Inspection Tools

daz_status

Check DAZ Studio connectivity and version.

Returns:

{
  "running": true,
  "version": "1.3.0"
}

Use when: Verifying DAZ Studio is running and the connection works.


daz_scene_info

Get a snapshot of the current scene.

Returns:

{
  "sceneFile": "/path/to/scene.duf",
  "selectedNode": "Genesis 9",
  "figures": [
    {"name": "Genesis9", "label": "Genesis 9", "type": "DzFigure"}
  ],
  "cameras": [
    {"name": "Camera", "label": "Camera 1"}
  ],
  "lights": [
    {"name": "DistantLight", "label": "Distant Light", "type": "DzDistantLight"}
  ],
  "totalNodes": 3247
}

Use when: You need an overview of what's in the scene (characters, cameras, lights).

Note: Does not enumerate all nodes (scenes can have 1000+ nodes). Use daz_execute for fine-grained queries.


daz_get_node

Read all numeric properties of a node by its label or internal name.

Arguments:

  • node_label (string): Display label or internal name (e.g., "Genesis 9")

Returns:

{
  "name": "Genesis9",
  "label": "Genesis 9",
  "type": "DzFigure",
  "properties": {
    "X Translate": 0.0,
    "Y Translate": 0.0,
    "Z Translate": 0.0,
    "X Rotate": 0.0,
    "Y Rotate": 0.0,
    "Z Rotate": 0.0,
    "Scale": 100.0,
    "Head Size": 0.5
  }
}

Use when: You need to read transforms, morphs, or other numeric properties on a node.


daz_get_selected_nodes

Return the nodes currently selected in the DAZ Studio viewport.

Returns:

{
  "count": 2,
  "nodes": [
    {"label": "Genesis 9", "name": "Genesis9"},
    {"label": "Camera 1", "name": "Camera"}
  ]
}

Use when: The user has manually selected items in DAZ Studio and wants the AI to act on that selection.


🔬 Morph Discovery Tools

daz_list_morphs

List all morphs (numeric properties) on a node with their current values.

Arguments:

  • node_label (string): Node display label or internal name
  • include_zero (bool, default False): Include morphs with zero values

Returns:

{
  "morphs": [
    {"label": "Height", "name": "Height", "value": 1.05, "path": "Morphs/Body"},
    {"label": "Head Size", "name": "HeadSize", "value": 0.9, "path": "Morphs/Head"}
  ],
  "count": 2,
  "nodeLabel": "Genesis 9"
}

Use when:

  • Discovering what morphs are available on a figure
  • Checking which morphs are currently active
  • Building morph selection UIs
  • Exploring character customization options

Example:

# List only active morphs (non-zero values)
daz_list_morphs("Genesis 9", include_zero=False)

# List ALL available morphs (warning: may return 500-1000+ morphs)
daz_list_morphs("Genesis 9", include_zero=True)

Note: Genesis figures can have 1000+ morphs. Use include_zero=False to see only active morphs, or use daz_search_morphs to filter by pattern.


daz_search_morphs

Search for morphs matching a name pattern.

Arguments:

  • node_label (string): Node display label or internal name
  • pattern (string): Substring to search for (case-insensitive)
  • include_zero (bool, default False): Include morphs with zero values

Returns:

{
  "morphs": [
    {"label": "Smile", "name": "Smile", "value": 0.0, "path": "Morphs/Expressions"},
    {"label": "Smile Open", "name": "SmileOpen", "value": 0.0, "path": "Morphs/Expressions"}
  ],
  "count": 2,
  "pattern": "smile",
  "nodeLabel": "Genesis 9"
}

Use when:

  • Finding specific morphs (e.g., all smile morphs, head morphs)
  • Discovering morphs by category or body part
  • Building filtered morph lists

Example:

# Find all smile-related morphs
daz_search_morphs("Genesis 9", "smile", include_zero=True)

# Find active head morphs only
daz_search_morphs("Genesis 9", "head", include_zero=False)

# Find all facial expression morphs
daz_search_morphs("Genesis 9", "express", include_zero=True)

Common search patterns:

  • "smile", "frown", "express" - Facial expressions
  • "head", "face", "nose" - Facial features
  • "arm", "leg", "body" - Body parts
  • "muscle", "tone", "fit" - Body definition
  • "height", "scale" - Size adjustments

🌳 Scene Hierarchy Tools

daz_get_node_hierarchy

Get complete hierarchy tree for a node with all descendants.

Arguments:

  • node_label (string): Root node display label or internal name
  • max_depth (int, default 10): Maximum recursion depth (0 = unlimited)

Returns:

{
  "node": "Genesis 9",
  "hierarchy": {
    "label": "Genesis 9",
    "name": "Genesis9",
    "type": "DzFigure",
    "children": [
      {
        "label": "hip",
        "name": "hip",
        "type": "DzBone",
        "children": [...]
      }
    ]
  },
  "totalDescendants": 127
}

Use when:

  • Understanding skeleton structure
  • Exploring bone relationships
  • Mapping complex scene hierarchies
  • Finding all descendants of a no

Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.