# KeyShot MCP

Control saved KeyShot scenes from an MCP client, adjust materials, cameras, and environments, then inspect a preview before rendering.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 25
- Author: truman-t3
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/truman-t3/keyshot-mcp
- Updated: 2026-10-21
- HTML: https://affpapa.org/en/nevibecode/mcp/keyshot-mcp

## What it does

KeyShot MCP lets an agent work with a local KeyShot installation through headless scripting. It can inspect a saved scene, find available cameras, change selected materials or environments, and return a preview for review. The final render follows that review step.

Work is performed on a scene copy, so the original file is kept out of the write path. The server can use saved cameras and export a PNG together with a scene copy. Scene details and previews go back to the MCP client, whose settings may send them to its configured model provider.

Without a locally installed, licensed KeyShot edition with headless scripting, the server cannot run. The documented test setup is Windows 11 with KeyShot Studio 2025 / KeyShot 14.1, plus Node.js 20+.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `KEYSHOT_HEADLESS_EXE`, `KEYSHOT_OUTPUT_DIR`, `KEYSHOT_ALLOW_EXTERNAL_OUTPUTS`, `KEYSHOT_TIMEOUT_MS`, `KEYSHOT_LICENSE_ARGS`, `KEYSHOT_MATERIAL_PRESETS`, `KEYSHOT_CAMERA_PRESETS` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env KEYSHOT_HEADLESS_EXE=<KEYSHOT_HEADLESS_EXE> --env KEYSHOT_OUTPUT_DIR=<KEYSHOT_OUTPUT_DIR> --env KEYSHOT_ALLOW_EXTERNAL_OUTPUTS=<KEYSHOT_ALLOW_EXTERNAL_OUTPUTS> --env KEYSHOT_TIMEOUT_MS=<KEYSHOT_TIMEOUT_MS> --env KEYSHOT_LICENSE_ARGS=<KEYSHOT_LICENSE_ARGS> --transport stdio keyshot-mcp -- npx -y keyshot-mcp
```
Replace <…> with your own values. 2 more environment variables are in the server README

### Codex

**Platform CLI**
```bash
codex mcp add keyshot-mcp --env KEYSHOT_HEADLESS_EXE=<KEYSHOT_HEADLESS_EXE> --env KEYSHOT_OUTPUT_DIR=<KEYSHOT_OUTPUT_DIR> --env KEYSHOT_ALLOW_EXTERNAL_OUTPUTS=<KEYSHOT_ALLOW_EXTERNAL_OUTPUTS> --env KEYSHOT_TIMEOUT_MS=<KEYSHOT_TIMEOUT_MS> --env KEYSHOT_LICENSE_ARGS=<KEYSHOT_LICENSE_ARGS> -- npx -y keyshot-mcp
```
Replace <…> with your own values. 2 more environment variables are in the server README

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "keyshot-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "keyshot-mcp"
            ],
            "env": {
                "KEYSHOT_HEADLESS_EXE": "<KEYSHOT_HEADLESS_EXE>",
                "KEYSHOT_OUTPUT_DIR": "<KEYSHOT_OUTPUT_DIR>",
                "KEYSHOT_ALLOW_EXTERNAL_OUTPUTS": "<KEYSHOT_ALLOW_EXTERNAL_OUTPUTS>",
                "KEYSHOT_TIMEOUT_MS": "<KEYSHOT_TIMEOUT_MS>",
                "KEYSHOT_LICENSE_ARGS": "<KEYSHOT_LICENSE_ARGS>"
            }
        }
    }
}
```
Replace <…> with your own values. 2 more environment variables are in the server README

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "keyshot-mcp": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "keyshot-mcp"
            ],
            "env": {
                "KEYSHOT_HEADLESS_EXE": "<KEYSHOT_HEADLESS_EXE>",
                "KEYSHOT_OUTPUT_DIR": "<KEYSHOT_OUTPUT_DIR>",
                "KEYSHOT_ALLOW_EXTERNAL_OUTPUTS": "<KEYSHOT_ALLOW_EXTERNAL_OUTPUTS>",
                "KEYSHOT_TIMEOUT_MS": "<KEYSHOT_TIMEOUT_MS>",
                "KEYSHOT_LICENSE_ARGS": "<KEYSHOT_LICENSE_ARGS>"
            }
        }
    }
}
```
Replace <…> with your own values. 2 more environment variables are in the server README

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e KEYSHOT_HEADLESS_EXE=<KEYSHOT_HEADLESS_EXE> -e KEYSHOT_OUTPUT_DIR=<KEYSHOT_OUTPUT_DIR> -e KEYSHOT_ALLOW_EXTERNAL_OUTPUTS=<KEYSHOT_ALLOW_EXTERNAL_OUTPUTS> -e KEYSHOT_TIMEOUT_MS=<KEYSHOT_TIMEOUT_MS> -e KEYSHOT_LICENSE_ARGS=<KEYSHOT_LICENSE_ARGS> keyshot-mcp npx -y keyshot-mcp
```
Replace <…> with your own values. 2 more environment variables are in the server README

## When to use it
- inspect a saved KeyShot scene
- replace a selected object’s material
- adjust a camera and environment
- review a preview before export
- render a scene copy as PNG

## Example prompts
- Inspect the saved KeyShot scene and list the cameras available to use.
- Change the metal object in a scene copy to brushed steel, then return a preview.
- After I approve the preview, render a PNG and save a copy of the scene.

## Similar
- [REA](https://affpapa.org/en/nevibecode/mcp/rea.md) — MCP server · ★ 386989
- [GitHub](https://affpapa.org/en/nevibecode/mcp/github.md) — MCP server · ★ 33918
- [Netdata](https://affpapa.org/en/nevibecode/mcp/netdata.md) — MCP server · ★ 81115
- [browser-use](https://affpapa.org/en/nevibecode/mcp/browser-use.md) — MCP server · ★ 119160
- [Codebase Memory](https://affpapa.org/en/nevibecode/mcp/codebase-memory.md) — MCP server · ★ 47392
- [mcp-server](https://affpapa.org/en/nevibecode/mcp/mcp-server.md) — MCP server · ★ 43872

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
