Skip to main content
Glama
README.md
# p3-edi-mcp

Servidor MCP de diagnóstico (somente leitura) para os dois sistemas EDI:

1. **P3-EDI-Processor** — ciclo de vida de pedidos DSV (850 outbound, 855/856 inbound, fulfillment Shopify).
2. **edi-shopify-orchestration** — consumo de arquivos 846 e sincronização de inventário em 65+ lojas Shopify.

Dá ao time (via Claude, como custom connector) a capacidade de responder tickets sobre os dois
sistemas sem depender de acesso direto ao código/banco. Nenhuma escrita em banco ou no Shopify —
queries somente `SELECT`, GraphQL somente `query`.

## Tools

| Tool | Sistema | O que faz |
|---|---|---|
| `diagnose_order` | P3 | Timeline completa do ciclo EDI de um pedido com checks, evidências e causas prováveis |
| `check_dsv_eligibility` | P3 | Reproduz (read-only) a decisão de elegibilidade DSV de um pedido/item e explica cada gate |
| `get_raw_edi_files` | P3 | Retorna o conteúdo bruto dos arquivos 855/856 de um pedido |
| `diagnose_inventory` | Orchestration | Por que o SKU X está com estoque errado na loja Y |
| `get_846_history` | Orchestration | Histórico de aparições de um SKU/arquivo nas runs 846 |
| `list_recent_failures` | Ambos | Falhas recentes nos dois sistemas |

Resources: `runbook://pedidos` e `runbook://inventario` — o conhecimento tácito de diagnóstico,
também resumido nas `instructions` do servidor.

## Rodando localmente

```bash
npm install
cp .env.example .env   # preencher as variáveis
npm run dev
```

Healthcheck: `GET /health`. Endpoint MCP (Streamable HTTP, stateless): `POST /mcp` com
`Authorization: Bearer $MCP_AUTH_TOKEN`.

## Env vars

```
MCP_AUTH_TOKEN=          # bearer token exigido em POST /mcp
PORT=3000

P3_DATABASE_URL=         # Postgres do P3-EDI-Processor (único banco de produção)
ORCH_DATABASE_URL=       # Postgres do edi-shopify-orchestration

SHOPIFY_API_VERSION=2026-04
```

Autenticação Shopify: sem tokens novos a provisionar. O MCP lê o token offline por loja direto
da tabela `Session` do banco do P3 (o app Remix já persiste isso via OAuth). Sem sessão válida
para uma loja, as tools degradam (retornam os facts de banco e listam em `warnings` o que
dependeria do Shopify) em vez de falhar.

## Deploy (Railway)

Ver instruções passadas pelo assistente na sessão de setup — resumo: criar serviço a partir
deste repo no mesmo projeto Railway dos dois sistemas (para usar internal URLs dos Postgres),
configurar as env vars acima, expor a URL pública e apontar como custom connector no Claude.