Pular para o conteúdo principal

Servidor MCP

O Servidor MCP (Model Context Protocol) da OlaClick permite que agentes de IA e clientes compatíveis com MCP interajam com a OlaClick Public API. Conecte seu assistente de IA à OlaClick e consulte pedidos, clientes e dados de vendas de produtos usando linguagem natural.

O que é o MCP?​

O Model Context Protocol é um padrão aberto que permite que assistentes de IA (como Claude, Cursor, ou qualquer cliente compatível com MCP) interajam de forma segura com APIs externas através de uma interface padronizada. Em vez de montar chamadas de API manualmente, seu assistente de IA pode usar as ferramentas da OlaClick diretamente.

O servidor MCP não lê mais apenas os dados do seu restaurante — ele pode operar toda a pilha: criar um pedido e conduzi-lo por seu ciclo de vida (adicionar itens, registrar pagamentos e descontos, aplicar cupons, mudar o status, cancelá-lo), cotar preços de entrega antes de criar um pedido, executar promoções e cupons de ponta a ponta (criar, atualizar, excluir), gerenciar assinaturas de webhook (criar, atualizar, excluir), expandir o menu (criar produtos e variantes, sincronizar categorias de modificadores), coordenar a logística (atribuir um entregador, atualizar o status de entrega), gerenciar clientes e seus endereços de entrega (criar, atualizar, listar, excluir), verificar o status da loja em apps de delivery e gerenciar conexões de connectors.

Duas formas de autenticar​

  • OAuth (recomendado) — para Claude.ai, Claude Desktop, Claude Code, ChatGPT e qualquer cliente MCP que suporte OAuth 2.1. Nenhuma API key para gerar ou colar: você faz login com sua conta do painel OlaClick e autoriza o connector para a filial em que está logado. Apenas usuários Admin ou Manager podem autorizar um connector.
  • API key — para configurações locais/stdio e clientes sem suporte a OAuth. Você gera uma chave no painel e a envia você mesmo (header ou variável de ambiente).

Ambos os caminhos acessam as mesmas ferramentas e têm o mesmo escopo de permissões (veja Permissões (scopes)).

Ferramentas disponíveis​

O servidor MCP da OlaClick expõe as ferramentas abaixo, agrupadas por domínio. Categoria é derivada do método HTTP subjacente: read (GET) nunca altera dados, write (POST/PUT/PATCH) cria ou atualiza dados, e destructive (DELETE) remove ou cancela algo — veja Ferramentas de escrita: como se comportam.

Orders​

FerramentaO que fazScope necessárioCategoria
get_ordersRecupera pedidos com filtros (status, tipo de serviço, origem, datas)orders:readread
get_orderObtém um único pedido pelo UUID: itens, pagamentos, descontos, statusorders:readread
list_tablesLista zonas e suas mesas, para um table_id válido em create_orderorders:readread
get_products_soldEstatísticas de vendas de produtos (mais vendidos, quantidades, receita)orders:readread
create_orderCria um pedido (um rascunho por padrão)orders:writewrite
update_orderEdita campos básicos de um pedido criado através da APIorders:writewrite
update_order_statusAvança o status de um pedido, incluindo confirmar um rascunhoorders:writewrite
cancel_orderCancela um pedido criado através da APIorders:writewrite
add_order_combosAdiciona um ou mais itens a um pedidoorders:writewrite
remove_order_comboCancela um item de um pedidoorders:writedestructive
add_order_paymentRegistra um pagamento em um pedidoorders:writewrite
remove_order_paymentCancela um pagamento de um pedidoorders:writedestructive
add_order_discountAplica um desconto manual a um pedidoorders:writewrite
remove_order_discountRemove um desconto (ou cupom) de um pedidoorders:writedestructive
apply_order_couponResgata um código de cupom em um pedidoorders:writewrite

Promotions​

FerramentaO que fazScope necessárioCategoria
get_active_promotionsPromoções resgatáveis neste momento, filtráveis por tipo de serviço e aplicabilidadepromotions:readread
list_promotionsToda promoção atualmente válida (dentro do período, publicada, com resgates restantes)promotions:readread
get_promotionObtém uma única promoção (cupom) pelo UUIDpromotions:readread
create_promotionCria uma promoção: código, desconto, regras de elegibilidadepromotions:writewrite
update_promotionAtualiza parcialmente uma promoção (pode definir um campo, não limpá-lo)promotions:writewrite
delete_promotionExclui uma promoção — não pode ser desfeitopromotions:writedestructive

Webhooks​

FerramentaO que fazScope necessárioCategoria
list_webhooksLista todas as configurações de webhookwebhooks:readread
get_webhookObtém uma única configuração de webhook pelo UUIDwebhooks:readread
create_webhookRegistra uma nova URL de webhook para receber notificações de eventoswebhooks:writewrite
update_webhookAtualiza parcialmente uma configuração de webhookwebhooks:writewrite
delete_webhookRemove uma assinatura de webhook — as entregas cessam imediatamentewebhooks:writedestructive
FerramentaO que fazScope necessárioCategoria
get_menuCatálogo do menu: categorias, produtos, preços, disponibilidade, imagensmenu:readread
list_categoriesLista categorias do menu (id, nome, posição, tipo, visibilidade)menu:readread
get_categoryObtém uma categoria pelo UUIDmenu:readread
list_productsLista paginada de produtos, opcionalmente filtrada por categoriamenu:readread
get_productObtém um produto pelo UUIDmenu:readread
list_product_variantsLista as variantes de um produto (nome, preço)menu:readread
list_kitchensLista as cozinhas da empresamenu:readread
list_modifier_categoriesLista categorias de modificadores com seus modificadoresmenu:readread
update_productAtualiza o nome ou a descrição de um produtomenu:writewrite
create_productCria um produto com 1 a 30 variantes (somente JSON, sem imagem)menu:writewrite
create_product_variantCria uma variante em um produto existentemenu:writewrite
update_product_variantAtualiza parcialmente uma variante de produtomenu:writewrite
sync_product_modifier_categoriesSubstitui as associações de categorias de modificadores de um produtomenu:writewrite

