Lei Vigente

Usar no Claude, ChatGPT e Gemini (MCP)

Conecte o Lei Vigente como servidor MCP ao Claude, ao ChatGPT ou ao Gemini para ler a lei e conferir respostas antes de confiar nelas.

O Lei Vigente também é um servidor MCP (Model Context Protocol). Conectado a um assistente (Claude, ChatGPT ou Gemini), ele dá ao modelo ferramentas para ler o texto oficial de um artigo, buscar na legislação e verificar todas as citações de uma resposta, em vez de confiar na memória do modelo.

https://api.leivigente.com.br/mcp

Transporte Streamable HTTP, sem sessão (stateless), só POST. É o mesmo corpus e as mesmas regras da API REST: leitura sem login (30 req/min por IP), verificação com uma conta Lei Vigente conectada (OAuth) ou com uma chave vg_live_….

Como autenticar

ClienteComo autenticar
ChatGPT, claude.ai, Claude DesktopLogin com a conta Lei Vigente (OAuth), preferível; a URL fica sem chave
Claude Code, Codex, Gemini CLI, Cursor, VS Code, Windsurf, OpenCodeCabeçalho Authorization: Bearer vg_live_… (preferível)
App Gemini, Gemini Business ou qualquer cliente que só aceite uma URL?key=vg_live_… no fim da URL

Conta Lei Vigente (OAuth)

O servidor também é um servidor de autorização OAuth 2.1 (registro dinâmico de cliente, PKCE). Ao adicionar a URL /mcp sem chave, o ChatGPT e o claude.ai detectam o login e abrem uma janela do Lei Vigente: você entra com o seu e-mail e a sua senha (ou cria a conta ali mesmo), autoriza o assistente e pronto. Não há chave para copiar nem segredo na URL. O acesso vale pelo plano da sua conta, e a ferramenta minha_conta mostra o plano e o uso do mês. O token de acesso dura 1 hora e o assistente o renova sozinho; se a conexão ficar 30 dias sem uso, o assistente pede o login de novo.

Chave de API

A chave é aceita de duas formas, conforme o cliente: no cabeçalho Authorization ou, só no /mcp, no parâmetro key da URL:

https://api.leivigente.com.br/mcp?key=vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Sem login e sem chave, o servidor também responde, mas só com as ferramentas de leitura; verificar_texto, verificar_citacoes e extrair_citacoes devolvem um erro explicando como conectar a conta ou configurar a chave. Crie uma chave em sua conta ou veja Autenticação.

A URL com ?key= contém a sua chave

Trate essa URL como um segredo: não a cole em prompts nem a compartilhe. O Lei Vigente não registra a query string em log (o log de requisição guarda só o caminho /mcp) e os logs de invocação do Cloudflare estão desligados, mas a chave fica visível na tela de conectores do assistente. Para trocar a chave, gere uma nova em sua conta, atualize a URL e revogue a antiga. No ChatGPT e no claude.ai, prefira o login com a conta Lei Vigente, que não põe segredo na URL.

Claude

claude.ai e Claude Desktop

Conectores personalizados funcionam em todos os planos do Claude (no Gratuito, um conector personalizado; nos planos Pro, Max, Team e Enterprise, vários), no claude.ai, no Claude Desktop e nos apps para celular. São configurados por URL, sem cabeçalhos. O caminho preferido é o login com a conta Lei Vigente (OAuth):

  1. Em Personalizar → Conectores (Customize → Connectors), clique em + e depois em Adicionar conector personalizado (Add custom connector).

  2. Nome: Lei Vigente. Em URL do servidor MCP remoto, cole a URL sem chave:

    https://api.leivigente.com.br/mcp
  3. Deixe as Configurações avançadas (Client ID e secret do OAuth) em branco: o Claude se registra sozinho. Clique em Adicionar.

  4. Clique em Conectar (Connect) no conector. Na janela do Lei Vigente, entre com e-mail e senha (ou crie a conta) e autorize o Claude.

  5. Em uma conversa, clique em + → Conectores e ative o Lei Vigente. Pergunte "qual é o meu plano no Lei Vigente?" para conferir a conexão (ferramenta minha_conta).

