Skip to content

Transport Layer

The Transport layer (dcc-mcp-transport crate) provides async communication infrastructure for connecting MCP servers to DCC application instances. It includes connection pooling, service discovery, session management, and a wire protocol.

Overview

python
from dcc_mcp_core import TransportManager

transport = TransportManager("/path/to/registry")

# Register a DCC service
instance_id = transport.register_service("maya", "127.0.0.1", 18812, version="2025.1")

# Create a session
session_id = transport.get_or_create_session("maya")

# Use the connection
conn_id = transport.acquire_connection("maya")
# ... perform operations ...
transport.release_connection("maya", instance_id)

# Cleanup and shutdown
transport.cleanup()
transport.shutdown()

Service Discovery

The transport layer uses file-based service discovery to track running DCC instances. Each instance registers with a (dcc_type, instance_id) key, enabling multiple instances of the same DCC.

python
id1 = transport.register_service("maya", "127.0.0.1", 18812)
id2 = transport.register_service("maya", "127.0.0.1", 18813)
id3 = transport.register_service("blender", "127.0.0.1", 9090, version="4.0")

maya_instances = transport.list_instances("maya")
all_services = transport.list_all_services()

transport.heartbeat("maya", id1)
transport.deregister_service("maya", id1)

Session Management

Sessions track connections to DCC instances with lifecycle state management and metrics:

python
session_id = transport.get_or_create_session("maya", instance_id=id1)

session = transport.get_session(session_id)

transport.record_success(session_id, latency_ms=50)
transport.record_error(session_id, latency_ms=100, error="timeout")

backoff_ms = transport.begin_reconnect(session_id)
transport.reconnect_success(session_id)

transport.close_session(session_id)

Session States

StateDescription
connectedActive and ready for requests
idleIdle timeout exceeded, still valid
reconnectingReconnecting after failure
closedTerminal state

Connection Pool

python
conn_id = transport.acquire_connection("maya")
transport.release_connection("maya", id1)
transport.pool_size()

Configuration

python
transport = TransportManager(
    registry_dir="/path/to/registry",
    max_connections_per_dcc=10,
    idle_timeout=300,
    heartbeat_interval=5,
    connect_timeout=10,
    reconnect_max_retries=3,
)

Lifecycle

python
stale, sessions, evicted = transport.cleanup()
transport.shutdown()
transport.is_shutdown()

Released under the MIT License.