Logistics​

FerramentaO que fazScope necessárioCategoria
assign_riderAtribui ou atualiza o entregador de um pedidologistics:writewrite
unassign_riderRemove o entregador atribuído de um pedidologistics:writedestructive
update_delivery_statusAtualiza o status de entrega de um pedidologistics:writewrite
report_rider_positionReporta a posição GPS atual do entregadorlogistics:writewrite

Company & users​

FerramentaO que fazScope necessárioCategoria
get_companyPerfil da empresa: identidade, localização, horário de funcionamento, indicador de aberto agoracompanies:readread
list_payment_methodsMétodos de pagamento ativos da empresapayment-methods:readread
list_usersUsuários da empresa paginados, filtráveis por função e status da contausers:readread
get_clientsLista clientes com filtros (nome, telefone, status, origem, pontos)clients:readread
get_clientObtém um único cliente pelo UUID: perfil, pontos, estatísticas de pedidosclients:readread
create_clientCria um novo clienteclients:writewrite
update_clientAtualiza parcialmente o perfil de um clienteclients:writewrite

Addresses​

FerramentaO que fazScope necessárioCategoria
list_addressesLista os endereços de entrega de um clienteaddresses:readread
create_addressCria um endereço de entrega para um clienteaddresses:writewrite
update_addressAtualiza parcialmente um endereço de entregaaddresses:writewrite
delete_addressExclui um endereço de entregaaddresses:writedestructive

Delivery​

FerramentaO que fazScope necessárioCategoria
get_delivery_pricingObtém a configuração de preços de entrega da empresaorders:readread
get_delivery_quoteObtém uma cotação de preço de entrega para um endereçoorders:readread

Cash registers​

FerramentaO que fazScope necessárioCategoria
list_cashiersLista os caixas da empresa (id, nome, padrão, aberto ou fechado); use o id para filtrar os balançoscashiers:readread
list_cashier_balancesAberturas e fechamentos de caixa: valor esperado, valor contado, sobra/falta e detalhamento por método de pagamento; filtre por status, caixa e intervalo de datascashiers:readread
get_cashier_balanceObtém um único balanço de caixa pelo UUIDcashiers:readread

Dashboard​

FerramentaO que fazScope necessárioCategoria
get_menu_visits_todayVisitas ao menu digital registradas hojereports:readread
get_menu_performanceVisitas ao menu digital, carrinhos confirmados e pedidos criados em um intervalo de datas, comparado com o período anteriorreports:readread
get_menu_conversionAs mesmas métricas em porcentagem das visitas ao menureports:readread

Other​

FerramentaO que fazScope necessárioCategoria
get_store_statusSe a loja está aberta em cada app de deliverystores:readread
list_conectionsLista conexões do connector autenticadoconections:readread
update_conection_statusAceita ou rejeita uma conexão pendenteconections:writewrite

Ferramentas de escrita: como se comportam​

Argumentos são os parâmetros de path e os campos de corpo do endpoint REST, achatados em uma única lista de argumentos com os mesmos nomes da API (ex.: create_order recebe service_type, client_id, table_id, ... — os mesmos campos do corpo de POST /v1/orders; add_order_combos recebe id, o UUID do pedido vindo do path, mais combos, o corpo).

Validação local é executada antes de qualquer chamada HTTP: enums, formato de UUID, limites numéricos e campos obrigatórios são verificados no próprio servidor MCP, da mesma forma que as ferramentas de leitura já validam um tamanho de página ou um UUID. Uma chamada malformada nunca chega à OlaClick.

create_order e idempotency_key: o endpoint REST exige um header Idempotency-Key. A ferramenta o expõe como um argumento opcional idempotency_key; quando omitido, o servidor gera um para você. Reutilize o mesmo idempotency_key ao repetir uma chamada que falhou — a API reproduz o resultado original em vez de criar um segundo pedido.

Anotações MCP: cada ferramenta anuncia readOnlyHint, destructiveHint e idempotentHint de acordo com sua categoria (veja as tabelas acima). Clientes MCP que respeitam essas dicas — Claude Desktop, Cursor e outros — podem pedir sua confirmação antes de executar uma ferramenta destructive.

Erros: uma chamada que falha retorna isError: true com os detalhes RFC 7807 da API (type, detail e um errors[] por campo quando aplicável) como resultado da ferramenta, em vez de uma exceção lançada, para que o assistente possa ler o motivo e corrigir a chamada (ex.: um campo obrigatório ausente, ou um 422 coupon_not_applicable).

Scopes são aplicados pela Public API, não pelo servidor MCP: uma ferramenta de escrita precisa do seu scope *:write correspondente na chave conectada (ex.: orders:write para create_order), da mesma forma que uma ferramenta de leitura precisa do seu scope *:read.

Permissões (scopes)​

Seja autorizando um connector via OAuth ou gerando uma API key, o acesso é dividido nos mesmos scopes. Conceda apenas o que o assistente precisa.