Nos planos Team e Enterprise, quem adiciona é um proprietário da organização: Configurações da organização → Conectores (Organization settings → Connectors) → Adicionar → Personalizado → Web, com a mesma URL. Depois, cada pessoa abre Personalizar → Conectores, encontra o Lei Vigente e clica em Conectar para entrar com a própria conta.

A URL com chave continua funcionando, para quem já tem uma chave vg_live_… ou prefere não criar conta: cole https://api.leivigente.com.br/mcp?key=vg_live_… no passo 2; nesse caso o Claude não pede login. O Claude acessa o Lei Vigente a partir da nuvem da Anthropic, então a conexão funciona igual em qualquer rede.

Claude Code

No terminal, o cabeçalho Authorization é a forma preferida (a chave não entra em URL nenhuma):

  1. Rode o comando, trocando vg_live_… pela sua chave:

    claude mcp add --transport http vigente \
      https://api.leivigente.com.br/mcp \
      --header "Authorization: Bearer vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

    Acrescente --scope user para ter o servidor em todos os projetos.

  2. claude mcp list confirma a conexão.

  3. Dentro do Claude Code, /mcp mostra as ferramentas.

Sem chave, com a conta Lei Vigente: adicione o servidor sem o --header e, dentro do Claude Code, rode /mcp (ou claude mcp login vigente no terminal) para entrar pelo navegador. Enquanto não houver login, claude mcp list mostra o Lei Vigente como ! Needs authentication.

ChatGPT

Conectar no ChatGPT

No ChatGPT, servidores MCP entram como plugins. Enquanto o Lei Vigente não aparece no diretório de plugins, ele é adicionado como plugin pessoal, no modo de desenvolvedor, no ChatGPT para web (não no app de celular). Disponível nos planos Plus, Pro, Business, Enterprise e Edu; não funciona nos planos Gratuito e Go.

Plus e Pro:

  1. Em Configurações → Segurança e login (Settings → Security and login), ative o Modo de desenvolvedor (Developer mode).

  2. Em Configurações → Plugins (ou direto em chatgpt.com/plugins), clique em +.

  3. Nome: Lei Vigente. Descrição: "Legislação brasileira verificada: Planalto, STF, STJ". Em Conexão (Connection), escolha o endereço público e cole a URL sem chave:

    https://api.leivigente.com.br/mcp
  4. Na autenticação, escolha OAuth e deixe Client ID e secret em branco: o ChatGPT se registra sozinho. Crie o plugin.

  5. O ChatGPT abre a janela do Lei Vigente: entre com e-mail e senha (ou crie a conta) e autorize. Em seguida ele lista as ferramentas encontradas; confira se aparecem consultar_artigo, verificar_texto e as demais.

  6. Instale o plugin: em seus plugins (chatgpt.com/plugins?view=personal), abra o Lei Vigente e clique em +.

  7. Para usar, na página inicial do ChatGPT troque a aba Chat por Work, digite @ no campo de mensagem e escolha o Lei Vigente. "@Lei Vigente qual é o meu plano?" confere a conexão (ferramenta minha_conta).

Business, Enterprise e Edu: o modo de desenvolvedor é controlado pelo workspace. No Business, só administradores e proprietários criam plugins de desenvolvedor, nas configurações do workspace, e os publicam para todos; no Enterprise e no Edu, um administrador libera o acesso em Permissões e funções e quem recebeu acesso cria o plugin como acima. Use a mesma URL e OAuth. Em workspaces que ainda não receberam a mudança de nome, a seção aparece como Apps em vez de Plugins.

Plugins de desenvolvedor não se atualizam sozinhos: se o Lei Vigente ganhar ferramentas novas, abra o plugin em Configurações → Plugins e clique em Atualizar (Refresh); em workspaces, o administrador republica.

Quando o Lei Vigente estiver no diretório de plugins, basta procurá-lo, instalar e entrar com a conta; o login é o mesmo. Os planos estão em Planos.

