elevor-erp360
# elevor-mcp — MCP server ERP360 / Elevor (DentalInoveh)
Servidor **MCP** que expõe o ERP360 da Elevor para um agente/app. **Construído e testado
ao vivo (10/06)** contra a instalação de produção `s6.elevor.cloud/DentalInoveh/ERP360`.
São **duas APIs** no mesmo ERP, com tokens **por escopo** (auth `Bearer`):
| Escopo | API | Token (.env) | Status |
|---|---|---|---|
| **Clientes** | Comercial `/api/v2/Clientes` | `ELEVOR_TOKEN_CLIENTES` | ✅ funcionando (4.897 clientes) |
| **Pedidos** | Comercial `/api/Pedidos/ConsultarPedidos` | `ELEVOR_TOKEN_PEDIDOS` | ✅ funcionando (83 pedidos c/ itens) |
| **Produtos/Estoque** | Ren9veCommerce `/api/Ren9veCommerce/Produtos*` | `ELEVOR_TOKEN_PRODUTOS` | 🟡 auth OK, catálogo vazio* |
\* *O token de produtos autentica (200 OK), mas o catálogo volta vazio até a Elevor
**marcar os grupos/produtos para o e-commerce** no ERP (config de produção). Quando isso
for feito, `produtos_sync` passa a retornar o catálogo sem mudar nada de código.*
## Tools
| Tool | Escopo | O que faz |
|------|--------|-----------|
| `clientes_list` | clientes | Lista clientes (paginado; filtro por data/cpf/cnpj) |
| `cliente_get` | clientes | Cliente por Cod |
| `cliente_limite_credito` | clientes | Limite de crédito |
| `pedidos_consultar` | pedidos | Consulta pedidos (filtros + paginação); traz Cliente e Produtos |
| `produtos_sync` | produtos | Catálogo: `all` \| `since` \| `changed` (delta) |
| `produto_get` / `estoque_get` | produtos | Produto / saldo por Cod (Estoque + Grades) |
| `produtos_categorias` / `produtos_grades` | produtos | Categorias / grades |
| `pedido_ecommerce_criar` | produtos | **Escrita**: cria pedido (baixa estoque). Requer `ELEVOR_ALLOW_WRITES=true` |
## Setup
```bash
cd ~/elevor-mcp
npm install
cp .env.example .env # .env já tem os tokens reais (gitignored)
npm run build
node test-live.mjs # teste read-only contra produção
```
Registrar no cliente MCP (Claude Desktop / OpenClaw):
```json
{
"mcpServers": {
"elevor-erp360": {
"command": "node",
"args": ["/Users/barboza/elevor-mcp/dist/index.js"],
"env": { "ELEVOR_RADICAL_URL": "http://s6.elevor.cloud/DentalInoveh/ERP360" }
}
}
}
```
(os tokens são lidos do `.env`, ou podem ir no bloco `env`.)
## Pendência única: config do e-commerce (Elevor)
Reunião com o Lucas (Elevor) para configurar no ERP:
1. **Quais grupos/produtos** vão pro e-commerce (destrava o catálogo vazio).
2. Tabela de preço exposta (Preço / Promoção / À Vista).
3. Estoque: `Estoque` já é soma das grades? Há estoque por depósito/filial?
4. Imagens via `ProdutosImagens`. Allowlist de IP. Quem consome o cursor do delta `/Produtos`.
Detalhes técnicos completos em `INTEGRATION_STUDY.md`. Swagger salvo em `erp360-swagger.json`.
TDQS
Scored across 26 tools
Several tools overlap: pedido_ecommerce_criar and pedido_criar_v2 both create orders, while pedidos_consultar and pedido_por_data both query orders by filters/date. produto_get includes stock and grades, making it unclear when estoque_get is needed. This is more than just one or two confusing pairs.
Naming follows no clear convention: cliente_get, clientes_list, pedido_status, pedido_por_data, crm_consultar_atividades, and produtos_sync all use different patterns. It also mixes English and Portuguese verbs in a single toolset, which makes the API feel inconsistent despite the shared domain prefixes.
With 26 tools, the count crosses the 25-tool heavy threshold. Although the ERP/CRM domain is broad, several overlapping order and product tools make the set feel larger than necessary and harder to navigate.
The toolset covers core ERP workflows: customer create/update/read, product and stock retrieval, order lifecycle including create/status/cancel, plus CRM account/contact/activity creation. Minor gaps remain, like product update/delete and CRM read endpoints for contacts, but the main integration flows are usable.