Fedlex-mcp

Base de datos Fedlex suiza

Documentación

fedlex-mcp

Servidor MCP para la legislación federal suiza a través de Fedlex.

Proporciona dos capas complementarias de acceso:

  • Herramientas SPARQL en vivo — consulta el endpoint SPARQL de Fedlex en tiempo real (sin configuración local más allá de npm run build)
  • Herramientas basadas en SQLite — herramientas rápidas y funcionales sin conexión que operan sobre una base de datos local creada por npm run ingest

Proyecto experimental. No constituye asesoramiento legal. Verifique siempre contra la fuente oficial de Fedlex.


Herramientas

Herramientas SPARQL en vivo

Estas consultan https://fedlex.data.admin.ch/sparqlendpoint directamente y no requieren base de datos local.

HerramientaDescripción
search_legislationBúsqueda por palabra clave en títulos y abreviaturas de leyes
list_legislationLista toda la legislación vigente (paginada)
get_legislationObtiene metadatos de una ley por número SR o URI ELI
get_legislation_textRecupera el texto completo de una ley (HTML o XML)
get_versionsLista todas las versiones históricas de consolidación
get_citationsGrafo de citas entre leyes (qué leyes citan a cuáles)

Herramientas basadas en SQLite

Estas operan sobre una base de datos SQLite local creada por npm run ingest. Son más rápidas, funcionan sin conexión y ofrecen capacidades no disponibles solo con SPARQL.

HerramientaDescripción
search_provisionsBúsqueda de texto completo FTS5 en todos los textos de artículos (~100 000 disposiciones)
lookup_definitionEncuentra definiciones legales formales por término en toda la legislación
find_eu_referencesLeyes suizas que implementan o referencian directivas/reglamentos específicos de la UE
get_article_citationsGrafo de citas artículo a artículo (qué artículos específicos citan a cuáles)
get_db_statsEstadísticas de la base de datos: recuentos, tamaño y marca de tiempo de la última ingesta

get_article_citations es más preciso que get_citations: en lugar de "La Ley A cita a la Ley B", devuelve "El Art. 12 del Código Penal cita al Art. 3 de la Ley de Protección de Datos".


Identificadores

Toda herramienta que acepte un identifier admite:

  • Un número SR — p. ej. "101" (Constitución Federal), "210" (Código Civil), "311.0" (Código Penal), "220" (Código de Obligaciones)
  • Una URI ELI completa — p. ej. "https://fedlex.data.admin.ch/eli/cc/1999/404"

Idiomas

Todas las herramientas admiten language: "fr" | "de" | "it" | "rm" (predeterminado: "fr").


Configuración

1. Instalar y compilar

npm install && npm run build

2. (Opcional) Crear la base de datos SQLite local

Requerido para las herramientas basadas en SQLite. Descarga y analiza toda la legislación HTML de Fedlex (~7000 leyes, normalmente 15–30 minutos según la conexión):

npm run ingest

Opciones:

IndicadorPredeterminadoDescripción
--langfrIdioma a ingerir (de, fr, it)
--concurrency5Descargas HTML en paralelo
--db./data/fedlex.sqliteRuta de salida para el archivo SQLite

También puede establecer FEDLEX_DB_PATH como variable de entorno para apuntar el servidor a una base de datos existente.

El proceso de ingesta:

  1. Recupera todas las entradas de ConsolidationAbstract desde SPARQL
  2. Resuelve la última consolidación y las URL de descarga por ley
  3. Descarga y analiza documentos HTML para extraer disposiciones de artículos
  4. Extrae definiciones legales y referencias cruzadas de la UE por artículo
  5. Reconstruye el índice de texto completo FTS5
  6. Recupera aristas de citas a nivel de artículo desde SPARQL y las almacena
  7. Escribe un informe resumido en JSON junto al archivo de base de datos

Uso

stdio (local / Claude Desktop)

node dist/index.js

Configuración de Claude Desktop (~/.claude/claude_desktop_config.json):

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

Para usar una base de datos precompilada, agregue FEDLEX_DB_PATH al entorno:

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

HTTP/SSE (despliegue en línea)

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

Endpoints MCP:

  • GET /sse — flujo SSE para clientes MCP
  • POST /messages?sessionId=<id> — retransmisión de mensajes

Docker

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

Desplegar en Railway / Render / Fly.io

Establezca el comando de inicio en node dist/index.js --http y exponga el puerto 3000 (o establezca la variable de entorno PORT).


API REST

Todas las herramientas también están disponibles como endpoints HTTP GET simples bajo /api/. Útil para clientes de navegador o integraciones no MCP.

Endpoints SPARQL en 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 basados en 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ámetroRequeridoDescripción
srNúmero SR de la ley
articleNoFiltrar a un artículo específico por id HTML (p. ej. art_1, art_2a)
directionNofrom (salientes), to (entrantes) o both (predeterminado)
limitNoMáximo de resultados por dirección (predeterminado 50, máximo 200)

Ejemplos

Herramientas SPARQL en 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

Herramientas basadas en 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

Fuente de datos

Todos los datos provienen de la plataforma Fedlex de la Cancillería Federal Suiza a través de:

  • Endpoint SPARQL: https://fedlex.data.admin.ch/sparqlendpoint
  • Ontología: JOLux (basada en FRBR, ELI)
  • Formatos disponibles: PDF, HTML, XML (Akoma Ntoso, desde 2022), DOCX
  • Cobertura: Todos los textos de la Recopilación Sistemática (RS/SR) — leyes, ordenanzas, reglamentos, tratados

Aviso legal

Este proyecto es un servidor MCP independiente y experimental para acceder a información derivada de la plataforma Fedlex de la Cancillería Federal Suiza. Se proporciona únicamente con fines técnicos e informativos.

  • Sin asesoramiento legal. Nada producido por este proyecto constituye asesoramiento legal, opinión legal o un sustituto del consejo profesional.
  • Sin garantía. Este software se proporciona "tal cual", sin garantía de ningún tipo. Los resultados pueden ser incompletos, inexactos, no disponibles, mal analizados o desactualizados.
  • Verifique con fuentes oficiales. Los usuarios deben verificar de forma independiente todos los textos legales, referencias, metadatos y conclusiones contra la fuente oficial de Fedlex antes de confiar en ellos.
  • Úselo bajo su propio riesgo. El autor no asume responsabilidad ni obligación por errores, omisiones, tiempo de inactividad, mala interpretación de materiales legales o cualquier consecuencia directa o indirecta derivada del uso de este proyecto.
  • Dependencia de fuentes de terceros. La disponibilidad y la corrección dependen en parte de los servicios, formatos de datos y condiciones de red de Fedlex, que pueden cambiar sin previo aviso.

Al usar este proyecto, usted acepta que es una herramienta de mejor esfuerzo y no un sistema legal autoritativo de registro.