Consulta genérica — a tool query
Quando as ferramentas prontas (aggregate_orders, rank_items, …) não
cobrem a pergunta, a tool query aceita uma consulta estruturada sobre
entidades permitidas — com filtros, agrupamento e agregações computadas no
servidor. Nunca aceita SQL.
Gramática
query := { entity, select?, filter?, group_by?, aggregate?, sort?, limit?, budget? }
filter := { <campo>: { <op>: <valor> }, ..., "or"?: [filter, ...] }
aggregate := [ { op: sum|count|avg|min|max|count_distinct, field?, as } ]
group_by := [ <campo> | { field: <campo-data>, bucket: "day"|"week"|"month" } ]
budget := { max_upstream_calls?, max_rows_scanned?, timeout_ms? }Entidades: orders, order_items, items, questions, claims.
Operadores de filtro: eq, ne, gt, gte, lt, lte, in, nin, between, contains, starts_with, exists, after, before.
O catálogo completo (campos por entidade) vem da tool describe_query_schema.
Regras de segurança/custo
orders/order_items/claims/itemsexigem filtro de data (date_created/date_closed) ou por id — varreduras ilimitadas são rejeitadas.group_byem campo de alta cardinalidade (buyer_id,item_id) exigelimit.- Toda resposta traz
_meta { upstream_calls, rows_scanned, truncated }.
Exemplos prontos
Faturamento pago por dia (últimos 7 dias):
{
"entity": "orders",
"filter": {
"status": { "eq": "paid" },
"date_closed": { "between": ["2026-07-01", "2026-07-07"] }
},
"group_by": [{ "field": "date_closed", "bucket": "day" }],
"aggregate": [
{ "op": "sum", "field": "total_amount", "as": "faturamento" },
{ "op": "count", "as": "pedidos" }
]
}Top 10 itens por unidades vendidas no mês:
{
"entity": "order_items",
"filter": { "date_closed": { "after": "2026-07-01" } },
"group_by": ["item_id"],
"aggregate": [{ "op": "sum", "field": "quantity", "as": "unidades" }],
"sort": [{ "field": "unidades", "dir": "desc" }],
"limit": 10
}Compradores únicos na semana:
{
"entity": "orders",
"filter": { "date_created": { "after": "2026-07-01" } },
"aggregate": [{ "op": "count_distinct", "field": "buyer_id", "as": "compradores" }]
}