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.
| Herramienta | Descripción |
|---|---|
search_legislation | Búsqueda por palabra clave en títulos y abreviaturas de leyes |
list_legislation | Lista toda la legislación vigente (paginada) |
get_legislation | Obtiene metadatos de una ley por número SR o URI ELI |
get_legislation_text | Recupera el texto completo de una ley (HTML o XML) |
get_versions | Lista todas las versiones históricas de consolidación |
get_citations | Grafo 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.
| Herramienta | Descripción |
|---|---|
search_provisions | Búsqueda de texto completo FTS5 en todos los textos de artículos (~100 000 disposiciones) |
lookup_definition | Encuentra definiciones legales formales por término en toda la legislación |
find_eu_references | Leyes suizas que implementan o referencian directivas/reglamentos específicos de la UE |
get_article_citations | Grafo de citas artículo a artículo (qué artículos específicos citan a cuáles) |
get_db_stats | Estadísticas de la base de datos: recuentos, tamaño y marca de tiempo de la última ingesta |
get_article_citationses más preciso queget_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:
| Indicador | Predeterminado | Descripción |
|---|---|---|
--lang | fr | Idioma a ingerir (de, fr, it) |
--concurrency | 5 | Descargas HTML en paralelo |
--db | ./data/fedlex.sqlite | Ruta 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:
- Recupera todas las entradas de
ConsolidationAbstractdesde SPARQL - Resuelve la última consolidación y las URL de descarga por ley
- Descarga y analiza documentos HTML para extraer disposiciones de artículos
- Extrae definiciones legales y referencias cruzadas de la UE por artículo
- Reconstruye el índice de texto completo FTS5
- Recupera aristas de citas a nivel de artículo desde SPARQL y las almacena
- 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 MCPPOST /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ámetro | Requerido | Descripción |
|---|---|---|
sr | Sí | Número SR de la ley |
article | No | Filtrar a un artículo específico por id HTML (p. ej. art_1, art_2a) |
direction | No | from (salientes), to (entrantes) o both (predeterminado) |
limit | No | Má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.