{
  "name": "Waesy Universal Commerce MCP Protocol",
  "version": "2.2.0",
  "protocolVersion": "2024-11-05",
  "description": "Especificação WebMCP oficial para descoberta, catálogo, empresas verificadas (CNPJ), notícias, simulação econométrica, propostas, turismo, contratos, logística e automação operacional com AI-Guards e isolamento multi-tenant estrito.",
  "protocol": "model-context-protocol/v1",
  "transport": "streamable-http",
  "executionEndpoint": "https://waesy.com.br/api/mcp/v1/tools/call",
  "discoveryUrl": "https://waesy.com.br/.well-known/mcp.json",
  "openApiUrl": "https://waesy.com.br/api/openapi.json",
  "developerPortalUrl": "https://waesy.com.br/developers",
  "cliPackage": "@waesy/cli",
  "securityModel": {
    "standard": "Meta Ads & Stripe Restricted Scopes",
    "tiers": {
      "public": "Leitura pública sanitizada de produtos, empresas e frete sem exposição de margens",
      "store_staff": "Operações restritas à loja autorizada com validação de sessão e assertStoreAccess",
      "admin_only": "Operações restritas a administradores da plataforma"
    },
    "isolationRule": "Tentativas de acesso cruzado entre empresas (cross-tenant) resultam em 403 Forbidden imediato e registro em log de auditoria."
  },
  "capabilities": {
    "tools": true,
    "resources": true,
    "prompts": true
  },
  "toolsCount": 50,
  "tools": [
    {
      "name": "search_catalog_products",
      "module": "catalog",
      "description": "Busca produtos, estoques e preços públicos atualizados no marketplace local Waesy.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Termo de busca ou código EAN"
          },
          "storeId": {
            "type": "string",
            "description": "UUID opcional da loja"
          },
          "maxPrice": {
            "type": "number",
            "description": "Preço máximo em reais (BRL)"
          },
          "limit": {
            "type": "number",
            "description": "Limite de resultados (máx 50)"
          }
        },
        "required": [
          "query"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "query_master_catalog",
      "module": "catalog",
      "description": "Consulta o catálogo mestre global por nome de produto ou código de barras EAN-13.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Nome do produto ou código de barras EAN"
          },
          "limit": {
            "type": "number",
            "description": "Quantidade máxima de resultados (padrão: 10, máx: 50)"
          }
        },
        "required": [
          "query"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "catalog_get_product_details",
      "module": "catalog",
      "description": "Recupera detalhes cadastrais completos, atributos técnicos, variantes e estoque de um produto específico.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string",
            "description": "UUID ou slug único do produto"
          },
          "storeId": {
            "type": "string",
            "description": "UUID da loja (opcional)"
          }
        },
        "required": [
          "productId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "catalog_list_categories",
      "module": "catalog",
      "description": "Lista as categorias de produtos cadastradas na loja autorizada ou no catálogo geral.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja (opcional para filtro local)"
          }
        },
        "required": []
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "update_product_stock",
      "module": "catalog",
      "description": "Atualiza o estoque disponível de um produto pertencente exclusivamente à loja autorizada.",
      "tier": "store_staff",
      "requiredScope": "store:catalog:write",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "productId": {
            "type": "string",
            "description": "UUID do produto"
          },
          "stockQuantity": {
            "type": "integer",
            "description": "Nova quantidade física em estoque (não-negativo)"
          }
        },
        "required": [
          "storeId",
          "productId",
          "stockQuantity"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "get_store_directory_info",
      "module": "directory",
      "description": "Retorna informações institucionais, reputação e canais oficiais de atendimento de uma empresa no Diretório.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "slugOrId": {
            "type": "string",
            "description": "Slug ou UUID da empresa"
          }
        },
        "required": [
          "slugOrId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "directory_list_featured_stores",
      "module": "directory",
      "description": "Lista empresas em destaque no Diretório comercial por cidade ou nicho de atuação.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string",
            "description": "Nome da cidade brasileira"
          },
          "state": {
            "type": "string",
            "description": "Sigla UF de 2 letras (ex: SC, SP)"
          },
          "category": {
            "type": "string",
            "description": "Categoria de negócio ou nicho"
          },
          "limit": {
            "type": "number",
            "description": "Limite de resultados (máx 30)"
          }
        },
        "required": []
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "check_delivery_coverage",
      "module": "logistics",
      "description": "Valida se um CEP brasileiro é atendido pela malha de entrega e estima prazos e tarifas base.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "cep": {
            "type": "string",
            "description": "CEP de entrega no formato 8 dígitos"
          },
          "storeId": {
            "type": "string",
            "description": "UUID opcional da loja emissora"
          }
        },
        "required": [
          "cep"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "wms_list_pending_orders",
      "module": "logistics",
      "description": "Consulta pedidos pagos ou em processamento da loja autorizada prontos para expedição e picking WMS.",
      "tier": "store_staff",
      "requiredScope": "store:orders:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "limit": {
            "type": "integer",
            "description": "Limite de pedidos a retornar (máx 50)"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "logistics_track_shipment",
      "module": "logistics",
      "description": "Consulta o rastreamento em tempo real de uma entrega ou despacho por código de rastreio ou UUID do pedido.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "trackingCodeOrOrderId": {
            "type": "string",
            "description": "Código de rastreamento ou UUID do pedido"
          },
          "storeId": {
            "type": "string",
            "description": "UUID da loja (opcional)"
          }
        },
        "required": [
          "trackingCodeOrOrderId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "orders_get_order_details",
      "module": "orders",
      "description": "Recupera os dados completos de um pedido: itens, valores, cliente, forma de pagamento e status atual.",
      "tier": "store_staff",
      "requiredScope": "store:orders:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "orderId": {
            "type": "string",
            "description": "UUID do pedido a consultar"
          }
        },
        "required": [
          "storeId",
          "orderId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "orders_update_order_status",
      "module": "orders",
      "description": "Atualiza o status operacional de um pedido (ex: preparing, ready_for_pickup, dispatched, completed, cancelled).",
      "tier": "store_staff",
      "requiredScope": "store:orders:write",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "orderId": {
            "type": "string",
            "description": "UUID do pedido"
          },
          "newStatus": {
            "type": "string",
            "enum": [
              "confirmed",
              "preparing",
              "ready_for_pickup",
              "dispatched",
              "completed",
              "cancelled"
            ],
            "description": "Novo status operacional do pedido"
          },
          "note": {
            "type": "string",
            "description": "Observação opcional para registro no histórico"
          }
        },
        "required": [
          "storeId",
          "orderId",
          "newStatus"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "scheduling_list_available_slots",
      "module": "scheduling",
      "description": "Consulta horários disponíveis para agendamento de serviços em um determinado dia ou profissional.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja ou prestador"
          },
          "serviceId": {
            "type": "string",
            "description": "UUID do serviço desejado (opcional)"
          },
          "date": {
            "type": "string",
            "description": "Data no formato AAAA-MM-DD"
          }
        },
        "required": [
          "storeId",
          "date"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "tourism_get_trip_manifest",
      "module": "tourism",
      "description": "Retorna o manifesto oficial de uma viagem turística: passageiros cadastrados, localizadores, vouchers e rota.",
      "tier": "store_staff",
      "requiredScope": "store:tourism:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da agência ou loja emissora"
          },
          "tripId": {
            "type": "string",
            "description": "UUID da viagem turística"
          }
        },
        "required": [
          "storeId",
          "tripId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "tourism_list_proposals",
      "module": "tourism",
      "description": "Lista propostas e roteiros de viagens emitidos para clientes com status de aprovação e valores.",
      "tier": "store_staff",
      "requiredScope": "store:tourism:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da agência emissora"
          },
          "limit": {
            "type": "number",
            "description": "Limite de propostas a retornar (máx 30)"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "tourism_convert_proposal_to_trip",
      "module": "tourism",
      "description": "Converte uma proposta aprovada em viagem confirmada, gerando vouchers, contrato digital e cartão no Kanban de Embarques.",
      "tier": "store_staff",
      "requiredScope": "store:tourism:write",
      "idempotent": false,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da agência"
          },
          "proposalId": {
            "type": "string",
            "description": "UUID ou public_token da proposta a ser convertida"
          },
          "leadPassengerName": {
            "type": "string",
            "description": "Nome completo do passageiro principal (opcional)"
          },
          "leadPassengerDocument": {
            "type": "string",
            "description": "CPF ou passaporte do passageiro principal (opcional)"
          }
        },
        "required": [
          "storeId",
          "proposalId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "tourism_list_departures_kanban",
      "module": "tourism",
      "description": "Lista cartões do Kanban de Embarques operacionais da agência, organizados por estágio e data de saída.",
      "tier": "store_staff",
      "requiredScope": "store:tourism:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da agência"
          },
          "stage": {
            "type": "string",
            "description": "Filtro opcional por estágio (booked, docs_pending, vouchers_ready, checkin_open, in_transit, completed)"
          },
          "limit": {
            "type": "integer",
            "description": "Limite de cartões a retornar (máx 50)"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "proposals_list_store_proposals",
      "module": "proposals",
      "description": "Lista propostas comerciais e orçamentos ativos emitidos pela loja com status de aceitação.",
      "tier": "store_staff",
      "requiredScope": "store:proposals:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja emissora"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "sent",
              "viewed",
              "accepted",
              "rejected",
              "expired"
            ],
            "description": "Filtro opcional por status da proposta"
          },
          "limit": {
            "type": "integer",
            "description": "Limite de propostas (máx 50)"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "contracts_get_contract_status",
      "module": "contracts",
      "description": "Verifica a integridade e o status de assinatura de um contrato digital (pendente, assinado, cancelado).",
      "tier": "store_staff",
      "requiredScope": "store:contracts:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja emissora"
          },
          "contractIdOrToken": {
            "type": "string",
            "description": "UUID do contrato ou token público de assinatura"
          }
        },
        "required": [
          "storeId",
          "contractIdOrToken"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "pos_get_cash_status",
      "module": "financial",
      "description": "Retorna o status atual do caixa da loja, saldo em dinheiro e último operador com turno aberto.",
      "tier": "store_staff",
      "requiredScope": "store:pos:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "financial_get_cash_flow_summary",
      "module": "financial",
      "description": "Retorna o consolidado financeiro da loja: receitas brutas, saldo disponível para repasse e total de vendas por método.",
      "tier": "store_staff",
      "requiredScope": "store:finance:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "days": {
            "type": "integer",
            "description": "Período em dias corridos (máx 90, padrão 30)"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "hr_list_team_members",
      "module": "hr",
      "description": "Lista os membros ativos da equipe de trabalho da loja e seus respectivos papéis de acesso no sistema.",
      "tier": "store_staff",
      "requiredScope": "store:staff:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "simlab_run_survey",
      "module": "simulation",
      "description": "Executa a exploração qualitativa persistida do SimLab; não estima vendas nem usa amostra representativa.",
      "tier": "store_staff",
      "requiredScope": "store:analytics:read",
      "idempotent": false,
      "parameters": {
        "type": "object",
        "properties": {
          "experimentId": {
            "type": "string",
            "description": "UUID do experimento SimLab"
          },
          "storeId": {
            "type": "string",
            "description": "UUID da loja (validado contra sessão)"
          }
        },
        "required": [
          "experimentId",
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "generate_marketing_post",
      "module": "marketing",
      "description": "Gera e salva um rascunho de marketing com IA; exige revisão humana e não inclui score de validação SimLab.",
      "tier": "store_staff",
      "requiredScope": "store:marketing:write",
      "idempotent": false,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja"
          },
          "companyName": {
            "type": "string",
            "description": "Nome da marca ou empresa"
          },
          "theme": {
            "type": "string",
            "description": "Tema ou promoção central do post"
          },
          "targetSin": {
            "type": "string",
            "description": "Lente criativa opcional; não é método preditivo"
          }
        },
        "required": [
          "storeId",
          "companyName",
          "theme"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "generate_ad_campaign_proposal",
      "module": "marketing",
      "description": "Processa comandos em linguagem natural e gera uma proposta de campanha de tráfego pago (Meta Ads, Google, Local).",
      "tier": "store_staff",
      "requiredScope": "store:marketing:write",
      "idempotent": false,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja emissora"
          },
          "naturalLanguagePrompt": {
            "type": "string",
            "description": "Comando de voz ou texto do usuário"
          },
          "targetPlatform": {
            "type": "string",
            "enum": [
              "meta_ads",
              "google_ads",
              "omnichannel_local"
            ],
            "description": "Canal de mídia pretendido"
          },
          "dailyBudgetCents": {
            "type": "number",
            "description": "Orçamento diário em centavos BRL (opcional)"
          }
        },
        "required": [
          "storeId",
          "naturalLanguagePrompt"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "analyze_competitor_dna",
      "module": "marketing",
      "description": "Captura a página de um concorrente já cadastrado e gera um rascunho qualitativo com fonte e proveniência; não calcula score de posicionamento ou desempenho.",
      "tier": "store_staff",
      "requiredScope": "store:analytics:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja"
          },
          "competitorId": {
            "type": "string",
            "description": "UUID de um concorrente já cadastrado neste workspace"
          },
          "sourceUrl": {
            "type": "string",
            "description": "URL HTTPS pública opcional para a captura desta análise"
          }
        },
        "required": [
          "storeId",
          "competitorId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "ads_mcp_list_accessible_accounts",
      "module": "marketing",
      "description": "Lista todas as contas acessíveis de Google Ads (customers:listAccessibleCustomers) ou Meta Ads (me/adaccounts) e Pixels da loja via OAuth 2.0.",
      "tier": "store_staff",
      "requiredScope": "store:marketing:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "platform": {
            "type": "string",
            "enum": [
              "meta_ads",
              "google_ads"
            ],
            "description": "Plataforma de anúncios a inspecionar"
          }
        },
        "required": [
          "storeId",
          "platform"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "ads_mcp_sync_insights_and_gaql",
      "module": "marketing",
      "description": "Executa consultas GAQL no Google Ads (googleAds:searchStream) e Meta Graph Insights para sincronizar gasto real, cliques, impressões e conversões.",
      "tier": "store_staff",
      "requiredScope": "store:marketing:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "platform": {
            "type": "string",
            "enum": [
              "meta_ads",
              "google_ads",
              "all"
            ],
            "description": "Canal a sincronizar"
          },
          "datePreset": {
            "type": "string",
            "enum": [
              "LAST_7_DAYS",
              "LAST_30_DAYS",
              "THIS_MONTH"
            ],
            "description": "Janela temporal da consulta"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "ads_mcp_diagnose_account_health",
      "module": "marketing",
      "description": "Executa a Skill de Diagnóstico Autônomo de Contas Google Ads e Meta Ads: detecta queda de conversão, verba travada, fadiga criativa e perda de impressão.",
      "tier": "store_staff",
      "requiredScope": "store:marketing:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "question": {
            "type": "string",
            "description": "Pergunta específica do gestor em português (opcional)"
          },
          "syncLiveFirst": {
            "type": "boolean",
            "description": "Se verdadeiro, sincroniza GAQL/Insights antes de diagnosticar"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "ads_mcp_ingest_conversion_event",
      "module": "marketing",
      "description": "Envia eventos de conversão server-side com hash SHA-256 para Google Ads Data Manager API e Meta Conversions API (CAPI).",
      "tier": "store_staff",
      "requiredScope": "store:marketing:write",
      "idempotent": false,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "eventName": {
            "type": "string",
            "enum": [
              "Purchase",
              "Lead",
              "InitiateCheckout"
            ],
            "description": "Nome do evento de conversão"
          },
          "orderId": {
            "type": "string",
            "description": "ID do pedido ou transação para desduplicação"
          },
          "valueCents": {
            "type": "integer",
            "description": "Valor da conversão em centavos"
          },
          "currency": {
            "type": "string",
            "description": "Moeda ISO (ex: BRL)"
          },
          "customerEmail": {
            "type": "string",
            "description": "E-mail do comprador para hash SHA-256"
          },
          "customerPhone": {
            "type": "string",
            "description": "Telefone do comprador para hash SHA-256"
          }
        },
        "required": [
          "storeId",
          "valueCents"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "fiscal_get_invoice_status",
      "module": "fiscal",
      "description": "Retorna a lista das últimas notas fiscais (NF-e/NFC-e) emitidas com chaves de acesso e links DANFE.",
      "tier": "store_staff",
      "requiredScope": "store:fiscal:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "limit": {
            "type": "integer",
            "description": "Quantidade máxima de notas a consultar (máx 50)"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "marketplaces_get_sync_health",
      "module": "integrations",
      "description": "Diagnóstico em tempo real da saúde de sincronização de estoque e pedidos externos (Meli, iFood, Shopee, Amazon).",
      "tier": "store_staff",
      "requiredScope": "store:integrations:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "support_list_active_threads",
      "module": "support",
      "description": "Lista conversas de atendimento em aberto na loja aguardando resposta de operador ou IA.",
      "tier": "store_staff",
      "requiredScope": "store:support:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "closed",
              "archived"
            ],
            "description": "Status das threads"
          },
          "limit": {
            "type": "integer",
            "description": "Limite de conversas (máx 30)"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "support_get_rma_case_status",
      "module": "support",
      "description": "Consulta o status, diagnóstico de perícia por IA e fotos de um chamado de troca ou devolução (RMA).",
      "tier": "store_staff",
      "requiredScope": "store:support:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja autorizada"
          },
          "rmaId": {
            "type": "string",
            "description": "UUID do chamado de troca/devolução"
          }
        },
        "required": [
          "storeId",
          "rmaId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "publish_domain_event",
      "module": "governance",
      "description": "Publica um evento de domínio canônico (lead, cotação, proposta, reserva, contrato, embarque, financeiro, ticket) no barramento do Waesy.",
      "tier": "store_staff",
      "requiredScope": "events:write",
      "idempotent": false,
      "parameters": {
        "type": "object",
        "properties": {
          "eventName": {
            "type": "string",
            "description": "Nome do evento (ex: lead.stage_changed, proposal.sent, contract.signed)"
          },
          "entityType": {
            "type": "string",
            "description": "Tipo da entidade (lead, proposal, order, contract, etc)"
          },
          "entityId": {
            "type": "string",
            "description": "Identificador único da entidade"
          },
          "title": {
            "type": "string",
            "description": "Título legível do evento para exibição na timeline"
          },
          "description": {
            "type": "string",
            "description": "Descrição detalhada opcional"
          },
          "customerId": {
            "type": "string",
            "description": "UUID do cliente associado, se houver"
          },
          "metadata": {
            "type": "object",
            "description": "Metadados adicionais do evento"
          }
        },
        "required": [
          "eventName",
          "entityType",
          "entityId",
          "title"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "get_entity_unified_timeline",
      "module": "governance",
      "description": "Recupera a linha do tempo unificada com todos os eventos de ciclo de vida de uma entidade (Lead, Cliente, Reserva, Viagem, Ordem).",
      "tier": "store_staff",
      "requiredScope": "events:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "entityType": {
            "type": "string",
            "description": "Tipo da entidade (lead, customer, order, proposal, etc)"
          },
          "entityId": {
            "type": "string",
            "description": "ID único da entidade"
          },
          "limit": {
            "type": "number",
            "description": "Limite de eventos (padrão 50)"
          }
        },
        "required": [
          "entityType",
          "entityId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "get_niche_manifest",
      "module": "governance",
      "description": "Obtém as configurações, módulos ativos, estágios de CRM/pedidos e nomenclaturas de qualquer nicho comercial.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "nicheId": {
            "type": "string",
            "description": "ID do nicho (tourism, gastronomy, retail, services, real_estate, healthcare, automotive, events, creator, generic)"
          }
        },
        "required": [
          "nicheId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "validate_state_transition",
      "module": "governance",
      "description": "Valida se uma transição de status é permitida para uma entidade e lista as próximas transições válidas.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "lead",
              "proposal",
              "trip",
              "departure",
              "contract",
              "order",
              "financial",
              "ticket"
            ]
          },
          "currentStatus": {
            "type": "string",
            "description": "Status atual da entidade"
          },
          "targetStatus": {
            "type": "string",
            "description": "Status desejado (opcional para testar transição específica)"
          }
        },
        "required": [
          "entity",
          "currentStatus"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "crm_create_lead",
      "module": "crm",
      "description": "Cria um novo lead comercial no funil de vendas (CRM) com contato, interesse, tags e valor estimado.",
      "tier": "store_staff",
      "requiredScope": "store:crm:write",
      "idempotent": false,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja/agência"
          },
          "name": {
            "type": "string",
            "description": "Nome do lead/cliente potencial"
          },
          "phone": {
            "type": "string",
            "description": "WhatsApp ou telefone com DDD"
          },
          "email": {
            "type": "string",
            "description": "E-mail de contato"
          },
          "destination": {
            "type": "string",
            "description": "Destino ou interesse de compra"
          },
          "estimatedBudget": {
            "type": "number",
            "description": "Valor estimado em reais"
          },
          "notes": {
            "type": "string",
            "description": "Observações ou histórico da interação"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Tags semânticas"
          }
        },
        "required": [
          "storeId",
          "name"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "crm_get_customer_360",
      "module": "crm",
      "description": "Retorna a ficha 360° consolidada do cliente: cadastro, LTV histórico, viagens realizadas, propostas e timeline.",
      "tier": "store_staff",
      "requiredScope": "store:crm:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja/agência"
          },
          "customerId": {
            "type": "string",
            "description": "UUID do cliente"
          }
        },
        "required": [
          "storeId",
          "customerId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "search_unified_listings",
      "module": "catalog",
      "description": "Busca na View Canônica Unificada de anúncios (Classificados e Catálogo de Lojas) por nicho, cidade ou preço.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Termo de busca no título ou descrição"
          },
          "niche": {
            "type": "string",
            "description": "Identificador do nicho (turismo, varejo, servico, etc.)"
          },
          "origin": {
            "type": "string",
            "enum": [
              "classified",
              "workspace"
            ]
          },
          "maxPriceCents": {
            "type": "number",
            "description": "Preço máximo em centavos"
          },
          "limit": {
            "type": "number",
            "default": 12
          }
        },
        "required": []
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "transact_unified_listing",
      "module": "orders",
      "description": "Inicia atomicamente uma transação (compra, reserva turística ou solicitação de serviço) a partir de um anúncio canônico.",
      "tier": "public",
      "requiredScope": "public:write",
      "idempotent": false,
      "parameters": {
        "type": "object",
        "properties": {
          "listingId": {
            "type": "string",
            "description": "UUID do anúncio na View Canônica"
          },
          "origin": {
            "type": "string",
            "enum": [
              "classified",
              "workspace"
            ]
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "purchase",
              "booking",
              "quote",
              "service_order"
            ]
          },
          "quantity": {
            "type": "number",
            "default": 1
          },
          "notes": {
            "type": "string"
          }
        },
        "required": [
          "listingId",
          "origin",
          "transactionType"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "calculate_canonical_offer_price",
      "module": "orders",
      "description": "Calcula a cotação transparente de preço de uma oferta aplicando regras de cupom, margem e arquétipo sem cálculos no cliente (G47, G54).",
      "tier": "public",
      "requiredScope": "orders:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "archetypeId": {
            "type": "string"
          },
          "nicheId": {
            "type": "string"
          },
          "listPriceCents": {
            "type": "integer"
          },
          "salePriceCents": {
            "type": "integer"
          },
          "couponCode": {
            "type": "string"
          },
          "couponDiscountPercent": {
            "type": "number"
          }
        },
        "required": [
          "archetypeId",
          "nicheId",
          "listPriceCents"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "get_niche_package_spec",
      "module": "catalog",
      "description": "Inspeciona o pacote canônico de um nicho específico com terminologias, arquétipos habilitados e regras regulatórias (G10, G18).",
      "tier": "public",
      "requiredScope": "catalog:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "nicheId": {
            "type": "string"
          }
        },
        "required": [
          "nicheId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "inspect_stock_ledger",
      "module": "catalog",
      "description": "Consulta o histórico imutável do ledger de movimentações de estoque para uma variante da loja (G39, G41).",
      "tier": "store_staff",
      "requiredScope": "inventory:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "variantId": {
            "type": "string",
            "format": "uuid"
          },
          "storeId": {
            "type": "string",
            "format": "uuid"
          },
          "limit": {
            "type": "integer"
          }
        },
        "required": [
          "variantId",
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "search_hotels_and_resorts",
      "module": "tourism",
      "description": "Busca hotéis, resorts e pousadas catalogados com filtros geográficos, estrelas e comodidades.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Nome ou palavra-chave da acomodação"
          },
          "city": {
            "type": "string",
            "description": "Nome do município"
          },
          "state": {
            "type": "string",
            "description": "UF do estado (ex: PE, AL, BA, SC)"
          },
          "minStars": {
            "type": "integer",
            "description": "Classificação mínima por estrelas (1 a 5)"
          },
          "limit": {
            "type": "integer",
            "default": 10
          }
        },
        "required": []
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "search_public_tenders",
      "module": "governance",
      "description": "Consulta editais e licitações públicas municipais (PNCP) auditadas com score de risco e resumo de IA.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Termo de busca no título ou objeto da licitação"
          },
          "city": {
            "type": "string",
            "description": "Município da contratação"
          },
          "uf": {
            "type": "string",
            "description": "Sigla do estado (ex: SC, PR, RS)"
          },
          "limit": {
            "type": "integer",
            "default": 10
          }
        },
        "required": []
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "search_news_articles",
      "module": "marketing",
      "description": "Busca notícias jornalísticas apuradas com lead 5W1H e metadados de credibilidade.",
      "tier": "public",
      "requiredScope": "public:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Termo de busca no título ou conteúdo da notícia"
          },
          "category": {
            "type": "string",
            "description": "Categoria jornalística (ex: cidade, economia, politica)"
          },
          "limit": {
            "type": "integer",
            "default": 10
          }
        },
        "required": []
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "meta_ads_diagnose_tracking",
      "module": "marketing",
      "description": "Audita a integridade do Meta Pixel, token CAPI server-side e eventos de conversão da loja.",
      "tier": "store_staff",
      "requiredScope": "marketing:read",
      "idempotent": true,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja a auditar"
          }
        },
        "required": [
          "storeId"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    },
    {
      "name": "crm_sync_qualified_lead_conversion",
      "module": "crm",
      "description": "Sincroniza um lead qualificado do CRM retroalimentando a IA da Meta e Google Ads via CAPI.",
      "tier": "store_staff",
      "requiredScope": "crm:write",
      "idempotent": false,
      "parameters": {
        "type": "object",
        "properties": {
          "storeId": {
            "type": "string",
            "description": "UUID da loja"
          },
          "leadId": {
            "type": "string",
            "description": "UUID da oportunidade no CRM"
          },
          "stage": {
            "type": "string",
            "description": "Novo estágio do lead (ex: qualified, won)"
          },
          "estimatedValueBrl": {
            "type": "number",
            "description": "Valor comercial estimado em Reais (BRL)"
          }
        },
        "required": [
          "storeId",
          "leadId",
          "stage"
        ]
      },
      "endpoint": "https://waesy.com.br/api/mcp/v1/tools/call"
    }
  ],
  "resources": [
    {
      "uri": "store://{storeId}/catalog",
      "name": "Catálogo de Produtos da Loja",
      "description": "Visão consolidada em JSON de produtos publicados e estoques da loja.",
      "mimeType": "application/json"
    },
    {
      "uri": "store://{storeId}/financial-summary",
      "name": "Resumo Financeiro da Loja",
      "description": "Consolidado de faturamento, pedidos pagos e status do caixa da loja.",
      "mimeType": "application/json"
    },
    {
      "uri": "store://{storeId}/tourism-manifest",
      "name": "Manifesto Geral de Turismo",
      "description": "Lista de passageiros, reservas e roteiros das próximas viagens da agência.",
      "mimeType": "application/json"
    },
    {
      "uri": "public://directory/cities",
      "name": "Cidades Atendidas no Diretório",
      "description": "Lista canônica de municípios e polos de comércio integrados à rede Waesy.",
      "mimeType": "application/json"
    }
  ],
  "prompts": [
    {
      "name": "customer_inquiry_assistant",
      "description": "Instruções calibradas para triagem inicial de atendimento com consulta a pedidos e catálogo.",
      "arguments": [
        {
          "name": "storeName",
          "description": "Nome da loja ou empresa",
          "required": true
        },
        {
          "name": "customerQuestion",
          "description": "Pergunta ou solicitação do cliente",
          "required": true
        }
      ]
    },
    {
      "name": "product_recommendation_prompt",
      "description": "Geração de recomendações contextuais de produtos baseadas em intenção de compra.",
      "arguments": [
        {
          "name": "category",
          "description": "Categoria de produto pretendida",
          "required": false
        },
        {
          "name": "maxBudgetBrl",
          "description": "Orçamento máximo em BRL",
          "required": false
        }
      ]
    },
    {
      "name": "tourism_trip_briefing",
      "description": "Gera briefing pré-embarque conciso e elegante para passageiros com base no itinerário.",
      "arguments": [
        {
          "name": "tripTitle",
          "description": "Nome da viagem",
          "required": true
        },
        {
          "name": "destination",
          "description": "Destino da viagem",
          "required": true
        }
      ]
    }
  ]
}