totvs-moda-mcp 2.0.0__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.
@@ -0,0 +1,23 @@
1
+ # =============================================================================
2
+ # TOTVS Moda MCP Server — Variáveis de Ambiente
3
+ # =============================================================================
4
+ # Copie este arquivo para .env e preencha os valores.
5
+ # NUNCA commite o arquivo .env no repositório.
6
+
7
+ # URL base do servidor TOTVS Moda (sem trailing slash)
8
+ # Exemplo: https://totvs.suaempresa.com.br:9443
9
+ TOTVS_BASE_URL=https://seu-servidor-totvs:9443
10
+
11
+ # Credenciais OAuth2 (Resource Owner Password Credentials)
12
+ # CLIENT_ID padrão da plataforma TOTVS Moda — normalmente não muda
13
+ TOTVS_CLIENT_ID=seu_client_id
14
+ TOTVS_CLIENT_SECRET=
15
+
16
+ # Usuário de integração TOTVS
17
+ TOTVS_USERNAME=
18
+ TOTVS_PASSWORD=
19
+
20
+ # Filiais (branchCode) que este servidor gerencia.
21
+ # Informe os códigos separados por vírgula.
22
+ # Exemplo com múltiplas filiais: TOTVS_BRANCH_CODES=1,2,5
23
+ TOTVS_BRANCH_CODES=1
@@ -0,0 +1,10 @@
1
+ .env
2
+ .venv/
3
+ __pycache__/
4
+ *.pyc
5
+ *.pyo
6
+ .DS_Store
7
+ *.egg-info/
8
+ dist/
9
+ build/
10
+ PUBLISHING.md
@@ -0,0 +1,345 @@
1
+ Metadata-Version: 2.4
2
+ Name: totvs-moda-mcp
3
+ Version: 2.0.0
4
+ Summary: MCP Server para API V2 do TOTVS Moda — integre Claude e outros clientes MCP ao seu ERP de moda brasileiro
5
+ Project-URL: Homepage, https://github.com/fabianoomura/MCP-Server-Totvs-Moda
6
+ Project-URL: Repository, https://github.com/fabianoomura/MCP-Server-Totvs-Moda
7
+ Project-URL: Issues, https://github.com/fabianoomura/MCP-Server-Totvs-Moda/issues
8
+ License: MIT
9
+ Keywords: brasil,erp,fashion,mcp,moda,model-context-protocol,totvs
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Topic :: Software Development :: Libraries
17
+ Requires-Python: >=3.11
18
+ Requires-Dist: httpx>=0.27.0
19
+ Requires-Dist: mcp>=1.0.0
20
+ Description-Content-Type: text/markdown
21
+
22
+ # TOTVS Moda MCP Server
23
+
24
+ > MCP (Model Context Protocol) server para integração com a **API V2 do TOTVS Moda**.
25
+ > Permite que Claude e outros clientes MCP consultem e operem pedidos, produtos, clientes, fiscal e financeiro do TOTVS Moda por linguagem natural.
26
+
27
+ ---
28
+
29
+ ## Por que isso existe?
30
+
31
+ O TOTVS Moda é amplamente usado no varejo de moda brasileiro, mas não possui um MCP server oficial.
32
+ Este projeto preenche essa lacuna, permitindo que times usem IA diretamente sobre os dados operacionais do TOTVS — consultas, alertas, automações — sem precisar acessar o sistema manualmente.
33
+
34
+ ---
35
+
36
+ ## Tools disponíveis
37
+
38
+ ### Pedidos de Venda
39
+ | Tool | Método | Endpoint | Descrição |
40
+ |------|--------|----------|-----------|
41
+ | `totvs_search_orders` | POST | `/sales-order/v2/orders/search` | Busca pedidos com filtros flexíveis (data, status, cliente, integração Shopify...) |
42
+ | `totvs_get_order_invoices` | GET | `/sales-order/v2/invoices` | Notas fiscais vinculadas a um pedido |
43
+ | `totvs_get_pending_items` | GET | `/sales-order/v2/pending-items` | Itens pendentes de faturamento |
44
+ | `totvs_get_billing_suggestions` | GET | `/sales-order/v2/billing-suggestions` | Sugestões de faturamento |
45
+ | `totvs_cancel_order` | POST | `/sales-order/v2/orders/cancel` | ⚠️ Cancela um pedido |
46
+ | `totvs_change_order_status` | POST | `/sales-order/v2/orders/change-status` | ⚠️ Altera situação do pedido |
47
+ | `totvs_update_order_items_price` | POST | `/sales-order/v2/price-items` | ⚠️ Atualiza preços de itens do pedido |
48
+
49
+ ### Produtos
50
+ | Tool | Método | Endpoint | Descrição |
51
+ |------|--------|----------|-----------|
52
+ | `totvs_search_products` | POST | `/product/v2/products/search` | Busca produtos por filtro (referência, categoria, código) |
53
+ | `totvs_get_product` | GET | `/product/v2/products/{code}/{branch}` | Dados completos de um produto pelo código |
54
+ | `totvs_get_product_grid` | GET | `/product/v2/grid` | Grade completa (cores e tamanhos) |
55
+ | `totvs_search_product_references` | POST | `/product/v2/references/search` | Referências de produtos |
56
+ | `totvs_search_product_colors` | POST | `/product/v2/colors/search` | Cores disponíveis |
57
+ | `totvs_search_product_balances` | POST | `/product/v2/balances/search` | Saldo em estoque por filial |
58
+ | `totvs_search_product_prices` | POST | `/product/v2/prices/search` | Preços nas tabelas |
59
+ | `totvs_search_product_compositions` | POST | `/product/v2/compositions` | Composição dos produtos |
60
+ | `totvs_search_product_batch` | POST | `/product/v2/batch/search` | Lotes de produtos |
61
+ | `totvs_search_product_fiscal_movement` | POST | `/analytics/v2/product-fiscal-movement/search` | Movimentação fiscal de produtos |
62
+ | `totvs_search_price_tables` | POST | `/product/v2/price-tables/search` | Tabelas de preço disponíveis |
63
+ | `totvs_get_kardex_movement` | GET | `/product/v2/kardex-movement` | Movimentação kardex |
64
+ | `totvs_update_product_price` | POST | `/product/v2/values/update` | ⚠️ Atualiza preço de produto |
65
+ | `totvs_update_promotion_price` | POST | `/product/v2/promotion-values/update` | ⚠️ Atualiza preço de promoção |
66
+
67
+ ### Clientes
68
+ | Tool | Método | Endpoint | Descrição |
69
+ |------|--------|----------|-----------|
70
+ | `totvs_search_individual_customers` | POST | `/person/v2/individuals/search` | Busca clientes pessoa física |
71
+ | `totvs_search_legal_customers` | POST | `/person/v2/legal-entities/search` | Busca clientes pessoa jurídica |
72
+ | `totvs_get_person_statistics` | GET | `/person/v2/person-statistics` | Estatísticas de um cliente |
73
+ | `totvs_search_top_customers` | POST | `/financial/v2/ranking-customer-biggers/search` | Melhores clientes por período |
74
+ | `totvs_search_top_debtors` | POST | `/financial/v2/ranking-customer-debtors/search` | Maiores devedores |
75
+ | `totvs_get_customer_bonus_balance` | POST | `/person/v2/list-balance-bonus` | Saldo de bônus do cliente |
76
+ | `totvs_create_or_update_individual_customer` | POST | `/person/v2/individual-customers` | ⚠️ Cria ou atualiza cliente PF |
77
+
78
+ ### Fiscal
79
+ | Tool | Método | Endpoint | Descrição |
80
+ |------|--------|----------|-----------|
81
+ | `totvs_search_fiscal_invoices` | POST | `/fiscal/v2/invoices/search` | Notas fiscais emitidas |
82
+ | `totvs_search_fiscal_movement` | POST | `/analytics/v2/fiscal-movement/search` | Movimentação fiscal |
83
+ | `totvs_search_invoice_products` | POST | `/fiscal/v2/invoice-products/search` | Produtos de uma nota fiscal |
84
+ | `totvs_get_danfe` | POST | `/fiscal/v2/danfe-search` | DANFE em PDF |
85
+ | `totvs_get_nfe_xml` | GET | `/fiscal/v2/xml-contents/{access_key}` | XML da NF-e |
86
+ | `totvs_get_cost_center` | GET | `/fiscal/v2/cost-center` | Centros de custo |
87
+
88
+ ### Financeiro
89
+ | Tool | Método | Endpoint | Descrição |
90
+ |------|--------|----------|-----------|
91
+ | `totvs_search_receivable_documents` | POST | `/accounts-receivable/v2/documents/search` | Títulos a receber |
92
+ | `totvs_search_payable_duplicates` | POST | `/accounts-payable/v2/duplicates/search` | Duplicatas a pagar |
93
+ | `totvs_search_total_receivable` | POST | `/financial/v2/total-receivable/search` | Total a receber |
94
+ | `totvs_search_total_payable` | POST | `/financial/v2/total-payable/search` | Total a pagar |
95
+ | `totvs_search_customer_financial_balance` | POST | `/accounts-receivable/v2/customer-financial-balance/search` | Posição financeira do cliente |
96
+ | `totvs_search_financial_income_statement` | POST | `/financial/v2/financial-income-statement/search` | DRE financeiro |
97
+ | `totvs_get_bank_slip` | POST | `/accounts-receivable/v2/bank-slip` | Boleto bancário |
98
+ | `totvs_get_payment_link` | POST | `/accounts-receivable/v2/payment-link` | Link de pagamento |
99
+ | `totvs_simulate_payment_plan` | POST | `/general/v2/payment-plan-simulate` | Simula plano de pagamento |
100
+ | `totvs_get_payment_conditions` | GET | `/general/v2/payment-conditions` | Condições de pagamento disponíveis |
101
+ | `totvs_create_voucher` | POST | `/voucher/v2/create` | ⚠️ Cria voucher |
102
+ | `totvs_search_voucher` | GET | `/voucher/v2/search` | Busca vouchers |
103
+
104
+ ### Analytics
105
+ | Tool | Método | Endpoint | Descrição |
106
+ |------|--------|----------|-----------|
107
+ | `totvs_search_best_selling_products` | POST | `/ecommerce/v2/best-selling-products/search` | Produtos mais vendidos |
108
+ | `totvs_search_sales_by_hour` | POST | `/ecommerce/v2/sales-quantity-hour/search` | Vendas por hora |
109
+ | `totvs_search_sales_by_weekday` | POST | `/ecommerce/v2/sales-quantity-weekday/search` | Vendas por dia da semana |
110
+ | `totvs_search_commissions_paid` | POST | `/accounts-payable/v2/comissions-paid/search` | Comissões pagas |
111
+ | `totvs_search_devolutions` | GET | `/general/v2/devolutions/search` | Devoluções |
112
+
113
+ ### Compras & Produção
114
+ | Tool | Método | Endpoint | Descrição |
115
+ |------|--------|----------|-----------|
116
+ | `totvs_search_purchase_orders` | POST | `/purchase-order/v2/search` | Pedidos de compra |
117
+ | `totvs_search_production_orders` | POST | `/production-order/v2/orders/search` | Ordens de produção |
118
+
119
+ ### Geral
120
+ | Tool | Método | Endpoint | Descrição |
121
+ |------|--------|----------|-----------|
122
+ | `totvs_get_operations` | GET | `/general/v2/operations` | Operações disponíveis |
123
+ | `totvs_get_branch_parameters` | GET | `/general/v2/branch-parameter` | Parâmetros da filial |
124
+ | `totvs_get_global_parameters` | GET | `/general/v2/global-parameter` | Parâmetros globais |
125
+ | `totvs_get_users` | GET | `/general/v2/users` | Usuários do sistema |
126
+ | `totvs_get_cep` | GET | `/general/v2/ceps/{cep}` | Consulta endereço por CEP |
127
+ | `totvs_search_sellers` | POST | `/seller/v2/search` | Vendedores |
128
+
129
+ ### Contexto
130
+ | Tool | Descrição |
131
+ |------|-----------|
132
+ | `totvs_get_context` | Retorna todos os dados de referência carregados na inicialização (ver seção abaixo) |
133
+
134
+ ---
135
+
136
+ ## Pré-requisitos
137
+
138
+ - Python 3.11+
139
+ - Acesso à API V2 do TOTVS Moda (client_id, client_secret, usuário e senha)
140
+ - Claude Desktop, Claude Code ou qualquer cliente MCP compatível
141
+
142
+ ---
143
+
144
+ ## Instalação
145
+
146
+ ```bash
147
+ git clone https://github.com/fabianoomura/MCP-Server-Totvs-Moda.git
148
+ cd MCP-Server-Totvs-Moda
149
+
150
+ pip install -r requirements.txt
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Configuração
156
+
157
+ ```bash
158
+ cp .env.example .env
159
+ ```
160
+
161
+ Edite o `.env` com as credenciais do seu ambiente TOTVS:
162
+
163
+ ```env
164
+ TOTVS_BASE_URL=https://seu-servidor-totvs:9443
165
+ TOTVS_CLIENT_ID=seu_client_id
166
+ TOTVS_CLIENT_SECRET=sua_client_secret
167
+ TOTVS_USERNAME=seu_usuario
168
+ TOTVS_PASSWORD=sua_senha
169
+ ```
170
+
171
+ ---
172
+
173
+ ## Uso com Claude Code (VS Code Extension)
174
+
175
+ Abra a paleta de comandos (`Ctrl+Shift+P`), busque **"MCP: Open User Configuration"** e adicione:
176
+
177
+ ```json
178
+ {
179
+ "servers": {
180
+ "totvs-moda": {
181
+ "command": "python",
182
+ "args": ["/caminho/absoluto/para/MCP-Server-Totvs-Moda/server.py"],
183
+ "env": {
184
+ "TOTVS_BASE_URL": "https://seu-servidor-totvs:9443",
185
+ "TOTVS_CLIENT_ID": "seu_client_id",
186
+ "TOTVS_CLIENT_SECRET": "sua_client_secret",
187
+ "TOTVS_USERNAME": "seu_usuario",
188
+ "TOTVS_PASSWORD": "sua_senha",
189
+ "TOTVS_BRANCH_CODES": "1"
190
+ }
191
+ }
192
+ }
193
+ }
194
+ ```
195
+
196
+ ## Uso com Claude Desktop
197
+
198
+ Adicione ao seu `claude_desktop_config.json`:
199
+
200
+ - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
201
+ - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
202
+
203
+ ```json
204
+ {
205
+ "mcpServers": {
206
+ "totvs-moda": {
207
+ "command": "python",
208
+ "args": ["/caminho/absoluto/para/MCP-Server-Totvs-Moda/server.py"],
209
+ "env": {
210
+ "TOTVS_BASE_URL": "https://seu-servidor-totvs:9443",
211
+ "TOTVS_CLIENT_ID": "seu_client_id",
212
+ "TOTVS_CLIENT_SECRET": "sua_client_secret",
213
+ "TOTVS_USERNAME": "seu_usuario",
214
+ "TOTVS_PASSWORD": "sua_senha",
215
+ "TOTVS_BRANCH_CODES": "1"
216
+ }
217
+ }
218
+ }
219
+ }
220
+ ```
221
+
222
+ ---
223
+
224
+ ## Exemplos de uso no Claude
225
+
226
+ ```
227
+ "Quais pedidos foram criados hoje?"
228
+
229
+ "Mostre as notas fiscais do pedido 12345."
230
+
231
+ "Qual o estoque do produto 10000?"
232
+
233
+ "Liste os 10 produtos mais vendidos este mês."
234
+
235
+ "Qual a posição financeira do cliente CPF 123.456.789-00?"
236
+
237
+ "Qual o status do pedido SHP-13518?"
238
+ ```
239
+
240
+ ---
241
+
242
+ ## Cache de contexto
243
+
244
+ Ao iniciar, o servidor executa automaticamente uma carga de dados de referência do TOTVS e os mantém em memória. Isso evita chamadas repetitivas de lookup durante consultas, criações e alterações.
245
+
246
+ ### O que é carregado
247
+
248
+ | Chave | Origem | Conteúdo |
249
+ |-------|--------|----------|
250
+ | `branches` | variável de ambiente `TOTVS_BRANCH_CODES` | Lista de códigos de filial configurados pelo usuário |
251
+ | `operations` | `general/v2/operations` | Todas as operações (entrada/saída) ativas e inativas |
252
+ | `paymentConditions` | `general/v2/payment-conditions` | Condições de pagamento disponíveis |
253
+ | `paymentPlans` | `general/v2/payment-plans` | Planos de pagamento |
254
+ | `priceTables` | `product/v2/price-tables-headers` | Cabeçalhos das tabelas de preço |
255
+ | `classifications` | `product/v2/classifications` | Classificações de produto |
256
+ | `categories` | `product/v2/category` | Categorias de produto |
257
+ | `grids` | `product/v2/grid` | Grades disponíveis (tamanhos) |
258
+ | `measurementUnits` | `product/v2/measurement-unit` | Unidades de medida |
259
+ | `users` | `management/v2/users` | Usuários cadastrados (e seus `branchCode`) |
260
+ | `priceTypes` | `product/v2/prices/search` | Tipos de preço ativos (código + nome) |
261
+ | `costTypes` | `product/v2/costs/search` | Tipos de custo ativos (código + nome) |
262
+
263
+ ### Como `branches` é configurado
264
+
265
+ O TOTVS Moda não possui um endpoint de listagem de filiais sem parâmetros. Por isso, as filiais são informadas diretamente no arquivo `.env` via `TOTVS_BRANCH_CODES`:
266
+
267
+ ```env
268
+ # Uma filial
269
+ TOTVS_BRANCH_CODES=1
270
+
271
+ # Múltiplas filiais
272
+ TOTVS_BRANCH_CODES=1,2,5
273
+ ```
274
+
275
+ O valor é lido na inicialização e exposto como lista de inteiros em `branches`. O primeiro código da lista é usado como filial padrão nas consultas de descoberta de tipos de preço/custo.
276
+
277
+ ### Como `priceTypes` e `costTypes` são descobertos
278
+
279
+ O TOTVS Moda não expõe um endpoint dedicado para listar tipos de preço e custo. Na inicialização, o servidor adota a seguinte estratégia:
280
+
281
+ 1. Busca os **20 produtos mais vendidos nos últimos 30 dias** via `ecommerce-sales-order/v2/best-selling-products/search`.
282
+ 2. Se não houver vendas no período, faz um fallback para **20 produtos quaisquer** via `product/v2/products/search`.
283
+ 3. Com a lista de `productCode` obtida, consulta preços passando `priceCodeList: [1..20]` — o TOTVS retorna apenas os tipos que existem, ignorando os inválidos.
284
+ 4. Os pares `{priceCode, priceName}` e `{costCode, costName}` extraídos (deduplicados) são armazenados em `priceTypes` e `costTypes`.
285
+
286
+ ### Como usar o contexto
287
+
288
+ Chame `totvs_get_context` antes de qualquer operação de escrita para obter os códigos corretos:
289
+
290
+ ```
291
+ "Quais tipos de preço estão disponíveis?"
292
+ → totvs_get_context → priceTypes: [{priceCode: 1, priceName: "Preço de Venda"}, ...]
293
+ ```
294
+
295
+ O resultado de `totvs_get_context` é o mesmo objeto em memória — não gera chamadas adicionais ao TOTVS enquanto o servidor estiver rodando.
296
+
297
+ ### Atualização do cache
298
+
299
+ O cache é carregado uma vez na inicialização. Para recarregar sem reiniciar o servidor, basta chamar `totvs_get_context` — se ainda não estiver carregado, ele dispara o `load()` automaticamente.
300
+
301
+ ---
302
+
303
+ ## Autenticação TOTVS
304
+
305
+ O servidor usa o fluxo **OAuth2 Resource Owner Password Credentials (ROPC)**, padrão do TOTVS Moda API V2. O token é obtido automaticamente e renovado antes de expirar — nenhuma ação manual é necessária.
306
+
307
+ ---
308
+
309
+ ## Operações de escrita
310
+
311
+ Tools marcadas com ⚠️ **modificam dados no TOTVS**. Use com atenção.
312
+
313
+ ---
314
+
315
+ ## Estrutura do projeto
316
+
317
+ ```
318
+ MCP-Server-Totvs-Moda/
319
+ ├── server.py # Entry point MCP (stdio)
320
+ ├── totvs_client.py # HTTP client com OAuth2 auto-refresh
321
+ ├── context_cache.py # Cache de dados de referência (carregado na inicialização)
322
+ ├── tools/
323
+ │ ├── __init__.py
324
+ │ ├── sales_order.py # Pedidos de venda
325
+ │ ├── product.py # Produtos
326
+ │ ├── person.py # Clientes
327
+ │ ├── fiscal.py # Fiscal / NF-e
328
+ │ ├── accounts_receivable.py # Contas a receber
329
+ │ ├── account_payable.py # Contas a pagar
330
+ │ ├── analytics.py # Analytics e relatórios
331
+ │ ├── purchase_order.py # Pedidos de compra
332
+ │ ├── seller.py # Vendedores
333
+ │ ├── voucher.py # Vouchers
334
+ │ ├── general.py # Parâmetros e utilitários
335
+ │ └── other_modules.py # Módulos adicionais
336
+ ├── requirements.txt
337
+ ├── .env.example
338
+ └── README.md
339
+ ```
340
+
341
+ ---
342
+
343
+ ## Licença
344
+
345
+ MIT — use livremente, inclusive em projetos comerciais.