Fedlex-mcp

Banco de Dados Fedlex Suíço

Documentação

fedlex-mcp

Servidor MCP para legislação federal suíça via Fedlex.

Fornece duas camadas complementares de acesso:

  • Ferramentas SPARQL ao vivo — consulte o endpoint SPARQL do Fedlex em tempo real (sem configuração local além de npm run build)
  • Ferramentas baseadas em SQLite — ferramentas rápidas e com capacidade offline que funcionam com um banco de dados local criado por npm run ingest

Projeto experimental. Não é aconselhamento jurídico. Sempre verifique na fonte oficial do Fedlex.


Ferramentas

Ferramentas SPARQL ao vivo

Estas consultam https://fedlex.data.admin.ch/sparqlendpoint diretamente e não exigem banco de dados local.

FerramentaDescrição
search_legislationPesquisar por palavra-chave em títulos e abreviações de leis
list_legislationListar toda a legislação em vigor (paginada)
get_legislationObter metadados de uma lei por número SR ou URI ELI
get_legislation_textBuscar o texto completo de uma lei (HTML ou XML)
get_versionsListar todas as versões históricas de consolidação
get_citationsGrafo de citações entre leis (quais leis citam quais)

Ferramentas baseadas em SQLite

Estas funcionam com um banco de dados SQLite local criado por npm run ingest. São mais rápidas, funcionam offline e oferecem recursos não disponíveis apenas via SPARQL.

FerramentaDescrição
search_provisionsPesquisa de texto completo FTS5 em todos os textos de artigos (~100 mil disposições)
lookup_definitionEncontrar definições legais formais por termo em toda a legislação
find_eu_referencesLeis suíças que implementam ou referenciam diretivas/regulamentos específicos da UE
get_article_citationsGrafo de citações entre artigos (quais artigos específicos citam quais)
get_db_statsEstatísticas do banco de dados: contagens, tamanho e timestamp da última ingestão

get_article_citations é mais preciso que get_citations: em vez de "A Lei A cita a Lei B", retorna "O Art. 12 do Código Penal cita o Art. 3 da Lei de Proteção de Dados".


Identificadores

Toda ferramenta que aceita um identifier aceita:

  • Um número SR — ex.: "101" (Constituição Federal), "210" (Código Civil), "311.0" (Código Penal), "220" (Código das Obrigações)
  • Uma URI ELI completa — ex.: "https://fedlex.data.admin.ch/eli/cc/1999/404"

Idiomas

Todas as ferramentas suportam language: "fr" | "de" | "it" | "rm" (padrão: "fr").


Configuração

1. Instalar e compilar

npm install && npm run build

2. (Opcional) Criar o banco de dados SQLite local

Necessário para as ferramentas baseadas em SQLite. Baixa e analisa toda a legislação HTML do Fedlex (~7.000 leis, normalmente 15–30 minutos dependendo da conexão):

npm run ingest

Opções:

FlagPadrãoDescrição
--langfrIdioma para ingestão (de, fr, it)
--concurrency5Buscas HTML paralelas
--db./data/fedlex.sqliteCaminho de saída para o arquivo SQLite

Você também pode definir FEDLEX_DB_PATH como variável de ambiente para apontar o servidor para um banco de dados existente.

O pipeline de ingestão:

  1. Busca todas as entradas de ConsolidationAbstract do SPARQL
  2. Resolve a consolidação mais recente e as URLs de download por lei
  3. Busca e analisa documentos HTML para extrair disposições de artigos
  4. Extrai definições legais e referências cruzadas da UE por artigo
  5. Reconstrói o índice de texto completo FTS5
  6. Busca arestas de citação em nível de artigo do SPARQL e as armazena
  7. Grava um relatório resumido em JSON junto ao arquivo do banco de dados

Uso

stdio (local / Claude Desktop)

node dist/index.js

Configuração do Claude Desktop (~/.claude/claude_desktop_config.json):

{
  "mcpServers": {
    "fedlex": {
      "command": "node",
      "args": ["/path/to/fedlex-mcp/dist/index.js"]
    }
  }
}

Para usar um banco de dados pré-construído, adicione FEDLEX_DB_PATH ao env:

{
  "mcpServers": {
    "fedlex": {
      "command": "node",
      "args": ["/path/to/fedlex-mcp/dist/index.js"],
      "env": { "FEDLEX_DB_PATH": "/path/to/fedlex.sqlite" }
    }
  }
}

HTTP/SSE (implantação online)

node dist/index.js --http
# custom port:
PORT=8080 node dist/index.js --http

