Skip to main content
Glama
MCP Mercado Livre

MCP Mercado Livre

MCP Mercado Livre

Servidor MCP (Model Context Protocol) em TypeScript para a API do Mercado Livre, focado em vendedores. Permite que LLMs (Claude Desktop, Kimi Code, Cursor etc.) pesquisem o marketplace, publiquem e gerenciem anúncios, respondam perguntas, acompanhem pedidos, envios, reclamações, reputação, catálogo, promoções e muito mais — tudo por linguagem natural.

Projeto open source (MIT) — contribuições são bem-vindas! Veja Contribuindo.

Destaques

  • 42 ferramentas cobrindo o ciclo completo do vendedor (busca, publicação, gestão, pós-venda, reputação, catálogo, promoções, Ads, Full, Shops)

  • OAuth 2.0 com refresh automático — tokens de 6h renovados 5 min antes de expirar, com persistência da rotação do refresh token

  • Suporte a Docker Compose — rode o servidor e a autenticação em containers, com tokens em volume persistente

  • Erros graciosos — falhas da API (validação, escopo, permissão) retornam a mensagem do Mercado Livre de forma clara, sem derrubar o servidor

  • Zero dependências além do essencial — apenas @modelcontextprotocol/sdk e zod; HTTP via fetch nativo do Node 18+

Related MCP server: BopMarket MCP Server

Início rápido

🔰 Nunca usou MCP ou a API do Mercado Livre? Siga o guia de instalação detalhado para iniciantes — passo a passo com prints do que esperar em cada etapa.

Via npm (recomendado — sem clonar o repositório)

  1. Crie o aplicativo no portal de desenvolvedores do Mercado Livre (detalhes no guia de instalação) e anote o Client ID e o Client Secret.

  2. Escolha uma pasta fixa para os tokens (ex. ~/mcp-meli), entre nela e autentique:

    mkdir -p ~/mcp-meli && cd ~/mcp-meli
    npx -y -p @gustavohssouza/mcp-mercadolivre mcp-mercadolivre-auth

    O navegador abre, você autoriza, e o tokens.json é salvo nessa pasta. Como clientes MCP podem iniciar o servidor com outro diretório de trabalho, o passo seguinte aponta ML_TOKENS_FILE para esse arquivo.

  3. Configure o cliente MCP (Claude Desktop, Cursor, Kimi Code):

    {
      "mcpServers": {
        "mercadolivre": {
          "command": "npx",
          "args": ["-y", "@gustavohssouza/mcp-mercadolivre"],
          "env": {
            "ML_CLIENT_ID": "seu_client_id",
            "ML_CLIENT_SECRET": "seu_client_secret",
            "ML_SITE_ID": "MLB",
            "ML_TOKENS_FILE": "/caminho/absoluto/para/mcp-meli/tokens.json"
          }
        }
      }
    }

Alternativa: instalação a partir do código-fonte

Para contribuir ou modificar o código:

git clone https://github.com/SEU_USUARIO/mcp_mercadolivre
cd mcp_mercadolivre

Pré-requisitos

Configuração

  1. Instale as dependências:

    npm install
  2. Crie o arquivo de ambiente:

    cp .env.example .env
  3. Preencha .env com ML_CLIENT_ID e ML_CLIENT_SECRET do seu aplicativo.

  4. Compile:

    npm run build
  5. Autentique (abre o navegador, captura o código e salva os tokens em tokens.json):

    npm run auth
  6. Configure seu cliente MCP (veja Configuração nos clientes MCP) e comece a conversar.

Os tokens são renovados automaticamente (vida útil de 6h, com refresh 5 min antes de expirar). O refresh token é rotacionado pelo Mercado Livre e sempre persistido junto.

Ferramentas disponíveis (42)

Legenda: 📖 leitura · ✏️ escrita (operação real na conta)

Busca & Leitura

Ferramenta

Tipo

Descrição

search_products

📖

Busca produtos em todo o marketplace (filtros de categoria e faixa de preço)

get_item

📖

Detalhes de um anúncio pelo ID (preço, estoque, vendidos, fotos, atributos)

get_my_items

📖

Lista os anúncios do vendedor autenticado (filtro por status: active/paused/closed)

get_questions

📖

Perguntas recebidas (filtro por status, ex. UNANSWERED, e por anúncio)

get_orders

📖

Pedidos/vendas do vendedor, mais recentes primeiro

Publicação

Ferramenta

Tipo

Descrição

predict_category

📖

Prevê a categoria ideal a partir do título do produto

get_category_attributes

📖

Lista os atributos (e quais são obrigatórios) de uma categoria

get_listing_types

📖

