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.
| Ferramenta | Descrição |
|---|---|
search_legislation | Pesquisar por palavra-chave em títulos e abreviações de leis |
list_legislation | Listar toda a legislação em vigor (paginada) |
get_legislation | Obter metadados de uma lei por número SR ou URI ELI |
get_legislation_text | Buscar o texto completo de uma lei (HTML ou XML) |
get_versions | Listar todas as versões históricas de consolidação |
get_citations | Grafo 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.
| Ferramenta | Descrição |
|---|---|
search_provisions | Pesquisa de texto completo FTS5 em todos os textos de artigos (~100 mil disposições) |
lookup_definition | Encontrar definições legais formais por termo em toda a legislação |
find_eu_references | Leis suíças que implementam ou referenciam diretivas/regulamentos específicos da UE |
get_article_citations | Grafo de citações entre artigos (quais artigos específicos citam quais) |
get_db_stats | Estatísticas do banco de dados: contagens, tamanho e timestamp da última ingestão |
get_article_citationsé mais preciso queget_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:
| Flag | Padrão | Descrição |
|---|---|---|
--lang | fr | Idioma para ingestão (de, fr, it) |
--concurrency | 5 | Buscas HTML paralelas |
--db | ./data/fedlex.sqlite | Caminho 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:
- Busca todas as entradas de
ConsolidationAbstractdo SPARQL - Resolve a consolidação mais recente e as URLs de download por lei
- Busca e analisa documentos HTML para extrair disposições de artigos
- Extrai definições legais e referências cruzadas da UE por artigo
- Reconstrói o índice de texto completo FTS5
- Busca arestas de citação em nível de artigo do SPARQL e as armazena
- 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 MCPPOST /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âmetro | Obrigatório | Descrição |
|---|---|---|
sr | Sim | Número SR da lei |
article | Não | Filtrar para um artigo específico por id HTML (ex.: art_1, art_2a) |
direction | Não | from (saída), to (entrada) ou both (padrão) |
limit | Não | Má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.