Skip to content

Transport Layer

DCC-MCP-IPC supports multiple transport protocols. The TransportFactory selects the right transport from a protocol string.

Available Transports

ProtocolClassUse Case
rpycRpycTransportDCCs with embedded Python (Maya, Houdini, Blender, 3ds Max, Nuke)
ipcIpcClientTransport / IpcServerTransportRust-native framed channel; lowest latency
httpHttpTransportREST-based DCCs (Unreal Engine, Unity)
websocketWebSocketTransportWebSocket-capable services

RPyC Transport

The default transport for Python-embedded DCCs.

python
from dcc_mcp_ipc.server import create_dcc_server, DCCRPyCService
from dcc_mcp_ipc.client import BaseDCCClient

# Server side
server = create_dcc_server(dcc_name="maya", service_class=MayaService, port=18812)
server.start(threaded=True)

# Client side
client = BaseDCCClient("maya", host="localhost", port=18812)
client.connect()
result = client.call("get_scene_info")
client.disconnect()

Rust-native IPC Transport

Zero-copy, low-latency messaging via the Rust IpcListener / FramedChannel / connect_ipc API. Ideal for high-frequency calls or large data payloads.

python
import os
from dcc_mcp_core import TransportAddress
from dcc_mcp_ipc.transport.ipc_transport import (
    IpcClientTransport,
    IpcServerTransport,
    IpcTransportConfig,
)

# Server side (inside DCC plugin / Rust process)
def handle_channel(channel):
    msg = channel.recv()
    # process and respond
    channel.send({"result": "ok"})

addr = TransportAddress.default_local("maya", os.getpid())
server = IpcServerTransport(addr, handler=handle_channel)
bound_addr = server.start()
print(f"IPC server listening at: {bound_addr}")

# Client side
config = IpcTransportConfig(host="localhost", port=19000)
transport = IpcClientTransport(config)
transport.connect()
result = transport.execute("get_scene_info")
transport.disconnect()

HTTP Transport

For DCCs that expose a REST API (e.g., Unreal Engine's Remote Control API, Unity's Editor API):

python
from dcc_mcp_ipc.transport.http import HttpTransport

transport = HttpTransport(host="localhost", port=30010)
transport.connect()
result = transport.execute("get_scene_info")
transport.disconnect()

WebSocket Transport

python
from dcc_mcp_ipc.transport.websocket import WebSocketTransport

transport = WebSocketTransport(host="localhost", port=8765)
transport.connect()
result = transport.execute("list_actors")
transport.disconnect()

Transport Factory

python
from dcc_mcp_ipc.transport import TransportFactory

# protocol → transport instance
transport = TransportFactory.create("rpyc", host="localhost", port=18812)
transport = TransportFactory.create("ipc", host="localhost", port=19000)
transport = TransportFactory.create("http", host="localhost", port=30010)

Choosing a Transport

Is the DCC's scripting API accessible via Python in the same process?
    → RPyC transport (most DCCs)

Does the DCC expose a REST API?
    → HTTP transport (Unreal Engine Remote Control, Unity Editor API)

Do you need minimum latency with a Rust-based plugin?
    → IPC transport

Does the DCC use WebSockets for its API?
    → WebSocket transport

Released under the MIT License.