Lista os tipos de anúncio disponíveis (Clássica, Premium etc.)

get_listing_prices

📖

Estima as taxas de venda por tipo de anúncio para um dado preço

create_item

✏️

Cria e publica um novo anúncio

upload_picture

✏️

Faz upload de imagem (URL pública ou arquivo local) e retorna o ID da foto

upload_video

✏️

Faz upload de vídeo (arquivo local) e retorna o video_id para anexar ao anúncio

Gestão de anúncios

Ferramenta

Tipo

Descrição

update_item

✏️

Atualiza preço, estoque, título ou vídeo de um anúncio existente

update_item_status

✏️

Pausa, ativa ou fecha um anúncio (fechar com vendas é irreversível)

Perguntas

Ferramenta

Tipo

Descrição

answer_question

✏️

Responde uma pergunta de comprador (pública e não editável)

manage_question_blacklist

📖/✏️

Gerencia a blacklist de perguntas (listar, bloquear, desbloquear usuários)

Envios

Ferramenta

Tipo

Descrição

get_shipment

📖

Detalhes do envio de uma venda (status, rastreio, endereço, itens)

get_shipment_label

📖

Baixa a etiqueta de envio (PDF ou ZPL2) em labels/

Mensagens

Ferramenta

Tipo

Descrição

get_order_messages

📖

Lê a conversa de pós-venda com o comprador de um pedido

send_message

✏️

Envia mensagem ao comprador (moderada; máx. 350 caracteres)

Reclamações & Devoluções

Ferramenta

Tipo

Descrição

get_claims

📖

Busca reclamações do vendedor (filtros de status e período)

get_claim_detail

📖

Detalhes de uma reclamação, incluindo as mensagens do thread

send_claim_message

✏️

Responde dentro do thread de uma reclamação (visível à mediação)

get_returns

📖

Lista devoluções de produtos, geralmente ligadas a reclamações

Reputação & Métricas

Ferramenta

Tipo

Descrição

get_seller_reputation

📖

Termômetro de reputação e métricas (claims, atrasos, cancelamentos)

get_item_visits

📖

Visitas por anúncio em um período (padrão: últimos 30 dias)

Ferramenta

Tipo

Descrição

search_catalog

📖

Busca produtos do catálogo (listings compartilhados com buy box)

get_catalog_product

📖

Detalhes do produto de catálogo, incluindo quem vence o buy box

create_catalog_listing

✏️

Vincula um anúncio existente a um produto de catálogo

Preço & Mercado

Ferramenta

Tipo

Descrição

get_price_suggestion

📖

Sugestão de preço competitivo do Mercado Livre para um anúncio

get_trends

📖

Termos de busca em alta no marketplace (site ou por categoria)

convert_currency

📖

Taxa de câmbio atual entre moedas

Categorias

Ferramenta

Tipo

Descrição

get_site_categories

📖

Categorias de primeiro nível do site

get_category

📖

Detalhes, filhos e restrições de uma categoria (máx. fotos etc.)

Promoções

Ferramenta

Tipo

Descrição

get_promotions

📖

Lista campanhas/promoções oferecidas ao vendedor (candidatas e ativas)

get_promotion_items

📖

Itens participando de uma promoção, com preço promocional

add_item_to_promotion

✏️

Inscreve um anúncio em uma campanha com o preço oferecido

Mercado Ads

Ferramenta

Tipo

Descrição

get_ads_campaigns

📖

Lista campanhas de Product Ads (status, orçamento, estratégia)

get_ads_campaign_metrics

📖

Métricas de uma campanha (impressões, cliques, CTR, custo, ACOS)

Fulfillment (Full)

Ferramenta

Tipo

Descrição

get_fulfillment_stock

📖

Estoque armazenado nos centros de fulfillment do Mercado Livre

Mercado Shops & Depósitos

Ferramenta

Tipo

Descrição

get_mercado_shop

📖

Informações da Mercado Shop do vendedor (se a conta tiver uma)

get_warehouses

📖

Depósitos/origens de estoque cadastrados pelo vendedor

Nota: as ferramentas de Mercado Ads, Fulfillment (Full) e Mercado Shops exigem que a conta/aplicativo tenha esses recursos habilitados (escopo de advertising, conta Full, loja criada). Caso contrário, o erro retornado pelo Mercado Livre é exibido claramente pela ferramenta.

Fluxos recomendados

Criar um anúncio

  1. predict_category com o título do produto → obtém o category_id ideal.

  2. get_category_attributes com a categoria escolhida → descobre os atributos obrigatórios.

  3. (opcional) get_listing_types e get_listing_prices → escolhe o tipo de anúncio e estima as taxas.

  4. (opcional) upload_picture e/ou upload_video → envia as mídias locais antes, caso não estejam em URLs públicas, e guarda os IDs retornados.

  5. create_item com todos os atributos obrigatórios preenchidos (e video_id se houver vídeo) → publica o anúncio.

