npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@iflow-mcp/touchdesigner-mcp-server

v1.2.1

Published

MCP server for TouchDesigner

Readme

TouchDesigner MCP

This is an implementation of an MCP (Model Context Protocol) server for TouchDesigner. Its goal is to enable AI agents to control and operate TouchDesigner projects.

English / 日本語

Overview

demo clip

TouchDesigner MCP acts as a bridge between AI models and the TouchDesigner WebServer DAT, enabling AI agents to:

  • Create, modify, and delete nodes
  • Query node properties and project structure
  • Programmatically control TouchDesigner via Python scripts

Architecture

flowchart LR
    A["🤖<br/>MCP client<br/>(Claude / Codex / ...)"]

    subgraph S [Node.js MCP server]
      B1["🧰<br/>Tools & prompts<br/>(src/features/tools)"]
      B2["🖌️<br/>Presenters & formatters<br/>(markdown output)"]
      B3["🌐<br/>OpenAPI HTTP client<br/>(src/tdClient)"]
    end

    subgraph T [TouchDesigner project]
      C1["🧩<br/>WebServer DAT<br/>(mcp_webserver_base.tox)"]
      C2["🐍<br/>Python controllers / services<br/>(td/modules/mcp)"]
      C3["🎛️<br/>Project nodes & parameters<br/>(/project1/...)"]
    end

    A --> B1
    B1 --> B2
    B1 --> B3
    B2 --> A
    B3 <--> C1
    C1 <--> C2
    C2 <--> C3

    %% Higher-contrast colors for readability
    classDef client fill:#d8e8ff,stroke:#1f6feb,stroke-width:2px,color:#111,font-weight:bold
    classDef server fill:#efe1ff,stroke:#8250df,stroke-width:2px,color:#111,font-weight:bold
    classDef td fill:#d7f5e3,stroke:#2f9e44,stroke-width:2px,color:#111,font-weight:bold
    class A client;
    class B1,B2,B3 server;
    class C1,C2,C3 td;

Usage

1. Download Files

Download the following from the releases page:

  • TouchDesigner Components: touchdesigner-mcp-td.zip
  • MCP Bundle (.mcpb): touchdesigner-mcp.mcpb

2. Set up TouchDesigner Components

  1. Extract the TouchDesigner components from touchdesigner-mcp-td.zip.
  2. Import mcp_webserver_base.tox into your TouchDesigner project.
  3. Place it at /project1/mcp_webserver_base.

https://github.com/user-attachments/assets/215fb343-6ed8-421c-b948-2f45fb819ff4

You can check the startup logs by opening the Textport from the TouchDesigner menu.

import

3. Install the MCP Bundle

Double-click the touchdesigner-mcp.mcpb file to install the bundle in Claude Desktop.

https://github.com/user-attachments/assets/0786d244-8b82-4387-bbe4-9da048212854

4. Connect to the Server

The MCP bundle will automatically handle the connection to the TouchDesigner server.

⚠️ Important: The directory structure must be preserved exactly as extracted. The mcp_webserver_base.tox component references relative paths to the modules/ directory and other files.

Requires Node.js to be installed.

1. Set up TouchDesigner Components

  1. Download and extract the TouchDesigner components from touchdesigner-mcp-td.zip (releases page).
  2. Import mcp_webserver_base.tox into your TouchDesigner project.
  3. Place it at /project1/mcp_webserver_base.

https://github.com/user-attachments/assets/215fb343-6ed8-421c-b948-2f45fb819ff4

You can check the startup logs by opening the Textport from the TouchDesigner menu.

import

2. Set up the MCP Server Configuration

Example for Claude Desktop:

{
  "mcpServers": {
    "touchdesigner": {
      "command": "npx",
      "args": ["-y", "touchdesigner-mcp-server@latest", "--stdio"]
    }
  }
}

Customization: You can customize the TouchDesigner server connection by adding --host and --port arguments:

"args": [
  "-y",
  "touchdesigner-mcp-server@latest",
  "--stdio",
  "--host=http://custom_host",
  "--port=9982"
]

tutorial

1. Clone the repository

git clone https://github.com/8beeeaaat/touchdesigner-mcp.git
cd touchdesigner-mcp

2. Build the Docker image

make build

3. Install the API Server in Your TouchDesigner Project

Start TouchDesigner and import the td/mcp_webserver_base.tox component into the project you want to control. Example: Place it at /project1/mcp_webserver_base.

Importing the .tox file will trigger the td/import_modules.py script, which loads the necessary modules for the API server.

https://github.com/user-attachments/assets/215fb343-6ed8-421c-b948-2f45fb819ff4

You can check the startup logs by opening the Textport from the TouchDesigner menu.

import

4. Start the MCP server container

docker-compose up -d

5. Configure your AI agent to use the Docker container

Example for Claude Desktop:

{
  "mcpServers": {
    "touchdesigner": {
      "command": "docker",
      "args": [
        "compose",
        "-f",
        "/path/to/your/touchdesigner-mcp/docker-compose.yml",
        "exec",
        "-i",
        "touchdesigner-mcp-server",
        "node",
        "dist/cli.js",
        "--stdio",
        "--host=http://host.docker.internal"
      ]
    }
  }
}

On Windows systems, include the drive letter, e.g., C:\path\to\your\touchdesigner-mcp\docker-compose.yml.

Note: You can customize the TouchDesigner server connection by adding --host and --port arguments:

"args": [
...,
"--stdio",
"--host=http://host.docker.internal",
"--port=9982"
]

Verify Connection

If the MCP server is recognized, the setup is complete. If it's not recognized, try restarting your AI agent. If you see an error at startup, try launching the agent again after starting TouchDesigner. When the API server is running properly in TouchDesigner, the agent can use the provided tools to operate it.

