LeyChile MCP
# ⚖️ LeyChile MCP
**Servidor MCP (Model Context Protocol) que conecta a Claude — u otra IA compatible — en vivo y directamente con _Ley Chile_, el sistema de legislación de la Biblioteca del Congreso Nacional de Chile (BCN).**
Convierte el ordenamiento jurídico chileno en herramientas de nivel **forense**, pensadas para el estudio y la práctica de estudiantes de Derecho, abogados litigantes y jueces: buscar normas, leer el texto vigente, **citar con precisión incisos/numerales/letras**, controlar la **vigencia intertemporal**, comparar versiones, aislar transitorios, mapear especialidad y vías procesales, y razonar con prompts jurídicos guiados.
[](https://github.com/IanGuiloff/leychile-mcp/actions)


> ⚠️ **Herramienta no oficial**, sin afiliación con la BCN. Los textos provienen de Ley Chile. **No constituye asesoría jurídica**: verifique siempre contra la fuente oficial. Es una ayuda metodológica; el criterio jurídico es del profesional.
---
## ¿Por qué este servidor?
A diferencia de un volcado estático y parcial, **LeyChile MCP consulta a BCN en cada llamada**, por lo que entrega la **versión consolidada y vigente** de cada norma, con cobertura completa del ordenamiento (leyes, decretos, DFL, códigos, resoluciones). Está en español, con **citas verificables** y enlace oficial.
## Arquitectura en 3 capas (honesta)
La API de BCN entrega **datos**, no juicios jurídicos. Para no “alucinar derecho”, el servidor separa:
| Capa | Qué es | Fuente de verdad |
|------|--------|------------------|
| **A — Datos** | Recuperación y parsing determinista del XML de BCN | `obtxml` (BCN, en vivo) |
| **B — Conocimiento** | Catálogos curados y verificados (códigos, especialidad, reenvíos procesales) | Tablas mantenidas + verificación de vigencia en vivo |
| **C — Razonamiento** | *Prompts* que guían el análisis usando A+B | El modelo, citando A/B |
Así, los datos los aporta BCN; el método lo aportan los prompts; y toda conclusión queda anclada a normas citadas.
---
## Características destacadas
- 🔎 **Búsqueda** por palabra clave o materia que **rankea el cuerpo legal** (Ley/Código) sobre modificaciones y actos administrativos, con filtros por **tipo, año y `excluir_modificaciones`**.
- 📄 **Texto consolidado y vigente** de cualquier norma (por idNorma o N° de ley).
- 🧷 **Segmentación forense**: extrae el **inciso**, **numeral** o **letra** exactos (p. ej. “art. 254 inciso segundo del CPC”, “art. 434 N° 4”).
- 🔤 **Artículos con sufijo**: `183-A`…`183-E` CT, `27A` LSA, `145 bis E`, `157 TER`, `4 bis`. La cita forense usa guion y LeyChile nombra con espacio: ambas formas resuelven al mismo artículo. Y un artículo con sufijo **nunca** resuelve al base — antes `183-B` devolvía el 183 con la cita «Art. 183», que en una herramienta anti-alucinación es el peor modo de fallo posible.
- 🕰️ **Vigencia intertemporal**: cómo estaba redactado un artículo **a una fecha dada**, versión histórica exacta (`idVersion`), línea de tiempo y **comparación de versiones**.
- ⚖️ **Alerta de ultraactividad procesal**: avisa cuando, en normas adjetivas, los plazos o actuaciones ya iniciados podrían regirse por la ley antigua.
- 📘 **Texto refundido** e instrumento fijador; **vacancia legal** (publicada pero no vigente).
- 🧩 **Transitorios**, **definiciones legales** y **anexos** (p. ej. sentencias del Tribunal Constitucional) aislados.
- 🔗 **Modificaciones** desde notas marginales e **Historia de la Ley** con las leyes modificatorias.
- 🗂️ **Índice sistemático** anti-desborde para códigos extensos y **categorías** temáticas de BCN.
- 🧠 **Capa de conocimiento**: resolución de **códigos** por nombre, **mapa de especialidad** (arts. 4° y 13 CC) y **reenvíos sustantivo↔adjetivo** con verificación de vigencia de la vía procesal.
- ⚙️ **Razonamiento jurídico ejecutable** (PYTHEN, determinista): reglas derrotables *exception-first* (`leychile_razonar`, `leychile_evaluar_regla`) y **cascada de antinomías** lex superior › specialis › posterior (`leychile_resolver_antinomia`).
- 🪶 **Modo `compacto`** (`response_format=compacto`): salidas mínimas que ahorran ~50 % de tokens al explorar.
- 🌐 **Entrar al BCN** (opcional, DrissionPage/Chrome): renderiza páginas JavaScript que la API no expone —Historia de la Ley, jurisprudencia— con `leychile_bcn_extraer`.
- 💬 **6 prompts jurídicos**: antinomías, ratio legis, derogación orgánica, vigencia intertemporal, minuta de alegato y mapa normativo del caso.
- 📌 **Citas en texto libre**: pega «art. 1698 inc. 1° del Código Civil» y obtén el texto exacto (`leychile_citar`).
- 🔦 **Buscar dentro de una norma** (`leychile_buscar_en_norma`) y **concordancias/remisiones** de un artículo (`leychile_concordancias_articulo`).
- 🏷️ **Leyes por nombre popular**: «Ley Karin», «Ley Emilia», etc. (`leychile_resolver_ley_por_nombre`).
- 🛡️ Resiliencia: User-Agent de navegador (anti-403), failover de hosts BCN, caché diaria, reintentos, plegado de acentos.
- 🔌 Transporte **stdio** (local) y **streamable-HTTP** (servicio).
---
## Instalación
Requisitos: **Python 3.10+**.
```bash
git clone https://github.com/IanGuiloff/leychile-mcp.git
cd leychile-mcp
pip install -e .
```
Esto deja disponible el comando `leychile-mcp`.
### Uso en Claude Desktop
Edita el archivo de configuración (`%APPDATA%\Claude\claude_desktop_config.json` en Windows; `~/Library/Application Support/Claude/claude_desktop_config.json` en macOS) y agrega:
```json
{
"mcpServers": {
"leychile": { "command": "leychile-mcp" }
}
}
```
Reinicia Claude Desktop: aparecerán las herramientas `leychile_*`. (Ver `examples/claude_desktop_config.json` para la variante sin instalar.)
### Uso en Claude Code
```bash
claude mcp add leychile -- leychile-mcp
```
### Publicarlo como servicio (HTTP / Docker)
```bash
leychile-mcp --transport http --host 0.0.0.0 --port 8000 # endpoint: http://host:8000/mcp
# o con Docker:
docker build -t leychile-mcp . && docker run -p 8000:8000 leychile-mcp
```
---
## Ejemplos (en lenguaje natural a la IA)
- “Tráeme el **inciso segundo del artículo 254 del Código de Procedimiento Civil**.”
- “Resuelve la cita: **art. 19 N° 12 de la Constitución**.”
- “Busca **‘fuero maternal’** dentro del **Código del Trabajo**.”
- “¿A qué artículos y leyes **remite** el art. 23 de la Ley 19.628?”
- “¿Qué ley es la **‘Ley Karin’**?”
- “¿Cómo estaba redactado el **artículo 17 de la Ley 19.628 el 1 de enero de 2005**?”
- “**Compara** el artículo 17 de la Ley 19.628 entre 2010 y hoy.”
- “Dame los **artículos transitorios** del Código del Trabajo.”
- “¿Qué **leyes especiales** priman en materia de **consumo**? ¿Siguen vigentes?”
- “¿Cuál es la **vía procesal** para una **acción reivindicatoria**?”
- “Arma una **minuta de alegato** sobre término de contrato de arrendamiento urbano.”
---
## Herramientas y prompts
34 herramientas (búsqueda con ranking, texto, fragmentos anidados, vigencia/vacancia, versiones, transitorios, modificaciones, definiciones, anexos, categorías, códigos, especialidad, vía procesal, Historia de la Ley, **razonamiento jurídico ejecutable** y **navegador BCN**) y 6 prompts jurídicos. Referencia completa en **[docs/HERRAMIENTAS.md](docs/HERRAMIENTAS.md)**.
Todas las herramientas aceptan `response_format` = `markdown` (por defecto), `json` o **`compacto`** (markdown mínimo, ~50 % menos tokens). Las de texto aceptan `formato_texto` = `limpio` (quita notas marginales) u `original`.
---
## Cómo funciona
Usa el servicio abierto `obtxml` de Ley Chile:
- Búsqueda: `obtxml?opt=61&cadena=…&cantidad=…`
- Norma consolidada: `obtxml?opt=7&idNorma=…` (`&idVersion=YYYY-MM-DD` para texto histórico exacto)
- Recientes: `opt=3` · Categorías: `opt=30` · Normas por categoría: `opt=6`
El XML se parsea preservando la jerarquía oficial (Libros/Títulos/Capítulos/Párrafos/Artículos) y la **fecha de versión por artículo**, base del control intertemporal.
Documentación de la fuente:
[Servicios web de Ley Chile](https://www.leychile.cl/Consulta/legislacion_abierta_web_service) ·
[Esquema XML](https://www.leychile.cl/esquemas/accesoLeyesChilenas4.pdf)
---
## Desarrollo
```bash
pip install -e ".[dev]"
pytest -q
```
Estructura del paquete: `client.py` (HTTP), `parser.py` (XML y numeración de artículos), `citas.py` (citas en texto libre), `segmenter.py` (incisos/numerales/letras), `timeline.py` (vigencia intertemporal), `catalog.py` (capa B), `prompts.py` (capa C), `razonamiento/` (PYTHEN: reglas derrotables y antinomías), `browser.py` (navegador BCN, opcional), `formatting.py` (salida + citas), `service.py` (orquestación), `server.py` (FastMCP).
> El vocabulario de sufijos de artículo (`SUFIJOS_LATINOS`, `SUFIJO_LETRA`) vive en `parser.py` y lo
> importa `citas.py`: los dos módulos deben coincidir, y tenerlo duplicado fue justamente el origen
> del defecto que hacía resolver `183-B` al artículo 183.
---
## Limitaciones
- Depende de la disponibilidad del servicio de BCN (con reintentos, failover y caché).
- `numero_ley` resuelve **leyes**; para otros tipos use `id_norma` o búsqueda.
- La línea de tiempo se deriva del historial observable del texto vigente; para precisión absoluta a una fecha, contraste con la versión oficial.
- `leychile_historia_ley` entrega **enlaces** a la tramitación (no descarga los PDF).
- Las capas B y C son apoyo metodológico curado, **no** dictan derecho.
## Créditos y datos
Datos: servicio público **Ley Chile** de la **Biblioteca del Congreso Nacional de Chile (BCN)**. Proyecto creado y mantenido por **Ian Guiloff**.
## Licencia
[MIT](LICENSE) © 2026 Ian Guiloff.
TDQS
Scored across 28 tools
Every tool has a clearly distinct purpose, from searching norms to retrieving specific fragments to mapping procedural routes. No two tools overlap in functionality, and the descriptions make their unique roles explicit.
All tools follow the consistent pattern 'leychile_verb_noun' using snake_case, e.g., leychile_buscar_normas, leychile_obtener_articulo. This makes the tool set predictable and easy for an agent to navigate.
With 28 tools, the set is larger than the typical well-scoped range, but each tool addresses a specific legal research need (citation, comparisons, timelines, etc.), justifying the count for the complexity of Chilean law. Slightly oversized but still reasonable.
The tool set covers the full lifecycle of legal research: search, retrieval, citation, comparison, history, categorization, and special features like process mapping and definition extraction. No obvious gaps are present for a comprehensive legal MCP server.