Se o Mercado Livre rejeitar a criação com erro de validação, o corpo completo do erro é retornado — basta corrigir os campos indicados e tentar novamente.

Operação diária do vendedor

  1. get_questions com status=UNANSWERED → responde com answer_question (conversão depende disso).

  2. get_orders → novos pedidos; get_shipment + get_shipment_label para despachar.

  3. get_claims com status=opened → entende com get_claim_detail e responde com send_claim_message (prazos contam para a reputação).

  4. get_item_visits + get_my_items → detecta anúncios com visitas e sem vendas; ajusta preço com get_price_suggestion e update_item.

  5. get_seller_reputation → acompanha o termômetro e as métricas de claims/atrasos/cancelamentos.

Uso com Docker Compose

# build da imagem
docker compose build

# autenticação (publica a porta 3333 e imprime a URL para abrir no navegador)
docker compose --profile auth run --rm --service-ports auth

# executar o servidor MCP manualmente (stdio)
docker compose run --rm mcp-mercadolivre

Os tokens ficam no volume nomeado meli-data (/app/data/tokens.json dentro do container), compartilhado entre os serviços auth e mcp-mercadolivre.

Configuração nos clientes MCP

Execução local (Node)

Claude Desktop (claude_desktop_config.json), Kimi Code ou Cursor — trecho mcpServers:

{
  "mcpServers": {
    "mercadolivre": {
      "command": "node",
      "args": ["/caminho/absoluto/para/mcp_mercadolivre/dist/index.js"],
      "env": {
        "ML_CLIENT_ID": "seu_app_id",
        "ML_CLIENT_SECRET": "seu_client_secret",
        "ML_SITE_ID": "MLB"
      }
    }
  }
}

O caminho exato do arquivo de configuração de cada cliente (macOS/Windows/Linux) está no guia de instalação.

Execução via Docker

{
  "mcpServers": {
    "mercadolivre": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "--env-file", "/caminho/absoluto/para/mcp_mercadolivre/.env",
        "-e", "ML_TOKENS_FILE=/app/data/tokens.json",
        "-v", "mcp_mercadolivre_meli-data:/app/data",
        "mcp-mercadolivre"
      ]
    }
  }
}

Importante: rode a autenticação (docker compose --profile auth run --rm --service-ports auth) antes de usar o servidor via Docker, para que os tokens existam no volume.

Segurança

O servidor inclui um pacote de proteções para operar sua conta com segurança, especialmente enquanto você experimenta.

Modo somente leitura (ML_READ_ONLY)

Defina ML_READ_ONLY=true no .env e nenhuma ferramenta de escrita é registrada — o tools/list expõe apenas 32 ferramentas de leitura (incluindo manage_question_blacklist, que nesse modo aceita somente a ação list; block/unblock retornam erro explicando o modo). Recomendado: use ML_READ_ONLY=true nos primeiros experimentos e só desligue quando estiver confortável.

Perfis de ferramentas (ML_TOOL_PROFILE)

Limita quais ferramentas o servidor expõe:

Perfil

Ferramentas

Total

all (padrão)

Todas

42

leitura

Apenas leitura

31

vendas

Leitura + responder perguntas, mensagens ao comprador, mensagens em reclamações, blacklist de perguntas

35

publicacao

Leitura + criar/atualizar anúncios, upload de mídia, opt-in de catálogo

37

Confirmação de ação irreversível

update_item_status com action="close" exige o parâmetro confirm: true — sem ele, a chamada é recusada com uma mensagem pedindo a confirmação explícita (fechar um anúncio com vendas é irreversível).

Guarda de conteúdo em mensagens

send_message e send_claim_message varrem o texto antes de chamar a API e bloqueiam mensagens contendo e-mails, telefones (formatos BR) ou links/domínios — conteúdo proibido pela moderação do Mercado Livre, que pode sancionar a conta. A mensagem de bloqueio explica o motivo para o texto ser reformulado.

Log de auditoria

Toda invocação de ferramenta de escrita é registrada em audit.log (raiz do projeto, append-only, gitignored) com timestamp, ferramenta, parâmetros (truncados em 500 caracteres) e resultado (ok/error). Ferramentas de leitura não são logadas.

Permissões do arquivo de tokens

Na inicialização e após salvar tokens, o servidor verifica tokens.json: se as permissões forem mais abertas que 0600 (legível por grupo/outros), um aviso é impresso e o modo é corrigido automaticamente para 0600.

