--- title: Ownership por projeto description: Gerencie pacotes e registros MCP do tdmcp com ownership explícito por projeto TouchDesigner. --- # Ownership por projeto A Wave 3 torna o setup local explícito, inspecionável e reversível. Arquivos de pacotes podem pertencer a um projeto em vez de um cache global implícito, e o setup do cliente altera apenas um registro nomeado no alvo nativo verificado. ## Armazenamento de pacotes O escopo de usuário preserva compatibilidade em `~/.tdmcp/packages`. O escopo de projeto é opt-in, exige o diretório explícito e usa `/.tdmcp/packages`: ```bash tdmcp packages path --scope project --project-dir "$PWD" --json tdmcp list --installed --scope project --project-dir "$PWD" --json tdmcp install raytk --scope project --project-dir "$PWD" --dry-run --json ``` O mesmo contrato existe em `manage_packages`; `install_library_package` também aceita escopo de projeto sem exigir o `dest_dir` legado. O modo project rejeita `packages_root` concorrente, projeto ausente e roots com symlink. ## Setup dos clientes | Cliente | Projeto | Usuário | | --- | --- | --- | | Claude Code | `/.mcp.json` | `~/.claude.json` | | Cursor | `/.cursor/mcp.json` | `~/.cursor/mcp.json` | | Codex | Não suportado, fail closed | `~/.codex/config.toml` | Planeje, aplique e confira: ```bash tdmcp install-client claude --scope project --project-dir "$PWD" --diff --json tdmcp install-client claude --scope project --project-dir "$PWD" --write --json tdmcp install-client claude --scope project --project-dir "$PWD" --check --json ``` Remova somente o nome gerenciado: ```bash tdmcp install-client claude --scope project --project-dir "$PWD" --remove --diff --json tdmcp install-client claude --scope project --project-dir "$PWD" --remove --write --json ``` `--name` escolhe um nome seguro. Chaves JSON e seções TOML de outras ferramentas são preservadas. Configs inválidas, maiores que 1 MiB, com symlink ou alteradas concorrentemente são rejeitadas. `--write` promove um arquivo irmão atômico e confere os bytes gravados. A saída informa apenas presença do token, nunca seu valor. `tdmcp install-client ` sem escopo/ação continua imprimindo o snippet legado. `--write --path ` também permanece por compatibilidade, mas o alvo nativo com escopo é o caminho recomendado. ## Namespace do doctor O comando top-level agora diagnostica o ambiente: ```bash tdmcp doctor --json tdmcp doctor --fix ``` O diagnóstico de dependências de pacotes ficou explícito: ```bash tdmcp packages doctor raytk --json ``` Chamadas conhecidas no formato `tdmcp doctor ` continuam funcionando temporariamente com aviso de depreciação. ## Linguagem de evidência - **PASS** — testes offline provaram resolução por escopo, preservação de config alheia, plano redigido, check/remove, rejeição de concorrência, read-back atômico e compatibilidade do namespace. - **FAIL** — input inválido ou estado inseguro do filesystem é rejeitado sem escrita do tdmcp e deve retornar resultado não-zero. - **UNVERIFIED — pending bridge** — import live de pacote e reconciliação com operadores já carregados no TouchDesigner não são declarados sem bridge ativo. `tdmcp status --json` observa apenas o registro padrão `tdmcp` nos alvos nativos suportados, sem expor paths ou secrets. Entradas arbitrárias de `--name` não são varridas de propósito.