Endpoints MCP:

  • GET /sse — fluxo SSE para clientes MCP
  • POST /messages?sessionId=<id> — retransmissão de mensagens

Docker

docker build -t fedlex-mcp .
docker run -p 3000:3000 fedlex-mcp

Implantar no Railway / Render / Fly.io

Defina o comando de início como node dist/index.js --http e exponha a porta 3000 (ou defina a variável de env PORT).


API REST

Todas as ferramentas também estão disponíveis como endpoints HTTP GET simples em /api/. Útil para clientes de navegador ou integrações não-MCP.

Endpoints SPARQL ao vivo

GET /api/search?q=<query>&lang=fr&limit=20&in_force=true
GET /api/list?lang=fr&limit=50&offset=0&in_force=true
GET /api/legislation/:id?lang=fr
GET /api/text/:id?lang=fr&format=html&version=2024-01-01
GET /api/versions/:id
GET /api/citations/:id?direction=both&lang=fr&limit=50

Endpoints baseados em SQLite

GET /api/db/search?q=<query>&limit=20&sr=235.1
GET /api/db/definitions?term=<term>&limit=20
GET /api/db/eu-refs?id=2016/679&type=Directive&limit=30
GET /api/db/article-citations?sr=311.0&article=art_1&direction=both&limit=50
GET /api/db/stats

Parâmetros para /api/db/article-citations:

ParâmetroObrigatórioDescrição
srSimNúmero SR da lei
articleNãoFiltrar para um artigo específico por id HTML (ex.: art_1, art_2a)
directionNãofrom (saída), to (entrada) ou both (padrão)
limitNãoMáx. de resultados por direção (padrão 50, máx. 200)

Exemplos

Ferramentas SPARQL ao vivo

search_legislation("protection des données")
→ finds LPD (SR 235.1) and related ordinances

get_legislation("235.1")
→ metadata for the Loi fédérale sur la protection des données

get_legislation_text("311.0", language="fr")
→ full text of the Code pénal suisse

get_versions("220")
→ all historical versions of the Code des obligations

get_citations("101", direction="from", language="fr")
→ all laws that cite the Constitution fédérale

search_legislation("Datenschutz", language="de")
→ same search in German

Ferramentas baseadas em SQLite

search_provisions("données personnelles sensibles", sr_number="235.1")
→ FTS5 search within the LPD for that phrase

lookup_definition("personne concernée")
→ all formal definitions of that term across Swiss federal law

find_eu_references(eu_identifier="2016/679")
→ Swiss laws referencing the GDPR

get_article_citations("311.0", article_id="art_12", direction="both")
→ articles that Art. 12 CP cites, and articles in other laws that cite Art. 12 CP

get_db_stats()
→ total counts of laws, provisions, definitions, EU references, article citations

Fonte de dados

Todos os dados vêm da plataforma Fedlex da Chancelaria Federal Suíça via:

  • Endpoint SPARQL: https://fedlex.data.admin.ch/sparqlendpoint
  • Ontologia: JOLux (baseada em FRBR, ELI)
  • Formatos disponíveis: PDF, HTML, XML (Akoma Ntoso, desde 2022), DOCX
  • Cobertura: Todos os textos da Compilação Classificada (RS/SR) — atos, portarias, regulamentos, tratados

Aviso legal

Este projeto é um servidor MCP independente e experimental para acessar informações derivadas da plataforma Fedlex da Chancelaria Federal Suíça. É fornecido apenas para fins técnicos e informativos.

  • Sem aconselhamento jurídico. Nada produzido por este projeto constitui aconselhamento jurídico, opinião legal ou substituto para consultoria profissional.
  • Sem garantia. Este software é fornecido "no estado em que se encontra", sem garantia de qualquer tipo. As saídas podem estar incompletas, imprecisas, indisponíveis, mal analisadas ou desatualizadas.
  • Verifique com fontes oficiais. Os usuários devem verificar de forma independente todos os textos legais, referências, metadados e conclusões na fonte oficial do Fedlex antes de confiar neles.
  • Use por sua conta e risco. O autor não assume responsabilidade ou obrigação por erros, omissões, indisponibilidade, interpretação incorreta de materiais legais ou quaisquer consequências diretas ou indiretas decorrentes do uso deste projeto.
  • Dependência de fonte de terceiros. A disponibilidade e a precisão dependem em parte dos serviços upstream do Fedlex, formatos de dados e condições de rede, que podem mudar sem aviso prévio.

Ao usar este projeto, você aceita que ele é uma ferramenta de melhor esforço e não um sistema legal autoritativo de registro.