--- tags: - infra - cursor - tapo - tuya - proxmox - mcp created: 2026-09-08 status: playbook --- # Cursor + Tapo + Tuya — playbook (Roger) Processo capturado em **2026-09-08** para reutilizar nas duas máquinas / dois locais de trabalho. **Regra de ouro:** a tomada **Tapo** alimenta o **Proxmox**. Nunca `tapo_turn_off` nessa tomada sem confirmação explícita (três vezes). Ligar (`turn_on`) só se o host estiver em baixo e o Roger pedir. --- ## 1. Cursor em duas máquinas — o que sincroniza O **mesmo login Cursor não replica** o histórico de Agent/Chat da IDE. Isso fica **local** (por pasta/workspace). | Segue a conta | Fica na máquina | |---|---| | Plano, modelos, Cloud Agents | Histórico Agent/Chat da barra lateral | | Regras/MCP de **team** (dashboard) | Checkpoints, side chats | | | Settings, atalhos, extensões (salvo exportar perfil) | | | MCP **user** em `%USERPROFILE%\.cursor\mcp.json` | **O que fazer nas duas máquinas:** 1. Mesma conta Cursor. 2. Mesmo Git (código + `.cursor/rules`, `AGENTS.md`, MCP de projeto). 3. Copiar **à mão** `C:\Users\mini\.cursor\mcp.json` e a pasta `C:\Users\mini\.cursor\mcp-servers\` (MCP Tapo/Tuya **não** viajam com o login). 4. Conversas que precisam continuar noutro PC: **Move to Cloud** / Cloud Agents. 5. Caminhos de pasta diferentes = workspace diferente = histórico diferente. 6. Remote SSH: o código está no servidor; o **chat fica no cliente**. Pedido frequente à Cursor (sync de chats) — **sem prazo**. Não copiar `state.vscdb` entre Windows/Mac (hashes e risco de corromper). --- ## 2. Dois mundos: Tuya ≠ Tapo | | **Tuya / Smart Life** | **Tapo (TP-Link)** | |---|---|---| | App | Smart Life ou Tuya Smart | App **Tapo** | | Como o Cursor fala | Cloud API (`openapi.tuyaeu.com`) | LAN (broadcast `python-kasa`) | | MCP | `tuya` | `tapo` | | O que controla hoje | Interruptor Wi-Fi 1 gang | **Tomada do Proxmox** | | QR no iot.tuya.com | Sim (ligar conta da app) | **Não** | O QR da Tuya **nunca** traz tomadas Tapo. --- ## 3. Ficheiros e paths (esta máquina Windows) - MCP config: `C:\Users\mini\.cursor\mcp.json` - Script Tapo: `C:\Users\mini\.cursor\mcp-servers\tapo_mcp.py` - Venv MCP: `C:\Users\mini\.cursor\mcp-servers\.venv\` - Fix TLS Avast: `C:\Users\mini\.cursor\mcp-servers\.venv\Lib\site-packages\sitecustomize.py` - Pacote extra: `truststore` no mesmo venv Credenciais **não** estão nesta nota. Estão no `mcp.json` (Tuya Access ID/Key; Tapo ainda `PREENCHER`). --- ## 4. Tuya — estado em 2026-09-08 - Plataforma: https://eu.platform.tuya.com / https://iot.tuya.com - Projeto: **cursor-casa** - Project ID: `p1788865726593kjmtjy` - Data Center: **Central Europe** → endpoint `https://openapi.tuyaeu.com` - Tipo: Location/Campus - Conta Smart Life ligada: `rogerio.cezar@gmail.com` - Modo: **Automatic Link** - IoT Core: plano trial (há botão Upgrade) **Dispositivo ligado à API:** | Campo | Valor | |---|---| | Nome | 1Gang WIFI Switch | | Device ID | `bfaf766aa915197295qju6` | | Produto | CB01-SBL | | Categoria | `kg` (interruptor) | | Online | sim (validado pela API) | | Ativação | 2024-04-27 14:01:02 | **Isto NÃO é o Proxmox.** Não desliga o host. ### Como ligar a conta da app (quando a lista está vazia) 1. Cloud → Development → lista **My Cloud Projects**. 2. **cursor-casa não é um link.** A janela estreita esconde a coluna **Operation**. Maximizar, Ctrl+-, ou scroll **horizontal**. Botão: **Open Project**. 3. Aba **Devices** → **Link App Account** → **Add App Account** → **Tuya App Account Authorization**. 4. QR: app **Smart Life** → **Me** → ícone scan (canto superior direito) → confirmar. 5. Região da app (**Me → Settings → Account and Security → Region**) tem de ser **Europa**. 6. Depois de ligado: a API `/v2.0/cloud/thing/device` deixa de devolver COUNT 0. 7. Em Automatic Link, o texto **Link** na tabela do dispositivo **não** é o passo que falta — já está associado. CAPTCHA de puzzle no login Tuya: **humano** (não automatizar). --- ## 5. Avast Web Shield — MCP Tuya a falhar no arranque Sintoma: servidor MCP `tuya` **errored**, tools `tuya_*` desaparecem. Causa: Avast intercepta HTTPS. Certificado apresentado: ``` CN=*.tuyaeu.com ISSUER: CN=Avast Web/Mail Shield Root OU=generated by Avast Antivirus for SSL/TLS scanning ``` OpenSSL 3 do Python rejeita (Basic Constraints / unable to get local issuer certificate). **Correção aplicada (esta máquina):** `sitecustomize.py` no venv injeta `truststore` (Schannel / loja Windows). Com isso: CONNECT True. **Depois de alterar o venv:** reiniciar o Cursor ou toggle do servidor MCP em Settings → MCP. Na **segunda máquina**, repetir: `pip install truststore` no venv + o mesmo `sitecustomize.py` se o Avast (ou outro SSL scanning) estiver ativo. --- ## 6. Tapo — estado e próximo passo - `TAPO_USERNAME` / `TAPO_PASSWORD` = `PREENCHER` → scan LAN = **0 devices**. - `TAPO_DISCOVERY_TARGET` = `192.168.1.255` (só funciona na **mesma Wi-Fi** das tomadas). - Noutro escritório / outra LAN: lista vazia mesmo com senha certa. **Para ficar operacional:** 1. Email + senha da **app Tapo**. 2. IP da tomada do Proxmox (se conhecido). 3. PC na mesma rede que o plug, **ou** MCP a correr num host nessa LAN. 4. Marcar essa tomada como **protegida**: só `tapo_get_status` / `tapo_turn_on`; **nunca** `tapo_turn_off`. Tools Tapo: `tapo_list_devices`, `tapo_get_status`, `tapo_turn_on`, `tapo_turn_off` (proibido na tomada do Proxmox). --- ## 7. Checklist rápido (segunda máquina ou reinstall) - [ ] Login Cursor - [ ] Copiar `mcp.json` + `mcp-servers` (sem meter secrets no Git) - [ ] Se Avast: `truststore` + `sitecustomize.py` - [ ] Reiniciar Cursor; Settings → MCP: `tuya` e `tapo` verdes - [ ] Tuya: listar devices; deve aparecer o interruptor `bfaf766aa915197295qju6` - [ ] Tapo: preencher credenciais; PC na LAN de casa; **não** desligar Proxmox - [ ] Git para código/regras de projeto; Cloud Agent se precisares do mesmo chat nos dois PCs --- ## 8. Segurança - Password da conta Tuya Developer passou por chat nesta sessão — **rodar** quando possível. - Não versionar `mcp.json` com Access Key / senhas. - Access ID/Key Tuya: só no `mcp.json` local. --- ## Links internos - [[WELCOME]] - [[INFRA/INDEX]]