treasy-mcp 0.0.0.dev0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. treasy_mcp-0.0.0.dev0/INSTALAR.md +78 -0
  2. treasy_mcp-0.0.0.dev0/LICENSE +28 -0
  3. treasy_mcp-0.0.0.dev0/MANIFEST.in +6 -0
  4. treasy_mcp-0.0.0.dev0/PKG-INFO +98 -0
  5. treasy_mcp-0.0.0.dev0/README.md +448 -0
  6. treasy_mcp-0.0.0.dev0/_data_/seed/openapi/catalog.json +139510 -0
  7. treasy_mcp-0.0.0.dev0/pyproject.toml +52 -0
  8. treasy_mcp-0.0.0.dev0/setup.cfg +4 -0
  9. treasy_mcp-0.0.0.dev0/treasy_mcp/__init__.py +24 -0
  10. treasy_mcp-0.0.0.dev0/treasy_mcp/__main__.py +89 -0
  11. treasy_mcp-0.0.0.dev0/treasy_mcp/_versao.py +7 -0
  12. treasy_mcp-0.0.0.dev0/treasy_mcp/arquivos.py +471 -0
  13. treasy_mcp-0.0.0.dev0/treasy_mcp/auditoria.py +134 -0
  14. treasy_mcp-0.0.0.dev0/treasy_mcp/cache.py +73 -0
  15. treasy_mcp-0.0.0.dev0/treasy_mcp/catalogo_vivo.py +457 -0
  16. treasy_mcp-0.0.0.dev0/treasy_mcp/client.py +3831 -0
  17. treasy_mcp-0.0.0.dev0/treasy_mcp/config.py +61 -0
  18. treasy_mcp-0.0.0.dev0/treasy_mcp/constants.py +27 -0
  19. treasy_mcp-0.0.0.dev0/treasy_mcp/coverage.py +135 -0
  20. treasy_mcp-0.0.0.dev0/treasy_mcp/credenciais.py +297 -0
  21. treasy_mcp-0.0.0.dev0/treasy_mcp/doctor.py +186 -0
  22. treasy_mcp-0.0.0.dev0/treasy_mcp/efeito.py +124 -0
  23. treasy_mcp-0.0.0.dev0/treasy_mcp/escrita.py +259 -0
  24. treasy_mcp-0.0.0.dev0/treasy_mcp/exportacao.py +583 -0
  25. treasy_mcp-0.0.0.dev0/treasy_mcp/formatters.py +153 -0
  26. treasy_mcp-0.0.0.dev0/treasy_mcp/gateway.py +700 -0
  27. treasy_mcp-0.0.0.dev0/treasy_mcp/helpers.py +216 -0
  28. treasy_mcp-0.0.0.dev0/treasy_mcp/instalacao.py +91 -0
  29. treasy_mcp-0.0.0.dev0/treasy_mcp/login_navegador.py +1022 -0
  30. treasy_mcp-0.0.0.dev0/treasy_mcp/modo.py +357 -0
  31. treasy_mcp-0.0.0.dev0/treasy_mcp/paridade.py +473 -0
  32. treasy_mcp-0.0.0.dev0/treasy_mcp/server.py +1825 -0
  33. treasy_mcp-0.0.0.dev0/treasy_mcp/sessao_auth.py +482 -0
  34. treasy_mcp-0.0.0.dev0/treasy_mcp/spec_catalog.py +383 -0
  35. treasy_mcp-0.0.0.dev0/treasy_mcp/tenant_session.py +93 -0
  36. treasy_mcp-0.0.0.dev0/treasy_mcp/tools/__init__.py +1 -0
  37. treasy_mcp-0.0.0.dev0/treasy_mcp/tools/analise/__init__.py +1 -0
  38. treasy_mcp-0.0.0.dev0/treasy_mcp/tools/analise/treasy_analise_alavancas.py +151 -0
  39. treasy_mcp-0.0.0.dev0/treasy_mcp/tools/analise/treasy_comparativo_periodos.py +119 -0
  40. treasy_mcp-0.0.0.dev0/treasy_mcp/tools/analise/treasy_projecao_fluxo_caixa.py +159 -0
  41. treasy_mcp-0.0.0.dev0/treasy_mcp/tools/controle/__init__.py +1 -0
  42. treasy_mcp-0.0.0.dev0/treasy_mcp/tools/controle/treasy_aging_recebiveis.py +157 -0
  43. treasy_mcp-0.0.0.dev0/treasy_mcp/tools/controle/treasy_detectar_duplicatas.py +155 -0
  44. treasy_mcp-0.0.0.dev0/treasy_mcp/tools/planejamento/__init__.py +1 -0
  45. treasy_mcp-0.0.0.dev0/treasy_mcp/tools/planejamento/treasy_desvio_orcado_realizado.py +133 -0
  46. treasy_mcp-0.0.0.dev0/treasy_mcp.egg-info/PKG-INFO +98 -0
  47. treasy_mcp-0.0.0.dev0/treasy_mcp.egg-info/SOURCES.txt +49 -0
  48. treasy_mcp-0.0.0.dev0/treasy_mcp.egg-info/dependency_links.txt +1 -0
  49. treasy_mcp-0.0.0.dev0/treasy_mcp.egg-info/entry_points.txt +2 -0
  50. treasy_mcp-0.0.0.dev0/treasy_mcp.egg-info/requires.txt +4 -0
  51. treasy_mcp-0.0.0.dev0/treasy_mcp.egg-info/top_level.txt +1 -0
