Skip to main content
Glama
development.md7.79 kB
# TouchDesigner MCP Server Developer Guide This guide consolidates all developer-focused content: local environment setup, MCP client configuration, project structure, code generation workflows, and release/versioning tips. For a high-level view of components and data flow, see **[Architecture](./architecture.md)**. ## Quick Start for Development 1. **Set up your environment:** ```bash # Clone and install dependencies git clone https://github.com/8beeeaaat/touchdesigner-mcp.git cd touchdesigner-mcp npm install ``` 2. **Build the project:** ```bash make build # Docker-based build (recommended) # OR npm run build # Node.js-based build ``` 3. **Available commands:** ```bash npm run test # Run unit and integration tests npm run dev # Launch the MCP inspector for debugging ``` **Note:** When you update the code, restart both the MCP server and TouchDesigner to apply changes. ## Local MCP Client Configuration Use these snippets to point your preferred MCP client at a local build of the server. ### Claude Desktop (`claude_desktop_config.json`) ```json { "mcpServers": { "touchdesigner-stdio": { "command": "npx", "args": [ "-y", "/path/to/your/touchdesigner-mcp/dist/cli.js", "--stdio", "--port=9981" ] }, "touchdesigner-http-npx": { "command": "npx", "args": [ "mcp-remote", "http://localhost:6280/mcp" ] } } } ``` ### Claude Code (`~/.claude.json`) ```json { "mcpServers": { // claude mcp add -s user touchdesigner-stdio -- npx -y /path/to/your/touchdesigner-mcp/dist/cli.js --stdio --port=9981 "touchdesigner-stdio": { "type": "stdio", "command": "npx", "args": [ "-y", "/path/to/your/touchdesigner-mcp/dist/cli.js", "--stdio", "--port=9981" ], "env": {} }, // claude mcp add -s user --transport http touchdesigner-http http://localhost:6280/mcp "touchdesigner-http": { "type": "http", "url": "http://localhost:6280/mcp" }, // claude mcp add -s user touchdesigner-http-npx -- npx mcp-remote http://localhost:6280/mcp "touchdesigner-http-npx": { "type": "stdio", "command": "npx", "args": [ "mcp-remote", "http://localhost:6280/mcp" ], "env": {} } } } ``` ### Codex (`~/.codex/config.toml`) ```toml # codex mcp add touchdesigner-stdio -- npx -y /path/to/your/touchdesigner-mcp/dist/cli.js --stdio --port=9981 [mcp_servers.touchdesigner-stdio] command = "npx" args = ["-y", "/path/to/your/touchdesigner-mcp/dist/cli.js", "--stdio", "--port=9981"] # codex mcp add touchdesigner-http --url http://localhost:6280/mcp [mcp_servers.touchdesigner-http] url = "http://localhost:6280/mcp" # codex mcp add touchdesigner-http-npx -- npx mcp-remote http://localhost:6280/mcp [mcp_servers.touchdesigner-http-npx] command = "npx" args = ["mcp-remote", "http://localhost:6280/mcp"] ``` ## Development Workflow 1. **Clone and install**: ```bash git clone https://github.com/8beeeaaat/touchdesigner-mcp.git cd touchdesigner-mcp npm install ``` 2. **Build**: ```bash npm run build # Full build with code generation # or make build # Docker-based build ``` 3. **Test / inspect**: ```bash npm test # Run all tests npm run dev # Launch MCP inspector ``` See `CLAUDE.md` for additional developer-focused commands. ## 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`). ## Version Management - `package.json` is the single source of truth for every component version (Node.js MCP server, TouchDesigner Python API, MCP bundle, and `server.json` metadata). - Run `npm version <patch|minor|major>` (or the underlying `npm run gen:version`) whenever you bump the version. The script rewrites `pyproject.toml`, `td/modules/utils/version.py`, `mcpb/manifest.json`, and `server.json` so that the release workflow can trust the tag value. - The GitHub release workflow (`.github/workflows/release.yml`) tags the commit as `v${version}` and publishes `touchdesigner-mcp-td.zip` / `touchdesigner-mcp.mcpb` from the exact same version number. Always run the sync step before triggering a release so every artifact stays aligned.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/8beeeaaat/touchdesigner-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server