Solução de problemas

  • O cadastro do app rejeita a Redirect URI http://localhost:3333/callback: o Mercado Livre exige HTTPS para apps em produção, mas aceita http://localhost durante a autenticação. Se o formulário de cadastro recusar, cadastre temporariamente uma URL HTTPS qualquer (ex. https://localhost/callback) e, na hora de autenticar, mantenha ML_REDIRECT_URI=http://localhost:3333/callback no .env — ou use uma URL HTTPS válida e ajuste ML_REDIRECT_URI e o auth-cli de acordo.

  • Redirect URI mismatch na autenticação: o ML_REDIRECT_URI do .env precisa ser idêntico ao cadastrado no aplicativo (incluindo porta e path). Qualquer diferença faz o Meli recusar o callback.

  • No tokens stored: rode npm run auth (ou o serviço auth do compose) novamente.

  • Erros 401 persistentes / refresh token expirado: o refresh token tem validade máxima (~6 meses) e é rotacionado a cada refresh — se a conta ficou muito tempo sem uso ou o arquivo de tokens foi perdido, refaça a autenticação.

  • Erros de escopo/permissão nas ferramentas de Ads, Full ou Shops (403/404): essas APIs exigem recursos extras — escopo de advertising concedido ao app, conta Full habilitada, ou uma Mercado Shop criada. O servidor retorna a mensagem do Meli como está; habilite o recurso na conta/app e tente novamente.

  • Erros de validação no create_item: o corpo completo do erro do Meli é retornado — normalmente indica atributos obrigatórios faltando (rode get_category_attributes na categoria) ou valores fora do permitido. Corrija os campos indicados e reenvie.

  • Etiqueta de envio não encontrada: a etiqueta só existe quando o envio está ready_to_ship, e tipos logísticos como flex/self_service não têm etiqueta para impressão.

Estrutura do projeto

mcp_mercadolivre/
├── src/
│   ├── index.ts        # Servidor MCP: registro das 42 ferramentas
│   ├── meli-client.ts  # Cliente HTTP da API Meli (Bearer, retry 401, multipart, binário)
│   ├── auth.ts         # OAuth 2.0: URL de autorização, troca/refresh de tokens
│   ├── auth-cli.ts     # CLI de autenticação (servidor local :3333 + browser)
│   ├── token-store.ts  # Persistência dos tokens em tokens.json (0600)
│   ├── safety.ts       # Perfis, read-only, guarda de conteúdo, audit log
│   └── config.ts       # Variáveis de ambiente + parser de .env sem dependências
├── docs/
│   ├── instalacao.md   # Guia de instalação passo a passo para iniciantes
│   ├── arquitetura.md  # Arquitetura, fluxo OAuth e decisões de design
│   ├── tools.md        # Referência completa das 42 ferramentas
│   └── api-map.md      # Mapa de endpoints da API Meli utilizados e cobertura
├── dist/               # Build (tsc)
├── Dockerfile
├── docker-compose.yml
├── LICENSE             # Licença MIT
├── CONTRIBUTING.md     # Guia de contribuição
├── .env.example
└── package.json

Documentação

  • docs/instalacao.md — guia de instalação passo a passo (para quem nunca usou MCP)

  • docs/arquitetura.md — arquitetura interna, fluxo OAuth e estratégia de erros

  • docs/tools.md — referência detalhada de cada ferramenta (parâmetros, endpoints, notas)

  • docs/api-map.md — endpoints da API do Mercado Livre utilizados e áreas não cobertas

Contribuindo

Contribuições são muito bem-vindas — issues, sugestões de novas ferramentas e pull requests. Leia o CONTRIBUTING.md para os padrões do código e o checklist de como adicionar uma nova ferramenta.

Licença

Distribuído sob a licença MIT. Veja o arquivo LICENSE para o texto completo.

Autor & Contato

Available Tools

42 tools
add_item_to_promotionA

Submit one of your items to a promotion campaign with the offered deal price — this is a REAL write operation: if Meli approves, the item starts being sold at the promotional price for the campaign duration. Confirm the price with the user before calling. Flow: get_promotions (find a 'candidate' campaign) → add_item_to_promotion with the deal_price within the campaign's allowed range. Returns the submission result with item id and status.

Inputs: item_id (required), deal_price (required), promotion_id (required), top_deal_price.

answer_questionA

Post a public answer to a buyer's pre-sale question. The answer is visible to everyone viewing the listing and CANNOT be edited or deleted afterwards — confirm the exact text with the user before sending. Get the question_id from get_questions (typically with status='UNANSWERED'). Returns the answer id, text, status and creation date.

Inputs: text (required), question_id (required).

convert_currencyA

