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.
- totvs_moda_mcp-2.0.0/.env.example +23 -0
- totvs_moda_mcp-2.0.0/.gitignore +10 -0
- totvs_moda_mcp-2.0.0/PKG-INFO +345 -0
- totvs_moda_mcp-2.0.0/README.md +324 -0
- totvs_moda_mcp-2.0.0/claude_desktop_config.example.json +15 -0
- totvs_moda_mcp-2.0.0/context_cache.py +162 -0
- totvs_moda_mcp-2.0.0/pyproject.toml +36 -0
- totvs_moda_mcp-2.0.0/requirements.txt +2 -0
- totvs_moda_mcp-2.0.0/server.py +382 -0
- totvs_moda_mcp-2.0.0/tools/__init__.py +1 -0
- totvs_moda_mcp-2.0.0/tools/account_payable.py +31 -0
- totvs_moda_mcp-2.0.0/tools/accounts_receivable.py +74 -0
- totvs_moda_mcp-2.0.0/tools/analytics.py +138 -0
- totvs_moda_mcp-2.0.0/tools/fiscal.py +71 -0
- totvs_moda_mcp-2.0.0/tools/general.py +65 -0
- totvs_moda_mcp-2.0.0/tools/other_modules.py +107 -0
- totvs_moda_mcp-2.0.0/tools/person.py +85 -0
- totvs_moda_mcp-2.0.0/tools/product.py +162 -0
- totvs_moda_mcp-2.0.0/tools/purchase_order.py +32 -0
- totvs_moda_mcp-2.0.0/tools/sales_order.py +178 -0
- totvs_moda_mcp-2.0.0/tools/seller.py +32 -0
- totvs_moda_mcp-2.0.0/tools/voucher.py +22 -0
- totvs_moda_mcp-2.0.0/totvs_client.py +172 -0
|
@@ -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,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.
|