Kawakami Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Kawakami Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
MCP Server que expõe o catálogo do Supermercados Kawakami (Paraguaçu Paulista/SP) como ferramentas para Claude, ChatGPT, OpenCode e qualquer cliente MCP.
Cliente MCP (ChatGPT/Claude/OpenCode)
│
▼
Cloudflare Tunnel (kawakami.axischat.com.br)
│
▼
FastMCP (Python) ← httpx → VIP Commerce API
│
▼
SQLite (sessoes/carrinho/listas)src/
├── main.py # Entrypoint + argparse
├── server.py # FastMCP + tool registration
├── config.py # Settings via env vars
├── domain/
│ ├── models.py # Produto, Oferta, CarrinhoItem...
│ └── exceptions.py # VipCommerceUnavailable, TokenExpired...
├── infrastructure/
│ ├── auth.py # TokenManager (load/save/refresh)
│ ├── vipcommerce_client.py # HTTP client + retry + cache + circuit breaker
│ ├── session_store.py # SQLite-backed sessions
│ ├── circuit_breaker.py # Circuit breaker state machine
│ ├── validation.py # Input sanitization
│ └── error_handler.py # @safe_tool decorator
├── presentation/
│ └── formatters.py # Text formatting
└── tools/
├── busca.py # buscar_produtos, buscar_por_ean
├── catalogo.py # listar_departamentos, produtos_por_departamento, detalhes_produto
├── ofertas.py # ofertas_do_dia, verificar_estoque
├── carrinho.py # adicionar, ver, remover, limpar
└── listas.py # salvar, minhas, ver, excluircp .env.example .env # Preencha KWK_VIP_TOKEN e KWK_VIP_SESSAO_ID
make up # Build + sobe API + tunnel| Tool | Descrição |
|---|---|
criar_sessao | Cria um identificador isolado para carrinho e listas |
buscar_produtos | Busca produtos por nome |
buscar_por_ean | Busca por código de barras |
listar_departamentos | Lista departamentos com contagem |
produtos_por_departamento | Produtos de um departamento |
detalhes_produto | Detalhes completos por ID |
ofertas_do_dia | Ranking de melhores ofertas |
verificar_estoque | Estoque de um produto |
adicionar_ao_carrinho | Adiciona item ao carrinho |
ver_carrinho | Mostra carrinho atual |
remover_do_carrinho | Remove item do carrinho |
limpar_carrinho | Esvazia carrinho |
salvar_lista | Salva lista de compras |
minhas_listas | Lista listas salvas |
ver_lista | Detalha uma lista |
excluir_lista | Remove uma lista |
As tools de carrinho e listas exigem o session_id retornado por criar_sessao. O identificador é uma capacidade privada: não compartilhe entre usuários ou conversas.
As tools de produtos e ofertas retornam texto e structuredContent. Clientes compatíveis com MCP Apps carregam o resource ui://kawakami/catalog-v2.html.
Para desenvolver a interface:
cd ui
npm ci
npm run lint
npm run buildO build Vite é embutido no resource MCP. A imagem Docker compila a UI automaticamente.
Ver .env.example para todas as opções. Essenciais:
| Var | Descrição |
|---|---|
KWK_VIP_TOKEN | Token JWT da sessão anônima VIP Commerce |
KWK_VIP_SESSAO_ID | Session ID do VIP Commerce |
KWK_DEFAULT_CEP | CEP padrão (default: 19700000) |
KWK_SESSION_DB_PATH | Caminho persistente do SQLite |
KWK_TOKEN_FILE_PATH | Caminho persistente do token renovado |
KWK_WIDGET_DOMAIN | Origem HTTPS dedicada do widget |
GET /health retorna {"status":"ok"} quando o processo está pronto. O endpoint não consulta a VIP Commerce, evitando reinícios durante indisponibilidade do fornecedor.
make dev # stdio (para testar no OpenCode/Claude Desktop)
make dev-http # HTTP (para testar no navegador)
make test # pytest
make lint # ruff~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.