Com uma chave vg_live_…, sem conta, também funciona: no passo 4, escolha Sem autenticação e ponha a chave na própria URL (https://api.leivigente.com.br/mcp?key=vg_live_…).

As ferramentas do Lei Vigente são todas de leitura (readOnlyHint), então o ChatGPT não pede confirmação antes de usá-las.

GPT personalizado (Actions, sem MCP)

Alternativa para quem quer distribuir um GPT ou não tem o modo de desenvolvedor: um GPT personalizado com Actions chama a API REST diretamente, e a chave fica guardada no ChatGPT, fora da URL.

  1. Explorar GPTs → Criar → aba Configurar → Criar nova ação.
  2. Em Esquema, clique em Importar de URL e informe https://api.leivigente.com.br/openapi.json (OpenAPI 3.1 com servers e operationId em todas as rotas).
  3. Autenticação → Chave de API, tipo Bearer, cole a chave vg_live_…. Sem chave, só as rotas de leitura funcionam.
  4. Nas instruções do GPT, diga algo como: "Antes de afirmar o que diz um artigo, chame consultarArtigo. Ao final de qualquer resposta com citações, chame resolverTexto com o texto da resposta e corrija o que vier revogado, nao_encontrado ou verificado_parcial."

Limite do ChatGPT: 30 operações por ação (o Lei Vigente tem 16). Cada chamada de Action é uma requisição da API para efeito de limites.

Gemini

App Gemini (conta pessoal)

O app Gemini na web aceita servidores MCP como apps personalizados (recurso "Gemini Spark"). Requisitos atuais do Google: conta Google pessoal (não de trabalho ou escola), 18 anos ou mais, atividade do app ("Manter atividade") ativada e, por enquanto, disponibilidade limitada a alguns países.

  1. Em gemini.google.com, abra Configurações e ajuda → Apps conectados.

  2. Em Apps personalizados, clique em Adicionar um app personalizado.

  3. Cole a URL do servidor MCP, trocando vg_live_… pela sua chave (a tela não aceita cabeçalhos, por isso a chave vai na URL; a seção "Recursos avançados" é só para OAuth):

    https://api.leivigente.com.br/mcp?key=vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  4. Clique em Próxima e siga os passos.

  5. Na conversa, digite @ e escolha o Lei Vigente para garantir que o Gemini use as ferramentas naquele pedido.

Para desligar: toggle do app em Apps conectados; para apagar: Mais detalhes → Remover app.

Gemini Business e Gemini Enterprise

Quem configura é um administrador da equipe:

  1. Em Configurações e ajuda → Gerenciar equipe → Apps conectados, clique em Adicionar servidor MCP.

  2. Nome: Lei Vigente.

  3. Em URL do servidor, cole a URL abaixo, trocando vg_live_… pela chave da equipe:

    https://api.leivigente.com.br/mcp?key=vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  4. Em autenticação, escolha Sem autenticação (as opções são "Sem autenticação" ou OAuth 2.0; não há campo para chave em cabeçalho).

  5. Salve. A conexão nasce desativada: ative-a para que apareça para os membros.

Só o transporte Streamable HTTP é aceito, e é o que o Lei Vigente usa. No Gemini Enterprise, o mesmo servidor entra como data store de MCP personalizado, com as mesmas regras.

Gemini CLI e Gemini Code Assist

No terminal, com a chave em cabeçalho:

  1. Rode o comando, trocando vg_live_… pela sua chave:

    gemini mcp add --transport http --scope user vigente \
      https://api.leivigente.com.br/mcp \
      --header "Authorization: Bearer vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

    Ou edite ~/.gemini/settings.json na mão (o Gemini Code Assist, no VS Code, lê o mesmo arquivo):

    {
      "mcpServers": {
        "vigente": {
          "httpUrl": "https://api.leivigente.com.br/mcp",
          "headers": { "Authorization": "Bearer vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" },
          "timeout": 15000
        }
      }
    }
  2. gemini mcp list no terminal, ou /mcp dentro da sessão, mostra o estado da conexão e as ferramentas.

Outros agentes e IDEs

Codex, Cursor, VS Code, Windsurf e OpenCode aceitam cabeçalho, então a chave fica fora da URL. Sem o cabeçalho, as ferramentas de leitura continuam funcionando. Troque vg_live_… pela sua chave (ou aponte para uma variável de ambiente, como nos exemplos).

Codex (CLI e extensão do IDE)

  1. Exporte a chave no perfil do shell (~/.zshrc, ~/.bashrc):

    export VIGENTE_KEY="vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  2. Registre o servidor:

    codex mcp add vigente \
      --url https://api.leivigente.com.br/mcp \
      --bearer-token-env-var VIGENTE_KEY

    Equivalente em ~/.codex/config.toml (a extensão do Codex para VS Code lê o mesmo arquivo):

    [mcp_servers.vigente]
    url = "https://api.leivigente.com.br/mcp"
    bearer_token_env_var = "VIGENTE_KEY"
  3. codex mcp list mostra o estado.

Evite http_headers com a chave em texto puro em um .codex/config.toml de projeto, que pode ir para o repositório.

Cursor

  1. Abra Settings → Tools & MCP → New MCP server, ou edite ~/.cursor/mcp.json (global) ou .cursor/mcp.json (projeto).

  2. Cole a configuração:

    {
      "mcpServers": {
        "vigente": {
          "url": "https://api.leivigente.com.br/mcp",
          "headers": { "Authorization": "Bearer ${env:VIGENTE_KEY}" }
        }
      }
    }
  3. Exporte VIGENTE_KEY=vg_live_… no perfil do shell (ou troque ${env:VIGENTE_KEY} pela chave, se o arquivo não for para o repositório).

  4. Na mesma tela, confirme que o servidor aparece com as ferramentas listadas.

VS Code (GitHub Copilot)

  1. Na paleta de comandos, rode MCP: Add Server, ou crie .vscode/mcp.json na mão.

  2. Cole a configuração. O bloco inputs pede a chave uma vez e a guarda no armazenamento seguro do VS Code:

    {
      "inputs": [
        {
          "type": "promptString",
          "id": "vigente-key",
          "description": "Chave da API Lei Vigente (vg_live_…)",
          "password": true
        }
      ],
      "servers": {
        "vigente": {
          "type": "http",
          "url": "https://api.leivigente.com.br/mcp",
          "headers": { "Authorization": "Bearer ${input:vigente-key}" }
        }
      }
    }
  3. Clique em Start sobre o servidor no arquivo e cole a chave quando o VS Code pedir.

  4. No Copilot Chat (modo Agent), o ícone de ferramentas mostra as do Lei Vigente.

Windsurf

  1. Abra Cascade → MCP → Configure, ou edite ~/.codeium/windsurf/mcp_config.json.

  2. Cole a configuração, trocando vg_live_… pela sua chave (Windsurf usa serverUrl, não url):

    {
      "mcpServers": {
        "vigente": {
          "serverUrl": "https://api.leivigente.com.br/mcp",
          "headers": { "Authorization": "Bearer vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
        }
      }
    }
  3. Clique em Refresh no painel de MCP do Cascade para carregar as ferramentas.

OpenCode

  1. Edite opencode.json (projeto) ou ~/.config/opencode/opencode.json (global).

  2. Cole a configuração, trocando vg_live_… pela sua chave:

    {
      "$schema": "https://opencode.ai/config.json",
      "mcp": {
        "vigente": {
          "type": "remote",
          "url": "https://api.leivigente.com.br/mcp",
          "headers": { "Authorization": "Bearer vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" },
          "enabled": true
        }
      }
    }
  3. Reinicie o OpenCode; /mcp lista as ferramentas conectadas.

Qualquer outro cliente

Servidor HTTP remoto (Streamable HTTP):

https://api.leivigente.com.br/mcp

Com Authorization: Bearer vg_live_… quando o cliente permite cabeçalhos; senão, a chave na própria URL:

https://api.leivigente.com.br/mcp?key=vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

O servidor responde em JSON a qualquer cabeçalho Accept, e GET /mcp devolve 405 (não há sessão nem stream de eventos). Para depurar sem IDE:

bunx @modelcontextprotocol/inspector --cli \
  https://api.leivigente.com.br/mcp --method tools/list

Ferramentas

FerramentaFazConta ou chave
listar_diplomasSiglas disponíveis, com nome, número da lei, contagem de artigos e data da última ingestãoNão
consultar_diplomaMetadados e sumário (faixa de artigos por título, capítulo e seção)Não
consultar_artigoArtigo inteiro: caput, parágrafos, incisos, alíneas, anotações, alterado_por, vizinhosNão
consultar_dispositivoUm dispositivo pelo ref_key (CF.5.LXXVIII, CPC.1003.5)Não
versoes_dispositivoRedações anteriores detectadas pelas ingestõesNão
consultar_sumulaEnunciado de súmula do STF ou do STJ (vinculante: true para Súmula Vinculante)Não
buscarBusca textual em português (aspas para frase exata, - para excluir)Não
alteracoes_recentesFeed de inclusões, novas redações, revogações e cancelamentos detectadosNão
extrair_citacoesExtrai as citações de um texto (artigos, súmulas, temas, OJs, enunciados), com posição, sem verificarSim
verificar_citacoesVerifica até 100 citações estruturadas (status, texto, hierarquia)Sim
verificar_textoExtrai e verifica todas as citações de um texto livre; a ferramenta para conferir respostasSim
minha_contaPlano da conta conectada, uso do mês e limitesConta (OAuth)

As respostas são o mesmo JSON das rotas REST correspondentes (veja Corpus e Verificação). O servidor envia ao modelo instruções de uso: ler o artigo antes de afirmar o que ele diz, tratar revogado: true como redação revogada, citar o ref_key.

Só verificado confirma a citação. verificado_inferido e ambiguo indicam que o diploma não estava explícito no texto e exigem conferência. nao_suportado e diploma_desconhecido indicam que a citação está fora do corpus, não que ela está errada.

Como usar em uma conversa

Com o conector ativo, o assistente chama as ferramentas sozinho quando a pergunta envolve lei brasileira. Pedidos que funcionam bem:

  • "O que diz o art. 22 do Código Eleitoral? Leia o artigo inteiro antes de responder."
  • "Confira com o Lei Vigente todas as citações desta resposta e me diga quais estão erradas ou revogadas: [cole a resposta]."
  • "Qual artigo do CDC trata de propaganda enganosa? Busque e cite o texto."
  • "A Súmula 7 do STJ ainda vale? E a Súmula Vinculante 11?"

Para forçar a verificação, peça explicitamente: "use verificar_texto no texto abaixo". O resultado traz um resumo no topo e, por citação, o status e o texto oficial. nao_encontrado vem com sugestao quando a frase ao redor determina um dispositivo; quando não há diploma explícito, ambiguo vem com candidatos para o cliente escolher.

Limites e contagem

Cada mensagem JSON-RPC é uma requisição para efeito de limites: a inicialização do conector (initialize

  • tools/list) e cada chamada de ferramenta contam individualmente. Sem chave, o limite é por IP, e as chamadas do claude.ai, do ChatGPT e do app Gemini saem da infraestrutura de cada fornecedor, ou seja, de IPs compartilhados com outros usuários do conector. Com a conta conectada (OAuth) ou com chave, valem os limites do plano, contados na cota mensal como qualquer requisição REST.

Quando um limite (por minuto ou mensal) é atingido numa chamada de ferramenta, a resposta não é um HTTP 429: a ferramenta devolve um erro (isError: true) com a mensagem do limite, para o assistente explicar o que houve em vez de mostrar uma falha de conexão. As demais mensagens (initialize, tools/list) continuam recebendo 429 com Retry-After.

Dados

As ferramentas recebem exatamente o que a API REST receberia (texto, ref_key, termos de busca) e seguem as mesmas garantias: nada do conteúdo é guardado nem vai a log; veja Dados e privacidade. O que Anthropic, OpenAI ou Google fazem com o conteúdo da conversa é regido pelos termos de cada assistente, não por esta página.

Nesta página