Skip to main content
Glama
GTA7-Lab
by GTA7-Lab

Sorveteria Polar — entidade icecream da GTA7 Lab

No ar: https://gta7-icecream.vercel.app · manifesto em /api/manifest

Sorveteria artesanal da cidade digital GTA7 Lab. Publica cardápio, disponibilidade e horário, calcula o preço de um pedido e recomenda sabores por perfil e restrição alimentar.

Funciona de forma independente (site + API REST) e oferece as mesmas capacidades ao Core Orchestrator via MCP. Sem banco de dados: os arquivos em data/ são a única fonte de verdade.

Rodar local

npm install
npm run dev:local     # http://localhost:3000

dev:local sobe um servidor Node que monta os mesmos handlers de api/ — não exige conta na Vercel. Com a CLI da Vercel logada, npm run dev faz o mesmo pelo runtime real.

npm run smoke         # 41 asserções sobre as regras do core
npm run typecheck     # tsc --noEmit

Related MCP server: Book Store MCP

API REST

Rota

Descrição

GET /api/manifest

manifesto da entidade para o Core

GET /api/shop

dados da loja, is_open e sabor do dia

GET /api/flavors

filtra por query, category, dietary, avoid_allergens, max_price, only_available

GET /api/flavors/:id

detalhe de um sabor (404 se não existir)

GET/POST /api/quote

orçamento: format, flavor_ids, toppings, weekday

GET /api/recommend

sugestões: profile, dietary, avoid_allergens, limit

curl "https://gta7-icecream.vercel.app/api/flavors?dietary=vegano&max_price=1100"
curl "https://gta7-icecream.vercel.app/api/quote?format=casquinha&flavor_ids=baunilha-madagascar&weekday=2"
curl -X POST https://gta7-icecream.vercel.app/api/quote -H "Content-Type: application/json" \
  -d '{"format":"taca","flavor_ids":["chocolate-belga-70","pistache-siciliano"],"toppings":["chantilly"]}'

Preços sempre em centavos (inteiros), moeda BRL. Erros vêm como { "error": { "code": "...", "message": "..." } } — nunca uma exceção.

MCP

Três tools — search_flavors, quote_order e recommend_flavors — servidas por dois transportes que compartilham a mesma definição (src/mcp/tools.ts):

  • HTTP streamable em /api/mcp — é por aí que o Core Orchestrator da cidade consome.

  • stdio, para rodar local:

npm run mcp                    # servidor stdio
npm run test:mcp               # 17 asserções no /api/mcp local
npm run test:mcp -- https://gta7-icecream.vercel.app/api/mcp   # contra producao

Registrar no Claude Code (ajuste o caminho absoluto):

{
  "mcpServers": {
    "icecream": {
      "command": "npx",
      "args": ["tsx", "<caminho absoluto do repo>/src/mcp/server.ts"]
    }
  }
}

Repositório e deploy

Esta entidade tem repositório próprio: GTA7-Lab/sorveteria, com o código na raiz. Até 05/09/2026 ela vivia em entities/icecream/ do monorepo GTA7-Lab/gta7-lab, ao lado de bank, restaurante-ai-q-fome e supermercado — o histórico foi migrado junto.

No Vercel o projeto é o gta7-icecream, no time GTA7 LAB, com Root Directory na raiz do repositório. Não há variáveis de ambiente nem build step: public/index.html é servido como estático e cada arquivo em api/ vira uma serverless function.

O deploy é automático pela GitHub App do Vercel: push na main publica em https://gta7-icecream.vercel.app

Integração com o Core Orchestrator

{
  "id": "icecream",
  "name": "Sorveteria Polar",
  "description": "Consulta sabores, precos e disponibilidade da sorveteria da cidade",
  "tools": ["search_flavors", "quote_order", "recommend_flavors"]
}

Servido em /api/manifest. As rotas REST enviam Access-Control-Allow-Origin: *, então outras entidades da cidade podem consumi-las direto do navegador.

A entidade está registrada em data/entities.json do repo GTA7-Lab/gta7-lab-core com transporte http, endpoint /api/mcp e tag dessert (acrescentada ao src/lexicon.ts de lá, que mapeia palavras como "sorvete", "gelato" e "sobremesa" para essa tag). O registro guarda a URL de produção, não um caminho de repositório.

Related MCP Connectors

Related MCP Servers