ScopeDesbloqueia
menu:readLer categorias e produtos do menu
menu:writeCriar e atualizar produtos
orders:readLer pedidos
orders:writeCriar pedidos, atualizar status, itens, pagamentos e descontos do pedido, e cancelar pedidos
promotions:readLer promoções ativas e cupons
promotions:writeCriar, atualizar e excluir promoções (cupons)
clients:readLer a lista de clientes com filtros e paginação
clients:writeCriar e atualizar clientes
addresses:readLer endereços de entrega de clientes
addresses:writeCriar, atualizar e excluir endereços de entrega de clientes
reports:readLer relatórios
webhooks:readListar e visualizar configurações de webhook
webhooks:writeCriar, atualizar e excluir webhooks
companies:readLer informações da empresa
payment-methods:readLer os métodos de pagamento da empresa
stores:readLer o status aberto/fechado da loja em apps de delivery
users:readLer a lista de usuários da empresa com filtro de função e paginação
fiscal-notes:writeCriar e atualizar notas fiscais
logistics:writeAtribuir entregadores e atualizar o status de entrega
cashiers:readLer caixas e aberturas e fechamentos de caixa

Início Rápido​

Pré-requisitos​

  • Uma conta no painel OlaClick (Admin ou Manager) para OAuth, ou uma API Key da OlaClick (gerada no painel do restaurante em Integrations > API Keys) para clientes stdio/locais
  • Um cliente compatível com MCP (Claude Desktop, Claude Code, Cursor, VS Code com Copilot, etc.)

Configuração​

O servidor MCP da OlaClick usa transporte HTTP (SSE). Os clientes se conectam ao endpoint remoto — nenhuma instalação local é necessária.

Configuração do cliente​

Claude.ai / Claude Desktop (OAuth)​

  1. Vá em Settings → Connectors → Add custom connector.
  2. Cole a URL do servidor: https://public-api.olaclick.app/mcp.
  3. Clique em Connect.
  4. Faça login no painel OlaClick.
  5. Revise as permissões solicitadas.
  6. Clique em Authorize.
  7. Você está de volta no Claude, conectado.

Os tokens são de curta duração e renovados automaticamente — você não precisará fazer login novamente, a menos que o acesso seja revogado. Você pode revogar o connector a qualquer momento no painel OlaClick.

Claude Code (OAuth)​

claude mcp add --transport http olaclick https://public-api.olaclick.app/mcp

Depois execute /mcp dentro do Claude Code e siga o prompt para fazer login.

ChatGPT (OAuth)​

O ChatGPT se conecta a servidores MCP remotos através do Developer Mode (planos Pro, Plus, Business, Enterprise e Education, na web).

  1. Vá em Settings → Apps & Connectors → Advanced settings e habilite o Developer mode.
  2. De volta em Apps & Connectors, clique em Create (ou +) para adicionar um connector.
  3. Cole a URL do servidor: https://public-api.olaclick.app/mcp e escolha OAuth como autenticação.
  4. Faça login no painel OlaClick, revise as permissões solicitadas e clique em Authorize.
  5. Inicie uma conversa, habilite o connector OlaClick no campo de mensagem, e pergunte o que precisar.

Ferramentas de escrita (criar pedido, criar produto, etc.) são anotadas como writes e as irreversíveis (cancelar um pedido, excluir uma promoção ou um webhook) como destructive, para que o ChatGPT possa aplicar suas próprias salvaguardas; se ele pede sua confirmação depende do ChatGPT e das suas configurações. Os tokens são de curta duração e renovados automaticamente.

Cursor​

Add to Cursor

Ou adicione manualmente ao .cursor/mcp.json do seu projeto:

{
"mcpServers": {
"olaclick": {
"url": "https://public-api.olaclick.app/mcp",
"headers": {
"Authorization": "Bearer olk_live_YOUR_KEY_HERE"
}
}
}
}

Claude Desktop​

Adicione o seguinte ao arquivo de configuração do Claude Desktop:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
"mcpServers": {
"olaclick": {
"url": "https://public-api.olaclick.app/mcp",
"headers": {
"Authorization": "Bearer olk_live_YOUR_KEY_HERE"
}
}
}
}

VS Code (Copilot / Kiro)​

Adicione o seguinte a .vscode/mcp.json ou .kiro/settings/mcp.json:

{
"mcpServers": {
"olaclick": {
"url": "https://public-api.olaclick.app/mcp",
"headers": {
"Authorization": "Bearer olk_live_YOUR_KEY_HERE"
}
}
}
}

Remote HTTP (Hosted)​

Conecte-se ao servidor MCP da OlaClick diretamente via HTTP:

{
"mcpServers": {
"olaclick": {
"url": "https://public-api.olaclick.app/mcp",
"headers": {
"Authorization": "Bearer olk_live_YOUR_KEY_HERE"
}
}
}
}

No modo HTTP, a API key é enviada através do header Authorization: Bearer em cada conexão. Nenhuma variável de ambiente é necessária. Este é o caminho da API key — se você autorizar via OAuth (veja acima), as ferramentas deixam de expor um parâmetro api_key, já que a sessão já está autenticada.

Exemplos de Prompts​

Depois de conectado, tente perguntar ao Claude:

  • "Mostre os pedidos de hoje e seus status"
  • "Quais produtos venderam mais esta semana?"
  • "Crie um pedido para viagem para a María com 2 cheeseburgers e uma Coca, pago em dinheiro"
  • "Adicione um novo produto chamado 'Veggie Wrap' por $8.50 na categoria Sandwiches"
  • "Liste os produtos na categoria Drinks com seus preços"
  • "Quais promoções estão ativas agora?"

Ações de escrita (criar um pedido, criar um produto) são anotadas como writes e as irreversíveis como destructive; o Claude decide, com base nessas anotações e nas suas configurações, se deve pedir sua confirmação antes de executá-las.

Solução de problemas​

  • "Authorization failed" — certifique-se de ter feito login como um usuário Admin ou Manager; outras funções não podem autorizar um connector.
  • "Couldn't reach the MCP server" — verifique se a URL termina em /mcp.
  • Tokens expiram — o Claude os renova automaticamente; se o connector foi revogado, basta reconectar.

Referência de Ferramentas​

