Skip to main content
Glama
README.md
# Olist MCP

Servidor [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) open source e auto-hospedável para a **API V2 do Olist ERP (Tiny)**. Funciona por `stdio`, portanto pode ser usado pelo Codex, Claude Desktop e qualquer cliente/harness compatível com MCP.

> A API V2 permanece funcional, mas a Olist informa que ela não receberá novos recursos. Este projeto usa a documentação pública V2, pois não há especificação OpenAPI publicada.

## Recursos

- Uma ferramenta MCP individual para cada um dos **92 endpoints REST V2** que a documentação pública apresenta com URL REST, como `olist_produto_obter`, `olist_nota_fiscal_pesquisa` e `olist_conta_receber_baixar`;
- Schemas de entrada e descrições dos parâmetros extraídos da página oficial de cada serviço;
- Proteção contra escrita: ferramentas que incluem, alteram, atualizam, baixam, lançam, estornam, emitem, excluem, cancelam, geram, enviam ou concluem exigem `confirmar: true`.

As chamadas são feitas por `POST` com `application/x-www-form-urlencoded`, incluindo `token` e `formato=JSON`, exatamente no formato apresentado pela documentação V2.

## Pré-requisitos

- Node.js 20 ou superior;
- um token da API Olist/Tiny, gerado no ERP. Não envie esse token em conversas nem o versiona em arquivos.

## Instalação e execução local

```bash
git clone <URL_DESTE_REPOSITORIO> olist-mcp
cd olist-mcp
npm install
npm run build
export OLIST_API_TOKEN='seu-token'
npm start
```

O processo não abre porta HTTP: o cliente MCP inicia o executável e conversa por entrada/saída padrão. Para desenvolvimento, use `npm run dev`.

Para instalar globalmente após publicar o pacote no npm, o comando será `npm install -g olist-mcp`; até lá, prefira apontar o harness para o `dist/index.js` deste clone.

## Configuração no Codex

Depois do `npm run build`, adicione uma entrada ao arquivo de configuração MCP do Codex (substitua o caminho absoluto e o token):

```toml
[mcp_servers.olist]
command = "node"
args = ["/caminho/absoluto/olist-mcp/dist/index.js"]

[mcp_servers.olist.env]
OLIST_API_TOKEN = "seu-token"
```

Reinicie a sessão do Codex. Nunca use `npm start` como `command`: MCP precisa iniciar o processo diretamente, sem um shell intermediário.

## Configuração no Claude Desktop

No arquivo de configuração do Claude Desktop, inclua (ou mescle) o bloco abaixo:

```json
{
  "mcpServers": {
    "olist": {
      "command": "node",
      "args": ["/caminho/absoluto/olist-mcp/dist/index.js"],
      "env": {
        "OLIST_API_TOKEN": "seu-token"
      }
    }
  }
}
```

Reinicie o Claude Desktop após salvar. Em Windows, use barras duplas no caminho JSON, por exemplo `C:\\Projetos\\olist-mcp\\dist\\index.js`.

## Qualquer outro harness MCP

Configure um transporte `stdio` com:

```text
command: node
args: ["/caminho/absoluto/olist-mcp/dist/index.js"]
env: { OLIST_API_TOKEN: "seu-token" }
```

## Ferramentas, schemas e atualização do catálogo

Não há uma ferramenta genérica: cada endpoint REST documentado vira uma ferramenta MCP própria. Os campos obrigatórios, tipos (`string`, `int`, `decimal` e objeto JSON) e descrições vêm da tabela “Parâmetros do serviço” de sua página oficial. `token` e `formato` não aparecem no schema porque o servidor os inclui automaticamente.

Para atualizar o catálogo quando a Olist modificar a documentação:

```bash
npm run generate:catalog
npm run check && npm test && npm run build
```

O gerador salva o resultado versionado em `src/generated/catalog.ts`; portanto a instalação normal não precisa acessar a internet. Das 127 páginas `api2-*` referenciadas no índice atual, 92 expõem uma URL REST e geram ferramentas. As demais são páginas explicativas (limites, token, webhooks, fluxos ou tabelas auxiliares), não endpoints invocáveis.

Operações de escrita requerem `confirmar: true`, mesmo que o agente já tenha recebido instrução em linguagem natural. Esse é um último guard rail; ele não substitui a revisão dos parâmetros pelo usuário.

## Endpoints e documentação

A Olist publica a lista de serviços e páginas individuais em HTML, no padrão `https://tiny.com.br/api-docs/api2-*`. Como não existe um OpenAPI oficial, este servidor não tenta inventar schemas para todos os endpoints: a ferramenta genérica encaminha os parâmetros documentados e os atalhos cobrem as consultas mais frequentes.

Referências oficiais:

- [Índice da API V2](https://tiny.com.br/api-docs/)
- [Informações da conta](https://tiny.com.br/api-docs/api2-info)
- [Pesquisa de contatos](https://tiny.com.br/api-docs/api2-contatos-pesquisar)
- [Pesquisa de produtos](https://tiny.com.br/api-docs/api2-produtos-pesquisar)
- [Pesquisa de pedidos](https://tiny.com.br/api-docs/api2-pedidos-pesquisar)

## Desenvolvimento

```bash
npm test
npm run check
npm run build
```

Para testes automatizados, defina `OLIST_API_BASE_URL` para um mock/proxy local, se necessário. Não há telemetria e o token só é usado na chamada à API Olist.

## Licença

[MIT](LICENSE).

TDQS

C2.4/5.0

Scored across 92 tools

Disambiguation3/5

Most tools target distinct resource-action pairs (e.g., contato vs produto vs pedido), but there are overlapping invoice operations (nota_fiscal_incluir, nota_fiscal_consumidor_incluir, incluir_nota_xml, pdv_incluir_nota_xml) and inconsistent search variants (expedicao_pesquisa vs expedicao_pesquisar_agrupamentos) that could mislead an agent. The 92-tool scale also makes it hard to select the right tool without deep inspection.

Naming Consistency2/5

The 'olist_' prefix is consistent, but the pattern mixes noun forms (pesquisa, lista, excecoes, info) with infinitive verbs (pesquisar, incluir, obter, alterar) and sometimes places verbs before the object (incluir_nota_xml vs nota_fiscal_incluir). Some tools are pure nouns (pdv_pedidos, pdv_produtos), and 'pesquisar' appears only once while all other searches use 'pesquisa'.

Tool Count1/5

92 tools is far beyond the practical range for a coherent MCP server, making discovery and selection extremely difficult. Even for a broad ERP API, the tool set should be consolidated (e.g., grouping operations by resource or using parameters) to remain navigable.

Completeness2/5

The server covers many domains (contracts, products, CRM, orders, invoices, expedition), but lifecycle coverage is inconsistent: many resources have create/get/update/search but no delete (products, contacts, orders, invoices), while others (vendedores, formas_recebimento) are read-only. This leaves dead ends and prevents full workflows without external workarounds.

Maintenance

ActivityStale
ResponsivenessNo issues