Skip to main content
Glama

⚖️ 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.

CI Python License

⚠️ 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.

Related MCP server: lawyer-mcp

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+.

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:

{
  "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

claude mcp add leychile -- leychile-mcp

Publicarlo como servicio (HTTP / Docker)

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.

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 · Esquema XML


Desarrollo

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 © 2026 Ian Guiloff.

Available Tools

28 tools
leychile_buscar_en_normaA
Read-onlyIdempotent

Busca una palabra o frase dentro del articulado de una norma y devuelve los artículos.

Ideal para localizar dónde un código regula un tema (p. ej. 'fuero maternal' en el Código del Trabajo) sin descargar todo el cuerpo legal.

Inputs: params (required). Returns: result

leychile_buscar_normasA
Read-onlyIdempotent

Busca leyes, decretos, DFL, códigos y demás normas por palabra clave o materia.

Punto de partida para localizar el idNorma. Cobertura completa y vigente.

Inputs: params (required). Returns: result

leychile_citarA
Read-onlyIdempotent

Interpreta una cita legal en texto libre y devuelve el texto EXACTO citado.

Acepta 'art. 1698 inciso 1° del Código Civil', 'art. 19 N° 12 de la Constitución', 'art. 161 del Código del Trabajo', 'art. 4 de la Ley 19.628', etc. Devuelve el inciso/numeral/letra pedido (o el artículo completo) con su cita forense.

Inputs: params (required). Returns: result

leychile_comparar_articulosB
Read-onlyIdempotent

Recupera 2 a 6 artículos (de una o varias normas) para análisis comparado.

Inputs: params (required). Returns: result

leychile_comparar_versionesC
Read-onlyIdempotent

Compara la redacción de un artículo entre dos versiones (fechas exactas de versión).

Inputs: params (required). Returns: result

leychile_concordancias_articuloA
Read-onlyIdempotent

Extrae las remisiones de un artículo: a qué otros artículos, leyes, códigos y decretos cita.

Útil para mapear la red normativa de un precepto (interpretación sistemática).

Inputs: params (required). Returns: result

leychile_extraer_definicionesB
Read-onlyIdempotent

Extrae las definiciones legales ('para los efectos de esta ley se entenderá por…').

Inputs: params (required). Returns: result

leychile_historia_leyC
Read-onlyIdempotent

Enlaces oficiales a la Historia de la Ley, asociando las leyes modificatorias detectadas.

Inputs: params (required). Returns: result

leychile_indice_sistematicoB
Read-onlyIdempotent

Índice de agrupadores (Libros/Títulos/Capítulos/Párrafos), sin artículos.

Ideal para navegar códigos extensos sin descargar todo el texto.

Inputs: params (required). Returns: result

leychile_linea_tiempo_articuloB
Read-onlyIdempotent

Trayectoria temporal de un artículo: última modificación, versiones y leyes modificatorias.

Inputs: params (required). Returns: result

leychile_listar_articulosC
Read-onlyIdempotent

Índice jerárquico completo (incluye artículos) con fecha de versión por parte.

Inputs: params (required). Returns: result

leychile_listar_categoriasB
Read-onlyIdempotent

Lista las colecciones temáticas curadas por BCN (códigos, leyes frecuentes, etc.).

Inputs: params (required). Returns: result

leychile_listar_codigosA
Read-onlyIdempotent

Lista los códigos de la República con su idNorma (verificado) para acceso directo.

Los marcados sin idNorma se resuelven con leychile_resolver_codigo o búsqueda.

Inputs: params (required). Returns: result

leychile_listar_modificacionesB
Read-onlyIdempotent

Lista las leyes modificatorias (desde notas marginales) de la norma o de un artículo.

Inputs: params (required). Returns: result

leychile_listar_normas_categoriaA
Read-onlyIdempotent

Lista las normas de una categoría temática (ver leychile_listar_categorias).

Inputs: params (required). Returns: result

leychile_listar_transitoriosC
Read-onlyIdempotent

Aísla y extrae los artículos transitorios (gradualidad y reglas de vigencia).

Inputs: params (required). Returns: result

leychile_mapa_procesalA
Read-onlyIdempotent

Conecta un derecho sustantivo con su vía procesal idónea (reenvío sustantivo↔adjetivo).

Verifica en vivo la vigencia de las normas procesales citadas (para no plantear estrategias sobre un procedimiento modificado o derogado).

Inputs: params (required). Returns: result

leychile_normas_recientesB
Read-only

Últimas normas publicadas en el Diario Oficial (novedades legislativas).

Inputs: params (required). Returns: result

leychile_obtener_anexosB
Read-onlyIdempotent

Devuelve los anexos de la norma (p. ej. sentencias del Tribunal Constitucional).

Inputs: params (required). Returns: result

leychile_obtener_articuloC
Read-onlyIdempotent

Texto de un artículo concreto, con su ubicación, fecha de versión y cita forense.

Inputs: params (required). Returns: result

leychile_obtener_fragmentoA
Read-onlyIdempotent

Extrae con precisión forense un inciso, numeral o letra de un artículo.

Ej.: 'inciso segundo del art. 254 del CPC' o 'art. 434 N° 4'. Devuelve solo el fragmento pedido con su cita.

Inputs: params (required). Returns: result

leychile_obtener_metadatosB
Read-onlyIdempotent

Metadatos y estado de vigencia (incluye vacancia legal, texto refundido y N° de versiones).

Inputs: params (required). Returns: result

leychile_obtener_normaA
Read-onlyIdempotent

Texto consolidado y vigente de una norma (o de una versión histórica con id_version).

Si el texto excede max_caracteres, conmuta automáticamente a índice sistemático.

Inputs: params (required). Returns: result

leychile_obtener_versionA
Read-onlyIdempotent

Texto consolidado de una versión histórica EXACTA (idVersion = fecha de versión).

Inputs: params (required). Returns: result

leychile_resolver_codigoA
Read-onlyIdempotent

Resuelve un código chileno por su nombre y devuelve sus metadatos e idNorma.

Útil para obtener el idNorma exacto del Código Civil, Penal, Procesal Penal, de Procedimiento Civil, del Trabajo, Tributario, etc., antes de pedir artículos.

Inputs: params (required). Returns: result

leychile_resolver_ley_por_nombreA
Read-onlyIdempotent

Resuelve una ley por su apodo o nombre de uso común (p. ej. 'Ley Karin', 'Ley Emilia').

Usa un catálogo verificado de apodos; si no está, busca en vivo y ofrece coincidencias.

Inputs: params (required). Returns: result

leychile_sugerir_normas_especialesA
Read-onlyIdempotent

Sugiere las leyes especiales que priman sobre la norma general en un tema (Arts. 4° y 13 CC).

Catálogo curado verificado en vivo; señala el estado de vigencia de cada norma.

Inputs: params (required). Returns: result

leychile_texto_vigente_a_fechaA
Read-onlyIdempotent

Determina cómo estaba redactado un artículo a una fecha dada (control intertemporal).

Para normas procesales agrega la alerta de ultraactividad (actuaciones/plazos ya iniciados).

Inputs: params (required). Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 28 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count4/5

    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.

    Completeness5/5

    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.

    Maintenance

    ActivityStale
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      MCP server that exposes Austrian federal law (Bundesrecht) to LLMs, enabling full-text search, paragraph retrieval, historical versions, statute lookup, BGBl lookups, amendment timelines, and citation searches via the public RIS OGD API.
      MIT
    • F
      license
      A
      quality
      D
      maintenance
      MCP server for Legalize.dev, enabling AI to query and understand legal frameworks across countries via a structured legislation API.
      13
      1
      -
    • A
      license
      A
      quality
      B
      maintenance
      MCP server for searching and fetching metadata of Chilean laws, decrees, and resolutions via the BCN Linked Open Data SPARQL endpoint.
      3
      36 PyPI
      Apache 2.0
    • F
      license
      A
      quality
      B
      maintenance
      MCP server that provides access to Argentine legal documents (legislation, CSJN jurisprudence, international treaties) with verifiable provenance including SHA256 hashes and source URLs, enabling legal professionals to search and verify citations.
      13
      -