Toda ferramenta valida seus argumentos antes de chamar a API: um tipo incorreto, um UUID malformado ou um tamanho de página fora do intervalo é rejeitado pelo servidor MCP e nunca chega à OlaClick.

get_orders​

Recupera uma lista paginada de pedidos com filtros opcionais.

Nota: Se nenhum start_date for informado, o padrão são os pedidos de hoje.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
order_idstringNãoUUID ou ID público (ex.: PE-1234567890) para obter um único pedido
statusstringNãoPENDING, PREPARING, READY, DELIVERED, FINALIZED, CANCELLED
service_typesstringNãoDELIVERY, TAKEAWAY, ONSITE, TABLE (separados por vírgula)
sourcestringNãoFiltra por origem (ex.: web, ifood, rappi, uber)
payment_statusstringNãoFiltra por status de pagamento (ex.: PAID,PENDING)
payment_method_idsstringNãoUUIDs de métodos de pagamento separados por vírgula
owner_idsstringNãoUUIDs de owner/caixa separados por vírgula
rider_idsstringNãoUUIDs de entregadores separados por vírgula
delivered_bystringNãoFiltra por quem entregou (ex.: MERCHANT,IFOOD,PICKER)
delivery_statusstringNãoFiltra por status de entrega
is_scheduledstringNãoFiltra pedidos agendados (true ou false)
client_idstringNãoFiltra por UUID do cliente
public_idstringNãoBusca por ID público parcial do pedido
cancelation_reasonstringNãoFiltra por motivo de cancelamento
start_datestringNãoData inicial (YYYY-MM-DD)
end_datestringNãoData final (YYYY-MM-DD)
start_timestringNãoHorário inicial (HH:mm:ss)
end_timestringNãoHorário final (HH:mm:ss)
time_typestringNãoColuna de data a filtrar (padrão: pending_at)
timezonestringNãoTimezone para os filtros de data (padrão: timezone da empresa)
pagenumberNãoNúmero da página (padrão: 1)
per_pagenumberNãoItens por página (1-100, padrão: 50)

Exemplo de prompt:

"Mostre os pedidos de delivery pendentes de hoje"

Formato da resposta:

{
"data": [
{
"id": "9c4f4203-9e2c-403d-88cc-7c0ce9e0f572",
"public_id": "PE-9799906639",
"status": "finalized",
"service_type": "onsite",
"source": "OUTBOUND",
"utm_source": "meta",
"utm_campaign": "combos-julio",
"client": {
"name": "John Doe"
},
"address": {
"city": "Lima",
"area": "Miraflores"
},
"total": 90,
"total_paid": 90,
"total_tips": 0,
"total_discounts": 0,
"delivery_price": 0,
"service_fee_price": 0,
"combos_price": 90,
"created_at": "2026-06-23T18:23:42+00:00",
"updated_at": "2026-06-23T18:56:00+00:00"
}
],
"pagination": {
"current_page": 1,
"per_page": 50,
"total": 12,
"has_more": false
}
}

get_clients​

Recupera uma lista paginada de clientes com filtros opcionais.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
filter_namestringNãoCorrespondência parcial no nome do cliente (ignora acentuação)
filter_phone_numberstringNãoCorresponde ao prefixo do número de telefone
filter_country_calling_codestringNãoCódigo de discagem do país (usado com phone_number)
filter_typestringNãoClassificação por frequência (separados por vírgula): ELITE_BUYER, TOP_BUYER, FREQUENT_BUYER, REPEAT_BUYER, BUYER, NO_BUYER
filter_statusstringNãoClassificação por recência (separados por vírgula): ACTIVE, INACTIVE, SLEEPING, AT_RISK
filter_sourcestringNãochatbot, ecommerce, panel (separados por vírgula)
filter_available_pointsnumberNãoClientes com available_points maior que este valor
filter_used_pointsnumberNãoClientes com used_points maior que este valor
sort_bystringNãoname, phone_number, available_points, used_points, source, total_orders, address
directionstringNãoasc ou desc
include_addressesbooleanNãoIncluir os endereços do cliente na resposta
simple_paginatebooleanNãoUsar paginação simples (mais rápida, sem contagem total)
pagenumberNãoNúmero da página (padrão: 1)
per_pagenumberNãoItens por página (1-100, padrão: 25)

Todo cliente carrega duas classificações independentes, ambas calculadas pela OlaClick:

  • type — com que frequência compra, pelo número total de pedidos: ELITE_BUYER (mais de 7 pedidos), TOP_BUYER (5–7), FREQUENT_BUYER (3–4), REPEAT_BUYER (2), BUYER (1), NO_BUYER (0).
  • status — há quanto tempo comprou, pelos dias desde o último pedido: ACTIVE (menos de 16 dias), INACTIVE (16–30), SLEEPING (31–91), AT_RISK (mais de 91 dias, ou nunca pediu).

Combine-os para montar audiências: filter_status=SLEEPING encontra clientes a ponto de churn, enquanto filter_status=AT_RISK mais um type diferente de NO_BUYER encontra clientes inativos que vale a pena reconquistar.

Exemplo de prompt:

"Liste meus 10 principais clientes ordenados pelo total de pedidos"

Formato da resposta:

{
"data": [
{
"id": "9c8e720f-31b1-485a-85fa-0aaf552faaa9",
"name": "John Doe",
"email": "john@example.com",
"phone_number": "3001234567",
"country_calling_code": "57",
"available_points": 150,
"used_points": 0,
"status": "AT_RISK",
"type": "BUYER",
"source": "ecommerce",
"total_orders": 8,
"created_at": "2024-07-19T02:28:48+00:00"
}
],
"pagination": {
"current_page": 1,
"per_page": 25,
"total": 340,
"has_more": true
}
}

create_client​