@@ -0,0 +1,78 @@
1
+ # treasy-mcp: o seu Treasy dentro do Claude Code
2
+
3
+ O `treasy-mcp` liga o Claude Code à sua conta do Treasy FP&A. Depois de instalado, você pede ao
4
+ Claude, em português, o que hoje faz no Treasy, e ele consulta os seus dados com o seu usuário.
5
+
6
+ Em produção o pacote é **somente leitura**: ele consulta, nunca altera.
7
+
8
+ ## 1. Instale o `uv` (uma vez por computador)
9
+
10
+ O `uv` é o programa que baixa e roda o `treasy-mcp`. Se o comando `uv --version` já responde,
11
+ pule para o passo 2.
12
+
13
+ **Windows** (no PowerShell):
14
+
15
+ ```powershell
16
+ winget install --id astral-sh.uv -e
17
+ ```
18
+
19
+ **macOS** (no Terminal):
20
+
21
+ ```bash
22
+ curl -LsSf https://astral.sh/uv/install.sh | sh
23
+ ```
24
+
25
+ **Linux** (no terminal):
26
+
27
+ ```bash
28
+ curl -LsSf https://astral.sh/uv/install.sh | sh
29
+ ```
30
+
31
+ Feche e abra o terminal depois de instalar.
32
+
33
+ ## 2. Ligue o Treasy ao Claude Code (a linha da instalação)
34
+
35
+ ```bash
36
+ claude mcp add treasy -- uvx treasy-mcp
37
+ ```
38
+
39
+ ## 3. Entre com o seu usuário do Treasy (a linha do login)
40
+
41
+ ```bash
42
+ uvx treasy-mcp login
43
+ ```
44
+
45
+ O navegador abre na página de login do Treasy. Entre com o seu e-mail e a sua senha de sempre.
46
+ A senha fica só no navegador: o `treasy-mcp` guarda uma sessão no seu computador, na pasta
47
+ `.treasy` da sua pasta de usuário, e nunca vê a senha.
48
+
49
+ ## 4. Pronto: peça ao Claude
50
+
51
+ Abra o Claude Code e peça, por exemplo: "liste as minhas empresas no Treasy".
52
+
53
+ ## Quando algo não funciona
54
+
55
+ Rode o diagnóstico e mande as seis linhas ao suporte da Treasy (elas não têm segredo):
56
+
57
+ ```bash
58
+ uvx treasy-mcp doctor
59
+ ```
60
+
61
+ | O que aparece | O que fazer |
62
+ |---|---|
63
+ | `sem sessão de prod` | Rode `uvx treasy-mcp login`. |
64
+ | `a sessão de prod venceu` | Rode `uvx treasy-mcp login` de novo. |
65
+ | `porta 47650 ocupada` | Feche o programa que usa a porta 47650 e rode o login de novo. |
66
+ | `não respondeu` no SSO ou na API | Confira a internet, o proxy ou o firewall da empresa para `*.treasy.com.br`. |
67
+
68
+ Outros comandos:
69
+
70
+ ```bash
71
+ uvx treasy-mcp status # mostra a sessão gravada (nunca o token)
72
+ uvx treasy-mcp sair # apaga a sessão deste computador
73
+ uvx treasy-mcp --version # a versão instalada
74
+ ```
75
+
76
+ Para usar outro ambiente que a Treasy lhe indicar (`qa` ou `sandbox`), acrescente o nome ao
77
+ login (`uvx treasy-mcp login sandbox`) e ligue o Claude com a variável do ambiente:
78
+ `claude mcp add treasy -e TREASY_AMBIENTE=sandbox -- uvx treasy-mcp`.
@@ -0,0 +1,28 @@
1
+ Licença de uso do treasy-mcp
2
+
3
+ Copyright (c) 2026 Treasy. Todos os direitos reservados.
4
+
5
+ Este software (o pacote "treasy-mcp", com o código, o catálogo de operações e a documentação que o
6
+ acompanham) é propriedade da Treasy e é licenciado, não vendido.
7
+
8
+ 1. Permissão de uso. Quem tem um usuário ativo do Treasy pode instalar e executar este software,
9
+ sem custo, em qualquer número de computadores próprios ou da sua empresa, com o único fim de
10
+ acessar a própria conta do Treasy por um cliente compatível com o Model Context Protocol (MCP),
11
+ como o Claude Code.
12
+
13
+ 2. O que não é permitido. Sem autorização por escrito da Treasy, não é permitido: (a) vender,
14
+ sublicenciar, alugar ou redistribuir este software, no todo ou em parte, fora do índice oficial
15
+ onde a Treasy o publica; (b) modificar o software e distribuir a versão modificada; (c) usá-lo
16
+ para acessar conta, empresa ou dado de terceiro sem a permissão dele; (d) remover este aviso.
17
+
18
+ 3. Uso interno nas empresas. Copiar o pacote para o espelho interno de pacotes da empresa, sem
19
+ modificação, para instalar nos computadores dela, é permitido.
20
+
21
+ 4. Sem garantia. O software é fornecido "no estado em que se encontra", sem garantia de qualquer
22
+ tipo. O uso do Treasy segue os termos de uso do serviço contratado.
23
+
24
+ 5. Responsabilidade. Na máxima extensão permitida pela lei, a Treasy não responde por dano
25
+ indireto decorrente do uso deste software. Nada aqui limita direito que a lei brasileira
26
+ garanta ao consumidor.
27
+
28
+ Dúvidas sobre esta licença: fale com o suporte da Treasy.
@@ -0,0 +1,6 @@
1
+ # O sdist leva só o que o wheel precisa para ser reconstruído (003968): nada de testes nem de _data_ vivo.
2
+ prune tests
3
+ prune _data_/runtime
4
+ prune _data_/build
5
+ prune helm
6
+ global-exclude *.py[cod] __pycache__ .env .env.*
@@ -0,0 +1,98 @@
1
+ Metadata-Version: 2.4
2
+ Name: treasy-mcp
3
+ Version: 0.0.0.dev0
4
+ Summary: Servidor MCP do Treasy: o seu Treasy FP&A dentro do Claude Code, com login pelo navegador
5
+ Author: Treasy
6
+ License-Expression: LicenseRef-Treasy-Proprietaria
7
+ Keywords: treasy,mcp,claude,fpa,orcamento
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.11
10
+ Classifier: Operating System :: OS Independent
11
+ Classifier: Natural Language :: Portuguese (Brazilian)
12
+ Requires-Python: >=3.11
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+ Requires-Dist: mcp<1.27,>=1.5.0
16
+ Requires-Dist: httpx>=0.27.0
17
+ Requires-Dist: jsonschema>=4.0
18
+ Requires-Dist: openpyxl>=3.1
19
+ Dynamic: license-file
20
+
21
+ # treasy-mcp: o seu Treasy dentro do Claude Code
22
+
23
+ O `treasy-mcp` liga o Claude Code à sua conta do Treasy FP&A. Depois de instalado, você pede ao
24
+ Claude, em português, o que hoje faz no Treasy, e ele consulta os seus dados com o seu usuário.
25
+
26
+ Em produção o pacote é **somente leitura**: ele consulta, nunca altera.
27
+
28
+ ## 1. Instale o `uv` (uma vez por computador)
29
+
30
+ O `uv` é o programa que baixa e roda o `treasy-mcp`. Se o comando `uv --version` já responde,
31
+ pule para o passo 2.
32
+
33
+ **Windows** (no PowerShell):
34
+
35
+ ```powershell
36
+ winget install --id astral-sh.uv -e
37
+ ```
38
+
39
+ **macOS** (no Terminal):
40
+
41
+ ```bash
42
+ curl -LsSf https://astral.sh/uv/install.sh | sh
43
+ ```
44
+
45
+ **Linux** (no terminal):
46
+
47
+ ```bash
48
+ curl -LsSf https://astral.sh/uv/install.sh | sh
49
+ ```
50
+
51
+ Feche e abra o terminal depois de instalar.
52
+
53
+ ## 2. Ligue o Treasy ao Claude Code (a linha da instalação)
54
+
55
+ ```bash
56
+ claude mcp add treasy -- uvx treasy-mcp
57
+ ```
58
+
59
+ ## 3. Entre com o seu usuário do Treasy (a linha do login)
60
+
61
+ ```bash
62
+ uvx treasy-mcp login
63
+ ```
64
+
65
+ O navegador abre na página de login do Treasy. Entre com o seu e-mail e a sua senha de sempre.
66
+ A senha fica só no navegador: o `treasy-mcp` guarda uma sessão no seu computador, na pasta
67
+ `.treasy` da sua pasta de usuário, e nunca vê a senha.
68
+
69
+ ## 4. Pronto: peça ao Claude
70
+
71
+ Abra o Claude Code e peça, por exemplo: "liste as minhas empresas no Treasy".
72
+
73
+ ## Quando algo não funciona
74
+
75
+ Rode o diagnóstico e mande as seis linhas ao suporte da Treasy (elas não têm segredo):
76
+
77
+ ```bash
78
+ uvx treasy-mcp doctor
79
+ ```
80
+
81
+ | O que aparece | O que fazer |
82
+ |---|---|
83
+ | `sem sessão de prod` | Rode `uvx treasy-mcp login`. |
84
+ | `a sessão de prod venceu` | Rode `uvx treasy-mcp login` de novo. |
85
+ | `porta 47650 ocupada` | Feche o programa que usa a porta 47650 e rode o login de novo. |
86
+ | `não respondeu` no SSO ou na API | Confira a internet, o proxy ou o firewall da empresa para `*.treasy.com.br`. |
87
+
88
+ Outros comandos:
89
+
90
+ ```bash
91
+ uvx treasy-mcp status # mostra a sessão gravada (nunca o token)
92
+ uvx treasy-mcp sair # apaga a sessão deste computador
93
+ uvx treasy-mcp --version # a versão instalada
94
+ ```
95
+
96
+ Para usar outro ambiente que a Treasy lhe indicar (`qa` ou `sandbox`), acrescente o nome ao
97
+ login (`uvx treasy-mcp login sandbox`) e ligue o Claude com a variável do ambiente:
98
+ `claude mcp add treasy -e TREASY_AMBIENTE=sandbox -- uvx treasy-mcp`.
@@ -0,0 +1,448 @@
1
+ # treasy-copilot-mcp
2
+ Treasy Copilot MCP
3
+
4
+ > **Para instalar no Claude Code como cliente** (sem clonar este repositório), siga o
5
+ > [`INSTALAR.md`](INSTALAR.md): é a fonte única das instruções do pacote `treasy-mcp`. Para construir e
6
+ > conferir o pacote: `python -m build` e depois `python scripts/verificar_wheel.py dist` (sai 0 limpo,
7
+ > 1 achou segredo ou lixo, 2 não mediu).
8
+
9
+ ## Pré-requisitos
10
+
11
+ - Python 3.11 gerenciado pelo **pyenv**
12
+ - **pyenv-virtualenv** para criar o ambiente virtual do projeto
13
+ > Instale o **pyenv** antes de continuar: [linux](https://github.com/pyenv/pyenv) ou [windows](https://github.com/pyenv-win/pyenv-win). Para gerenciar ambientes virtuais pelo pyenv, instale também o [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv).
14
+
15
+ ## Primeira execução do projeto
16
+
17
+ Siga os passos abaixo após baixar ou clonar o projeto pela primeira vez.
18
+
19
+ ### 1. Instalar o Python e criar o virtualenv com pyenv
20
+
21
+ ```bash
22
+ pyenv install 3.11
23
+ pyenv virtualenv 3.11 treasy-copilot-mcp
24
+ pyenv local treasy-copilot-mcp
25
+ python --version
26
+ ```
27
+
28
+ O comando `pyenv local treasy-copilot-mcp` cria o arquivo `.python-version` na raiz do projeto. Assim, sempre que você estiver nesta pasta, o `pyenv` selecionará automaticamente o ambiente virtual `treasy-copilot-mcp`.
29
+
30
+ Se a versão `3.11` não estiver disponível no seu ambiente, instale uma versão específica do Python 3.11, por exemplo:
31
+
32
+ ```bash
33
+ pyenv install 3.11.9
34
+ pyenv virtualenv 3.11.9 treasy-copilot-mcp
35
+ pyenv local treasy-copilot-mcp
36
+ python --version
37
+ ```
38
+
39
+ Para confirmar que o virtualenv do pyenv está ativo:
40
+
41
+ ```bash
42
+ pyenv version
43
+ pyenv which python
44
+ ```
45
+
46
+ ### 2. Instalar as dependências
47
+
48
+ Para instalar o projeto em modo editável com as dependências de execução:
49
+
50
+ ```bash
51
+ python -m pip install --upgrade pip
52
+ python -m pip install -e .
53
+ ```
54
+
55
+ Se também for rodar testes localmente, instale as dependências de desenvolvimento:
56
+
57
+ ```bash
58
+ python -m pip install -r requirements-dev.txt
59
+ ```
60
+
61
+ ### 3. Configurar variáveis de ambiente
62
+
63
+ Crie o arquivo `.env` a partir do exemplo:
64
+
65
+ ```bash
66
+ cp .env.example .env
67
+ ```
68
+
69
+ No Windows PowerShell:
70
+
71
+ ```powershell
72
+ Copy-Item .env.example .env
73
+ ```
74
+
75
+ Depois, preencha no `.env` os valores necessários:
76
+
77
+ ```env
78
+ TREASY_CLIENT_SECRET=
79
+ TREASY_CLIENT_SECRET_QA=
80
+ TREASY_API_BASE_URL_SANDBOX=
81
+ ```
82
+
83
+ ### 4. Inicializar o servidor MCP
84
+
85
+ Com o ambiente virtual do pyenv ativo, execute:
86
+
87
+ ```bash
88
+ python -m treasy_mcp
89
+ ```
90
+
91
+ Após instalar o projeto com `python -m pip install -e .`, também é possível iniciar pelo script:
92
+
93
+ ```bash
94
+ treasy-mcp
95
+ ```
96
+
97
+ Por padrão, a execução local usa transporte stdio. Para rodar o MCP como serviço HTTP separado, use:
98
+
99
+ ```bash
100
+ MCP_TRANSPORT=http MCP_HOST=0.0.0.0 MCP_PORT=7000 python -m treasy_mcp
101
+ ```
102
+
103
+ Nesse modo, o endpoint MCP fica disponível em:
104
+
105
+ ```text
106
+ http://localhost:7000/mcp
107
+ ```
108
+
109
+ No Docker Compose da raiz do projeto agregador, esse serviço é chamado pelo backend em:
110
+
111
+ ```text
112
+ http://treasy-copilot-mcp:7000/mcp
113
+ ```
114
+
115
+ ### 5. Rodar os testes
116
+
117
+ ```bash
118
+ pytest
119
+ ```
120
+
121
+ ### 6. Login pelo navegador (opcional, sem guardar senha)
122
+
123
+ Para usar o Treasy MCP no Claude Code sem deixar a senha num arquivo, a pessoa entra pelo navegador
124
+ com um comando que ela mesma roda no terminal. O comando abre a tela do Keycloak (Authorization Code
125
+ com PKCE, client público, sem segredo), confere que a API aceita o token e grava só o `refresh_token`
126
+ em `%USERPROFILE%\.treasy\sessao-<ambiente>.json`, o arquivo que o modo claude-code já lê. O MCP nunca
127
+ abre navegador sozinho, e este módulo não é importado por nenhum outro (o Copilot não o sente).
128
+
129
+ Não há nada a configurar: o client público `treasy-mcp-navegador` (esforço `002677`, nos três
130
+ ambientes) já vem no programa. A variável `TREASY_CLIENT_ID_NAVEGADOR_<AMBIENTE>` só existe para
131
+ trocá-lo, se a Treasy pedir; o `ambassador` nunca serve. Na pasta do projeto:
132
+
133
+ ```powershell
134
+ python -m treasy_mcp.login_navegador login sandbox # prod | qa | sandbox
135
+ python -m treasy_mcp.login_navegador status # o que está gravado (nunca o token)
136
+ python -m treasy_mcp.login_navegador sair sandbox # apaga a sessão deste computador
137
+ ```
138
+
139
+ - O `login` diz o ambiente e o host antes de abrir o navegador, e no fim com que e-mail entrou.
140
+ - A volta usa `http://127.0.0.1:47650/callback`; essa é a `redirect_uri` cadastrada no client. Outra
141
+ porta só serve se estiver cadastrada (`TREASY_NAVEGADOR_PORTA` ou `--porta`).
142
+ - Escopos pedidos: `openid email profile` (`TREASY_NAVEGADOR_ESCOPOS` troca; `offline_access` faz o
143
+ refresh durar dias em disco).
144
+ - Sem navegador (`--sem-abrir` ou o navegador não abre): o comando imprime o endereço; abra-o no
145
+ MESMO computador em que o comando roda. Em terminal SSH ou WSL o comando avisa isso antes de
146
+ esperar. Sessão remota (nuvem, Remote Control) não é suportada.
147
+ - Códigos de saída: `0` fez; `1` o SSO ou a API recusou; `2` não fez (ambiente sem login liberado,
148
+ porta ocupada, tempo esgotado de 180 s, rede, ambiente `local`, que não usa SSO).
149
+ - A sessão dura no máximo 10 h (o teto do Keycloak): depois disso, um novo `login`.
150
+ - Qualquer falha deixa o arquivo de sessão anterior como estava. A senha do `.env` não é apagada:
151
+ se ela existir, o comando só avisa qual linha remover.
152
+ - O `sair` apaga a sessão deste computador e deixa a marca `sair-<ambiente>.json`: um servidor MCP já
153
+ aberto larga a sessão no pedido seguinte e passa a pedir login. Ele não encerra a sessão no
154
+ Keycloak: a versão da Treasy não revoga só o acesso do MCP, e encerrar a sessão derrubaria também o
155
+ T30 web. O refresh já emitido segue válido lá até vencer, mas não fica guardado em lugar nenhum.
156
+ - Sem o segredo do `ambassador` (quem não é da casa), o MCP nunca tenta a senha: o único caminho é
157
+ este login.
158
+
159
+ ## Modo claude-code (login sozinho, só por stdio)
160
+
161
+ Para usar o Treasy MCP dentro do Claude Code com o seu usuário, sem a senha passar pelo chat.
162
+ O modo liga só com as **duas** variáveis juntas, no processo que o Claude Code lança:
163
+
164
+ ```env
165
+ TREASY_MCP_MODO=claude-code
166
+ TREASY_AMBIENTE=sandbox # prod | qa | sandbox | local
167
+ ```
168
+
169
+ - Sem `TREASY_MCP_MODO`, nada muda: é o modo do backend do Copilot (`treasy_set_token`).
170
+ - Valor inválido em qualquer uma das duas, ou `MCP_TRANSPORT=http`, e o processo não sobe.
171
+ - `treasy_login` e `treasy_set_token` somem da lista e são recusados.
172
+ - **Prod escreve com confirmação a cada chamada** (seção "Escrita em produção", abaixo); só o operador desliga,
173
+ com `TREASY_MCP_ESCRITA_PROD=off`. qa, sandbox e local escrevem com a mesma confirmação.
174
+ - Em sandbox, qa e local a escrita pelo gateway exige `TREASY_GATEWAY_WRITES` no ambiente do processo que lança o
175
+ MCP, porque o `.env` do modo só carrega `TREASY_CLIENT_SECRET*`, `TREASY_API_BASE_URL_*` e `TREASY_SSO_URL_*`.
176
+ - `treasy_listar_empresas` lê todas as páginas e aceita `filtro` (parte do nome ou do CNPJ);
177
+ `treasy_selecionar_empresa` só aceita id que veio dessa lista e passa a mandar `XXX-LITE-EMPRESA`.
178
+
179
+ **Onde mora o seu login.** Num arquivo fora de qualquer repositório, que só você edita:
180
+ `%USERPROFILE%\.treasy\treasy-mcp.env` (ou o caminho em `TREASY_CREDENCIAIS_FILE`), com
181
+ `TREASY_LOGIN_<AMBIENTE>` e `TREASY_SENHA_<AMBIENTE>` (`PROD`, `QA`, `SANDBOX`). Os segredos do
182
+ client `ambassador` continuam no `.env` deste repositório (ou no arquivo de `TREASY_ENV_FILE`).
183
+
184
+ ```powershell
185
+ python -m treasy_mcp.credenciais modelo # cria o arquivo com as chaves vazias (nunca sobrescreve)
186
+ python -m treasy_mcp.credenciais status # diz por ambiente se há login e senha, sem mostrar valor
187
+ python -m treasy_mcp.credenciais medir sandbox # UM login: ok ou negado, e os prazos dos tokens
188
+ python -m treasy_mcp.modo listar escrita # as ferramentas de uma classe, uma por linha
189
+ ```
190
+
191
+ **A sessão.** O `refresh_token` fica em `%USERPROFILE%\.treasy\sessao-<ambiente>.json` e é tentado
192
+ antes da senha. Se o SSO recusar a senha, o MCP não tenta de novo até o arquivo de credenciais
193
+ mudar (`senha-negada-<ambiente>.json`), para não bloquear a sua conta. Nunca cole a senha no chat.
194
+
195
+ ### Escrita em produção
196
+
197
+ No modo `claude-code` com `TREASY_AMBIENTE=prod`, o MCP faz CRUD completo (criar, alterar, excluir, pelas
198
+ ferramentas dedicadas e pelo `treasy_api_executar`), **sempre com o humano no meio**:
199
+
200
+ 1. **Confirmação a cada escrita.** Se o cliente MCP atende `elicitation`, o servidor pergunta ao humano, com o
201
+ resumo (verbo, alvo, empresa com id e nome, ambiente; excluir diz "NÃO se desfaz"), e só grava com "aceitar".
202
+ Senão, a 1ª chamada devolve `requer_confirmacao` com o resumo e um `confirmacao_id` de uso único, que vale 60 s
203
+ e só com os mesmos argumentos e a mesma empresa ativa. `confirmar_escrita=true` sozinho não grava.
204
+ 2. **Auditoria antes.** Cada escrita grava duas linhas (`pedido` e `resultado`, ligadas por `id_do_evento`, esquema
205
+ `v1`) em `~/.treasy/auditoria/AAAA-MM.jsonl` (`TREASY_MCP_AUDITORIA_DIR` troca a pasta; arquivos com mais de
206
+ 180 dias saem). `senha`, `token`, CPF e e-mail saem mascarados. Se a linha `pedido` não grava, nada é enviado.
207
+ 3. **Teto.** 10 escritas por minuto e 50 por sessão (`TREASY_MCP_TETO_POR_MINUTO`, `TREASY_MCP_TETO_POR_SESSAO`).
208
+ 4. **Resposta incerta.** Timeout, 5xx ou corpo ilegível depois do envio: "a gravação pode ter acontecido: confira com
209
+ a leitura antes de repetir".
210
+
211
+ **Como o operador desliga:** `TREASY_MCP_ESCRITA_PROD=off` no ambiente do processo que lança o MCP. Com ela, prod volta
212
+ a ser somente leitura (as escritas somem da lista e são recusadas). Só `off` e vazio são aceitos; outro valor e o
213
+ processo não sobe. A variável não vale fora de prod, nem fora do modo.
214
+
215
+ **Códigos de `motivo`** (estáveis; a recusa volta como `{"recusado": true, "motivo": ..., "mensagem": ...}`):
216
+
217
+ | `motivo` | Quando |
218
+ |---|---|
219
+ | `desligada_pelo_operador` | `TREASY_MCP_ESCRITA_PROD=off` em prod |
220
+ | `segredo_ou_plataforma` | operação de segredo ou de plataforma pelo `treasy_api_executar`, recusada em prod |
221
+ | `teto` | 10 por minuto ou 50 por sessão atingidos |
222
+ | `auditoria` | a linha `pedido` não pôde ser gravada; nada foi enviado |
223
+ | `autenticacao` | `treasy_login` e `treasy_set_token` no modo |
224
+ | `sem_classe` | ferramenta fora das classes leitura, escrita e autenticação |
225
+ | `negada_pelo_humano` | o humano recusou a pergunta do cliente MCP |
226
+ | `confirmacao_desconhecida` | `confirmacao_id` que o servidor não emitiu |
227
+ | `confirmacao_ja_usada` | `confirmacao_id` reusado |
228
+ | `confirmacao_expirada` | `confirmacao_id` com mais de 60 s |
229
+ | `confirmacao_divergente` | argumentos ou empresa ativa diferentes dos do pedido |
230
+
231
+ **Risco residual, no caminho por id.** O `confirmacao_id` volta ao modelo, que pode repeti-lo sem mostrar o resumo
232
+ ao usuário: nesse caminho a barreira contra uma instrução maliciosa é fraca. O caminho por `elicitation` não tem
233
+ esse furo, porque a pergunta vai direto ao humano. Não há desfazer: o que o T30 gravou só se corrige gravando de novo.
234
+
235
+ **Fora de prod.** Dentro do modo, qa, sandbox e local têm a mesma confirmação, auditoria e teto. Só a recusa de
236
+ segredo e plataforma (`segredo_ou_plataforma`) e o interruptor do operador valem apenas em prod. Antes de pedir,
237
+ o servidor lê o alvo (GET do mesmo caminho, só se liberado) e mostra nome, valor e antes e depois; sem leitura
238
+ prévia, o resumo diz "sem leitura prévia". Fora do modo (Copilot) nada muda.
239
+
240
+ <br>
241
+ <br>
242
+
243
+ ----
244
+
245
+ ## Enviar e baixar arquivo pelo gateway (003966)
246
+
247
+ - **Enviar** (anexo de fato, causa, ação ou comentário; logo; foto): peça ao Claude passando o **caminho completo** do arquivo, por exemplo `C:/Users/ana/Documents/nota.pdf`. O `treasy_api_executar` recebe isso em `arquivos` (`{"file": "<caminho>"}`) e os demais campos em `campos`. Antes de enviar, ele mostra ambiente, schema, empresa, nome, bytes e sha256 e pede a sua confirmação; se o arquivo mudar entre o resumo e a confirmação, nada sobe.
248
+ - **Baixar**: o arquivo vai para `~/treasy-exportacoes/<ambiente>/<schema>/arquivos/` (ou `TREASY_EXPORTACAO_DIR`), e o Claude recebe só o caminho, o tamanho e o sha256. Conteúdo executável ganha a extensão `.bin`.
249
+ - **Limites**: 50 MB nos dois sentidos (`TREASY_ARQUIVO_TETO_ENVIO_MB`, `TREASY_ARQUIVO_TETO_DOWNLOAD_MB`); o servidor do T30 corta o pedido entre 45 e 50 MB (medido no sandbox em 2026-11-01). Tipos que sobem: pdf, png, jpg, jpeg, xlsx, csv, txt, docx. `TREASY_ENVIO_DIR` restringe o envio a uma pasta. Pastas sensíveis (`.treasy`, `.ssh`, `.git`, `.env*`, chaves) nunca sobem. Envio em produção está desligado; o servidor por HTTP remoto não vê o seu disco e recusa.
250
+ - **Troca de logo**: o MCP baixa o logo atual para a pasta acima antes de trocar; se não conseguir, não troca.
251
+
252
+ ## Exportar o resultado de uma consulta para arquivo
253
+
254
+ A ferramenta `treasy_exportar` roda por dentro uma ferramenta de **leitura** e grava o resultado em
255
+ arquivo. Ao modelo volta só o caminho, o formato e as contagens de linhas e colunas: nenhuma célula
256
+ entra na conversa. Ela só existe no **modo claude-code** (`TREASY_MCP_MODO=claude-code`); fora dele
257
+ não aparece na lista e, se for chamada, é recusada sem tocar em rede nem em disco.
258
+
259
+ | Argumento | O que é |
260
+ |---|---|
261
+ | `ferramenta` | nome da leitura a consultar (ex.: `treasy_listar_contas`) |
262
+ | `argumentos` | os argumentos dessa leitura (opcional) |
263
+ | `formato` | `csv`, `xlsx` ou `json` (obrigatório) |
264
+
265
+ - **Pasta:** `%USERPROFILE%\treasy-exportacoes\<ambiente>\<schema>\`. `TREASY_EXPORTACAO_DIR` (caminho
266
+ absoluto) troca a pasta base. O MCP recusa destino dentro de um repositório git ou de uma pasta do
267
+ OneDrive. O nome do arquivo é gerado pelo MCP (`<ferramenta>_AAAAMMDD-HHMMSS.<formato>`) e nunca
268
+ sobrescreve outro.
269
+ - **CSV:** `utf-8-sig`, separador `;`, vírgula decimal (o formato que o Excel em português abre). A origem
270
+ (ambiente, empresa, CNPJ, ferramenta, hora) vai no arquivo irmão `.origem.json`; no Excel, na aba
271
+ `Origem`; no JSON, em `_origem`.
272
+ - **Excel:** precisa do pacote `openpyxl`, que **não** é dependência declarada do MCP. Sem ele, o
273
+ `xlsx` recusa com a instrução `pip install openpyxl` e o CSV e o JSON seguem funcionando.
274
+ - **O que é recusado:** escrita, login, `treasy_selecionar_empresa`, a própria exportadora, empresa não
275
+ selecionada, `schema` diferente do selecionado, mais de 200 mil linhas e ferramenta que devolve texto
276
+ de tela em vez de tabela.
277
+ - **Gateway:** `treasy_exportar` não exporta resposta do gateway, porque `treasy_api_executar` é de escrita.
278
+ - **Cuidado:** o arquivo fica em texto puro no disco. O Claude Code não deve lê-lo (`Read`, `Bash`):
279
+ a negação de leitura dessa pasta é configurada no esforço `002676`.
280
+
281
+ ----
282
+
283
+ # SANDBOX
284
+
285
+ ## Build
286
+
287
+ ```bash
288
+ docker build -t treasy/sandbox/treasy-copilot-mcp . -f Dockerfile
289
+ ```
290
+
291
+ ## Scripts Helm
292
+
293
+ ### install
294
+
295
+ ```bash
296
+ helm install treasy-copilot-mcp helm/sandbox/. --debug
297
+ ```
298
+
299
+ ### install test
300
+
301
+ ```bash
302
+ helm install treasy-copilot-mcp helm/sandbox/. --dry-run --debug
303
+ ```
304
+
305
+ ### upgrade
306
+
307
+ ```bash
308
+ helm upgrade treasy-copilot-mcp helm/sandbox/. --debug
309
+ ```
310
+
311
+ ### upgrade test
312
+
313
+ ```bash
314
+ helm upgrade treasy-copilot-mcp helm/sandbox/. --dry-run --debug
315
+ ```
316
+
317
+ ### rollback
318
+
319
+ ```bash
320
+ helm rollback treasy-copilot-mcp --debug
321
+ ```
322
+
323
+ ### delete
324
+
325
+ ```bash
326
+ helm delete treasy-copilot-mcp --debug
327
+ ```
328
+
329
+ ### package
330
+
331
+ ```bash
332
+ helm package treasy-copilot-mcp helm/sandbox/. --debug
333
+ ```
334
+
335
+ <br>
336
+ <br>
337
+
338
+ ----
339
+
340
+ # QA
341
+
342
+ ## Build
343
+
344
+ ```bash
345
+ docker build -t treasy/qa/treasy-copilot-mcp . -f Dockerfile
346
+ ```
347
+
348
+ ## Scripts Helm
349
+
350
+ ### install
351
+
352
+ ```bash
353
+ helm install treasy-copilot-mcp-qa helm/qa/. --debug
354
+ ```
355
+
356
+ ### install test
357
+
358
+ ```bash
359
+ helm install treasy-copilot-mcp-qa helm/qa/. --dry-run --debug
360
+ ```
361
+
362
+ ### upgrade
363
+
364
+ ```bash
365
+ helm upgrade treasy-copilot-mcp-qa helm/qa/. --debug
366
+ ```
367
+
368
+ ### upgrade test
369
+
370
+ ```bash
371
+ helm upgrade treasy-copilot-mcp-qa helm/qa/. --dry-run --debug
372
+ ```
373
+
374
+ ### rollback
375
+
376
+ ```bash
377
+ helm rollback treasy-copilot-mcp-qa --debug
378
+ ```
379
+
380
+ ### delete
381
+
382
+ ```bash
383
+ helm delete treasy-copilot-mcp-qa --debug
384
+ ```
385
+
386
+ ### package
387
+
388
+ ```bash
389
+ helm package treasy-copilot-mcp-qa helm/qa/. --debug
390
+ ```
391
+
392
+
393
+ <br>
394
+ <br>
395
+
396
+ ----
397
+
398
+ # MASTER (PROD)
399
+
400
+ ## Build
401
+
402
+ ```bash
403
+ docker build -t treasy/master/treasy-copilot-mcp . -f Dockerfile
404
+ ```
405
+
406
+ ## Scripts Helm
407
+
408
+ ### install
409
+
410
+ ```bash
411
+ helm install treasy-copilot-mcp helm/master/. --debug
412
+ ```
413
+
414
+ ### install test
415
+
416
+ ```bash
417
+ helm install treasy-copilot-mcp helm/master/. --dry-run --debug
418
+ ```
419
+
420
+ ### upgrade
421
+
422
+ ```bash
423
+ helm upgrade treasy-copilot-mcp helm/master/. --debug
424
+ ```
425
+
426
+ ### upgrade test
427
+
428
+ ```bash
429
+ helm upgrade treasy-copilot-mcp helm/master/. --dry-run --debug
430
+ ```
431
+
432
+ ### rollback
433
+
434
+ ```bash
435
+ helm rollback treasy-copilot-mcp --debug
436
+ ```
437
+
438
+ ### delete
439
+
440
+ ```bash
441
+ helm delete treasy-copilot-mcp --debug
442
+ ```
443
+
444
+ ### package
445
+
446
+ ```bash
447
+ helm package treasy-copilot-mcp helm/master/. --debug
448
+ ```