Skip to content

CLI 参考

仓库提供四个面向运维的二进制文件。本页是所有旗标、所有环境变量、以及五个 典型部署场景的唯一信息源。每个二进制的旗标都一对一映射到一个 DCC_MCP_* 环境变量,所以任何部署清单都能驱动同一套配置面板。

dcc-mcp-clidcc-mcp-server 会在每个 Release 作为原生 GitHub Release 资产发布。CLI 可以通过 URL 直接安装:

bash
curl -fsSL https://raw.githubusercontent.com/dcc-mcp/dcc-mcp-core/main/scripts/install-cli.sh | bash

# Windows PowerShell
powershell -c "irm https://raw.githubusercontent.com/dcc-mcp/dcc-mcp-core/main/scripts/install-cli.ps1 | iex"

需要固定版本时,设置 DCC_MCP_VERSION=v0.17.17,或给安装脚本传 --version v0.17.17

二进制角色源码位置
dcc-mcp-cli面向用户/CI 的控制面 CLI,用来访问本地或远程 DCC-MCP REST 端点。crates/dcc-mcp-cli/
dcc-mcp-serverper-DCC MCP + REST 服务器,内置自动网关。crates/dcc-mcp-server/
dcc-mcp-tunnel-relay面向公网的 WebSocket 隧道中继(零配置远程访问,#504)。crates/dcc-mcp-tunnel-relay/
dcc-mcp-tunnel-agent在工作站上注册到中继、转发 MCP 流量的本地 sidecar。crates/dcc-mcp-tunnel-agent/

开发辅助二进制(stub_gen)在 AGENTS.md 里。


dcc-mcp-cli

DCC-MCP 的客户端控制面。它是主要用户/agent 入口;它不托管 skills,也不替代 底层 runtime binary dcc-mcp-server

dcc-mcp-cli 有两种 gateway 模式:

  • local(默认):直接读取 core 默认 FileRegistry,并用选中 DCC instance 暴露的 MCP HTTP endpoint 执行 searchdescribeload-skillcallwait-ready 和受保护的 stop-instance
  • 命名远程 profile:同一套控制流程通过选中的远程 gateway base URL 执行。

注册和选择远程 profile:

bash
dcc-mcp-cli gateway register https://workstation.example:19293 --name pcA
dcc-mcp-cli gateway list
dcc-mcp-cli gateway set pcA
dcc-mcp-cli gateway set local

--gateway <name> 可为单次命令覆盖当前 profile。--base-urlDCC_MCP_BASE_URL 继续作为旧脚本和 smoke check 的直接 endpoint override。

默认 local profile 下,agent-control 命令会先确保 machine-wide loopback gateway 健康,然后本地 list 读取 FileRegistry;本地 searchdescribeload-skillcallwait-readystop-instance 会从 registry 解析目标实例,并直连该实例声明的 mcp_url / readyz / safe_stop_url。gateway daemon 仍会保持可用,用于 Admin、health、update 和跨实例控制面路由。当前 profile 是远程,或传了 --gateway pcA / --base-url ... 时,同一组命令走 gateway /v1/*

list 是 inventory 和诊断命令:它会保留仍然 live 的 booting 行,以及 dispatch_status=unavailable 的 sidecar 行,方便看到启动失败原因。本地 searchdescribeload-skillcallreload-skills 只会路由到 已经可被本地 CLI 直控的 direct MCP 实例(status=availablebusy, 且如果上报了 dispatch_status,必须是 ready)。per-DCC sidecar 行在 dispatch_status=ready 后也可以被本地路由;在 ready 之前仍保留为启动诊断, 不会用于 tool call。如果 list 里能看到实例但还不能被本地 CLI 直控,用 wait-readydoctor 判断它卡在哪个 readiness 阶段。每个本地 list 行都会带 direct_control.recommended_next_action,agent 可以据此区分 “可通过 local MCP 路由”或“继续等待 sidecar dispatch readiness”。本地行还会带 direct_control.diagnostics,集中暴露 sidecar 的 failure_stagefailure_reasonhost_rpc_*、gateway guardian/recovery 字段,以及 DCC supervisor 写入 registry 的 stdout/stderr 日志路径。doctor 会把不可直控的本地行 汇总到 local.inventory.direct_control.not_ready_instances

Agent 控制命令(listsearchdescribeload-skillcallwait-readyreload-skillsstop-instance)以及仍需要本机 gateway 的 endpoint 级命令(healthstatsupdate,以及未显式传 --urlsmoke)只会 对 loopback HTTP 目标(http://127.0.0.1:<port>http://localhost:<port>)执行 auto-ensure。单次禁用可传 --no-auto-gateway。只操作本地文件的命令(installmarketplacelint)、显式生命周期命令(gateway ...),以及带显式 --url 的 smoke check 不会自动启动 gateway。 启动状态不清楚时,先运行 dcc-mcp-cli doctor。它会输出当前 profile 配置、选中的模式、registry 目录和 inventory、direct-control readiness 汇总、 本机 gateway daemon 状态、以及 server binary 的路径/来源/版本,而且不会启动 或下载任何服务。

bash
dcc-mcp-cli list
dcc-mcp-cli list --gateway pcA
dcc-mcp-cli doctor
dcc-mcp-cli health
dcc-mcp-cli stats --range 7d --dcc-type houdini --skill houdini-render
dcc-mcp-cli stats --tool render_rop --status failure --session-id solar-session
dcc-mcp-cli --no-auto-gateway health
dcc-mcp-cli gateway register https://workstation.example:19293 --name pcA
dcc-mcp-cli gateway list
dcc-mcp-cli gateway set pcA
dcc-mcp-cli gateway set local
dcc-mcp-cli search --query sphere --dcc-type maya --instance-id abc12345
dcc-mcp-cli describe maya.abc12345.create_sphere
dcc-mcp-cli load-skill workflow --dcc-type 3dsmax --instance-id 80321760
dcc-mcp-cli call maya.abc12345.create_sphere --json '{"radius":2}'
dcc-mcp-cli call maya_scene__get_session_info --dcc-type maya --instance-id abc12345 --json '{}'
dcc-mcp-cli wait-ready --dcc-type maya --instance-id abc12345 --require skill_catalog,host_execution_bridge
dcc-mcp-cli stop-instance --dcc-type maya --instance-id abc12345 --expected-owner release-smoke-test
dcc-mcp-cli install --dcc-type maya --version 2026
dcc-mcp-cli install --dcc-type maya --version 2026 --python "C:/Program Files/Autodesk/Maya2026/bin/mayapy.exe"
dcc-mcp-cli install --dcc-type maya --version 2026 --python "C:/Program Files/Autodesk/Maya2026/bin/mayapy.exe" --execute
dcc-mcp-cli marketplace add dcc-mcp/marketplace
dcc-mcp-cli marketplace search --query hunyuan --dcc maya
dcc-mcp-cli marketplace inspect dcc-asset-hunyuan-download
dcc-mcp-cli marketplace install dcc-asset-hunyuan-download --dcc maya
dcc-mcp-cli reload-skills --dcc-type maya
dcc-mcp-cli marketplace list-installed --dcc maya
dcc-mcp-cli marketplace outdated --dcc maya
dcc-mcp-cli marketplace update dcc-mcp-maya-skills --dcc maya
dcc-mcp-cli reload-skills --dcc-type maya
dcc-mcp-cli marketplace update --all
dcc-mcp-cli marketplace pack path/to/skill --out dist/
dcc-mcp-cli marketplace publish path/to/skill --catalog marketplace.json --install-url https://example.com/skill.zip --sha256 sha256:<digest>
dcc-mcp-cli update check
dcc-mcp-cli update check --binary dcc-mcp-server --current-version 0.18.16
dcc-mcp-cli update apply
dcc-mcp-cli gateway daemon start
dcc-mcp-cli gateway daemon restart
dcc-mcp-cli gateway daemon stop
dcc-mcp-cli gateway daemon status
dcc-mcp-cli lint path/to/skills

命令

命令REST/API 契约说明
healthGET /v1/healthz检查配置的端点。
stats [--range 1h|24h|7d|all] [--dcc-type <dcc>] [--skill <name>] [--tool <name>] [--status success|failure] [--instance-id <id>] [--session-id <id>]GET /v1/debug/stats对持久化工具调用按所有给定条件组合过滤,并输出调用量、成功/失败、延迟、token 和高频维度;默认 JSON 便于 agent 使用。
doctor [--registry-dir <path>] [--gateway-port <port>]local filesystem + gateway probe不启动或下载服务,输出 profile 配置/当前选择、本地 registry path/inventory、direct-control readiness 汇总和 not-ready 诊断、gateway daemon 状态和 server binary 诊断。
list [--gateway <profile>]local FileRegistry 或 GET /v1/instances列出在线 DCC 实例。默认先确保 loopback gateway,再读取本机 FileRegistry;远程 profile 走选中的 gateway。
search [--instance-id <id>]本地 MCP search_tools 或远程 POST /v1/search搜索可调用能力,可限定完整 UUID 或唯一前缀。
describe <tool-slug>本地 MCP tools/list 或远程 POST /v1/describe调用前检查能力 schema。
load-skill <skill-name> [--dcc-type <dcc>] [--instance-id <id>]本地 MCP tools/call load_skill 或远程 POST /v1/load_skill激活 progressive skill 并输出已注册工具。
call <tool-slug> --json <object>本地 MCP tools/call 或远程 POST /v1/call调用一个能力。
call <backend-tool> --dcc-type <dcc> --instance-id <id> --json <object>本地 MCP tools/call 或远程 POST /v1/dcc/{dcc}/instances/{id}/call不手工拼 dotted gateway slug,直接调用指定实例上的 backend tool。
wait-ready [--dcc-type <dcc>] [--instance-id <id>] [--require <bits>]本地 registry + per-instance /v1/readyz,或远程 gateway inventory + /v1/readyz等待 release smoke test 所需 readiness bit,例如 skill_cataloghost_execution_bridge
reload-skills [--dcc-type <dcc>] [--instance-id <id>]本地 MCP tools/call dcc_admin__reload_skills,或远程 POST /v1/dcc/{dcc}/instances/{id}/callmarketplace 安装或 skill path 变更后,让正在运行的 adapter 重新扫描 skill 搜索路径。
stop-instance --dcc-type <dcc> --instance-id <id>本地 safe_stop_url 或远程 POST /v1/dcc/{dcc}/instances/{id}/stop对声明了 safe_stop_url 的实例发起带保护条件的 safe-stop 请求。
install --dcc-type <dcc> [--version <v>] [--python <path>] [--execute]catalog-backed local plan / executor解析匹配的 adapter 并输出可审计安装计划;加 --execute 后会在确认后执行 package 安装步骤、失败回滚并做 package/path 验证。Live DCC 检查保留在返回的 next_steps 中。
marketplace search/install/update/...marketplace catalog + local installed state搜索、安装、卸载和更新本地 marketplace skill 包。
marketplace pack <path> [--out <path>]local filesystem + zip生成 marketplace 发布 ZIP 并输出 SHA-256 摘要。
marketplace publish <path> --catalog <file> --install-url <url>local marketplace catalog file根据 SKILL.md 元数据和 CLI 覆盖字段创建或更新 marketplace.json 条目。
update check [--binary <name>] [--current-version <version>]GET /v1/update/check检查 gateway update manifest。默认检查 CLI 自身;检查 Admin 面板里的实例版本时,传 --binary dcc-mcp-server 和对应 server 版本。
update applyGET /v1/update/check + download URL下载并暂存 CLI binary,下一次 CLI 启动时应用。它不会更新正在运行的 server 实例;server 请用 Admin 实例页升级按钮,或在 server 环境里运行 dcc-mcp-server update apply
gateway register <url> --name <profile>local profile config保存命名远程 gateway profile。
gateway listlocal profile config显示已配置的远程 profile 和当前 local/remote 选择。
gateway set <profile|local>local profile config选择当前 gateway profile。
gateway daemon start/restart/stop/statuslocal process显式管理本机 machine-wide gateway daemon 生命周期;startrestart 的启动阶段默认传 --gateway-idle-timeout-secs 0,无 backend 时也保持存活;status 会输出 registry dir、PID file、health URL 和 CLI version 等诊断字段。
gateway ensure/start/stop/statuslocal process旧脚本兼容 alias;面向用户文档优先使用 gateway daemon ...
lint [PATH ...]local filesystem validator默认递归校验每个路径下两层内的 SKILL.md 包。

gateway daemon startgateway daemon restart 是持久 operator 路径。默认 --gateway-idle-timeout-secs 0 会关闭 idle shutdown;只有脚本明确想要短生命周期 daemon 时才传非零 timeout。本机 loopback auto-ensure 覆盖 agent-control path 和 endpoint 命令;单次不想启动可传 --no-auto-gateway

install 默认仍是规划契约:它解析 catalog entry,并列出 adapter package、 host plugin 和验证步骤,不会静默修改 DCC 插件目录。JSON plan 还会包含 机器可读的 next_steps:当 catalog 或 GitHub repo URL 提供安装说明时,第一步是 指向 adapter 仓库 raw install.mdread-install-instructions,随后是覆盖 doctorlistwait-readysearch、marketplace skill search / inspect / installreload-skills 的命令数组,并包含手动启动/启用 DCC host plugin 的步骤。pip adapter 需要安装进特定 DCC 解释器时, 传 --python(或设置 DCC_MCP_INSTALL_PYTHON),例如 mayapyhython 或 Blender 自带 Python。传 --execute 后才会请求确认并执行 可执行 package 安装步骤。执行时如果后续步骤失败,会按相反顺序回滚已完成步骤; pip 安装使用 <python> -m pip,并用 pip show 验证;git/zip/path 安装会检查目标路径 确实存在,且目标目录不是空目录。DCC 只有在 host plugin / sidecar 启动、保持存活、 并出现在 dcc-mcp-cli list 中后才算在线;CLI install 不会伪造 gateway 注册。

如果工作室有专门的 Pipeline 部署流程,可以设置 DCC_MCP_INSTALL_DISABLED=1 禁用自动执行安装。plan 仍会返回 adapter metadata 和 next_steps,但 install_policy.auto_install_enabledfalse--execute 会被跳过, agent-facing 提示词来自 DCC_MCP_INSTALL_DISABLED_PROMPT(支持 {adapter}{dcc_type}{version} 占位)。可用于类似 “Automatic install is unavailable; contact Pipeline TD to deploy {adapter} for {dcc_type}.” 的内部提示。

marketplace 是面向 CLI 的官方/私有 skill 包发现入口。安装位置默认为 ~/.dcc-mcp/marketplace/<dcc>/<name>/,可用 DCC_MCP_MARKETPLACE_INSTALL_ROOT 覆盖。DCC adapter 会把 ~/.dcc-mcp/marketplace/<dcc> 加入 skill 搜索路径,因此新安装的 skill 会在 adapter 启动时,或下一次 dcc-mcp-cli reload-skills --dcc-type <dcc> 后被发现。刷新后,如果 adapter 没有自动加载该 skill,再运行 dcc-mcp-cli load-skill <skill-name> --dcc-type <dcc> --instance-id <id>

dcc-mcp-cli update 面向由 gateway update manifest 暴露的二进制更新; manifest 通过 DCC_MCP_UPDATE_MANIFEST_URL(或 GatewayConfig.update_manifest_url)配置。update check 只读取 /v1/update/check,适合人和 agent 使用;CLI 会在请求前默认确保本机 gateway 存在。update apply 只暂存 CLI binary。对于 server 实例,优先使用 Admin 实例页的升级按钮:它调用 POST /admin/api/instances/{instance_id}/update, 并以需要重启的状态暂存 dcc-mcp-server。如果你就在 server 所在环境操作, 则使用 dcc-mcp-server update apply

lint 复用生产 dcc-mcp-skills validator,因此本地检查与运行时加载会因同一类 结构问题失败。CI 也通过 just lint-skills 显式传入仓库 skill roots,跑同一条 dcc-mcp-cli lint <PATH...> 路径。

CLI 安装资产

安装脚本会下载以下 GitHub Release 资产之一:

平台资产
Linux x86_64dcc-mcp-cli-linux-x86_64
Windows x86_64dcc-mcp-cli-windows-x86_64.exe
macOS universal2dcc-mcp-cli-macos-universal2

默认安装位置:Linux/macOS 为 ~/.local/bin,Windows 为 %LOCALAPPDATA%\dcc-mcp\bin。可用 DCC_MCP_INSTALL_DIR--install-dir 覆盖。


dcc-mcp-server

适配器、sidecar、bridge 与整机 gateway daemon 使用的底层 runtime binary。 它仍然适合 CI 和运维脚本,但主要用户/agent UX 是 dcc-mcp-cli

不带子命令调用 dcc-mcp-server 仍保持向后兼容:行为等同于 dcc-mcp-server auto,会确保本机 gateway daemon 已启动,注册当前 per-DCC server 为 backend,并在 backend 存活期间保留轻量 guardian。

运行模式

命令角色网关行为
dcc-mcp-server向后兼容的隐式 auto确保独立 gateway daemon,然后注册为 backend。
dcc-mcp-server auto默认行为的显式写法。与无子命令路径相同。
dcc-mcp-server serveper-DCC MCP server。确保独立 gateway daemon,然后注册为 backend。
dcc-mcp-server serve --no-auto-gateway仅运行 per-DCC MCP server。提供 MCP 工具,但绝不尝试绑定 gateway port。
dcc-mcp-server auto --legacy-gateway-election旧的嵌入式 gateway 模式。per-DCC 进程直接竞争 gateway port。
dcc-mcp-server sidecarper-DCC sidecar worker。确保独立 gateway daemon,注册 per-dcc-sidecar 行,并通过 host RPC 派发。运行时由 dcc-mcp-sidecar 实现。
dcc-mcp-server gateway整机 gateway daemon。只托管 discovery、routing、resources/prompts、admin 与 audit,不内联执行 DCC tool。
dcc-mcp-server update check/applyServer binary 更新助手。读取 127.0.0.1:<gateway-port> 上的 gateway update manifest,并为下一次 server 启动暂存 dcc-mcp-server

autoserve 共享下面的 server 旗标。gateway 有更小的独立旗标面, 会拒绝 --app 这类 server-only 旗标。

核心旗标

旗标环境变量默认值说明
--mcp-portDCC_MCP_MCP_PORT0MCP Streamable HTTP 端口。0 = OS 分配。
--ws-portDCC_MCP_WS_PORT9001给非 Python DCC 插件用的 WebSocket 桥端口。
--appDCC_MCP_APP""应用标签("maya""blender""photoshop" …)。驱动 skill 发现 + 注册表行。
--skill-paths[]附加的 skill 搜索路径(可重复)。
--server-nameDCC_MCP_SERVER_NAME"dcc-mcp-server"通告给 MCP 客户端的服务器名。
--no-bridgefalse关闭 WebSocket 桥;仅 MCP HTTP。
--host127.0.0.1绑定主机。
--pid-file运行期间把服务器 PID 写入此文件。
--forcefalse覆盖指向活进程的 PID 文件。
--shutdown-timeout-secsDCC_MCP_SHUTDOWN_TIMEOUT_SECS10优雅关闭时限。

自动网关旗标(auto / serve

旗标环境变量默认值说明
--gateway-portDCC_MCP_GATEWAY_PORT9765要争的公认端口。0 完全关闭网关角色,因此也关闭 admin。
--no-adminDCC_MCP_NO_ADMINfalse关闭获选网关上的 Admin UI。默认获选网关会开启 admin。
--admin-pathDCC_MCP_ADMIN_PATH/adminAdmin UI 与其 JSON API 的 URL 前缀。
--registry-dirDCC_MCP_REGISTRY_DIR<temp>/dcc-mcp-registryCLI local mode、sidecar 与 gateway runner 共用的 FileRegistry 目录。
--stale-timeout-secsDCC_MCP_STALE_TIMEOUT30没心跳后多少秒实例被判为过期。
--app-versionDCC_MCP_APP_VERSION应用版本(如 "2024.2");记入注册表。
--sceneDCC_MCP_SCENE当前打开的场景 / 文档;记入注册表,多实例 disambiguation 使用。
--heartbeat-secsDCC_MCP_HEARTBEAT_INTERVAL5心跳周期。0 关闭。

Admin 审计/trace 持久化只通过环境变量配置:设置 DCC_MCP_GATEWAY_AUDIT_DIR 为可写目录后,/admin/api/calls 行会写入 audit.jsonl,dispatch traces 会写入 traces.jsonlDCC_MCP_GATEWAY_AUDIT_MAX_ROWS(默认 5000)限制每个文件保留行数。

已移除 —— --gateway-tool-exposure / DCC_MCP_GATEWAY_TOOL_EXPOSURE 已删除。网关表面现在无条件最小化,详见 docs/zh/guide/rest-api-surface.md

已移除 —— --gateway-cursor-safe-tool-names / DCC_MCP_GATEWAY_CURSOR_SAFE_TOOL_NAMES。聚合网关的 prompts/list 始终使用 cursor-safe 的 i_<id8>__<escaped> 线格式(#656)。

独立 gateway 旗标(gateway

旗标环境变量默认值说明
--daemonDCC_MCP_DAEMONfalse重新执行当前可执行文件,启动 detached gateway child,然后父进程退出。Unix child 会进入新 session;Windows child 使用 detached process flags。respawn 失败会在父进程退出前报错。
--pidfile PATHDCC_MCP_PIDFILE隐式开启 daemon mode。pidfile 记录 detached child PID,并在 child 正常退出时移除。pidfile 写入失败会在父进程退出前报错。
--gateway-persistDCC_MCP_GATEWAY_PERSISTfalse即使没有已注册 backend,也保持 gateway daemon 存活。
--gateway-idle-timeout-secsDCC_MCP_GATEWAY_IDLE_TIMEOUT_SECS30最后一个 backend 消失后等待多少秒再关闭。0 关闭 idle shutdown。

Daemon auto-ensure 路径默认传有界 idle timeout,除非设置 DCC_MCP_GATEWAY_IDLE_TIMEOUT_SECS 覆盖。面向用户的 dcc-mcp-cli gateway daemon start wrapper 默认传 0,因此显式管理的整机 daemon 不会只因为暂时没有 DCC 注册就退出。

文件日志旗标

旗标环境变量默认值说明
--no-log-fileDCC_MCP_NO_LOG_FILEfalse关闭文件日志(stderr 日志仍开)。
--log-dirDCC_MCP_LOG_DIR平台默认日志目录。
--log-max-sizeDCC_MCP_LOG_MAX_SIZE10 MiB单文件达到该大小触发滚动。
--log-max-filesDCC_MCP_LOG_MAX_FILES7保留多少个滚动文件。
--log-rotationDCC_MCP_LOG_ROTATION"both"滚动策略:sizedailyboth
--log-file-prefixDCC_MCP_LOG_FILE_PREFIX"dcc-mcp"文件名前缀。完整名:<prefix>.<pid>.<YYYYMMDD>.log
--log-retention-daysDCC_MCP_LOG_RETENTION_DAYS7按天保留。0 关闭。
--log-max-total-size-mbDCC_MCP_LOG_MAX_TOTAL_SIZE_MB100总目录容量上限(MiB)。0 关闭。

Capture replay/diff

dcc-mcp-server capture 处理由 DCC_MCP_TRAFFIC_CAPTURE=jsonl:<path>DCC_MCP_TRAFFIC_CONFIG=<yaml> 产生的离线 traffic capture 文件。它不会自动开启 capture;只有 replay 模式需要一个在线 gateway。

如果 YAML 配置包含 admin_live sink,可以从 /admin/api/traffic/export (或稳定镜像 /v1/debug/traffic/export)把保留在内存里的窗口下载为 JSONL, 然后像其他 capture 文件一样交给 capture replaycapture diff

bash
# 把记录下来的 client -> gateway 请求重放到在线 gateway MCP endpoint。
dcc-mcp-server capture replay ./captures/run.sqlite \
    --target http://127.0.0.1:9765/mcp \
    --session sess_01HQX \
    --assert outputs-compatible

# 逐帧比较两份 capture。
dcc-mcp-server capture diff ./captures/before.sqlite ./captures/after.sqlite \
    --before-session sess_before \
    --after-session sess_after

Replay 断言模式:

Mode契约
outputs-compatibleHTTP status 与 JSON-RPC result/error 形状必须和记录响应一致。
outputs-equalHTTP status 与响应 JSON 必须完全一致。
outputs-ignored只发送并计数请求,不比较响应 body。

当文件扩展名不足以判断格式时,使用 --format jsonl--format sqlite--rebind-instance-id <id> 会重写捕获到的 gateway tool slug(例如 maya.old.tool)以及 instance_id 字段,方便把旧记录重放到当前 在线实例。

典型调用

bash
# 1) 向后兼容的 auto 模式(等同于:dcc-mcp-server auto --app maya)。
dcc-mcp-server --app maya

# 2) 仅 per-DCC server,不竞争共享 gateway port。
dcc-mcp-server serve --no-auto-gateway --app maya

# 3) 工作站上多 DCC 的网关赢家。
#    第一个终端赢网关端口,后续的注册成普通实例。
dcc-mcp-server auto --app maya --server-name maya-shotgun-alpha \
               --scene /shots/ep101/sh0200/shot.ma \
               --log-dir /var/log/dcc-mcp

# 4) 整台工作站的 gateway daemon。
dcc-mcp-server gateway --host 127.0.0.1 --port 9765 \
                       --registry-dir /var/lib/dcc-mcp

# 4b) 同一个 gateway,以显式 detached daemon 方式运行。
dcc-mcp-server gateway --host 127.0.0.1 --port 9765 \
                       --registry-dir /var/lib/dcc-mcp \
                       --daemon --pidfile /var/run/dcc-mcp-gateway.pid

dcc-mcp-tunnel-relay

面向公网的 WebSocket 中继,接收本地隧道 agent 的注册,把远端 AI 助手的多路 MCP 会话转发到正确的工作站。

编译:cargo build --bin dcc-mcp-tunnel-relay --features bin

旗标环境变量默认值说明
--jwt-secret-fileDCC_MCP_TUNNEL_RELAY_JWT_SECRET_FILE必需HS256 JWT 密钥文件路径。生产环境 ≥32 字节(openssl rand -base64 48)。密钥从文件读取,不会出现在 ps 里。
--public-hostDCC_MCP_TUNNEL_RELAY_PUBLIC_HOSTlocalhost公网主机名(写入 JWT iss 声明)。
--base-urlDCC_MCP_TUNNEL_RELAY_BASE_URLws://localhost:9870WebSocket 基础 URL;拼接到 RegisterAck.public_url
--agent-bindDCC_MCP_TUNNEL_RELAY_AGENT_BIND0.0.0.0:9870agent 控制面绑定。
--frontend-bindDCC_MCP_TUNNEL_RELAY_FRONTEND_BIND0.0.0.0:9871远端客户端 TCP 前端绑定。
--ws-frontend-bindDCC_MCP_TUNNEL_RELAY_WS_FRONTEND_BIND可选 WebSocket 前端绑定(/tunnel/<id> 升级)。不填即关闭。
--admin-bindDCC_MCP_TUNNEL_RELAY_ADMIN_BIND可选只读管理端点(GET /tunnelsGET /healthz)。不填即关闭。
--stale-timeout-secsDCC_MCP_TUNNEL_RELAY_STALE_TIMEOUT_SECS30无心跳后多少秒隧道被剔除。
--max-tunnelsDCC_MCP_TUNNEL_RELAY_MAX_TUNNELS0并发隧道硬上限。0 不限。

关停:SIGINT / SIGTERM(Windows 下 Ctrl+C)触发 accept loops 的排空, 活动 session 自行关闭。

bash
dcc-mcp-tunnel-relay \
    --jwt-secret-file /etc/dcc-mcp/tunnel-secret \
    --public-host relay.example.com \
    --base-url wss://relay.example.com \
    --agent-bind 0.0.0.0:9870 \
    --frontend-bind 0.0.0.0:9871 \
    --ws-frontend-bind 0.0.0.0:9880 \
    --admin-bind 127.0.0.1:9877

dcc-mcp-tunnel-agent

本地 sidecar,向中继注册并把每会话流量桥接到本地 DCC MCP 服务器。根据 配置的重连策略,在瞬态故障下维持连接。

编译:cargo build --bin dcc-mcp-tunnel-agent --features bin

旗标环境变量默认值说明
--relay-urlDCC_MCP_TUNNEL_AGENT_RELAY_URL必需中继 WebSocket URL(wss://relay.example.com)。
--token-fileDCC_MCP_TUNNEL_AGENT_TOKEN_FILE必需JWT bearer token 文件路径(dcc_mcp_tunnel_protocol::auth::issue 铸造)。
--dccDCC_MCP_TUNNEL_AGENT_DCC必需agent 标识的 DCC 标签;必须在 JWT allowed_dcc 列表里。
--local-targetDCC_MCP_TUNNEL_AGENT_LOCAL_TARGET必需要桥接的本地 MCP HTTP 服务器地址(host:port)。
--heartbeat-secsDCC_MCP_TUNNEL_AGENT_HEARTBEAT_SECS10心跳周期。留足余量,远小于中继的 --stale-timeout-secs
--reconnect-policyDCC_MCP_TUNNEL_AGENT_RECONNECT_POLICYexponentialconstantexponential
--reconnect-initial-secsDCC_MCP_TUNNEL_AGENT_RECONNECT_INITIAL_SECS2指数退避:首次重试等待秒数。
--reconnect-max-secsDCC_MCP_TUNNEL_AGENT_RECONNECT_MAX_SECS60指数退避:重试延迟硬上限。
--reconnect-constant-secsDCC_MCP_TUNNEL_AGENT_RECONNECT_CONSTANT_SECS5固定退避的延迟。
--capabilitiesDCC_MCP_TUNNEL_AGENT_CAPABILITIES[]逗号分隔能力标签,通过 /tunnels 展示给远端客户端。

不可重试的 Rejected 错误(JWT 不对、DCC 类型不匹配)以非零退出码终止, 避免 supervisor 无限重启循环。

bash
dcc-mcp-tunnel-agent \
    --relay-url wss://relay.example.com \
    --token-file ~/.config/dcc-mcp/tunnel.jwt \
    --dcc maya \
    --local-target 127.0.0.1:8765 \
    --heartbeat-secs 10 \
    --reconnect-policy exponential \
    --reconnect-initial-secs 2 \
    --reconnect-max-secs 60

部署场景

场景 1 —— 嵌入 DCC 宿主

Maya / Blender / Houdini 插件把 dcc_mcp_core 加载到宿主的 Python 解释器里,直接调 create_skill_server()。不涉及任何外部二进制。大多数 终端用户场景都长这样。

参考 examples/host_adapter_template.py

场景 2 —— 独立 per-DCC 服务

工作站上一个 dcc-mcp-server 进程,由 DCC supervisor 或用户 autostart 拉起。适合跑 mayapy 批处理、Python-only 渲染器等仍想通过 MCP + REST 对外暴露能力的场景。

bash
dcc-mcp-server --app maya --scene /shots/ep101/sh0200/shot.ma

场景 3 —— 网关汇聚多个 DCC 服务

同一工作站上多个 dcc-mcp-server。先起的绑定网关端口 9765 成为 赢家,并索引其余实例。客户端只连 127.0.0.1:9765/mcp(或 /v1/*), 用 MCP search / describe 做发现,再通过 REST /v1/call/v1/call_batch 访问任意 DCC。

示例清单:examples/compose/gateway-ha/examples/k8s/gateway-ha/

场景 4 —— 远程中继 + 隧道 agent

中继跑在运维方的公网主机上;每台艺术家工作站跑一个 agent 向中继注册。 SaaS AI 客户端(企业防火墙后的 Claude.ai、Cursor 桌面版等)连中继前端, 被转发到工作站本地的 MCP 服务。

bash
# 中继主机(公网):
dcc-mcp-tunnel-relay \
    --jwt-secret-file /etc/dcc-mcp/tunnel-secret \
    --public-host relay.example.com \
    --base-url wss://relay.example.com

# 艺术家工作站:
dcc-mcp-tunnel-agent \
    --relay-url wss://relay.example.com \
    --token-file ~/.config/dcc-mcp/tunnel.jwt \
    --dcc maya --local-target 127.0.0.1:8765

dcc_mcp_tunnel_protocol::auth::issue 铸造 JWT;通过 allowed_dcc 声明按艺术家 / 按 DCC 限定作用域。

场景 5 —— CI / 测试夹具

集成测试在进程内拉起 McpHttpServer 并直接打它的 /v1/* 端点。不涉及 外部二进制、不涉及网关。

参考模式:crates/dcc-mcp-skill-rest/src/tests.rscrates/dcc-mcp-http/tests/http/


相关阅读

Released under the MIT License.