Cria um novo cliente para a empresa autenticada: nome, número de telefone (com código de discagem do país) e um email opcional.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
namestringSimNome do cliente, 1-150 caracteres
phone_numberstringSimNúmero de telefone nacional, sem o código do país. Somente dígitos
country_calling_codestringSimCódigo de discagem do país, sem o "+" inicial, ex. "51" para o Peru
emailstringNãoEndereço de email

Exemplo de prompt:

"Crie um cliente chamado María López, telefone 987654321, código de país 51"

Um número de telefone duplicado falha com 422 client_already_exists.


update_client​

Atualiza parcialmente um cliente pelo UUID: nome, número de telefone, código de discagem do país, ou email. Apenas os campos enviados são alterados.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do cliente
name, phone_number, country_calling_code, email—Não**Ao menos um obrigatório

Exemplo de prompt:

"Atualize o email do cliente X para maria@example.com"


list_addresses​

Lista os endereços de entrega de um cliente: endereço completo, coordenadas, distrito de entrega (área), e qual é o padrão. Paginado.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
client_idstring (UUID)SimUUID do cliente para listar os endereços
pageintegerNãoNúmero da página (padrão: 1)
per_pageintegerNãoItens por página, 1-100

Exemplo de prompt:

"Liste os endereços salvos do cliente 9c8e720f-31b1-485a-85fa-0aaf552faaa9"


create_address​

Cria um novo endereço de entrega para um cliente: endereço, complemento opcional, referência, coordenadas e distrito de entrega. Retorna o endereço criado, cujo id pode ser usado como address_id ao criar um pedido DELIVERY.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
client_idstring (UUID)SimCliente ao qual este endereço pertence
addressstringSimEndereço, 1-191 caracteres
complementstringNãoApartamento, sala, andar, etc. Máximo de 100 caracteres
referencestringNãoUm ponto de referência ou nota para ajudar a encontrar o endereço. Máximo de 100 caracteres
latitude, longitudenumberNão**Ambos ou nenhum, graus decimais
area_idstring (UUID)NãoId do distrito de entrega, para merchants precificados por distrito
defaultbooleanNãoSe este se torna o endereço de entrega padrão do cliente

Exemplo de prompt:

"Salve um novo endereço para o cliente X em Av. Larco 345, Miraflores, lat -12.1211, long -77.0295, e torne-o o padrão"


update_address​

Atualiza parcialmente um endereço de entrega de cliente pelo UUID. Apenas os campos enviados são alterados; o cliente proprietário não pode ser alterado. Retorna o endereço atualizado.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do endereço
address, complement, reference, latitude, longitude, area_id, default—NãoMesmo formato de create_address; latitude/longitude ainda devem ser enviados juntos

Exemplo de prompt:

"Atualize o endereço X para latitude -12.1211 e longitude -77.0295"


delete_address​

Exclui um endereço de entrega de cliente pelo UUID. Não pode ser desfeito.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do endereço

get_delivery_pricing​

Obtém a configuração de preços de entrega da empresa autenticada: se a entrega está ativa, o modo de precificação e os parâmetros específicos do modo. Chame isso primeiro, antes de get_delivery_quote, para saber qual modo de precificação se aplica e quais entradas a chamada de cotação precisa — FIXED e BY_DISTRICT já trazem o preço de entrega nesta resposta, sem necessidade de chamada de cotação.

Sem parâmetros. Equivale a GET /v1/delivery/pricing.

Exemplo de prompt:

"Como meu restaurante cobra pela entrega?"


get_delivery_quote​

Resolve o preço de entrega para um endereço. Envie latitude/longitude para os modos BY_AREA, BY_DRIVE_DISTANCE, ou BY_RANGE, ou district_id para BY_DISTRICT — chame get_delivery_pricing primeiro para saber qual. Um preço de 0 com uma área nula significa que o endereço está fora de cobertura, mas o merchant ainda assim o aceita.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
latitude, longitudenumberNão**Ambos ou nenhum, graus decimais
district_idstring (UUID)NãoId do distrito a partir de districts[] de get_delivery_pricing

Exemplo de prompt:

"Quanto custaria a entrega para latitude -34.5955, longitude -58.3930?"


get_menu​

Recupera o catálogo do menu: o que você vende, a que preço, e se está disponível. Esta é a fonte para construir catálogos de produtos e feeds de anúncios (Meta / Google Shopping).

Nota: o menu não é paginado — um catálogo grande chega em uma única resposta. Envie category_slug para limitar a resposta a uma categoria. A ferramenta ainda busca o menu completo e o filtra para você.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
category_slugstringNãoRetorna apenas a categoria cujo slug corresponder (ex.: combos). Use o valor de slug retornado por esta ferramenta para cada categoria, não o nome ou id da categoria. Um slug desconhecido retorna um erro listando os slugs disponíveis.
available_onlybooleanNãoRemove produtos atualmente indisponíveis

Exemplo de prompt:

"Liste meus combos com os preços e me diga quais estão fora de estoque"

Formato da resposta:

{
"data": {
"categories": [
{
"id": "026de0fc-85d9-47cd-9c34-627996b6c01c",
"slug": "combos",
"name": "Combos",
"position": 0,
"products": [
{
"id": "9c4f4203-9e2c-403d-88cc-7c0ce9e0f572",
"slug": "combo-classic-smash",
"name": "Combo Classic Smash",
"description": "Smash burger with fries",
"variants": [
{
"id": "6b2f1a04-1c7e-4a2b-9f11-2d8e0b3c4d55",
"name": "Default",
"price": 26,
"currency": "PEN"
}
],
"available": true,
"image_url": "https://assets.olaclick.app/combo-classic-smash.webp"
}
]
}
]
}
}

Os preços estão em unidades principais (26 significa 26.00) com uma currency ISO 4217. image_url é apenas a imagem principal. Produtos sem variantes são omitidos, já que não têm preço.


get_products_sold​

