Catálogo - Ligação MCP¶
Este documento especifica a ligação do Model Context Protocol (MCP) para o Capacidade de catálogo.
Fundamentos do Protocolo¶
Descoberta¶
As empresas anunciam a disponibilidade de transporte MCP através do seu perfil BCP em
/.well-known/bcp.
{
"ucp": {
"version": "2026-07-28",
"services": {
"br.dev.bcp.shopping": [
{
"version": "2026-07-28",
"spec": "https://bcp.dev.br/draft/specification/overview",
"transport": "mcp",
"schema": "https://bcp.dev.br/draft/services/shopping/mcp.openrpc.json",
"endpoint": "https://business.example.com/bcp/mcp"
}
]
},
"capabilities": {
"br.dev.bcp.shopping.catalog.search": [{
"version": "2026-07-28",
"spec": "https://bcp.dev.br/draft/specification/catalog/search",
"schema": "https://bcp.dev.br/draft/schemas/shopping/catalog_search.json"
}],
"br.dev.bcp.shopping.catalog.lookup": [{
"version": "2026-07-28",
"spec": "https://bcp.dev.br/draft/specification/catalog/lookup",
"schema": "https://bcp.dev.br/draft/schemas/shopping/catalog_lookup.json"
}]
},
"payment_handlers": {}
}
}
Solicitar metadados¶
Os clientes MCP DEVEM incluir um objeto meta em cada solicitação contendo
metadados do protocolo:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_catalog",
"arguments": {
"meta": {
"ucp-agent": {
"profile": "https://platform.example/profiles/v2026-01/shopping-agent.json"
}
},
"catalog": {
"query": "blue running shoes",
"context": {
"address_country": "BR",
"intent": "looking for comfortable everyday shoes"
}
}
}
}
}
O campo meta["ucp-agent"] é obrigatório em todas as solicitações para habilitar
verificação de compatibilidade de versão e negociação de capacidade.
Ferramentas¶
| Ferramenta | Capacidade | Descrição |
|---|---|---|
search_catalog |
Pesquisar | Pesquise produtos. |
lookup_catalog |
Consulta | Consulte um ou mais produtos ou variantes por identificador. |
get_product |
Consulta | Obtenha detalhes completos do produto por identificador. |
search_catalog¶
Mapeia para o recurso Pesquisa de catálogo.
Solicitação de pesquisa¶
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| query | string | Não | Consulta de busca em texto livre. |
| context | object | Não | Sinais provisórios do buyer para relevância e localização—não são dados autoritativos. Empresas DEVERIAM usar estes valores quando entradas verificadas (ex.: endereço de shipping) estiverem ausentes, e PODEM ignorá-los ou reduzir sua prioridade se inconsistentes com sinais de maior confiança (conta autenticada, detecção de risco) ou restrições regulatórias (controles de exportação). A elegibilidade e a aplicação de políticas DEVEM ocorrer no momento do checkout usando dados vinculantes da transação. O Context DEVERIA ser não identificável e pode ser divulgado progressivamente—sinais grosseiros no início, resolução mais fina à medida que a sessão avança. Dados de maior resolução (endereço de shipping, endereço de cobrança) têm precedência sobre o context. |
| signals | object | Não | Dados de ambiente fornecidos pela plataforma para apoiar a autorização e a prevenção de abusos. Os valores NÃO DEVEM ser declarações afirmadas pelo comprador — as plataformas fornecem sinais com base em observação direta ou em atestações de terceiros verificáveis de forma independente. Todas as chaves de sinal DEVEM usar nomenclatura em domínio reverso para garantir a proveniência e prevenir colisões quando múltiplas extensões contribuem para o namespace compartilhado. |
| attribution | object | Não | Contexto de indicação e evento de conversão emitido pela plataforma — identificadores de campanha, IDs de clique, marcadores de source/medium, etc. Os mesmos parâmetros que as plataformas comunicam via parâmetros de consulta de URL em fluxos baseados em navegador. |
| filters | object | Não | Critérios de filtro para restringir os resultados de busca. Todos os filtros especificados se combinam com lógica AND. |
| pagination | object | Não | Parâmetros de paginação para requisições. |
Resposta de pesquisa¶
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| ucp | any | Sim | Metadados BCP para respostas de catálogo. |
| products | Array[object] | Sim | Produtos que correspondem aos critérios de busca. |
| pagination | object | Não | Informações de paginação nas respostas. |
| messages | Array[object] | Não | Erros, avisos ou mensagens informativas sobre os resultados da busca. |
Exemplo de pesquisa¶
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_catalog",
"arguments": {
"meta": {
"ucp-agent": {
"profile": "https://platform.example/profiles/v2026-01/shopping-agent.json"
}
},
"catalog": {
"query": "blue running shoes",
"context": {
"address_country": "BR",
"address_region": "SP",
"intent": "looking for comfortable everyday shoes"
},
"filters": {
"categories": ["Footwear"],
"price": {
"max": 15000
}
},
"pagination": {
"limit": 20
}
}
}
}
}
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"ucp": {
"version": "2026-07-28",
"capabilities": {
"br.dev.bcp.shopping.catalog.search": [
{"version": "2026-07-28"}
]
}
},
"products": [
{
"id": "prod_abc123",
"handle": "blue-runner-pro",
"title": "Blue Runner Pro",
"description": {
"plain": "Lightweight running shoes with responsive cushioning."
},
"url": "https://business.example.com/products/blue-runner-pro",
"categories": [
{ "value": "187", "taxonomy": "google_product_category" },
{ "value": "aa-8-1", "taxonomy": "shopify" },
{ "value": "Footwear > Running", "taxonomy": "merchant" }
],
"price_range": {
"min": { "amount": 12000, "currency": "BRL" },
"max": { "amount": 12000, "currency": "BRL" }
},
"media": [
{
"type": "image",
"url": "https://cdn.example.com/products/blue-runner-pro.jpg",
"alt_text": "Blue Runner Pro running shoes"
}
],
"options": [
{
"name": "Size",
"values": [
{"label": "8"},
{"label": "9"},
{"label": "10"},
{"label": "11"},
{"label": "12"}
]
}
],
"variants": [
{
"id": "prod_abc123_size10",
"sku": "BRP-BLU-10",
"title": "Size 10",
"description": { "plain": "Size 10 variant" },
"price": { "amount": 12000, "currency": "BRL" },
"availability": { "available": true },
"options": [
{ "name": "Size", "label": "10" }
],
"tags": ["running", "road", "neutral"],
"seller": {
"name": "Example Store",
"links": [
{
"type": "refund_policy",
"url": "https://business.example.com/refunds"
}
]
}
}
],
"rating": {
"value": 4.5,
"scale_max": 5,
"count": 128
},
"metadata": {
"collection": "Winter 2026",
"technology": {
"midsole": "React foam",
"outsole": "Continental rubber"
}
}
}
],
"pagination": {
"cursor": "eyJwYWdlIjoxfQ==",
"has_next_page": true,
"total_count": 47
}
}
}
}
lookup_catalog¶
Mapeia para o recurso Consulta de catálogo. Consulte a documentação de capacidade para identificadores suportados, comportamento de resolução e requisitos de correlação do cliente.
O parâmetro catalog.ids aceita um array de identificadores e contexto opcional.
Solicitação de pesquisa¶
Corpo da requisição para consulta de catálogo.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| ids | Array[string] | Sim | Identificadores a consultar. As implementações DEVEM suportar product ID e variant ID; PODEM suportar identificadores secundários (SKU, handle, etc.). |
| filters | object | Não | Critérios de filtro para restringir os produtos e variantes retornados. Todos os filtros especificados se combinam com lógica AND. |
| context | object | Não | Sinais provisórios do buyer para relevância e localização—não são dados autoritativos. Empresas DEVERIAM usar estes valores quando entradas verificadas (ex.: endereço de shipping) estiverem ausentes, e PODEM ignorá-los ou reduzir sua prioridade se inconsistentes com sinais de maior confiança (conta autenticada, detecção de risco) ou restrições regulatórias (controles de exportação). A elegibilidade e a aplicação de políticas DEVEM ocorrer no momento do checkout usando dados vinculantes da transação. O Context DEVERIA ser não identificável e pode ser divulgado progressivamente—sinais grosseiros no início, resolução mais fina à medida que a sessão avança. Dados de maior resolução (endereço de shipping, endereço de cobrança) têm precedência sobre o context. |
| signals | object | Não | Dados de ambiente fornecidos pela plataforma para apoiar a autorização e a prevenção de abusos. Os valores NÃO DEVEM ser declarações afirmadas pelo comprador — as plataformas fornecem sinais com base em observação direta ou em atestações de terceiros verificáveis de forma independente. Todas as chaves de sinal DEVEM usar nomenclatura em domínio reverso para garantir a proveniência e prevenir colisões quando múltiplas extensões contribuem para o namespace compartilhado. |
| attribution | object | Não | Contexto de indicação e evento de conversão emitido pela plataforma — identificadores de campanha, IDs de clique, marcadores de source/medium, etc. Os mesmos parâmetros que as plataformas comunicam via parâmetros de consulta de URL em fluxos baseados em navegador. |
Resposta de pesquisa¶
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| ucp | any | Sim | Metadados BCP para respostas de catálogo. |
| products | Array[Product] | Sim | Produtos que correspondem aos identificadores solicitados. Pode conter menos itens se alguns identificadores não forem encontrados, ou mais se os identificadores corresponderem a múltiplos produtos. |
| messages | Array[object] | Não | Erros, avisos ou mensagens informativas sobre os itens solicitados. |
Exemplo de pesquisa¶
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "lookup_catalog",
"arguments": {
"meta": {
"ucp-agent": {
"profile": "https://platform.example/profiles/v2026-01/shopping-agent.json"
}
},
"catalog": {
"ids": ["prod_abc123", "var_xyz789"],
"context": {
"address_country": "BR"
}
}
}
}
}
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"structuredContent": {
"ucp": {
"version": "2026-07-28",
"capabilities": {
"br.dev.bcp.shopping.catalog.lookup": [
{"version": "2026-07-28"}
]
}
},
"products": [
{
"id": "prod_abc123",
"title": "Blue Runner Pro",
"description": {
"plain": "Lightweight running shoes with responsive cushioning."
},
"price_range": {
"min": { "amount": 12000, "currency": "BRL" },
"max": { "amount": 12000, "currency": "BRL" }
},
"variants": [
{
"id": "prod_abc123_size10",
"sku": "BRP-BLU-10",
"title": "Size 10",
"description": { "plain": "Size 10 variant" },
"price": { "amount": 12000, "currency": "BRL" },
"availability": { "available": true },
"inputs": [
{ "id": "prod_abc123", "match": "featured" }
],
"tags": ["running", "road", "neutral"],
"seller": {
"name": "Example Store",
"links": [
{
"type": "refund_policy",
"url": "https://business.example.com/policies/refunds"
}
]
}
}
],
"metadata": {
"collection": "Winter 2026",
"technology": {
"midsole": "React foam",
"outsole": "Continental rubber"
}
}
},
{
"id": "prod_def456",
"title": "Trail Master X",
"description": {
"plain": "Rugged trail running shoes with aggressive tread."
},
"price_range": {
"min": { "amount": 15000, "currency": "BRL" },
"max": { "amount": 15000, "currency": "BRL" }
},
"variants": [
{
"id": "var_xyz789",
"sku": "TMX-GRN-11",
"title": "Size 11 - Green",
"description": { "plain": "Size 11 Green variant" },
"price": { "amount": 15000, "currency": "BRL" },
"availability": { "available": true },
"inputs": [
{ "id": "var_xyz789", "match": "exact" }
],
"tags": ["trail", "waterproof"],
"seller": {
"name": "Example Store"
}
}
]
}
]
}
}
}
Sucesso Parcial¶
Quando alguns identificadores não são encontrados, a resposta inclui os produtos encontrados. O a resposta PODE incluir mensagens informativas indicando quais identificadores não foram encontrados.
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"structuredContent": {
"ucp": {
"version": "2026-07-28",
"capabilities": {
"br.dev.bcp.shopping.catalog.lookup": [
{"version": "2026-07-28"}
]
}
},
"products": [
{
"id": "prod_abc123",
"title": "Blue Runner Pro",
"description": {
"plain": "A comfortable everyday running shoe."
},
"price_range": {
"min": { "amount": 12000, "currency": "BRL" },
"max": { "amount": 12000, "currency": "BRL" }
},
"variants": [ ... ]
}
],
"messages": [
{
"type": "info",
"code": "not_found",
"content": "prod_notfound1"
},
{
"type": "info",
"code": "not_found",
"content": "prod_notfound2"
}
]
}
}
}
get_product¶
Mapeia para o recurso Consulta de catálogo. Retorna um singular
Objeto product para detalhes completos do produto com seleção interativa de opções.
Obter solicitação de produto¶
Corpo da requisição para recuperação de produto único. Suporta o refinamento interativo de variantes por meio de selected e preferences.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| id | string | Sim | Identificador de produto ou variante. As implementações DEVEM suportar product ID e variant ID. |
| selected | Array[object] | Não | Seleções de opções parciais ou completas para o refinamento interativo de variantes. Quando fornecidas, os valores de opção na resposta incluem sinais de disponibilidade (available, exists) relativos a essas seleções. |
| preferences | Array[string] | Não | Nomes de opções em ordem de prioridade de relaxamento. Quando nenhuma variante exata corresponde a todas as seleções, o servidor descarta opções a partir do fim desta lista primeiro. Ex.: ['Color', 'Size'] mantém Color e relaxa Size. |
| filters | object | Não | Critérios de filtro para restringir as variantes retornadas. Todos os filtros especificados se combinam com lógica AND. |
| context | object | Não | Sinais provisórios do buyer para relevância e localização—não são dados autoritativos. Empresas DEVERIAM usar estes valores quando entradas verificadas (ex.: endereço de shipping) estiverem ausentes, e PODEM ignorá-los ou reduzir sua prioridade se inconsistentes com sinais de maior confiança (conta autenticada, detecção de risco) ou restrições regulatórias (controles de exportação). A elegibilidade e a aplicação de políticas DEVEM ocorrer no momento do checkout usando dados vinculantes da transação. O Context DEVERIA ser não identificável e pode ser divulgado progressivamente—sinais grosseiros no início, resolução mais fina à medida que a sessão avança. Dados de maior resolução (endereço de shipping, endereço de cobrança) têm precedência sobre o context. |
| signals | object | Não | Dados de ambiente fornecidos pela plataforma para apoiar a autorização e a prevenção de abusos. Os valores NÃO DEVEM ser declarações afirmadas pelo comprador — as plataformas fornecem sinais com base em observação direta ou em atestações de terceiros verificáveis de forma independente. Todas as chaves de sinal DEVEM usar nomenclatura em domínio reverso para garantir a proveniência e prevenir colisões quando múltiplas extensões contribuem para o namespace compartilhado. |
| attribution | object | Não | Contexto de indicação e evento de conversão emitido pela plataforma — identificadores de campanha, IDs de clique, marcadores de source/medium, etc. Os mesmos parâmetros que as plataformas comunicam via parâmetros de consulta de URL em fluxos baseados em navegador. |
Obtenha resposta do produto¶
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| ucp | any | Sim | Metadados BCP para respostas de catálogo. |
| product | object | Sim | O produto solicitado com detalhe completo. Singular — esta é uma operação de recurso único. |
| messages | Array[object] | Não | Avisos ou mensagens informativas sobre o produto (ex.: preço alterado recentemente, disponibilidade limitada). |
Obtenha exemplo de produto¶
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get_product",
"arguments": {
"meta": {
"ucp-agent": {
"profile": "https://platform.example/profiles/v2026-01/shopping-agent.json"
}
},
"catalog": {
"id": "prod_abc123",
"selected": [
{ "name": "Color", "label": "Blue" }
],
"preferences": ["Color", "Size"],
"context": {
"address_country": "BR"
}
}
}
}
}
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"structuredContent": {
"ucp": {
"version": "2026-07-28",
"capabilities": {
"br.dev.bcp.shopping.catalog.lookup": [
{"version": "2026-07-28"}
]
}
},
"product": {
"id": "prod_abc123",
"handle": "runner-pro",
"title": "Runner Pro",
"description": {
"plain": "Lightweight running shoes with responsive cushioning."
},
"url": "https://business.example.com/products/runner-pro",
"price_range": {
"min": { "amount": 12000, "currency": "BRL" },
"max": { "amount": 15000, "currency": "BRL" }
},
"media": [
{
"type": "image",
"url": "https://cdn.example.com/products/runner-pro-blue.jpg",
"alt_text": "Runner Pro in Blue"
}
],
"options": [
{
"name": "Color",
"values": [
{"label": "Blue", "available": true, "exists": true},
{"label": "Red", "available": true, "exists": true},
{"label": "Green", "available": false, "exists": true}
]
},
{
"name": "Size",
"values": [
{"label": "8", "available": true, "exists": true},
{"label": "9", "available": true, "exists": true},
{"label": "10", "available": true, "exists": true},
{"label": "11", "available": false, "exists": false},
{"label": "12", "available": true, "exists": true}
]
}
],
"selected": [
{ "name": "Color", "label": "Blue" }
],
"variants": [
{
"id": "prod_abc123_blu_10",
"sku": "BRP-BLU-10",
"title": "Blue, Size 10",
"description": { "plain": "Blue, Size 10" },
"price": { "amount": 12000, "currency": "BRL" },
"availability": { "available": true },
"options": [
{ "name": "Color", "label": "Blue" },
{ "name": "Size", "label": "10" }
]
},
{
"id": "prod_abc123_blu_12",
"sku": "BRP-BLU-12",
"title": "Blue, Size 12",
"description": { "plain": "Blue, Size 12" },
"price": { "amount": 15000, "currency": "BRL" },
"availability": { "available": true },
"options": [
{ "name": "Color", "label": "Blue" },
{ "name": "Size", "label": "12" }
]
}
],
"rating": {
"value": 4.5,
"scale_max": 5,
"count": 128
}
}
}
}
}
Produto não encontrado¶
Quando o identificador não é resolvido para um produto, o servidor retorna um
resultado JSON-RPC bem-sucedido com ucp.status: "error" e um descritivo
mensagem. Este é um resultado do aplicativo, não um erro de transporte.
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"structuredContent": {
"ucp": {
"version": "2026-07-28",
"status": "error",
"capabilities": {
"br.dev.bcp.shopping.catalog.lookup": [
{"version": "2026-07-28"}
]
}
},
"messages": [
{
"type": "error",
"code": "not_found",
"content": "Product not found: prod_invalid",
"severity": "unrecoverable"
}
]
}
}
}
Tratamento de erros¶
O BCP usa um modelo de erro de duas camadas que separa os erros de transporte dos resultados de negócios.
Erros de transporte¶
Falhas no nível de transporte (autenticação, limitação de taxa, indisponibilidade) que
impedir o processamento da solicitação são retornados como JSON-RPC error. Veja o
Especificação principal para o código de erro completo
mapeamentos de código de erro de registro e JSON-RPC.
Resultados de negócios¶
Todos os resultados no nível do aplicativo retornam um resultado JSON-RPC bem-sucedido com o BCP
envelope e matriz messages opcional. Consulte Visão geral do catálogo
para semântica de mensagens e cenários comuns.
Exemplo: Todos os produtos não encontrados¶
Quando todos os identificadores solicitados não são resolvidos, a resposta contém um products vazio
matriz. A resposta PODE incluir mensagens informativas indicando quais identificadores foram
não encontrado.
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"structuredContent": {
"ucp": {
"version": "2026-07-28",
"capabilities": {
"br.dev.bcp.shopping.catalog.lookup": [
{"version": "2026-07-28"}
]
}
},
"products": [],
"messages": [
{
"type": "info",
"code": "not_found",
"content": "prod_invalid"
}
]
}
}
}
Os resultados de negócios usam o campo JSON-RPC result com mensagens na resposta
carga útil. Consulte a seção Sucesso parcial para lidar com problemas mistos
resultados.
Entidades¶
Produto detalhado¶
Um produto em uma resposta de get_product, estendido com seleções efetivas e sinais de disponibilidade nos valores de opção.
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| selected | Array[object] | Não | Seleções de opção efetivas que ancoram a variante em destaque e os sinais de disponibilidade. Obrigatórias quando o produto tem opções configuráveis; podem estar vazias ou omitidas para produtos sem eixos de opção. |
| options | Array[object] | Não | Opções de produto com sinais de disponibilidade relativos às seleções efetivas. |
Obter resposta do produto¶
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| ucp | any | Sim | Metadados BCP para respostas de catálogo. |
| product | object | Sim | O produto solicitado com detalhe completo. Singular — esta é uma operação de recurso único. |
| messages | Array[object] | Não | Avisos ou mensagens informativas sobre o produto (ex.: preço alterado recentemente, disponibilidade limitada). |
Resposta de erro¶
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| ucp | any | Sim | Metadados do protocolo BCP. O status DEVE ser 'error' para uma resposta de erro. |
| messages | Array[Message] | Sim | Array de mensagens descrevendo por que a operação falhou. |
| continue_url | string | Não | URL para handoff do buyer ou recuperação da sessão. |
Conformidade¶
Uma implementação de transporte MCP em conformidade DEVE:
- Implemente o protocolo JSON-RPC 2.0 corretamente.
- Implementar ferramentas para cada capacidade de catálogo anunciada no perfil BCP da empresa, de acordo com seus respectivos requisitos de capacidade (Search, Lookup). Cada capacidade pode ser adotada de forma independente. Quando o recurso Lookup é anunciado, as ferramentas
lookup_catalogeget_productDEVEM estar disponíveis. - Use erros JSON-RPC para problemas de transporte; use a matriz
messagespara resultados de negócios. - Retorne o resultado bem-sucedido para solicitações de pesquisa; identificadores desconhecidos resultam em menos produtos devolvidos (PODEM incluir mensagens informativas
not_found). - Valide as entradas da ferramenta em relação aos esquemas BCP.
- Devolver produtos com objetos
Priceválidos (valor + moeda). - Suporta paginação baseada em cursor com limite padrão de 10.
- Retorne
-32602(parâmetros inválidos) para solicitações que excedem os limites de tamanho de lote.