editalmd

Brazilian public procurement (PNCP): search, deadlines, tender markdown, alerts and watches.

Should I use this

Quality & Safety

B
Description quality
82%
Schema completeness
85%
Naming quality
83%
Poisoning risk
40%
Permission match
100%
Protocol compliance
100%

Findings (28)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool 'precos_homologados' description contains placeholder textin precos_homologados
  • MEDIUMTool 'criar_dono' description contains placeholder textin criar_dono
  • MEDIUMTool 'dono' description contains placeholder textin dono
  • LOWTool 'avaliacao_cotas' description lacks action verbin avaliacao_cotas
  • LOWTool 'anexar_documento_empresa' description lacks action verbin anexar_documento_empresa
  • LOWTool 'buscar_empresa' description lacks action verbin buscar_empresa
  • LOWTool 'minha_conta' description lacks action verbin minha_conta
  • LOWTool 'meus_documentos' description lacks action verbin meus_documentos
  • LOWTool 'meus_compras' description lacks action verbin meus_compras

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~12,675Tokens (tool definitions)
~980 BTypical response size
Significant attention impact (9.90% of 128k context)

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-http

What it can do

Tool inventory

Tools (59)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded59 tools
verifiedversion not recorded58 tools