Recupera estatísticas sobre os produtos mais vendidos.

Nota: Se nenhum start_date for informado, o padrão são os últimos 7 dias.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
includestringNãoAgrupamento: products, products_modifiers, freehand
show_productsnumberNãoLimita aos top N produtos
category_idsstringNãoIDs de categoria separados por vírgula
combo_typestringNãoFiltro de tipo de combo freehand (somente quando include=freehand)
statusstringNãoStatus de pedido (ex.: finalized,delivered)
sourcesstringNãoOrigens de pedido (ex.: inbound,outbound)
service_typesstringNãoTipos de serviço (ex.: delivery,onsite)
start_datestringNãoData inicial (YYYY-MM-DD)
end_datestringNãoData final (YYYY-MM-DD)
timezonestringNãoTimezone (padrão: timezone da empresa)
pagenumberNãoNúmero da página (padrão: 1)
per_pagenumberNãoItens por página (1-100, padrão: 25)

Exemplo de prompt:

"Quais são meus 5 produtos mais vendidos esta semana?"

Formato da resposta:

{
"data": [
{
"product_name": "Combo Classic Smash",
"product_quantity": 41,
"average_price": 39,
"total_sales": 1599,
"modifiers": [],
"product_id": "9c4f4203-9e2c-403d-88cc-7c0ce9e0f572",
"variant_id": "9c4f4203-a0ec-45bc-9810-3a8ada0838dd"
}
],
"pagination": {
"current_page": 1,
"per_page": 25,
"total": 45,
"has_more": true
}
}

update_product​

Atualiza o nome e/ou a descrição de um produto.

Parâmetros:

ParâmetroTipoObrigatórioDescrição
product_idstringSimUUID do produto a atualizar
namestringNão**Novo nome do produto (máx. 191 caracteres)
descriptionstringNão**Nova descrição do produto

**Ao menos um entre name ou description deve ser enviado.

Exemplo de prompt:

"Renomeie o produto 9c4f4203-9e2c-403d-88cc-7c0ce9e0f572 para 'Double Smash Burger'"

Formato da resposta:

{
"data": {
"id": "9c4f4203-9e2c-403d-88cc-7c0ce9e0f572",
"name": "Double Smash Burger",
"description": "Two smashed beef patties with cheese"
}
}

list_categories​

Lista as categorias do menu da empresa: id, name, position, type, visible. Sem produtos, sem slug. Use-a para explorar a estrutura do catálogo antes de listar produtos.

Sem parâmetros. Equivale a GET /v1/menu/categories.

Exemplo de prompt:

"Quais categorias meu menu tem, e quais estão ocultas?"


get_category​

Obtém uma única categoria do menu pelo UUID.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID da categoria

Equivale a GET /v1/menu/categories/{id}. Um id que não seja UUID é rejeitado localmente.


list_products​

Lista paginada de produtos: id, name, description, position, visible, category_id por produto. Sem variantes, sem slug.

ParâmetroTipoObrigatórioDescrição
pageintegerNãoNúmero da página, 1 ou mais (padrão: 1)
per_pageintegerNãoItens por página, 1-100 (padrão: 20)
category_idstring (UUID)NãoSomente produtos nesta categoria

Equivale a GET /v1/menu/products. Um per_page fora de 1-100 é rejeitado localmente.

Exemplo de prompt:

"Liste os produtos da minha categoria Combos"


get_product​

Obtém um único produto pelo UUID: id, name, description, position, visible, category_id, além de suas variants.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do produto

Equivale a GET /v1/menu/products/{id}.


list_product_variants​

Lista as variantes de um produto: id, name, price, original_price, currency, sku, stock, stock_threshold, position por variante. Use-a para ver as opções de compra de um produto retornado por get_product ou list_products.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do produto

Equivale a GET /v1/menu/products/{id}/variants.

Exemplo de prompt:

"Quais tamanhos e preços o produto 9c4f4203-9e2c-403d-88cc-7c0ce9e0f572 tem?"


list_kitchens​

Lista as cozinhas configuradas para a empresa: id, name, default por cozinha. Use-a para encontrar ids de cozinha válidos.

Sem parâmetros. Equivale a GET /v1/menu/kitchens.


list_tables​

Lista as zonas (salões) da empresa e suas mesas: cada zona tem id, name e qrs (as mesas/pontos de QR naquela zona, cada um com id, name, description opcional e position). Use-a para encontrar valores válidos de table_id ao criar um pedido TABLE.

Sem parâmetros. Equivale a GET /v1/tables.


get_company​

Obtém o perfil da empresa por trás da credencial: name, description, logo, URL pública, language, currency, localização, horário de funcionamento semanal, e currently_open calculado na timezone da empresa. Requer o scope companies:read.

Sem parâmetros. Equivale a GET /v1/company.

Exemplo de prompt:

"Meu restaurante está aberto agora, e qual é o horário de hoje?"


list_payment_methods​

Lista os métodos de pagamento ativos da empresa: apenas os habilitados para ao menos um tipo de serviço de pedido (ONSITE, TABLE, DELIVERY, TAKEAWAY) são retornados. Requer o scope payment-methods:read.

Sem parâmetros. Equivale a GET /v1/company/payment-methods.


list_users​

Lista paginada dos usuários da empresa, com função e status da conta. Requer o scope users:read.

ParâmetroTipoObrigatórioDescrição
rolestringNãoFunções separadas por vírgula: admin, manager, waiter, rider, cook, sales, cashier
activebooleanNãotrue apenas usuários ativos, false apenas usuários desativados; omita para ambos
pageintegerNãoNúmero da página, 1 ou mais (padrão: 1)
per_pageintegerNãoItens por página, 1-100 (padrão: 20)

Equivale a GET /v1/users, onde role e active são enviados como filter[role] e filter[active].