Get the current Mercado Livre exchange rate between two currencies (e.g. USD → BRL). Useful for cross-border pricing or comparing prices across Meli sites. Returns the conversion ratio and both currency codes.

Inputs: to (required), from (required).

create_catalog_listingA

Opt one of your EXISTING listings into catalog competition by linking it to a catalog product — this is a real write operation. The listing keeps its identity but starts competing for the buy box under catalog rules: display and sales conditions change (e.g. free-shipping and price rules may differ from a standalone listing). Confirm with the user before calling. Flow: search_catalog → get_catalog_product (check the winner's price) → create_catalog_listing. The item must belong to the authenticated seller and match the catalog product. Returns the linked item id, status and permalink.

Inputs: item_id (required), catalog_product_id (required).

create_itemA

Create and PUBLISH a new listing on Mercado Livre — this is a real write operation: the item becomes public (immediately or per account settings) and selling fees apply once it sells. Confirm the details with the user before calling. Recommended flow: (1) predict_category with the title to get category_id; (2) get_category_attributes on that category and fill every attribute marked required via the attributes parameter; (3) optionally get_listing_types/get_listing_prices to choose the listing type and estimate fees; (4) call create_item. The title is limited to 60 characters. If Meli rejects the payload with a validation error, the full error body is returned — read it, fix the offending fields (usually missing required attributes) and retry. Returns the created item id, status and permalink.

Inputs: price (required), title (required), category_id (required), available_quantity (required), +9 more.

get_ads_campaign_metricsA

Get performance metrics of a Mercado Ads campaign over a date range (defaults to the last 30 days): impressions, clicks, CTR, cost, attributed sales and ACOS when present. Use this to evaluate ad spend efficiency — a high ACOS means advertising costs eat a large share of the revenue it generates. Get campaign ids from get_ads_campaigns. Requires the advertising scope; scope errors are surfaced clearly. Date format: YYYY-MM-DD.

Inputs: campaign_id (required), date_to, date_from.

get_ads_campaignsA

List the seller's Mercado Ads (Product Ads) campaigns. Use this for advertising questions: which campaigns exist, their status, daily budget and bidding strategy. Gotcha: this requires the advertising scope granted to the app and an active ads account — if either is missing, Meli answers with a scope/permission error, which is surfaced clearly so you know the feature isn't available. Get campaign ids here, then check performance with get_ads_campaign_metrics. Returns a compact list with campaign id, name, status, budget and strategy.

Inputs: limit, offset, status.

get_catalog_productA

Get full details of a catalog product, including who is currently winning the buy box (buy_box_winner: price and seller id). Use this after search_catalog to study the competition before linking your listing with create_catalog_listing — the winner's price is the reference your listing must beat (along with reputation and shipping) to take the buy box. Returns name, attributes, picture URLs, main features and the buy box winner when present.

Inputs: product_id (required).

get_categoryA

Get details of a category: its name, full path from the root, child categories (to keep drilling down the tree) and the listing settings that apply to it — including constraints relevant BEFORE create_item such as max pictures per item and max description length. A category with no children is a leaf and can be used as category_id in create_item; then call get_category_attributes for its mandatory attributes.

Inputs: category_id (required).

get_category_attributesA

Get the attributes defined for a Mercado Livre category. Call this AFTER picking a category with predict_category and BEFORE create_item, to learn which attributes are mandatory (required=true) and what values are allowed. Every attribute flagged as required MUST be included in create_item's attributes parameter or the publication will be rejected with a validation error. Returns id, name, value_type (string/number/boolean/list/...), required flag, and allowed values (id + name) when the attribute is a closed list.

Inputs: category_id (required).

get_claim_detailA

Get the full details of a single claim (reclamação), including its type, status, stage, reason, related order id, the parties involved (complainant = buyer, respondent = seller), the resolution when the claim is closed, and the recent messages in the claim thread. Use this after get_claims to understand a specific claim before replying with send_claim_message. If the messages endpoint is unavailable, messages are simply omitted — the rest of the detail is still returned.

Inputs: claim_id (required).

get_claimsA

Search the authenticated seller's claims (reclamações) — buyer complaints opened against sales. Open claims hurt seller reputation and have response deadlines, so use this to find claims needing attention (e.g. status 'opened'). Optional status filter and date range (ISO 8601); results are paginated with limit/offset. Returns a compact list with claim id, type (e.g. 'claim', 'return'), status, stage (e.g. 'claim', 'mediation'), resource_id (the related order id), reason id and creation date. Call get_claim_detail on a claim id for the full picture.

Inputs: limit, offset, status, date_to, +1 more.

get_fulfillment_stockA

List the seller's stock stored at Mercado Livre fulfillment centers (Full), with available and non-sellable (e.g. damaged) quantities. Use this for inventory questions about Full — for regular (seller-shipped) stock use get_my_items/get_item instead. Gotcha: this only works for accounts enrolled in Full; otherwise Meli answers with an error, which is surfaced clearly.

Inputs: limit.

get_itemA

Get full details of a single Mercado Livre listing by its item id. The id must be the complete id including the site prefix, e.g. 'MLB123456789' — bare numbers do not work. Use this to inspect a specific listing (yours or a competitor's) in depth: stock, sales count, pictures and attributes. For bulk listing of the seller's own items use get_my_items instead. Returns title, price, currency, available_quantity, sold_quantity, condition, status (active/paused/closed/...), permalink, picture URLs and attributes (id/name/value).

Inputs: item_id (required).

get_item_visitsA

Get the number of page visits per listing in a date range (defaults to the last 30 days when no dates are given). Use this to measure listing traffic — a powerful combo is get_my_items + get_item_visits to find listings with many views but few or no sales (a sign the price, pictures or listing type may need work). Accepts up to 50 item ids at once; returns one entry per item id with the total visits in the range.

Inputs: item_ids (required), date_to, date_from.

get_listing_pricesA

Estimate the selling fees for publishing an item at a given price, optionally for a specific category and listing type. Use this BEFORE create_item so the seller knows the commission cost of each exposure plan (Clássica vs Premium) before committing. Returns one entry per listing type with the sale fee percentage, fee amount and related flags for the given price.

Inputs: price (required), category_id, listing_type_id.

get_listing_typesA

List the listing types (exposure plans) available on the configured site, e.g. 'gold_special' (Clássica) and 'gold_pro' (Premium). Each type has different fees and exposure; higher tiers usually charge more commission but boost visibility. Call this (optionally together with get_listing_prices) before create_item to choose the listing_type_id. Returns ids and names.

Inputs: no named parameters.

get_mercado_shopA

Get the seller's Mercado Shop info (id, name, URL, status) if the account has one. Mercado Shops is an optional storefront feature — accounts without a shop get a graceful 'no shop' response instead of a hard error. Use this when the user asks about their store page or wants the shop URL.

Inputs: no named parameters.

get_my_itemsA

List the authenticated seller's own listings, with optional status filter. Use this whenever the user asks about 'my listings/ads/products' — for marketplace-wide search use search_products instead. Status filter values: 'active' (published and visible), 'paused' (temporarily hidden), 'closed' (finished; items with sales usually end here). Results are paginated via limit/offset; each entry is hydrated with id, title, status, price, currency and permalink. Requires authentication.

Inputs: limit, offset, status.

get_order_messagesA

Read the post-sale message conversation with the buyer of a specific order. Use this to see what the buyer asked after the purchase (delivery questions, invoice requests, etc.). The pack id in the messaging API equals the order id. Returns each message with sender/recipient (user id + role, e.g. 'buyer'/'seller'), text, date (ISO 8601) and whether it was read. To reply, use send_message with the same order id.

Inputs: order_id (required), limit.

get_ordersA

List the authenticated seller's orders (sales), newest first (sort=date_desc). Use this for questions about recent sales, revenue, or what a specific buyer purchased. The optional status filter accepts Mercado Livre order statuses such as 'confirmed', 'payment_required', 'payment_in_process', 'paid', 'shipped', 'delivered' and 'cancelled'. Each order includes id, creation date (ISO 8601), status, total amount, currency, buyer nickname, and line items with item id, title, quantity and unit price. Paginated via limit/offset. Requires authentication.

Inputs: limit, offset, status.

get_price_suggestionA

Get Mercado Livre's competitive price suggestion for one of your listings — the price Meli estimates would make the listing more competitive, based on comparable sales. Use it when the user asks whether a listing is priced right or wants to undercut the competition. Gotcha: not every listing has a suggestion (insufficient data); in that case the endpoint returns partial data and whatever comes back is surfaced as-is. Returns current price, suggested price and the basis of the suggestion when present.

Inputs: item_id (required).

get_promotion_itemsA

List the items already participating in a specific promotion campaign, with their promotional price, original price and status. Use this to check which of your items are in a campaign (and at what price) after adding them with add_item_to_promotion, or to audit active discounts. Get the promotion_id from get_promotions. Paginated with limit/offset.

Inputs: promotion_id (required), limit, offset.

get_promotionsA

List the promotions/campaigns Mercado Livre offers to the authenticated seller (daily deals, lightning deals, etc.) — both campaigns you can join (status 'candidate') and ones already running ('started'). Use this to discover discount opportunities, then inspect participants with get_promotion_items or join with add_item_to_promotion. May legitimately return an empty list when there are no active campaigns for the account. Returns a compact list with id, type, status, title and start/finish dates, paginated with limit/offset.

Inputs: limit, offset, status, promotion_type.

get_questionsA

List pre-sale questions buyers asked on the authenticated seller's listings, newest first. Use status='UNANSWERED' to find questions still waiting for a reply — that is the most common use case, since unanswered questions hurt conversion. Other status values: 'ANSWERED', 'DELETED', 'BANNED', 'DISABLED'. Use item_id to restrict to one listing. Each question comes back with its id (needed by answer_question), text, item id, status, creation date (ISO 8601), and the answer (text + date) when one exists. Requires authentication.

Inputs: limit, status, item_id.

get_returnsA

List the authenticated seller's product returns (devoluções) — items buyers sent back, usually linked to a claim. Use this to track return requests and their statuses; call get_claim_detail on the linked claim id for the full context and message thread. Returns a compact list with return id, claim id, order id, status and creation date, paginated with limit/offset. Accounts without returns may yield an API error — it is surfaced gracefully instead of crashing.

Inputs: limit, offset, status.

get_seller_reputationA

Get a seller's reputation profile on Mercado Livre — the authenticated account by default, or any seller by user_id (public data). Use this to check the seller's reputation thermometer and service metrics. The level_id is Meli's color scale: red (1_red) is worst, then orange/yellow/light_green, up to green (5_green) — plus Mercado Líder tiers in power_seller_status (e.g. 'silver', 'gold', 'platinum') for top sellers. Metrics include the rates of claims, delayed handling time and cancellations over the last period; keeping these low is what maintains a green reputation. Returns nickname, registration date, transaction totals (total/completed/canceled) and each metric with its rate and value.

Inputs: user_id.

get_shipmentA

Get the shipping details of a sale: status, substatus, tracking number, dates (ISO 8601), receiver address, shipped items and logistic type (e.g. 'me2', 'flex', 'self_service'). Shipment ids come from orders: each order returned by get_orders has a shipping id (order.shipping.id) — if you only have an order id, call get_orders first to find the shipment id. Status values include 'pending', 'ready_to_ship', 'shipped', 'delivered' and 'cancelled'. Use get_shipment_label to download the printable label for the shipment.

Inputs: shipment_id (required).

get_shipment_labelA

Download the Mercado Envios shipping label for a shipment and save it to a local file. Returns the absolute file path and size in bytes so the user can open/print it. The label comes back as PDF (default) or ZPL2 for thermal printers. Gotchas: the label only exists after the shipment is 'ready_to_ship', and some logistic types (e.g. flex / self-service) do not have a printable label — in those cases Meli returns an error, which is surfaced as-is. Shipment ids come from orders (order.shipping.id); call get_orders first if you only have an order id.

Inputs: shipment_id (required), response_type.

get_site_categoriesA

List the top-level categories of the configured site (MLB by default). This is the entry point for browsing the category tree: pick a category here, then drill down with get_category to reach a leaf category usable in create_item. For a title-driven shortcut to the right leaf category, predict_category is usually faster. Returns a list of {id, name}.

Inputs: no named parameters.

get_warehousesA

List the seller's registered warehouses (multi-origin stock locations / depósitos) with their ids, descriptions and addresses. Useful for accounts shipping from multiple addresses and for setting up shipping options per origin. Accounts without registered warehouses get an empty list or a clear API error.

Inputs: no named parameters.

manage_question_blacklistA

Manage the seller's questions blacklist. 'list' shows the blocked users; 'block' prevents a user from asking questions on your listings; 'unblock' reverses it. Use 'block' only for abusive users — note this ONLY blocks new questions from that user; they can still buy from you, and blocking/unblocking is a real change to the account, so confirm with the user first. Get user ids from buyers' questions (get_questions) or orders.

Inputs: action (required), user_id.

predict_categoryA

Predict the best Mercado Livre category for a product title. ALWAYS call this BEFORE create_item: create_item requires a category_id, and publishing in the wrong category hurts visibility and can be rejected. Pass the product title you intend to publish and pick the top prediction. After choosing a category, call get_category_attributes to discover which attributes are mandatory for that category. Returns a list of predicted categories with id, name and full path (e.g. 'Celulares e Telefones > Celulares e Smartphones').

Inputs: title (required).

search_catalogA

Search Mercado Livre's product catalog. Catalog products are shared listings where multiple sellers compete for the buy box on price and reputation — opt-ing into catalog can bring much more traffic than a standalone listing. Use this to find the catalog_product_id for a product you sell, then inspect it with get_catalog_product and link your listing with create_catalog_listing. Returns a compact list with product id, name, thumbnail and main attributes, paginated with limit/offset.

Inputs: query (required), limit, offset.

search_productsA

Search public listings on Mercado Livre for the configured site (ML_SITE_ID, default MLB = Brazil). Use this to research competitors, market prices, or find item/category ids by keyword — it searches the whole marketplace, NOT the seller's own listings (use get_my_items for that). Results are paginated: use limit (max 50) and offset to page through. Returns total count plus a compact list with id, title, price, currency, permalink, thumbnail, condition (new/used) and free-shipping flag.

Inputs: query (required), limit, offset, category, +2 more.

send_claim_messageA

Send a message inside a claim (reclamação) thread as the seller. This is a REAL message visible to the buyer AND to Mercado Livre's mediation team — it becomes part of the claim record, so confirm the exact text with the user before sending. The same moderation rules as buyer messaging apply: no contact information, links, phone numbers or e-mails, under risk of sanctions. Use get_claim_detail first to read the thread context. Returns the created message id and date.

Inputs: text (required), claim_id (required).

send_messageA

Send a post-sale message to the buyer of a specific order — this is a REAL message delivered to the buyer, so confirm the exact text with the user before sending. Only for post-sale communication tied to an order. Important Mercado Livre moderation rules: messages are moderated and must NOT contain contact information — no links, phone numbers, e-mails or social media handles; violations can lead to sanctions on the seller's account, up to suspension. Text is limited to 350 characters. Use get_order_messages first to read the conversation context. Returns the sent message id, moderation status and date.

Inputs: text (required), order_id (required).

update_itemA

Update mutable fields of an existing listing owned by the authenticated seller: price, stock (available_quantity), title or video. Use this for price changes and stock adjustments; to change visibility (pause/activate/close) use update_item_status instead. Only the provided fields are sent. Gotcha: the title can only be changed while the item has no sales — once units are sold, Meli rejects title updates. Returns the updated item id, price, available_quantity and status.

Inputs: item_id (required), price, title, video_id, +1 more.

update_item_statusA

Change the visibility status of a listing: 'pause' temporarily hides it (reversible), 'activate' re-publishes a paused item, and 'close' finishes the listing. WARNING: closing is effectively irreversible for items that had sales — a closed item cannot be reactivated; a new listing would have to be created. Because of that, action='close' is refused unless confirm=true is passed explicitly. Always confirm with the user before closing. Paused items keep their history and can be reactivated at any time with 'activate'. Returns the item id and its new status.

Inputs: action (required), item_id (required), confirm.

upload_pictureA

Upload a picture to the seller's Mercado Livre account and get back a picture id. Provide exactly ONE of: url (a public image URL that Meli will download) or file_path (a local image file, uploaded as multipart). Use the returned id in create_item's pictures when the images are local files; for images already hosted at a public URL, passing the URL directly to create_item also works. Returns the picture id, source URL and size variations.

Inputs: url, file_path.

upload_videoA

Upload a product video from a local file to the seller's Mercado Livre account and get back a video_id. Pass that video_id to create_item or update_item to attach the video to a listing. Only local files are supported (mp4, mov, avi, mkv, webm). Meli enforces size/duration limits on product videos — very large or long files are rejected by the API, and in that case the API error is returned as-is so you can adjust the file and retry. Returns the video_id plus basic response info (id, max size/quality when present).

Inputs: file_path (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 42 tools

    Disambiguation5/5

    Despite the large set, the descriptions draw very clear boundaries between similar-sounding tools (e.g. search_products vs search_catalog, get_my_items vs get_item, send_message vs send_claim_message, get_promotions vs get_promotion_items). Each tool targets a distinct resource or action, and the detailed flow guidance further reduces misselection risk.

    Naming Consistency5/5

    All tool names follow a consistent snake_case verb_noun pattern (get_*, create_*, update_*, send_*, search_*, upload_*, etc.). Compound names like add_item_to_promotion and manage_question_blacklist still fit the same convention, with no camelCase or mixed verb styles.

    Tool Count2/5

    42 tools is well beyond the threshold where a tool set starts to feel heavy for an agent, and it spans many subdomains (listings, ads, claims, catalog, fulfillment, etc.). While the breadth mirrors Mercado Livre's seller API, the count increases selection burden and context cost considerably.

    Completeness4/5

    The surface covers most core seller workflows: listings, orders, questions, messages, shipments, claims, returns, promotions, ads, catalog, reputation and visits. However, there are minor lifecycle gaps such as no single-order retrieval by id, no return-processing actions, no promotion removal, and no ads campaign write operations.

    Maintenance

    ActivitySlowing
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers