Skip to main content
Glama
maxwellmezadre

mercadolivre-mcp

mercadolivre-mcp

License: MIT Runtime: Bun TypeScript: strict CI

CLI + servidor MCP para o histórico de compras da sua conta do Mercado Livre (lado comprador): compras, produtos, preço cheio e pago, descontos e cupons, parcelamento, meio de pagamento, vendedor, entrega e notas fiscais (NF-e em PDF e XML), com cache local em SQLite para responder "quanto gastei em 2025 com limpeza?" sem bater no site a cada pergunta.

O Mercado Livre não tem API pública do lado comprador: a API oficial é para vendedores e responde 403 ao resto. Este projeto lê a mesma superfície web que o seu navegador usa (as páginas de "Minhas compras" e o endpoint das NF-e), autenticado pelos cookies da sua própria sessão. Somente leitura: nenhuma operação de escrita na conta existe, e o raw_get só faz GET em dois hosts do site.

Sumário

Instalação

Requer Bun 1.3 ou mais novo (o cache usa bun:sqlite).

Tudo de uma vez (Claude Code)

git clone https://github.com/maxwellmezadre/mercadolivre-mcp.git
cd mercadolivre-mcp
bun install
bun run setup

O setup compila o binário para ~/.local/bin/mercadolivre, registra o servidor MCP mercadolivre no seu ~/.claude.json (escopo de usuário, com caminho absoluto) e instala a Skill em ~/.claude/skills/mercadolivre-mcp/. Rode de novo para atualizar. Com --import-browser chrome o registro já sai com MERCADOLIVRE_IMPORT_BROWSER=chrome.

npm

npm i -g @maxwellmezadre/mercadolivre-mcp   # instala `mercadolivre` e `mercadolivre-mcp` no PATH
mercadolivre --version

O pacote roda com o Bun (por causa do bun:sqlite), então o Bun precisa estar instalado. Sem instalar nada:

bunx -p @maxwellmezadre/mercadolivre-mcp mercadolivre purchases

O -p e o nome do executável são necessários: o pacote declara dois binários e, sem eles, bunx @maxwellmezadre/mercadolivre-mcp executa o homônimo do pacote, que é o servidor MCP, e não a CLI.

Binário único

bun run build:binary   # gera ./mercadolivre, sem precisar de runtime instalado
./mercadolivre --version

O binário embute tudo, inclusive o playwright-core que o login usa. Os binários de cada Release são esses mesmos, para Linux, macOS e Windows.

Login

A senha nunca passa por aqui. Dois caminhos:

mercadolivre login                        # abre o seu navegador padrão para você entrar
mercadolivre login --from-browser chrome  # importa a sessão de um navegador já logado (macOS)

O primeiro abre o navegador padrão do sistema, que precisa ser o Google Chrome ou outro Chromium que exponha o DevTools (Brave, Edge, Vivaldi, Chromium). Safari e Firefox são outros motores, e o Arc não aceita automação: nesses casos a ferramenta avisa e usa outro navegador compatível que já esteja instalado. O segundo é o mais rápido se você já usa o site no Chrome, no Arc, no Brave ou no Edge: ele lê os cookies pelo Keychain (o macOS pede permissão uma vez) e não abre janela nenhuma.

A sessão é gravada cifrada com AES-256-GCM em ~/.config/mercadolivre-mcp/session.enc (0600). Sem navegador nenhum, MERCADOLIVRE_COOKIE aceita o header Cookie copiado do DevTools. Detalhes em docs/LOGIN.md.

Uso — CLI

mercadolivre status --verify             # o site ainda aceita a sessão?
mercadolivre sync --full                 # primeira carga: ~3 min para ~70 compras
mercadolivre purchases --date 3M         # compras dos últimos 3 meses, do cache
mercadolivre purchase 2000000000000001   # detalhe: financeiro, parcelas, produtos, vendedor, NF-e
mercadolivre search "café"               # entre os produtos que você já comprou
mercadolivre products --seller "gallo"   # produtos comprados, com preço pago e unitário
mercadolivre product-history --title "azeite"
mercadolivre spending --by month         # quanto você gastou por mês
mercadolivre installments                # parcelas em aberto (estimativa)
mercadolivre export --format csv --scope products
mercadolivre export-invoices --date Y    # NF-e do ano em PDF e XML
mercadolivre doctor                      # qual camada quebrou

Todo comando aceita --json e imprime exatamente o que o cliente MCP receberia. Referência completa em docs/CLI.md.

Uso — MCP

claude mcp add -s user mercadolivre -- /Users/você/.local/bin/mercadolivre mcp

Ou, à mão, em ~/.claude.json:

{
  "mcpServers": {
    "mercadolivre": {
      "type": "stdio",
      "command": "/Users/você/.local/bin/mercadolivre",
      "args": ["mcp"]
    }
  }
}

Use o caminho absoluto: clientes MCP não herdam o PATH do seu shell. Depois é só perguntar: "quanto gastei no Mercado Livre este ano?", "quantas vezes comprei esse café e a que preço?", "me manda as notas fiscais de 2025".

Variáveis de ambiente

Todas opcionais. A tabela completa está em docs/CONFIGURATION.md.

Variável

Default

Para quê

MERCADOLIVRE_CONFIG_DIR

~/.config/mercadolivre-mcp

Onde ficam sessão, chave, cache e perfil do navegador

MERCADOLIVRE_SESSION_KEY