Directory Structure Requirements

Critical: When using any method, you must maintain the original directory structure:

td/
├── import_modules.py          # Module loader script
├── mcp_webserver_base.tox     # Main TouchDesigner component
└── modules/                   # Python modules directory
    ├── mcp/                   # MCP core logic
    ├── utils/                 # Shared utilities
    └── td_server/             # Generated API server code

The mcp_webserver_base.tox component uses relative paths to locate Python modules. Moving or reorganizing these files will cause import errors in TouchDesigner.

demo

MCP Server Features

This server enables AI agents to perform operations in TouchDesigner using the Model Context Protocol (MCP).

Tools

Tools allow AI agents to perform actions in TouchDesigner.

| Tool Name | Description | | :---------------------- | :----------------------------------------------------------------- | | create_td_node | Creates a new node. | | delete_td_node | Deletes an existing node. | | exec_node_method | Calls a Python method on a node. | | execute_python_script | Executes an arbitrary Python script in TouchDesigner. | | get_td_class_details | Gets details of a TouchDesigner Python class or module. | | get_td_classes | Gets a list of TouchDesigner Python classes. | | get_td_info | Gets information about the TouchDesigner server environment. | | get_td_node_parameters| Gets the parameters of a specific node. | | get_td_nodes | Gets nodes under a parent path, with optional filtering. | | update_td_node_parameters | Updates the parameters of a specific node. |

Prompts

Prompts provide instructions for AI agents to perform specific actions in TouchDesigner.

| Prompt Name | Description | | :------------------| :-------------------------------------------------------------------------- | | Search node | Fuzzy searches for nodes and retrieves information based on name, family, or type. | | Node connection | Provides instructions to connect nodes within TouchDesigner. | | Check node errors| Checks for errors on a specified node, and recursively for its children. |

Resources

Not implemented.

For Developers

Quick Start for Development

  1. Set up your environment:

    # Clone and install dependencies
    git clone https://github.com/8beeeaaat/touchdesigner-mcp.git
    cd touchdesigner-mcp
    npm install
  2. Build the project:

    make build        # Docker-based build (recommended)
    # OR
    npm run build     # Node.js-based build
  3. Available commands:

    npm run test      # Run unit and integration tests
    npm run dev       # Launch the MCP inspector for debugging

Note: When you update the code, you must restart both the MCP server and TouchDesigner to apply the changes.

Project Structure Overview

├── src/                       # MCP server source code
│   ├── api/                  # OpenAPI spec for the TouchDesigner WebServer
│   ├── core/                 # Core utilities (logger, error handling)
│   ├── features/             # MCP feature implementations
│   │   ├── prompts/         # Prompt handlers
│   │   ├── resources/       # Resource handlers
│   │   └── tools/           # Tool handlers (e.g., tdTools.ts)
│   ├── gen/                  # Code generated from the OpenAPI schema for the MCP server
│   ├── server/               # MCP server logic (connections, main server class)
│   ├── tdClient/             # TouchDesigner connection API client
│   ├── index.ts              # Main entry point for the Node.js server
│   └── ...
├── td/                        # TouchDesigner-related files
│   ├── modules/              # Python modules for TouchDesigner
│   │   ├── mcp/              # Core logic for handling MCP requests in TouchDesigner
│   │   │   ├── controllers/ # API request controllers (api_controller.py, generated_handlers.py)
│   │   │   └── services/    # Business logic (api_service.py)
│   │   ├── td_server/        # Python model code generated from the OpenAPI schema
│   │   └── utils/            # Shared Python utilities
│   ├── templates/             # Mustache templates for Python code generation
│   ├── genHandlers.js         # Node.js script for generating generated_handlers.py
│   ├── import_modules.py      # Helper script to import API server modules into TouchDesigner
│   └── mcp_webserver_base.tox # Main TouchDesigner component
├── tests/                      # Test code
│   ├── integration/
│   └── unit/
└── orval.config.ts             # Orval config (TypeScript client generation)

API Code Generation Workflow

This project uses OpenAPI-based code generation tools (Orval and openapi-generator-cli).

API Definition: The API contract between the Node.js MCP server and the Python server running inside TouchDesigner is defined in src/api/index.yml.

  1. Python server generation (npm run gen:webserver):
    • Uses openapi-generator-cli via Docker.
    • Reads src/api/index.yml.
    • Generates a Python server skeleton (td/modules/td_server/) based on the API definition. This code runs inside TouchDesigner's WebServer DAT.
    • Requires Docker to be installed and running.
  2. Python handler generation (npm run gen:handlers):
    • Uses a custom Node.js script (td/genHandlers.js) and Mustache templates (td/templates/).
    • Reads the generated Python server code or OpenAPI spec.
    • Generates handler implementations (td/modules/mcp/controllers/generated_handlers.py) that connect to the business logic in td/modules/mcp/services/api_service.py.
  3. TypeScript client generation (npm run gen:mcp):
    • Uses Orval to generate an API client and Zod schemas for tool validation from the schema YAML, which is bundled by openapi-generator-cli.
    • Generates a typed TypeScript client (src/tdClient/) used by the Node.js server to make requests to the WebServer DAT.

The build process (npm run build) runs all necessary generation steps (npm run gen), followed by TypeScript compilation (tsc).

Contributing

We welcome your contributions!

  1. Fork the repository.
  2. Create a feature branch (git checkout -b feature/amazing-feature).
  3. Make your changes.
  4. Add tests and ensure everything works (npm test).
  5. Commit your changes (git commit -m 'Add some amazing feature').
  6. Push to your branch (git push origin feature/amazing-feature).
  7. Open a pull request.

Please always include appropriate tests when making implementation changes.

License

MIT