MCP Compras.gov.br
MCP Compras.gov.br
Servidor MCP que reúne em um único pacote as APIs públicas do ecossistema Compras.gov.br, voltado a analistas e técnicos das áreas de planejamento de contratação e execução contratual.
94 tools + 6 prompts + 6 resources cobrindo Dados Abertos, PNCP, Portal da Transparência/CGU, Comprasnet Contratos e BrasilAPI/Receita.
Apoia a elaboração de:
Estudos Técnicos Preliminares (ETP)
Termos de Referência (TR)
Pesquisa de preços no padrão IN SEGES/ME 65/2021
Checagem de sanções de fornecedores (CEIS, CNEP, CEPIM, CEAF)
Análise de atas de registro de preço (ARP) para adesão (carona)
Benchmark inter-órgãos via Portal Nacional de Contratações Públicas (PNCP)
Due diligence de fornecedor (cadastro + sanções + Receita Federal)
APIs cobertas
API | URL base | Autenticação |
Dados Abertos Compras |
| pública |
PNCP — Portal Nacional |
| pública |
Portal da Transparência (CGU) |
| chave gratuita |
Comprasnet Contratos |
| pública (rotas |
BrasilAPI / MinhaReceita |
| pública |
⚠️ Aviso operacional
Cada linha abaixo foi confirmada por probe direto ao upstream (não é suposição). Rode compras_healthcheck a qualquer momento para ver a situação atual de cada módulo — esta lista é o retrato mais recente conhecido, o healthcheck é o retrato ao vivo.
Resolvidos (deixados aqui para quem encontrar issues antigas ou forks desatualizados):
✅ Família
/modulo-uasg/*(compras_uasg_*,compras_orgao_*) — chegou a devolver 404 para todo mundo e a documentação atribuía isso a bug de roteamento sem fix possível. Diagnóstico corrigido em 2026-08 (v0.3.13): faltava o parâmetro obrigatóriostatusUasg/statusOrgao— a API responde 404 (não 400) quando ele falta. Hoje devolve ~22 mil UASGs e ~12 mil órgãos normalmente.✅
compras_pesquisar_preco_material— o contrato da rota/modulo-pesquisa-preco/1_consultarMaterialmudou decodigoItemCatalogo=<int>para o partipo(codigoItemCatalogo|codigoPdm) +codigo(string), sem versionar. Corrigido em v0.3.13.
Em aberto (limitação real do upstream, não do MCP):
CATMAT busca textual quebrada: o filtro
descricao(e variantesnome,termo,q) de/modulo-material/4_consultarItemMaterialignora o valor e devolve o universo CATMAT inteiro (~340k itens). Usecompras_catmat_listar_grupos→_listar_classes→_buscarcomcodigo_grupo/codigo_classe. A tool emite_aviso_filtroquando detecta o problema.Filtro UASG em
/modulo-legado/*: pregões e licitações têm bug Hibernate confirmado no upstream — o swagger documentaco_uasg/uasg, mas o atributo não existe no modelo da view (400 Bad Request). Os parâmetros foram removidos das toolscompras_legado_pregoes_listarecompras_legado_licitacoes_listar; para filtrar por UASG, faça client-side no retorno.compras_pncp_orgao_unidades: a rota/v1/orgaos/{cnpj}/unidadesnão é documentada no contrato oficial do PNCP Consulta — devolve 404 para CNPJs que não publicam diretamente (ex.: CNPJ raiz de órgão cujas unidades publicam com CNPJ próprio). A tool devolve diagnóstico com alternativas em vez de estourar exception.compras_pncp_contratacao_itens: pode devolver 404 mesmo quando a contratação-pai responde 200 — inconsistência observada no upstream, não reproduzida de forma determinística.Portal da Transparência (CGU): o servidor é protegido por AWS WAF que bloqueia (
405+ página HTML "Human Verification") clientes HTTP comUser-Agentgenérico, mesmo com chave válida. O cliente deste MCP já envia umUser-Agentbrowser-like como mitigação; se a CGU mudar as regras do WAF, as toolscompras_sancao_*podem voltar a falhar — não há fix definitivo do lado do MCP.Comprasnet
/api/contrato/ug/{uasg}: o endpoint não pagina e devolve a lista completa em uma resposta única (pode passar de 1 MB).compras_contrato_comprasnet_por_uasgaplica fatiamento client-side com cache do payload completo para não inundar o contexto do LLM.
Instalação
Opção 1 — Desktop Extension (.mcpb), recomendado para Claude Desktop
Baixe o compras.mcpb mais recente em Releases e abra com duplo-clique — o Claude Desktop instala e pede as configurações (chave da Transparência, Redis, etc.) automaticamente.
Ou gere localmente a partir do código-fonte:
git clone https://github.com/opedrosoares/MCP_Compras.git
cd MCP_Compras
python3 build_mcpb.py # gera dist/compras.mcpb
open dist/compras.mcpb # macOS — no Windows/Linux, abra com duplo-clique no Claude DesktopOpção 2 — Local via uv (desenvolvimento ou Claude Code)
git clone https://github.com/opedrosoares/MCP_Compras.git
cd MCP_Compras
uv sync
uv run compras-mcpVeja Conectar a um cliente MCP para registrar esse comando no Claude Desktop ou Claude Code.
Opção 3 — Remoto (Railway), para uso via web/mobile ou compartilhado por uma equipe
Não exige instalação local nenhuma — qualquer cliente MCP aponta para uma URL HTTP. Veja o passo a passo completo em Deploy remoto (Railway).
Conectar a um cliente MCP
Claude Code — .mcp.json do projeto ou ~/.claude.json (global)
Servidor local via stdio (assume compras-mcp instalado no PATH — via uv tool install . ou pip install .):
{
"mcpServers": {
"compras": {
"command": "compras-mcp",
"env": {
"TRANSPARENCIA_API_KEY": "sua-chave-aqui"
}
}
}
}Sem instalar globalmente, rodando direto do clone via uv:
{
"mcpServers": {
"compras": {
"command": "uv",
"args": ["run", "--directory", "/caminho/para/MCP_Compras", "compras-mcp"],
"env": {
"TRANSPARENCIA_API_KEY": "sua-chave-aqui"
}
}
}
}TRANSPARENCIA_API_KEY é opcional: sem ela, todas as tools funcionam exceto as de sanções (compras_sancao_*, compras_checar_sancoes_fornecedor, ramificações de sanção em compras_perfil_fornecedor_completo).
Claude Desktop (registro manual, sem o .mcpb)
Edite o claude_desktop_config.json:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"compras": {
"command": "compras-mcp",
"env": {
"TRANSPARENCIA_API_KEY": "sua-chave-aqui"
}
}
}
}Servidor remoto (Railway) via HTTP
Depois do deploy (ver seção abaixo), o endpoint MCP fica em https://SEU-PROJETO.up.railway.app/mcp. Não há autenticação própria — é o mesmo servidor, só que em modo HTTP em vez de stdio.
claude.ai / Claude Desktop: Settings → Connectors → Adicionar conector personalizado → cole a URL.
Claude Code — via CLI:
claude mcp add --transport http compras-remoto https://SEU-PROJETO.up.railway.app/mcpOu direto no
.mcp.json:{ "mcpServers": { "compras-remoto": { "type": "http", "url": "https://SEU-PROJETO.up.railway.app/mcp" } } }
Configuração
Variável | Obrigatória | Descrição |
| Não | Habilita as tools de sanções (CEIS, CNEP, CEPIM, CEAF, leniência). Sem ela, as demais ~90 tools (Dados Abertos, PNCP, Comprasnet, BrasilAPI) continuam funcionando normalmente. |
| Não | Cache TTL compartilhado em Redis. Recomendado em produção/Railway com múltiplos pods. Sem ela, cache fica em memória local (TTL+LRU). |
| Não |
|
| Não |
|
| Não | Reservado para v2 (rotas autenticadas do Comprasnet Contratos via login gov.br). Sem efeito na v1. |
Dica: como obter a chave do Portal da Transparência
Cadastro gratuito, em minutos, em https://api.portaldatransparencia.gov.br/api-de-dados/cadastrar-email. A chave chega por e-mail e vai direto na variável
TRANSPARENCIA_API_KEY.
Veja .env.example para todas as variáveis configuráveis, incluindo TTLs de cache por domínio, timeouts HTTP e base URLs (só para testes/mocks — os padrões já apontam para produção).
Deploy remoto (Railway)
O servidor detecta a env var PORT (injetada pelo Railway) e sobe automaticamente em modo HTTP; sem ela, sobe em stdio. Não há login por usuário — todas as APIs upstream são anônimas ou usam a chave da Transparência configurada no próprio servidor.
1. Criar conta no Railway
Acesse railway.com, clique em Sign Up e faça login com GitHub, GitLab ou e-mail.
2. Instalar o Railway CLI
# macOS (Homebrew)
brew install railway
# npm (qualquer plataforma)
npm install -g @railway/cli
# Verificar
railway --version3. Autenticar no terminal
railway login4. Clonar o repositório
git clone https://github.com/opedrosoares/MCP_Compras.git
cd MCP_Compras5. Criar o projeto no Railway
railway init -n mcp-comprasSe tiver mais de um workspace, adicione --workspace "Nome do Workspace".
6. Adicionar Redis (recomendado)
railway add --database redisO Redis vira cache compartilhado entre instâncias — sem ele, cada pod mantém seu próprio cache em memória.
7. Configurar variáveis de ambiente
railway variable set TRANSPARENCIA_API_KEY=sua-chave-aquiREDIS_URL normalmente já é injetada automaticamente pelo plugin Redis do Railway (referência de outra variável do próprio projeto) — confira em railway variables se precisa setar manualmente.
8. Fazer o deploy
railway upAguarde o build (Dockerfile já incluso no repo, 2-3 minutos na primeira vez).
9. Gerar domínio público
railway domainGera uma URL como https://mcp-compras-production.up.railway.app.
10. Verificar o deploy
O endpoint MCP exige os headers do protocolo Streamable HTTP — uma requisição "crua" deve responder 406 (não erro de conexão), confirmando que o servidor está de pé:
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://SEU-PROJETO.up.railway.app/mcp
# 406Para uma checagem mais completa (versão, fontes upstream, chave da Transparência configurada), use a tool compras_versao ou compras_healthcheck a partir de um cliente MCP já conectado.
11. Conectar no Claude
Veja Servidor remoto (Railway) via HTTP acima.
Domínio customizado (opcional)
railway domain mcp.seu-orgao.gov.brO comando devolve os registros DNS a configurar. Crie um CNAME no DNS do seu órgão apontando para o valor indicado; o certificado SSL é provisionado automaticamente. Para checar se a propagação/certificado já está ok:
railway domain status mcp.seu-orgao.gov.brAtualizar o servidor
git pull
railway upRequisitos de sistema
Python ≥ 3.11
uv (recomendado) ou
pipClaude Code, Claude Desktop, ou qualquer cliente MCP compatível com stdio ou Streamable HTTP
Redis (opcional, só para cache compartilhado em deploy com múltiplas instâncias)
Chave gratuita do Portal da Transparência (opcional, só para tools de sanções)
Nenhuma dependência de sistema além do Python — diferente de MCPs que fazem OCR/scraping, este servidor só consome APIs REST públicas.
Tools (94 no total)
Agrupadas por domínio funcional:
Domínio | Tools | Cobertura |
Compostas (agente) | 5 |
|
Catálogo (CATMAT/CATSER) | 7 | Grupos/classes/itens, busca textual (com limitação upstream, ver aviso) |
Pesquisa de preço | 4 | Material/serviço, detalhe por compra |
Planejamento (PGC + PCA) | 8 | PGC SISG, PCA PNCP (federal + estados + municípios) |
Atas de Registro de Preço | 9 | Listar, buscar por objeto, saldo, adesões, unidades participantes, PNCP |
Contratações (14.133 + legado) | 12 | Lei 14.133, Lei 8.666, RDC, dispensas |
Contratos | 14 | Dados Abertos + Comprasnet (garantias, faturas, ocorrências, fiscais, empenhos, cronograma, publicações) |
Fornecedores | 4 | Cadastro, impedimentos, contratos por item |
Sanções (Transparência/CGU) | 5 | CEIS, CNEP, CEPIM, CEAF, acordos de leniência |
PNCP | 9 | Contratações (publicação, proposta, atualização), contratos, modalidades |
Organizações | 6 | UASG (listar/consultar/buscar), órgãos, unidades PNCP |
Indicadores | 2 | Consolidados, por período |
Analítica | 2 | Série temporal de contratações, comparação entre períodos |
Enriquecimento | 1 | CNPJ na Receita Federal (BrasilAPI/MinhaReceita) — QSA, capital, CNAEs |
Descoberta (tools-espelho) | 4 |
|
Diagnóstico | 2 |
|
A lista completa (nome + descrição de cada tool) está em manifest.json ou via tools/list no MCP Inspector.
Fluxos típicos
ETP de aquisição de cadeiras ergonômicas:
compras_catmat_buscarcomtermo="cadeira ergonomica"→ obtercodigo_item_catalogocompras_pesquisar_precos_para_etp(composta) comtipo="material"→ mediana/média/desvio + descarte IQRcompras_pgc_por_catalogopara ver o que outros órgãos planejaram comprarcompras_arp_listarcomapenas_vigentes=True→ atas vigentes para possível adesão
Análise de fornecedor antes de homologação:
compras_perfil_fornecedor_completo(composta) com o CNPJ — uma chamada devolve cadastro + sanções + contratos vigentes + dados da Receita
Inventário de contratos a renovar:
compras_contratos_listar_por_fim_vigenciacomdata_fim_vigenciapróximaPara cada contrato relevante:
compras_contrato_historico_aditivos,compras_contrato_ocorrencias
Antes de uma demonstração ou de instruir processo:
compras_healthcheck(profundidade="rotas")— probe real contra o upstream em ~30s, retornapronto_para_usoe qual módulo está degradado/fora, se algum.
Prompts MCP (6)
Diferente de tools (que o LLM invoca sozinho), prompts são selecionados pelo usuário no cliente MCP e expandem em um roteiro guiado usando as tools disponíveis. Úteis como ponto de partida para fluxos recorrentes.
Prompt | O que faz |
| Checklist de viabilidade de uma contratação publicada no PNCP: objeto, valor, prazos, itens críticos, riscos. |
| Perfil 360° de um órgão: identificação, contratações do último ano, principais fornecedores, PCA do ano corrente. |
| Dossiê completo de fornecedor: cadastro, sanções (CEIS/CNEP/CEPIM/CEAF + leniência), impedimentos, contratos. |
| Encontra ARPs vigentes com saldo disponível para adesão (carona). |
| Monta a seção de pesquisa de preços de um ETP no padrão IN SEGES/ME 65/2021 (≥3 fontes, estatística, descarte IQR). |
| Tendência de contratações com bucketing temporal e comparação A vs. B. |
Clientes que só consomem o primitivo tools (ex.: Claude.ai web) podem acessá-los via compras_listar_prompts / compras_obter_prompt.
Resources MCP (6)
Dados de referência que o cliente lista e lê sob demanda, sem gastar uma chamada de rede:
Resource (URI) | Conteúdo |
| Códigos de modalidade de contratação aceitos pelo PNCP |
| Códigos de esfera (F/E/M/D) usados no filtro |
| Critérios de julgamento do art. 33 da Lei 14.133/2021 |
| Códigos de |
| Cheat-sheet de ETP, TR, modalidades, SRP, sanções, catálogos e formatos de data |
| O que o servidor expõe, o que faz além de consultar, e o que explicitamente não faz |
Clientes que só consomem o primitivo tools podem acessá-los via compras_listar_resources / compras_obter_resource.
Padrões internos
Envelope padrão das tools
listar_*:{resultado, _pagina_atual, _total_paginas, _total_registros, _proxima_pagina, _cache_hit, _latency_ms}.SSoT de descriptions: descrições de parâmetros vivem em
src/compras_mcp/schemas.py; tools leem via_helpers.desc(Model, "campo"). Teste emtests/test_server.pydetecta drift.LGPD: CPFs mascarados como
123.***.***-45; ajuste comINCLUIR_CPF_COMPLETO=true. Tools afetadas incluem_aviso_lgpdno payload.Cache: TTL+LRU em memória (default) ou Redis quando
REDIS_URLsetada. Cada domínio tem seu prefixo (CATALOGO, PRECOS, ATAS, ORGAOS, SANCOES, COMPOSTAS etc.) — ajustáveis viaCACHE_<PREFIX>_TTLeCACHE_<PREFIX>_MAX_SIZE.Datas: 3 formatos por API (
YYYY-MM-DD,yyyyMMdd,YYYY-MM-DD HH:mm:ss) convertidos transparentemente porformat_date(value, flavor).Framework: FastMCP 2.x. Transporte detectado por
PORT— presente → HTTP em0.0.0.0:$PORT, ausente → stdio.
Links
Changelog — cada release documenta a causa raiz encontrada, não só o sintoma
Issues upstream conhecidas — bugs reportáveis aos mantenedores da SEGES/CGU
Licença
MIT — veja LICENSE.
Status
v0.3.15 — 94 tools + 6 prompts + 6 resources, em produção (Railway + Redis). Cada release recente foi validada em bateria de testes ponta a ponta contra o ambiente de produção, não apenas local — ver Changelog.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/opedrosoares/MCP_Compras'
If you have feedback or need assistance with the MCP directory API, please join our Discord server