editalmd
Brazilian public procurement (PNCP): search, deadlines, tender markdown, alerts and watches.
Should I use this
Quality & Safety
Findings (28)
- HIGH
- MEDIUMin precos_homologados
- MEDIUMin criar_dono
- MEDIUMin dono
- LOWin avaliacao_cotas
- LOWin anexar_documento_empresa
- LOWin buscar_empresa
- LOWin minha_conta
- LOWin meus_documentos
- LOWin meus_compras
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"editalmd": {
"url": "https://editalmd.com/mcp"
}
}
}Remote endpoints
https://editalmd.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (59)
🟢avaliacao_cotas(agent_pass)
Cota individual: um premium e 100 básicos, com validade. Não cobra.
Input Schema
{
"type": "object",
"properties": {
"agent_pass": {
"type": "string",
"description": "Credencial individual persistente obtida em POST https://api.editalmd.com/licitacoes/api/agente. Não é User-Agent."
}
},
"required": [
"agent_pass"
]
}🟢avaliacao_premium(agent_pass, id)
Use seu único premium patrocinado em um documento de até 50 páginas. Guarde evaluation.access_code como avaliacao_codigo e acompanhe por estado_geracao com agent_pass. Repetir recupera o mesmo acesso. Franquia por credencial, até a menor data entre os 30 dias do agente e o fim do piloto. Repetição do mesmo documento não consome outra unidade. Não envie pagamento. Premium: guarde evaluation.access_code e use X-Editalmd-Avaliacao junto de X-Agent-Pass nas leituras e no GET /geracao. Básico não abre conteúdo premium. Piloto sujeito ao orçamento global; sem renovação automática.
Input Schema
{
"type": "object",
"properties": {
"agent_pass": {
"type": "string",
"description": "Credencial individual persistente obtida em POST https://api.editalmd.com/licitacoes/api/agente. Não é User-Agent."
},
"id": {
"type": "number",
"description": "ID do documento do acervo."
}
},
"required": [
"agent_pass",
"id"
]
}🟢avaliacao_basico(agent_pass, id)
Texto nativo/OCR básico de PDF até 50 páginas/32 MiB, sem revisão nem tabelas estruturadas. Até 100 documentos por agente. Não libera premium. Não cobra. Franquia por credencial, até a menor data entre os 30 dias do agente e o fim do piloto. Repetição do mesmo documento não consome outra unidade. Não envie pagamento. Premium: guarde evaluation.access_code e use X-Editalmd-Avaliacao junto de X-Agent-Pass nas leituras e no GET /geracao. Básico não abre conteúdo premium. Piloto sujeito ao orçamento global; sem renovação automática.
Input Schema
{
"type": "object",
"properties": {
"agent_pass": {
"type": "string",
"description": "Credencial individual persistente obtida em POST https://api.editalmd.com/licitacoes/api/agente. Não é User-Agent."
},
"id": {
"type": "number",
"description": "ID do documento do acervo."
}
},
"required": [
"agent_pass",
"id"
]
}🟢avaliacao_basico_resultado(agent_pass, id)
Acompanhe a leitura básica após retry_after_s e recupere texto por página com hash da fonte. Não cobra. Franquia por credencial, até a menor data entre os 30 dias do agente e o fim do piloto. Repetição do mesmo documento não consome outra unidade. Não envie pagamento. Premium: guarde evaluation.access_code e use X-Editalmd-Avaliacao junto de X-Agent-Pass nas leituras e no GET /geracao. Básico não abre conteúdo premium. Piloto sujeito ao orçamento global; sem renovação automática.
Input Schema
{
"type": "object",
"properties": {
"agent_pass": {
"type": "string",
"description": "Credencial individual persistente obtida em POST https://api.editalmd.com/licitacoes/api/agente. Não é User-Agent."
},
"id": {
"type": "number",
"description": "ID do documento do acervo."
}
},
"required": [
"agent_pass",
"id"
]
}🟢documentos_empresa(cnpj)
Lista os PDFs privados da empresa. Downloads binários usam GET HTTP autenticado /documentos/:arquivo.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"description": "CNPJ de 14 dígitos vinculado ao dono."
}
},
"required": [
"cnpj"
]
}⚪anexar_documento_empresa(cnpj, nome, tipo, arquivo_base64)
Envia comprovante PDF da empresa. Não inicia OCR. Sessão necessária; prefira HTTP para arquivos grandes. 201. JSON até 11.200.000 bytes; PDF até 8 MiB, 20 documentos/80 MiB/50 páginas por empresa. Arquivo idêntico é reaproveitado. A leitura automática acontece somente ao solicitar a análise.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"description": "CNPJ de 14 dígitos vinculado ao dono."
},
"nome": {
"type": "string",
"description": "Nome do PDF."
},
"tipo": {
"type": "string",
"description": "atestado, certidao, licenca, contrato_social ou outro."
},
"arquivo_base64": {
"type": "string",
"description": "PDF em base64, até 8 MiB decodificado."
}
},
"required": [
"cnpj",
"nome",
"tipo",
"arquivo_base64"
]
}🔴remover_documento_empresa(cnpj, arquivo)
Remove um comprovante da própria empresa; análises que o usavam ficam desatualizadas.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"description": "CNPJ de 14 dígitos vinculado ao dono."
},
"arquivo": {
"type": "string",
"description": "SHA-256 do PDF privado."
}
},
"required": [
"cnpj",
"arquivo"
]
}🟡analisar_participacao(cnpj, id, v)
Inicia/retoma análise com cadastro, anexos e edital. Só chame por solicitação do usuário; acompanhe por consultar_participacao. 202 após aceitar e preservar o pedido; 200 ao reaproveitar análise concluída. Usa perfil e anexos deste dono. Pedidos interrompidos podem ser retomados; falhas informam motivo e próxima ação. POST explícito retoma uma pausa. Até 2 mil fatos e 100 editais por empresa, sujeitos à capacidade e ao orçamento disponíveis. Não cobra nova compra nesta operação. Acompanhamento somente por GET. A análise oferece triagem com evidências, não decisão definitiva de habilitação nem consulta jurídica externa.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"description": "CNPJ de 14 dígitos vinculado ao dono."
},
"id": {
"type": "integer",
"description": "ID do documento."
},
"v": {
"type": "string",
"description": "SHA-256 do Markdown aberto, 64 hex minúsculos."
}
},
"required": [
"cnpj",
"id",
"v"
]
}🟢consultar_participacao(cnpj, id, v, grupo, kind, ...)
Consulta estado, Pendências e Atendidos com motivos, ações e evidências. Nunca inicia análise. Pendências reúne precisa_comprovar (falta prova), divergente (evidência incompatível) e acompanhar (obrigação futura). Cadastro, anexos ou dossiê diferentes retornam outdated sem resultados atuais. A data de referência é conservada na retomada; dia anterior retorna data_atual=false. Os lotes validados continuam disponíveis durante falhas/processamento com parcial=true e processados/total; nunca representam conclusão das exigências ainda não comparadas. GET não executa a fila nem inicia IA.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"description": "CNPJ de 14 dígitos vinculado ao dono."
},
"id": {
"type": "integer",
"description": "ID do documento."
},
"v": {
"type": "string",
"description": "SHA-256 do Markdown aberto, 64 hex minúsculos."
},
"grupo": {
"type": "string",
"description": "pendencias, atendidos ou nao_aplicavel."
},
"kind": {
"type": "string",
"description": "requirement, attestation ou obligation."
},
"after": {
"type": "integer",
"description": "Último ID recebido; padrão 0."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"description": "1 a 30; padrão 30."
}
},
"required": [
"cnpj",
"id",
"v"
]
}🟢minhas_empresas
Lista privada de empresas e seleção; use a sessão da conta ou o convidado edm_….
Input Schema
{
"type": "object",
"properties": {},
"required": []
}🟢buscar_empresa(q)
Busca na base cadastral por CNPJ ou razão social; exige conta ou convidado.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "CNPJ completo ou nome de 3 a 120 caracteres."
}
},
"required": [
"q"
]
}🔴adicionar_empresa(cnpj)
Importa e vincula o CNPJ ao próprio dono. 201 ao criar, 200 na repetição sem nova consulta/escrita. Até 20 empresas. Importa os dados cadastrais disponíveis, sem sócios ou contatos; nenhuma análise é iniciada.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"description": "CNPJ completo, 14 dígitos com verificação válida."
}
},
"required": [
"cnpj"
]
}🔴selecionar_empresa(cnpj)
Seleciona empresa cadastrada; não executa análise. Seleção persistida para este dono; vincular a conta permite recuperá-la em outros aparelhos. Não executa análise; repetir a seleção atual não grava.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"description": "CNPJ completo, 14 dígitos com verificação válida."
}
},
"required": [
"cnpj"
]
}🔴remover_empresa(cnpj)
Remove somente o vínculo do próprio dono e limpa a seleção se necessário.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"description": "CNPJ completo, 14 dígitos com verificação válida."
}
},
"required": [
"cnpj"
]
}🟢precos_homologados(q, uf, meses, catmat, limite)
O preço que ganha para um item parecido, em resumo grátis: quantos preços, a mediana e a faixa (p25/p75). O completo — quem vence, quem compra, por UF, por mês e os itens — é GET /api/precos/detalhe, pago por consulta (x402 ou crédito). Consulte resultados homologados por descrição do item. O resumo grátis traz `n`, a mediana e a faixa (p25/p75) sobre todos os candidatos do período, `amostra` (o critério: até 2.000 itens mais parecidos pelo texto) e `detalhe`: o endereço, o preço e o tamanho do preço que ganha completo (`GET /api/precos/detalhe`, pago por consulta) — quem vence, quem compra, por UF, por mês, os outros números do resumo e os itens. Aceita também POST, PUT ou PATCH com os mesmos parâmetros em JSON ou formulário; `query`, `termo`, `busca` e `search` valem como `q`, `estado` como `uf`, `limit` como `limite`. Todo 400 traz `exemplo` e `doc`. `Accept: text/html` abre a aba Preços pagos com a consulta.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Descrição do item, mínimo 3 letras"
},
"uf": {
"type": "string",
"description": "Sigla da UF do órgão (opcional)"
},
"meses": {
"type": "number",
"description": "Janela de homologação em meses, 1 a 36 (padrão 12)",
"default": 12
},
"catmat": {
"type": "string",
"description": "Código do item no catálogo do governo (opcional)"
},
"limite": {
"type": "number",
"description": "1 a 100 (padrão 50)",
"default": 50
}
},
"required": [
"q"
]
}🟢minha_conta(locais)
Identidade e contadores privados da sessão da conta (cookie) enviada no pedido MCP. A conta global já é a pessoa no EditalMD: não há ativação por produto.
Input Schema
{
"type": "object",
"properties": {
"locais": {
"type": "string",
"description": "Até 90 IDs positivos de documentos separados por vírgula para conferir quais já pertencem à conta; no máximo 1529 caracteres."
}
},
"required": []
}🟢meus_documentos(antes)
Coleção privada da conta. Exige a sessão da conta (cookie + CSRF do navegador).
Input Schema
{
"type": "object",
"properties": {
"antes": {
"type": "string",
"description": "proximo_antes da página anterior; hex, cursor exclusivo do cliente."
}
},
"required": []
}🟢meus_compras(antes)
Coleção privada da conta. Exige a sessão da conta (cookie + CSRF do navegador).
Input Schema
{
"type": "object",
"properties": {
"antes": {
"type": "string",
"description": "proximo_antes da página anterior; hex, cursor exclusivo do cliente."
}
},
"required": []
}⚪documento_vincular(id, acesso_codigo)
Vincula aquisição à conta da sessão usando a autorização privada comprada. Exige sessão e prova privada da aquisição. Grava o direito global da conta pelo recibo do pagamento: idempotente para o mesmo dono, e outro dono não pode reivindicar. O código continua abrindo o documento sozinho.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "Documento comprado."
},
"acesso_codigo": {
"type": "string",
"description": "Código privado de acesso."
}
},
"required": [
"id"
]
}🟢documento_acesso(id, acesso_codigo)
Estado do acesso e código privado de recuperação, sem nova compra.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "Documento comprado."
},
"acesso_codigo": {
"type": "string",
"description": "Código privado de acesso."
}
},
"required": [
"id"
]
}🟢conta_acompanhamento
Confere que Salvas/Alertas/Vigias são da conta da sessão. As listas de um convidado edm_… passam para a conta em `POST /api/auth/claim`; o POST desta rota responde 410 com o caminho.
Input Schema
{
"type": "object",
"properties": {},
"required": []
}⚪conta_vincular_acompanhamento(guest_token)
Traz para a conta da sessão o que o convidado edm_… criou (o claim do SDK): as Salvas, Alertas e Vigias que a conta ainda não tem e as compras dele. Exige bootstrap/CSRF deste navegador; a página faz isso logo depois de entrar. Só passa o que o convidado ainda tem, numa transação, e o que colide com o que a conta já tem fica com o convidado. O que o convidado comprou passa junto. Token antigo, sem assinatura, que não é dono de nada aqui é recusado. Repetir não faz mal (move zero).
Input Schema
{
"type": "object",
"properties": {
"guest_token": {
"type": "string",
"description": "Token edm_… do convidado."
}
},
"required": [
"guest_token"
]
}⚪previa_alerta(termos, uf, filtros, cnpj)
Amostra gratuita de compras por termos/filtros ou sugestões editáveis pelo CNPJ. Não cria alertas.
Input Schema
{
"type": "object",
"properties": {
"termos": {
"type": "string",
"description": "Termos do objeto; espaço exige todos, | aceita alternativas."
},
"uf": {
"type": "string",
"description": "Sigla da UF; vazio libera."
},
"filtros": {
"type": "object",
"additionalProperties": false,
"properties": {
"modalidades": {
"type": "array",
"maxItems": 10,
"items": {
"type": "integer",
"minimum": 1,
"maximum": 13
}
},
"municipios": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string"
}
},
"excluir": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string"
}
},
"valor_min": {
"type": "number",
"minimum": 0
},
"valor_max": {
"type": "number",
"minimum": 0
},
"abertas": {
"type": "boolean"
}
},
"description": "Recorte adicional: modalidades, municípios, exclusões, valores e propostas abertas. PATCH substitui o recorte inteiro; {} limpa."
},
"cnpj": {
"type": "string",
"description": "CNPJ para sugerir até 8 famílias de termos, sem ativá-las."
}
}
}🔴editar_alerta(termos, uf, filtros, id, ativo, ...)
Edita interesse ou pausa/reativa o alerta do dono. Reativação além da franquia exige pagamento. Filtros substituem o recorte inteiro.
Input Schema
{
"type": "object",
"properties": {
"termos": {
"type": "string",
"description": "Termos do objeto; espaço exige todos, | aceita alternativas."
},
"uf": {
"type": "string",
"description": "Sigla da UF; vazio libera."
},
"filtros": {
"type": "object",
"additionalProperties": false,
"properties": {
"modalidades": {
"type": "array",
"maxItems": 10,
"items": {
"type": "integer",
"minimum": 1,
"maximum": 13
}
},
"municipios": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string"
}
},
"excluir": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string"
}
},
"valor_min": {
"type": "number",
"minimum": 0
},
"valor_max": {
"type": "number",
"minimum": 0
},
"abertas": {
"type": "boolean"
}
},
"description": "Recorte adicional: modalidades, municípios, exclusões, valores e propostas abertas. PATCH substitui o recorte inteiro; {} limpa."
},
"id": {
"type": "string",
"description": "Identificador do alerta."
},
"ativo": {
"type": "boolean",
"description": "`false` pausa sem apagar; `true` reativa."
},
"canal": {
"type": "string",
"description": "Novo canal: `pull`, `webhook` ou `email` (e-mail verificado da conta; exige sessão).",
"enum": [
"pull",
"webhook",
"email"
]
},
"destino": {
"type": "string",
"description": "Nova URL https na porta 443 (webhook). Ignorado no pull e no e-mail."
}
},
"required": [
"id"
]
}🟢salvas
Lista até 200 licitações salvas pelo dono, gratuitamente.
Input Schema
{
"type": "object",
"properties": {},
"required": []
}🔴salvar_compra(id)
Salva a compra sem cobrança nem notificação, até 200 por dono. Salvar não cria vigia nem notificação. O cliente fornece somente o ID; o retrato vem do acervo.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "Identificador da compra no acervo."
}
},
"required": [
"id"
]
}🔴remover_salva(id)
Remove a compra da lista pessoal do dono. Salvar não cria vigia nem notificação. O cliente fornece somente o ID; o retrato vem do acervo.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "Identificador da compra no acervo."
}
},
"required": [
"id"
]
}🟡gerar_markdown(id, cotacao, credito_token, idempotencia, acesso_codigo, ...)
Compra acesso individual por US$ 0,02/página (x402/crédito), inclusive ao texto pronto. Confira cotacao em estado_geracao. Guarde acesso.codigo para as tools de leitura; geração, se necessária, está incluída. Não use POST como polling. Cada comprador paga, inclusive pronto. Consulte GET ou 402, confira páginas/hash/total e envie cotacao. Sessão da conta (cookie + CSRF do navegador) grava a compra no direito global da conta antes da entrega, sem código avulso; com o convidado edm_… (Bearer), o direito é dele e o código sai junto; agente usa X-Credito. Sem conta, conserve acesso.codigo para reabrir ou vincular depois. Após vínculo somente a conta abre. Texto pronto reutiliza OCR; geração necessária incluída. Cotação desconhecida/alterada não cobra. 152 páginas = US$ 3,04. Corpo até 4096 bytes. Após 202 acompanhe por GET. Pagou e a gravação do direito falhou: 502 `pago_nao_registrado` com o `recibo` — guarde-o, o suporte entrega ou estorna.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "ID do documento."
},
"cotacao": {
"type": "object",
"description": "Cotação recebida no estado, confirmada antes de pagar."
},
"credito_token": {
"type": "string",
"description": "Token cred_… privado. Enviado em X-Credito, preservando a sessão Bearer do pedido MCP."
},
"idempotencia": {
"type": "string",
"description": "Chave da tentativa de crédito, até 80 caracteres; conserve ao repetir."
},
"acesso_codigo": {
"type": "string",
"description": "Código privado em acesso.codigo após pagamento de quem não está na conta; até 4096 caracteres. Autoriza este documento ao portador. Compra feita com a sessão da conta não emite código: vale o direito global da conta (cookie HttpOnly), e o do convidado edm_… vale com o token. Recibo público não concede acesso."
},
"agent_pass": {
"type": "string",
"description": "Credencial individual do agente, obrigatória junto de X-Editalmd-Avaliacao."
},
"avaliacao_codigo": {
"type": "string",
"description": "evaluation.access_code do premium patrocinado, exclusivo deste documento e agente, com expiração. Use junto de X-Agent-Pass; não é recibo ou compra."
}
},
"required": [
"id"
]
}🟢estado_geracao(id, acesso_codigo, agent_pass, avaliacao_codigo)
Acompanha as fases reais e a conclusão gratuitamente, sem iniciar processamento.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "ID do documento."
},
"acesso_codigo": {
"type": "string",
"description": "Código privado em acesso.codigo após pagamento de quem não está na conta; até 4096 caracteres. Autoriza este documento ao portador. Compra feita com a sessão da conta não emite código: vale o direito global da conta (cookie HttpOnly), e o do convidado edm_… vale com o token. Recibo público não concede acesso."
},
"agent_pass": {
"type": "string",
"description": "Credencial individual do agente, obrigatória junto de X-Editalmd-Avaliacao."
},
"avaliacao_codigo": {
"type": "string",
"description": "evaluation.access_code do premium patrocinado, exclusivo deste documento e agente, com expiração. Use junto de X-Agent-Pass; não é recibo ou compra."
}
},
"required": [
"id"
]
}🟡criar_cobranca(id, cobranca_token, cotacao)
Reserva endereço USDC/Base para pagar US$ 0,02/página sem carteira no navegador. Confira cotacao antes, conserve cobranca_token. Não gera antes da confirmação real. Consulte GET /geracao e envie cotacao. Cada comprador paga, inclusive pronto. O serviço confirma USDC no bloco safe da Base; safe aguarda inclusão na L1, sem finalidade absoluta. Envie em até 30 min; observação por 24 h. Pagamento tardio, rede/moeda errada ou extração falha exige atendimento. Carteira/corretora pode cobrar taxa. Mesma X-Cobranca conserva cobrança/endereço. GET pago devolve acesso.codigo e cookie; para guardar na conta, POST /api/documento/:id/vincular com esse código (o site faz isso sozinho para quem está conectado). O pagamento simulado do ambiente de desenvolvimento não vale para depósito.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "ID do documento."
},
"cobranca_token": {
"type": "string",
"description": "32 bytes aleatórios em 64 hex minúsculos, gerados e guardados pelo cliente antes da criação."
},
"cotacao": {
"type": "object",
"description": "Cotação recebida em estado_geracao."
}
},
"required": [
"id",
"cobranca_token",
"cotacao"
]
}🟢estado_cobranca(id, cobranca_token)
Consulta pagamento e liberação com o mesmo cobranca_token. Gratuito; intervalo mínimo 30 s; não inicia trabalho. Reutilize X-Cobranca e respeite Retry-After. Consulta não escreve nem faz RPC blockchain. Quando gerando, use GET /geracao para fases/páginas; pronto libera os links de leitura. Em revisao, conserve ID e transações para atendimento, sem pagar novamente.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "ID do documento."
},
"cobranca_token": {
"type": "string",
"description": "32 bytes aleatórios em 64 hex minúsculos, gerados e guardados pelo cliente antes da criação."
}
},
"required": [
"id",
"cobranca_token"
]
}🟢exemplos
Lista cinco provas reais gratuitas para conferir Markdown, PDF original e ZIP com imagens antes de gerar outro documento.
Input Schema
{
"type": "object",
"properties": {}
}🟢documento(id)
Consulta grátis do título, tipo, páginas e compra vinculada a um documento. Use compra para listar os documentos relacionados. Não abre conteúdo nem inicia OCR.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "integer",
"minimum": 1,
"description": "ID do documento"
}
},
"required": [
"id"
]
}🟢documento_dossie(id, v, after, limit, kind, ...)
Itens, exigências, atestados, prazos e obrigações com condições, exceções e trechos/páginas. Usa o mesmo acesso_codigo da leitura. Não inicia IA. Dossiê incluído no acesso documental, sem nova análise ao consultar. Dados parciais informam cobertura; exportação exige versão concluída.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "ID do documento"
},
"v": {
"type": "string",
"description": "SHA-256 do texto"
},
"after": {
"type": "number",
"description": "Cursor next anterior"
},
"limit": {
"type": "number",
"description": "1 a 30 fatos"
},
"kind": {
"type": "string",
"description": "identity, item, requirement, attestation, deadline ou obligation"
},
"acesso_codigo": {
"type": "string",
"description": "Código privado em acesso.codigo após pagamento de quem não está na conta; até 4096 caracteres. Autoriza este documento ao portador. Compra feita com a sessão da conta não emite código: vale o direito global da conta (cookie HttpOnly), e o do convidado edm_… vale com o token. Recibo público não concede acesso."
},
"agent_pass": {
"type": "string",
"description": "Credencial individual do agente, obrigatória junto de X-Editalmd-Avaliacao."
},
"avaliacao_codigo": {
"type": "string",
"description": "evaluation.access_code do premium patrocinado, exclusivo deste documento e agente, com expiração. Use junto de X-Agent-Pass; não é recibo ou compra."
}
},
"required": [
"id"
]
}🟢documento_arquivos(id, acesso_codigo, agent_pass, avaliacao_codigo)
Catálogo dos arquivos originais do documento, com links de download e páginas. Use /api/documento/{id}/original para baixar o original completo.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "id do documento retornado pela compra"
},
"acesso_codigo": {
"type": "string",
"description": "Código privado em acesso.codigo após pagamento de quem não está na conta; até 4096 caracteres. Autoriza este documento ao portador. Compra feita com a sessão da conta não emite código: vale o direito global da conta (cookie HttpOnly), e o do convidado edm_… vale com o token. Recibo público não concede acesso."
},
"agent_pass": {
"type": "string",
"description": "Credencial individual do agente, obrigatória junto de X-Editalmd-Avaliacao."
},
"avaliacao_codigo": {
"type": "string",
"description": "evaluation.access_code do premium patrocinado, exclusivo deste documento e agente, com expiração. Use junto de X-Agent-Pass; não é recibo ou compra."
}
},
"required": [
"id"
]
}🟢api_index
Índice da API do EditalMD: rotas, regime de cobrança e preço.
Input Schema
{
"type": "object",
"properties": {}
}🟢health
Saúde da origem e tamanho do acervo (compras e documentos com texto).
Input Schema
{
"type": "object",
"properties": {}
}🟢buscar_licitacao(q, uf, abertas, limite)
Busca compras públicas por termo. Grátis. Devolve objeto, órgão, UF, modalidade e o id da compra.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Termo de busca, mínimo 3 letras"
},
"uf": {
"type": "string",
"description": "Sigla da UF (opcional)"
},
"abertas": {
"type": "string",
"description": "'1' para só compras com prazo de proposta aberto",
"enum": [
"1"
]
},
"limite": {
"type": "number",
"description": "1 a 50 (padrão 20)"
}
},
"required": [
"q"
]
}🟢prazos(id)
Prazos da compra: fim das propostas publicado e último dia de impugnação (estimado: 3 dias úteis antes da sessão, Lei 14.133 art. 164, feriados nacionais). Grátis. Servida do cache da borda por até 6 horas — a ficha raramente muda; prazos e preços são calculados a cada pedido. `Cache-Control: no-cache` no pedido lê a origem na hora. O cabeçalho `x-origem-cache` diz `hit`, `miss` ou `bypass`.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "id da compra (vem da busca)"
}
},
"required": [
"id"
]
}🟢compra(id)
Ficha da compra e seus documentos no acervo (até 50), com títulos, tipos, páginas e disponibilidade. Consulta grátis; o acesso ao conteúdo é comprado por documento. Servida do cache da borda por até 6 horas — a ficha raramente muda; prazos e preços são calculados a cada pedido. `Cache-Control: no-cache` no pedido lê a origem na hora. O cabeçalho `x-origem-cache` diz `hit`, `miss` ou `bypass`.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "id da compra (vem da busca)"
}
},
"required": [
"id"
]
}🟢edital_markdown(id, acesso_codigo, agent_pass, avaliacao_codigo)
Lê Markdown com acesso_codigo comprado, ou avaliacao_codigo + agent_pass do premium patrocinado. Cinco exemplos livres. Além da avaliação, gerar_markdown compra por US$ 0,02/página, inclusive pronto.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "id do documento (vem de `compra`)"
},
"acesso_codigo": {
"type": "string",
"description": "Código privado em acesso.codigo após pagamento de quem não está na conta; até 4096 caracteres. Autoriza este documento ao portador. Compra feita com a sessão da conta não emite código: vale o direito global da conta (cookie HttpOnly), e o do convidado edm_… vale com o token. Recibo público não concede acesso."
},
"agent_pass": {
"type": "string",
"description": "Credencial individual do agente, obrigatória junto de X-Editalmd-Avaliacao."
},
"avaliacao_codigo": {
"type": "string",
"description": "evaluation.access_code do premium patrocinado, exclusivo deste documento e agente, com expiração. Use junto de X-Agent-Pass; não é recibo ou compra."
}
},
"required": [
"id"
]
}⚪habilitacao(id, acesso_codigo, agent_pass, avaliacao_codigo)
Lista de habilitação do edital, com trechos literais. Exige acesso_codigo do documento comprado, ou um dos cinco exemplos; nesta fase não há cobrança adicional pela lista. Condições, exceções e evidências por página da análise disponível. A consulta não inicia outra análise. Prazos, propostas e demais obrigações estão no dossie; esta lista cobre habilitação e atestados exigidos, sem afirmar o que a empresa possui.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "id do documento (vem de `compra`)"
},
"acesso_codigo": {
"type": "string",
"description": "Código privado em acesso.codigo após pagamento de quem não está na conta; até 4096 caracteres. Autoriza este documento ao portador. Compra feita com a sessão da conta não emite código: vale o direito global da conta (cookie HttpOnly), e o do convidado edm_… vale com o token. Recibo público não concede acesso."
},
"agent_pass": {
"type": "string",
"description": "Credencial individual do agente, obrigatória junto de X-Editalmd-Avaliacao."
},
"avaliacao_codigo": {
"type": "string",
"description": "evaluation.access_code do premium patrocinado, exclusivo deste documento e agente, com expiração. Use junto de X-Agent-Pass; não é recibo ou compra."
}
},
"required": [
"id"
]
}🟢documento_leitura(id, acesso_codigo, agent_pass, avaliacao_codigo)
Manifesto do documento comprado: páginas, imagens, SHA-256 e versão. Envie acesso_codigo; exemplos são gratuitos. Não inicia OCR. A mesma autorização libera ZIP e imagens pela API. Somente recursos prontos. Não inicia OCR. `document_approved: false` identifica a extração automática e não impede sua leitura.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "number",
"description": "id do documento"
},
"acesso_codigo": {
"type": "string",
"description": "Código privado em acesso.codigo após pagamento de quem não está na conta; até 4096 caracteres. Autoriza este documento ao portador. Compra feita com a sessão da conta não emite código: vale o direito global da conta (cookie HttpOnly), e o do convidado edm_… vale com o token. Recibo público não concede acesso."
},
"agent_pass": {
"type": "string",
"description": "Credencial individual do agente, obrigatória junto de X-Editalmd-Avaliacao."
},
"avaliacao_codigo": {
"type": "string",
"description": "evaluation.access_code do premium patrocinado, exclusivo deste documento e agente, com expiração. Use junto de X-Agent-Pass; não é recibo ou compra."
}
},
"required": [
"id"
]
}🟡criar_dono
Cria o convidado (token edm_…, emitido pela biblioteca de conta) que abre alertas e vigias, e o segredo whsec_… que assina os webhooks. Sem cadastro; o token é mostrado uma única vez — guarde e mande em Authorization: Bearer nas tools de alerta e vigia. O token é emitido e assinado pela biblioteca de conta, com teto por rede e por hora, para a franquia grátis não virar infinita. Ele é mostrado uma única vez e não tem recuperação — entre na conta e traga as listas para ela (`POST /api/auth/claim`, que a página da conta faz sozinha ao entrar) para não depender dele. O `webhook_segredo` pode ser relido em `GET /api/dono`. Todo POST do webhook leva `webhook-id`, `webhook-timestamp` (segundos Unix) e `webhook-signature: v1,<base64>`: HMAC-SHA256 de `id.timestamp.corpo` com a chave do seu `whsec_…` (o base64 depois do prefixo). É o padrão Standard Webhooks — qualquer biblioteca dele confere; rejeite timestamp fora de 5 minutos. Depois de `POST /api/dono/segredo`, o anterior ainda assina por 24 h (duas partes `v1,` no cabeçalho).
Input Schema
{
"type": "object",
"properties": {}
}🟢dono
Estado do dono (precisa do token edm_… ou da sessão da conta): conta ou convidado, e-mail dos avisos, franquia e o segredo whsec_… que assina cada webhook (Standard Webhooks: webhook-id, webhook-timestamp, webhook-signature). Todo POST do webhook leva `webhook-id`, `webhook-timestamp` (segundos Unix) e `webhook-signature: v1,<base64>`: HMAC-SHA256 de `id.timestamp.corpo` com a chave do seu `whsec_…` (o base64 depois do prefixo). É o padrão Standard Webhooks — qualquer biblioteca dele confere; rejeite timestamp fora de 5 minutos. Depois de `POST /api/dono/segredo`, o anterior ainda assina por 24 h (duas partes `v1,` no cabeçalho).
Input Schema
{
"type": "object",
"properties": {}
}⚪rotacionar_segredo_webhook
Troca o segredo que assina os webhooks (precisa do token edm_…). O anterior ainda assina por 24 h, para trocar sem janela de falha. Durante as 24 h o cabeçalho `webhook-signature` traz duas partes `v1,…`: uma com o novo, outra com o anterior. Basta o receptor aceitar qualquer uma que bata.
Input Schema
{
"type": "object",
"properties": {}
}⚪criar_alerta(termos, uf, canal, filtros, destino)
Alerta de compra nova por termos do objeto e UF (precisa do token edm_…). Canal pull (ler por alertas_compras), webhook (POST https assinado com o whsec_… do dono) ou email (só com a sessão da conta: vai para o e-mail verificado dela). O primeiro é grátis; os seguintes custam por 30 dias (x402 ou crédito). Dois modos. Por `termos`: espaço exige todas as palavras, `|` aceita qualquer uma do grupo (`uniforme|fardamento escolar`). Por `cnpj`: o cadastro da empresa informa as atividades (CNAE), o dicionário (`GET /api/cnaes`) transforma cada CNAE numa família de termos e sai um alerta por família distinta, principal primeiro, até `max_familias`; CNAE fora do dicionário não vira alerta e é listado em `empresa.cnaes` com `familia: null`. O primeiro alerta ativo é grátis (`FRANQUIA_ALERTAS`); os seguintes custam `PRECO_ALERTA` por 30 dias cada — no modo CNPJ, numa cobrança só (N × preço), por x402 ou crédito. O cron confere a cada 30 minutos. Canal e-mail exige a sessão da conta — o aviso vai para o e-mail verificado dela, sem código de confirmação — e só existe com `EMAIL_ALERTAS=1`.
Input Schema
{
"type": "object",
"properties": {
"termos": {
"type": "string",
"description": "Palavras do objeto, 3 a 200 letras; espaço = todas, | = qualquer uma (uniforme|fardamento)"
},
"uf": {
"type": "string",
"description": "Sigla da UF (opcional)"
},
"canal": {
"type": "string",
"description": "pull, webhook ou email (padrão pull)",
"enum": [
"pull",
"webhook",
"email"
],
"default": "pull"
},
"filtros": {
"type": "object",
"additionalProperties": false,
"properties": {
"modalidades": {
"type": "array",
"maxItems": 10,
"items": {
"type": "integer",
"minimum": 1,
"maximum": 13
}
},
"municipios": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string"
}
},
"excluir": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string"
}
},
"valor_min": {
"type": "number",
"minimum": 0
},
"valor_max": {
"type": "number",
"minimum": 0
},
"abertas": {
"type": "boolean"
}
},
"description": "Recorte adicional: modalidades, municípios, exclusões, valores e propostas abertas. PATCH substitui o recorte inteiro; {} limpa."
},
"destino": {
"type": "string",
"description": "URL https (webhook); ignorado no pull e no email (vai para o e-mail da conta)"
}
},
"required": [
"termos"
]
}⚪alerta_por_cnpj(cnpj, max_familias, uf, filtros, canal, ...)
Alertas de compra nova pelo CNPJ da empresa (precisa do token edm_…): as atividades (CNAE) viram famílias de termos e sai um alerta por família, principal primeiro, até max_familias. O que passa da franquia é cobrado numa vez só (x402 ou crédito). CNAE fora do dicionário vem listado na resposta com familia nula. Dois modos. Por `termos`: espaço exige todas as palavras, `|` aceita qualquer uma do grupo (`uniforme|fardamento escolar`). Por `cnpj`: o cadastro da empresa informa as atividades (CNAE), o dicionário (`GET /api/cnaes`) transforma cada CNAE numa família de termos e sai um alerta por família distinta, principal primeiro, até `max_familias`; CNAE fora do dicionário não vira alerta e é listado em `empresa.cnaes` com `familia: null`. O primeiro alerta ativo é grátis (`FRANQUIA_ALERTAS`); os seguintes custam `PRECO_ALERTA` por 30 dias cada — no modo CNPJ, numa cobrança só (N × preço), por x402 ou crédito. O cron confere a cada 30 minutos. Canal e-mail exige a sessão da conta — o aviso vai para o e-mail verificado dela, sem código de confirmação — e só existe com `EMAIL_ALERTAS=1`.
Input Schema
{
"type": "object",
"properties": {
"cnpj": {
"type": "string",
"description": "CNPJ com 14 dígitos, com ou sem pontuação"
},
"max_familias": {
"type": "number",
"description": "1 a 8 (padrão 8): quantas famílias viram alerta",
"default": 8
},
"uf": {
"type": "string",
"description": "Sigla da UF (opcional)"
},
"filtros": {
"type": "object",
"additionalProperties": false,
"properties": {
"modalidades": {
"type": "array",
"maxItems": 10,
"items": {
"type": "integer",
"minimum": 1,
"maximum": 13
}
},
"municipios": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string"
}
},
"excluir": {
"type": "array",
"maxItems": 10,
"items": {
"type": "string"
}
},
"valor_min": {
"type": "number",
"minimum": 0
},
"valor_max": {
"type": "number",
"minimum": 0
},
"abertas": {
"type": "boolean"
}
},
"description": "Recorte adicional: modalidades, municípios, exclusões, valores e propostas abertas. PATCH substitui o recorte inteiro; {} limpa."
},
"canal": {
"type": "string",
"description": "pull, webhook ou email (padrão pull)",
"enum": [
"pull",
"webhook",
"email"
],
"default": "pull"
},
"destino": {
"type": "string",
"description": "URL https (webhook); ignorado no pull e no email (vai para o e-mail da conta)"
}
},
"required": [
"cnpj"
]
}🟢cnaes(q, limite)
Sugestões de termos de busca por atividade econômica (CNAE), com descrição, família e indicadores de cobertura. Grátis. Sem `q`, lista atividades com mais fornecedores registrados. Com `q`, busca por prefixo do código (`1412`, `1412-6/01`) ou por palavra da descrição. `familia`/`termos` nulos dizem que o CNAE ainda não está no dicionário: um alerta por CNPJ não o usa.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Prefixo do código (1412) ou palavra da descrição (opcional)"
},
"limite": {
"type": "number",
"description": "1 a 100 (padrão 20)"
}
}
}🟢alertas_compras(id, limite, antes_compra)
Compras que já casaram com um alerta (canal pull), com prazos e status de entrega. Precisa do token edm_….
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "id do alerta"
},
"limite": {
"type": "number",
"description": "1 a 100 (padrão 50)"
},
"antes_compra": {
"type": "number",
"description": "proximo_antes da página anterior"
}
},
"required": [
"id"
]
}⚪vigiar_compra(compra_id, canal, destino)
Vigia uma compra (precisa do token edm_…): fotografa agora e registra eventos de retificação, documento novo, suspensão, prazo adiado e valor, mais avisos de prazo. A primeira é grátis; as seguintes custam até 30 dias após o encerramento. A primeira vigia ativa é grátis (`FRANQUIA_VIGIAS`); as seguintes custam `PRECO_VIGIA` até 30 dias após o encerramento. As verificações são periódicas; confira a data da última verificação na vigia. Avisos `prazo_impugnacao` (no dia) e `prazo_proposta` (24 h antes) saem uma vez cada.
Input Schema
{
"type": "object",
"properties": {
"compra_id": {
"type": "number",
"description": "id da compra (vem da busca)"
},
"canal": {
"type": "string",
"description": "pull, webhook ou email (padrão pull)",
"enum": [
"pull",
"webhook",
"email"
],
"default": "pull"
},
"destino": {
"type": "string",
"description": "URL https (webhook); ignorado no pull e no email (vai para o e-mail da conta)"
}
},
"required": [
"compra_id"
]
}🟢vigia_eventos(id, limite)
Eventos de uma compra vigiada (o que mudou, de quê para quê, quando) e a fotografia atual. Precisa do token edm_….
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "id da vigia"
},
"limite": {
"type": "number",
"description": "1 a 100 (padrão 50)"
}
},
"required": [
"id"
]
}🟢credito_saldo
Saldo e extrato do crédito pré-pago (precisa do token `cred_…`).
Input Schema
{
"type": "object",
"properties": {}
}⚪credito_recarregar(usd)
Recarrega crédito: paga uma vez com x402 (pacotes de 1, 5, 10 ou 25 dólares) e devolve o token que desconta em qualquer API da casa.
Input Schema
{
"type": "object",
"properties": {
"usd": {
"type": "number",
"description": "1, 5, 10 ou 25"
}
},
"required": [
"usd"
]
}🟢recibo(id)
Recibo de uma entrega: preço, modo de pagamento e hash do conteúdo entregue.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "id do recibo (vem no header x-editalmd-recibo)"
}
},
"required": [
"id"
]
}🟢api_access(api_pass)
Monthly data package and private purchase status, without charging.
Input Schema
{
"type": "object",
"properties": {
"api_pass": {
"type": "string",
"description": "Private pass: api_<32 random hex>_<64 random hex>. Save before buying."
}
},
"additionalProperties": false
}🟡api_access_buy(api_pass, credit_token, payment, transaction)
Buy 1,000 basic data reads for US$1, valid for 30 days. Requires explicit payment. Same pass in retries recovers the same purchase. No automatic renewal. OCR, AI, documents and delivery keep their own tariffs. Send X-API-Pass on eligible data reads; remaining credits come in X-API-Credits-Remaining.
Input Schema
{
"type": "object",
"properties": {
"api_pass": {
"type": "string",
"description": "Private pass: api_<32 random hex>_<64 random hex>. Save before buying."
},
"credit_token": {
"type": "string",
"description": "Existing prepaid credit token."
},
"payment": {
"type": "string",
"description": "Signed x402 payload, after authorizing the quote."
},
"transaction": {
"type": "string",
"description": "Base transaction hash to reconcile an uncertain payment with the same pass and original payload."
}
},
"required": [
"api_pass"
],
"additionalProperties": false
}🟢pricing
Current public prices and free allowances; no charge.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢billing
Payment discovery and billing summary; does not create a charge.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Community
Evidence