gerada em session.key

Chave AES em base64 de 32 bytes

MERCADOLIVRE_EXPORT_DIR

~/Downloads/mercadolivre-export

O único diretório onde export, download_invoice e export_invoices escrevem

MERCADOLIVRE_READ_ONLY

0

Não registra as tools que escrevem em disco

MERCADOLIVRE_IMPORT_BROWSER

arc | chrome | chromium | brave | edge: o login importa daí

MERCADOLIVRE_LOGIN_BROWSER

navegador padrão

Navegador da janela de login: .app, executável ou bundle id

MERCADOLIVRE_COOKIE

Header Cookie completo; vence a sessão salva e nunca é gravado

MERCADOLIVRE_MIN_INTERVAL_MS

1200

Intervalo mínimo entre requisições

Nomes antigos (MERCADOLIVRE_HOME, MERCADOLIVRE_DOWNLOAD_DIR, MERCADOLIVRE_REQUEST_INTERVAL_MS, MERCADOLIVRE_REAL) continuam funcionando com um aviso.

Tools

São 18, iguais no MCP e no CLI. Referência gerada: docs/TOOLS.md.

Tool

Comando

Rede

auth_status

mercadolivre status [--verify]

0 (1 com --verify)

login

mercadolivre login [--from-browser]

1, para confirmar a sessão

doctor

mercadolivre doctor

≤ 4

sync

mercadolivre sync [--full|--reparse]

1 por página, 1 por compra, NF-e e categorias

list_purchases

mercadolivre purchases

0 (site com --live ou cache vazio)

get_purchase

mercadolivre purchase <id>

1 (2 com a NF-e)

search_purchases

mercadolivre search <texto>

0 (1 com --live)

list_categories

mercadolivre categories

0 (1 se o cache estiver vazio)

list_products

mercadolivre products

0

product_history

mercadolivre product-history

0

list_installments

mercadolivre installments

0

list_payment_methods

mercadolivre payment-methods

0

get_invoice

mercadolivre invoice <orderId>

1

download_invoice

mercadolivre download-invoice <orderId>

1

export_invoices

mercadolivre export-invoices

1 por arquivo

spending_summary

mercadolivre spending --by …

0

export

mercadolivre export

0

raw_get

mercadolivre raw <url>

1

Como funciona

  1. A lista de compras é uma página server-side (Nordic/Flox) com o JSON embutido em <script id="__NORDIC_RENDERING_CTX__">; os parsers leem esse JSON, nunca o HTML.

  2. Uma compra (purchase_id) contém pacotes (pack_id) que contêm pedidos (order_id), e cada pedido é um produto. Tudo é agregado por compra: contar pedidos como compras infla o número por cerca de 3 vezes. Ver docs/DATA-MODEL.md.

  3. O sync percorre as páginas a uma requisição a cada 1,2 a 1,6 segundos, busca o detalhe de cada compra uma única vez, as NF-e e as categorias, e grava tudo em SQLite com dinheiro em centavos inteiros. As demais tools consultam o cache.

  4. Quando o site mudar, doctor diz qual endpoint quebrou e raw_get mostra o payload real; o roteiro está em docs/REDISCOVERY.md.

Troubleshooting

Sintoma

O que fazer

Nenhuma sessão do Mercado Livre salva

mercadolivre login ou mercadolivre login --from-browser chrome

A sessão do Mercado Livre expirou ou foi recusada

O site respondeu com a página de login. Faça o login de novo; troca de senha, logout e inatividade longa matam a sessão

HTTP 403 … rate limit ou bloqueio

Espere alguns minutos. Não rode dois sync ao mesmo tempo nem reduza MERCADOLIVRE_MIN_INTERVAL_MS

Não foi possível decifrar session.enc

A chave mudou (MERCADOLIVRE_SESSION_KEY ou session.key). Apague session.enc e faça o login de novo

Compra grande com produtos sem preço

O detalhe só traz parte das linhas; o sync completa com a NF-e (priceSource: "invoice", valor bruto)

list_categories vazio

O site não oferece o filtro de categoria para toda conta. Não é erro

O navegador padrão não serve para o login

Instale o Chrome, aponte MERCADOLIVRE_LOGIN_BROWSER ou use --from-browser

Layout novo do site

mercadolivre doctor diz qual camada quebrou; docs/REDISCOVERY.md diz como remapear

Documentação

Arquivo

Conteúdo

docs/ARCHITECTURE.md

Camadas, fluxo e as regras que as separam

docs/CONFIGURATION.md

Todas as variáveis e os arquivos em disco

docs/USAGE.md

Do zero à primeira resposta

docs/CLI.md

Todos os comandos

docs/TOOLS.md

Referência das tools (gerada)

docs/LOGIN.md

Como o login funciona, o que grava, como revogar

docs/DATA-MODEL.md

A hierarquia de ids, o dinheiro, o cache e o que não existe

docs/INTERNAL-API.md

A superfície interna do site: endpoints, formato Flox, armadilhas

docs/REDISCOVERY.md

O que fazer quando o Mercado Livre mudar

docs/PRD.md

Os requisitos que o código cita (F-n, NFR-n, AR-n)

docs/adr/

As decisões de projeto e por quê

Licença

MIT. Uso pessoal, na sua própria conta, em volume baixo: sem revenda de dados, sem compartilhar a sessão, sem coletar dados de terceiros.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/maxwellmezadre/mercadolivre-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server