Exemplo de prompt:

"Quais entregadores eu tenho ativos agora?"


create_order​

Cria um pedido e o retorna. Começa como INITIATED (um rascunho) a menos que você envie status: PENDING. Adicione itens com add_order_combos, depois confirme o rascunho com update_order_status.

ParâmetroTipoObrigatórioDescrição
service_typestringSimONSITE, TABLE, DELIVERY, ou TAKEAWAY
client_idstring (UUID)NãoUm cliente existente da sua empresa
table_idstring (UUID)NãoApenas para pedidos TABLE; encontre um com list_tables
address_idstring (UUID)NãoApenas para pedidos DELIVERY
delivery_pricenumberNãoApenas para pedidos DELIVERY
statusstringNãoEnvie PENDING para pular o rascunho INITIATED
comment, order_title, packaging_price, scheduled_delivery_date—NãoMetadados opcionais do pedido
idempotency_keystringNãoReutilizado em uma nova tentativa para evitar um pedido duplicado; gerado quando omitido

Exemplo de prompt:

"Crie um pedido para viagem para o cliente 9c8e720f-31b1-485a-85fa-0aaf552faaa9"


add_order_combos​

Adiciona um ou mais itens a um pedido e o retorna com os totais recalculados.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do pedido
combosarraySimItens a adicionar — cada um precisa de variant_id e quantity; modifiers é opcional (modifier_id, quantity por modificador)

Exemplo de prompt:

"Adicione 2 combos Classic Smash ao pedido 9c4f4203-9e2c-403d-88cc-7c0ce9e0f572"


add_order_payment​

Registra um pagamento em um pedido e o retorna com os totais de pagamento recalculados.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do pedido
payment_method_idstring (UUID)SimDe list_payment_methods
bill_amountnumberSimValor cobrado
received_amountnumberNãoValor efetivamente recebido (dinheiro entregue)
tip_amountnumberNãoGorjeta incluída neste pagamento

Exemplo de prompt:

"Registre um pagamento em dinheiro de 45.50 no pedido X"


apply_order_coupon​

Resgata um código de cupom em um pedido e o retorna com os totais recalculados. O pedido deve ter um cliente vinculado.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do pedido
codestringSimCódigo do cupom, ex.: VERANO20

Exemplo de prompt:

"Aplique o cupom VERANO20 no pedido X"


update_order_status​

Altera o status de um pedido e o retorna. Os pedidos só avançam.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do pedido
statusstringSimNovo status, ex.: PENDING, PREPARING, READY, DELIVERED, FINALIZED

Exemplo de prompt:

"Mova o pedido X para PREPARING"


cancel_order​

Cancela um pedido criado através da API e o retorna. Ele não deve ter pagamentos ativos — remova-os primeiro com remove_order_payment.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do pedido
reasonstringSimCódigo do motivo de cancelamento
detailstringNãoDetalhe em texto livre

Exemplo de prompt:

"Cancele o pedido X, o cliente mudou de ideia"


create_promotion​

Cria uma promoção (cupom): um código, um desconto e regras de elegibilidade.

ParâmetroTipoObrigatórioDescrição
name, coupon_codestringSimNome de exibição e o código resgatável
discount_type, discount_valuestring, numberSimex.: PERCENTAGE + 20, ou um valor fixo
minimum_order_amountnumberSimPiso do total do pedido para o cupom se aplicar
valid_from, valid_untilstring (date)SimJanela de validade
usage_limitnumberSimTotal de resgates permitidos
publishedbooleanSimSe está ativo no menu digital
promotion_type, products, service_types, audience, usage_limit_per_customer, schedule, terms—NãoRestrições e metadados opcionais

Exemplo de prompt:

"Crie um cupom de 20% VERANO20 válido até dezembro apenas para delivery"


update_promotion​

Atualiza parcialmente uma promoção. Mesmos campos de create_promotion, todos opcionais — um campo pode ser definido, mas não limpo de volta para indefinido.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID da promoção
qualquer campo de create_promotion—NãoApenas os campos enviados são alterados

Exemplo de prompt:

"Estenda o valid_until da promoção X para 31 de janeiro"


delete_promotion​

Exclui uma promoção pelo UUID. Não pode ser desfeito.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID da promoção

Exemplo de prompt:

"Exclua a promoção VERANO20"


create_webhook​

Registra uma nova URL de webhook para receber notificações de eventos.

ParâmetroTipoObrigatórioDescrição
webhook_urlstring (URL)SimEndpoint HTTPS que recebe os eventos
merchant_idstringSimSeu próprio identificador para este merchant
webhook_headersobjectNãoHeaders personalizados enviados em cada entrega
max_retryintegerNãoRetentativas em caso de falha, 0-10 (padrão 3)
ack_http_codesarrayNãoCódigos HTTP considerados sucesso (padrão [200, 201, 202])
event_typesarrayNãoTipos de evento para assinar; omita para todos os eventos

Exemplo de prompt:

"Crie um webhook para https://example.com/hooks para o merchant store-42"


update_webhook​

Atualiza parcialmente uma configuração de webhook. Apenas os campos enviados são alterados — envie is_active: false para pausar um webhook sem excluí-lo.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do webhook
webhook_url, webhook_headers, is_active, max_retry, ack_http_codes, event_types—NãoMesmo formato de create_webhook

Exemplo de prompt:

"Pause meu webhook X"


delete_webhook​

Remove uma assinatura de webhook pelo UUID. As entregas cessam imediatamente.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do webhook

create_product​

Cria um produto com 1-30 variantes somente via JSON (sem upload de imagem a partir do MCP). Os preços são decimais, não unidades menores.

ParâmetroTipoObrigatórioDescrição
category_id, kitchen_id, namestringSimDe list_categories / list_kitchens
variantsarraySim1-30 variantes; cada uma precisa de name, price, original_price, sku
description, visible, modifier_category_ids—NãoCampos opcionais

