Skip to content

MCP Config

v0.1.1New

MCP Config is the central configuration hub for all MCP (Model Context Protocol) connections in LOPs. It manages both the external MCP servers you connect to as a client and the MCP servers you host from within TouchDesigner, with a layered config system that lets you scope servers to a single project, a folder of projects, or your entire machine.

MCP Config provides two distinct configuration systems under one roof:

  • Client configs define external MCP servers that LOPs connects to (consumed by the MCP Client operator).
  • Hosted server configs define MCP servers that run from within TouchDesigner, either as built-in servers bundled with LOPs or as custom user servers stored on disk.

All configs are stored across four layers with clear priority ordering. When the same server name appears in multiple layers, the highest-priority layer wins. This lets you override global defaults at the project level or add temporary servers for a single session.

MCP Config resolves server definitions from four layers, listed from highest to lowest priority:

LayerScopeStoragePersists?
SessionCurrent TD session onlyIn-memoryNo — lost on restart
ProjectSingle .toe fileInternal DATYes — saved with project
FolderAll .toe files in a folder{project.folder}/.lops/mcp/Yes
UserAll projects on this machine{LOPs Python venv}/mcp/Yes

When multiple layers define a server with the same name, the highest-priority layer takes precedence. This means you can define a global server at the User level and override its configuration in a specific project without editing the global file.

None — MCP Config is a standalone system component with no wire inputs.

None — other operators (such as MCP Client) access MCP Config through its public API methods rather than wire connections.

Client servers are external MCP servers that LOPs connects to. The MCP Config parameter page provides all the controls for managing them.

The fastest way to add a server is to copy its JSON configuration and pulse Add from Clipboard. MCP Config auto-detects the format and normalizes it, so you can paste configs from any of these sources:

  • Claude Desktop / Cursor / Windsurf format (mcpServers key)
  • Single server object (just command and args at top level)
  • HTTP/SSE server (with url field)
  • Nested transport format (transport details in a sub-object)

The Config Location menu controls where new servers are saved:

  • LOPs Install Folder — saves to the User layer (global, all projects)
  • Project Folder — saves to the Folder layer (shared by .toe files in the same directory)
  • Custom Folder — saves to a folder you specify in the Custom Folder parameter

Use the Select Server menu to browse all configured servers. Each entry shows the server name and which config layer it belongs to (e.g. my-server [user]). The read-only info strip below the menu displays the transport type, command or URL, and source layer for the selected server.

To remove a server, select it and pulse Remove Selected. MCP Config automatically detects which layer owns the server and removes it from that layer’s config file.

Pulse Refresh Server List to reload the registry from all config layers after making external changes to config files.

Pulse Edit Config File to open the client_servers.json file for the currently selected config location in your system’s default editor. If the file does not exist yet, MCP Config creates it with an empty template. After editing, pulse Refresh Server List to pick up changes.

The MCP Server Config section manages MCP servers that run from within TouchDesigner.

LOPs ships with built-in hosted servers stored as base COMPs inside the MCP Config operator. When Auto Load Built-ins is enabled, these servers are loaded on startup and appear in the hosted server registry.

Each built-in server has a config table with metadata (name, description, transport, port) and a server_code DAT containing the FastMCP server implementation. Built-in servers are read-only — they cannot be saved or overwritten through the API.

Custom hosted servers live as folders in {LOPs Python venv}/mcp/. Each server folder contains:

  • server_code.py — the FastMCP server implementation
  • config.json — server metadata (name, description, category, version, transport, port)
  • system_prompt.txt — optional system prompt for the server

User servers appear alongside built-ins in the hosted server registry and can be loaded, edited, and saved through the MCP Server operator.

MCP Config supports three transport types defined by the MCP specification:

  • stdio — launches a local process via command and args. Most common for npm-based MCP servers.
  • streamable-http — connects to a remote HTTP endpoint via url. Used for cloud-hosted or network MCP servers.
  • sse — connects to a Server-Sent Events endpoint via url. Legacy HTTP transport.

Common aliases are normalized automatically: http and https both resolve to streamable-http.

Make sure you copied the complete JSON block, including the outer braces. Trailing commas or unquoted keys will cause parse errors.

Clipboard paste shows “Could not detect MCP config format”

Section titled “Clipboard paste shows “Could not detect MCP config format””

The pasted JSON does not match any known MCP config structure. It must contain an mcpServers key, a servers key, or top-level command/url fields.

Pulse Refresh Server List to force a reload from all config layers. If using the Folder layer, confirm the .lops/mcp/ directory exists in your project folder.

The selected config location could not be resolved. For LOPs Install Folder, ensure ChatTD has a valid Python venv path configured. For Project Folder, ensure the project has been saved at least once so project.folder is defined.

Status (Status) op('mcp_config').par.Status Str
Default:
"" (Empty String)
MCP Client Config Header
Add from Clipboard (Addfromclipboard) op('mcp_config').par.Addfromclipboard Pulse

Parse MCP server config JSON from clipboard and add to user config

Default:
False
Config Location (Configlocation) op('mcp_config').par.Configlocation Menu

Where new servers are added (clipboard imports, etc.)

Default:
lops_folder
Options:
lops_folder, project_folder, custom
Custom Folder (Customconfigfolder) op('mcp_config').par.Customconfigfolder Folder

Custom folder path (when "Custom Folder" selected above)

Default:
"" (Empty String)
Edit Config File (Editconfigfile) op('mcp_config').par.Editconfigfile Pulse

Open the client_servers.json file in external editor

Default:
False
Configpath (Configpath) op('mcp_config').par.Configpath Str

Current resolved config path

Default:
"" (Empty String)
Select Server (Serverlist) op('mcp_config').par.Serverlist Menu

Select a server to view details or remove

Default:
touchdesigner-docs
Options:
touchdesigner-docs
Refresh Server List (Refreshclientservers) op('mcp_config').par.Refreshclientservers Pulse

Reload client server registry from all config layers

Default:
False
Remove Selected (Removeserver) op('mcp_config').par.Removeserver Pulse

Remove the selected server from its config layer

Default:
False
Serverinfo (Serverinfo) op('mcp_config').par.Serverinfo Str

Details of the selected server

Default:
"" (Empty String)
MCP Server Config Header
Auto Load Built-ins (Autoloadbuiltins) op('mcp_config').par.Autoloadbuiltins Toggle

Load built-in hosted servers from base COMPs on startup

Default:
False
v0.1.12026-02-28
  • Remove truncation of url and description columns in client_server_registry table
  • Add transport alias mapping (http/https -> streamable-http) - Normalize transport types during config parsing
  • Initial commit