Exemplo de prompt:

"Crie um produto 'Iced Latte' na categoria Drinks, uma variante a 12.00"


create_product_variant​

Cria uma variante em um produto existente.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do produto
name, price, original_price, sku—Simprice não pode exceder original_price
cost, packaging_price, stock, stock_threshold—NãoCampos opcionais

Exemplo de prompt:

"Adicione uma variante Large a 15.50 no produto X"


update_product_variant​

Atualiza parcialmente uma variante de produto. Todos os campos são opcionais, mas ao menos um deve ser enviado.

ParâmetroTipoObrigatórioDescrição
id, variantIdstring (UUID)SimUUIDs do produto e da variante
name, price, original_price, cost, packaging_price, sku, stock, stock_threshold—Não**Ao menos um obrigatório

sync_product_modifier_categories​

Substitui as associações de categorias de modificadores de um produto, na ordem informada.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do produto
modifier_category_idsarray (UUID)SimUUIDs distintos, de list_modifier_categories; um array vazio desvincula todos

assign_rider​

Atribui ou atualiza o entregador de um pedido.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do pedido
namestringSimNome do entregador
providerstringNãoapi (padrão, entregador externo) ou olaclick
user_idstring (UUID)Não**Obrigatório quando provider: olaclick; deve ser um usuário ativo com função de entregador
phone_numberstringNãoNúmero de telefone do entregador

Exemplo de prompt:

"Atribua o entregador Marco ao pedido X, telefone 555-0100"


update_delivery_status​

Atualiza o status de entrega de um pedido.

ParâmetroTipoObrigatórioDescrição
idstring (UUID)SimUUID do pedido
delivery_statusstringSimex.: ON_THE_WAY_TO_PICK_UP, DELIVERING, DELIVERED

Exemplo de prompt:

"Marque o pedido X como saiu para entrega"

Autenticação​

O servidor MCP suporta dois métodos de autenticação no modo HTTP:

  • OAuth — Claude.ai, Claude Desktop, Claude Code e outros clientes com suporte a OAuth autenticam através do fluxo padrão OAuth 2.1 (veja Duas formas de autenticar). Nenhuma API key envolvida.

  • API key — clientes sem suporte a OAuth enviam uma API key através do header HTTP Authorization:

    Authorization: Bearer olk_live_YOUR_KEY_HERE

    A chave é enviada na conexão HTTP/SSE inicial. Todas as chamadas de ferramenta dentro daquela sessão a herdam automaticamente — sem necessidade de enviá-la por chamada.

Exemplos de Conversas​

Aqui estão alguns exemplos de prompts que você pode usar depois que o servidor MCP estiver conectado:

PromptFerramenta usada
"Quantos pedidos eu tive hoje?"get_orders
"Mostre todos os pedidos cancelados da semana passada"get_orders
"Liste os pedidos de delivery que ainda estão pendentes"get_orders
"Quais pedidos vieram das minhas campanhas do Meta este mês?"get_orders
"Quem são meus clientes mais frequentes?"get_clients
"Encontre o cliente com o número de telefone 300..."get_clients
"Quais clientes estão a ponto de churn?"get_clients
"Liste meu menu com os preços"get_menu
"Quais produtos estão fora de estoque agora?"get_menu
"Qual é meu produto mais vendido este mês?"get_products_sold
"Mostre o top 10 de produtos para pedidos de delivery"get_products_sold
"Atualize a descrição do produto X"update_product
"Quais categorias meu menu tem, e quais estão ocultas?"list_categories
"Mostre os produtos da minha categoria Combos"list_categories, depois list_products
"Quais são os detalhes do produto X?"get_product
"Quais tamanhos e preços o produto X tem?"list_product_variants
"Quais cozinhas eu tenho configuradas?"list_kitchens
"Meu restaurante está aberto agora? Qual é o horário de hoje?"get_company
"Quais métodos de pagamento eu aceito para delivery?"list_payment_methods
"Quais entregadores estão ativos agora?"list_users
"Liste meus gerentes e caixas"list_users
"Crie um pedido para viagem para o cliente X com 2 hambúrgueres e registre um pagamento em dinheiro"create_order, add_order_combos, add_order_payment
"Crie um cupom de 20% VERANO20 válido até dezembro apenas para delivery"create_promotion
"Pause meu webhook"update_webhook
"Adicione uma variante Large a 15.50 no produto X"create_product_variant
"Atribua o entregador Y ao pedido Z"assign_rider
"Marque o pedido Z como saiu para entrega"update_delivery_status
"Cancele o pedido Z, o cliente mudou de ideia"cancel_order

Segurança​

  • As API keys nunca são registradas em log ou armazenadas pelo servidor MCP
  • Toda comunicação usa HTTPS
  • Cada usuário fornece sua própria chave através do header Authorization
  • Os scopes são aplicados pela Public API, não pelo servidor MCP: chamar uma ferramenta com uma chave que não possui o scope necessário (ex.: menu:read para get_menu) falha upstream com 403 insufficient_scope
  • Ferramentas de escrita alteram dados reais — um pedido criado, uma promoção atualizada, ou um webhook excluído são reais; não há modo dry-run na camada MCP
  • Use uma chave com escopo apenas para os scopes de escrita que um assistente realmente precisa (ex.: não conceda orders:write a um assistente que apenas lê o menu)
  • Ferramentas destructive (baseadas em DELETE) carregam a anotação destructiveHint do MCP; clientes como Claude Desktop ou Cursor podem pedir sua confirmação antes de executar uma
  • Trate qualquer API key com um scope *:write como uma credencial de produção — armazene e rotacione-a da mesma forma que faria com a senha de um banco de dados

Próximos passos​