Legalize
Conector oficial del corpus abierto de legislación consolidada de Legalize: lee una ley tal como estaba vigente en cualquier fecha pasada, con el commit de git detrás de la cita.
Documentación
Legalize — el conector MCP para legislación consolidada
Lo que decía una ley en cualquier fecha pasada, con la cita y el commit de git que lo respalda. Tu asistente responde desde el corpus, no desde la memoria.
Conecta tu cliente de IA (Claude, ChatGPT, Cursor, VS Code, Gemini CLI…) a Legalize y pregunta sobre legislación en lenguaje natural. Cada respuesta viene con tres cosas que un modelo no puede inventar:
- 📜 El texto en sí — la ley completa o un artículo completo, nunca un fragmento truncado.
- 🕰️ Una fecha — no solo la redacción actual, sino la versión vigente en el día que indiques.
- 🔗 Una cita y un SHA de git — el commit en el corpus público que contiene esos bytes exactos, para que la otra parte pueda verificar la cita.
Un único endpoint remoto:
https://legalize.dev/mcpRequiere inicio de sesión. Míralo en vivo en legalize.dev/mcp, que siempre muestra la cobertura y el límite actuales.
Conexión rápida
Es un servidor remoto (Streamable HTTP, sin estado). No se instala nada: le das la URL a tu cliente, y el cliente te guía por el inicio de sesión la primera vez que llama a una herramienta.
Un clic, si el tuyo es uno de estos:
Los tres primeros rellenan el nombre y la dirección, y luego te piden confirmar e iniciar sesión. ChatGPT abre su formulario de creación de conectores — no acepta parámetros para el servidor, así que pega https://legalize.dev/mcp tú mismo, con el modo desarrollador activado en Avanzado.
Claude.ai · Claude Desktop (Connectors)
Configuración → Connectors → Añadir conector personalizado → pega https://legalize.dev/mcp.
Claude Code (CLI)
claude mcp add --transport http legalize https://legalize.dev/mcp
Cursor
Usa el botón de arriba, o en ~/.cursor/mcp.json:
{
"mcpServers": {
"legalize": {
"url": "https://legalize.dev/mcp"
}
}
}
VS Code (GitHub Copilot)
Usa el botón de arriba, o en .vscode/mcp.json:
{
"servers": {
"legalize": {
"type": "http",
"url": "https://legalize.dev/mcp"
}
}
}
ChatGPT
Configuración → Connectors → Avanzado → activa modo desarrollador, luego crea un conector y pega https://legalize.dev/mcp. No hay enlace de instalación para este: ChatGPT solo hace deep-link a aplicaciones listadas en su propio directorio, y los conectores personalizados están detrás del modo desarrollador, en Plus o Pro.
Gemini CLI y otros clientes
{
"mcpServers": {
"legalize": {
"httpUrl": "https://legalize.dev/mcp"
}
}
}
Cualquier cliente que hable MCP remoto funciona. Si el tuyo solo habla stdio, haz de puente:
npx mcp-remote https://legalize.dev/mcp
Las herramientas
Nada de esto puede cambiar una ley. El corpus es de solo lectura para el conector: ninguna herramienta altera un texto, una versión o un historial, porque esos provienen de los repositorios git y este servidor no tiene forma de entrar. Las descripciones completas que lee el modelo, con cada argumento y su tipo, las publica en vivo el servidor en ejecución en /mcp/tools.json.
| Herramienta | Qué responde |
|---|---|
list_countries | Qué países están en el corpus y cuántas leyes tiene cada uno. |
search_laws | Encuentra una norma por palabras de su título o por su número oficial. Devuelve el id que usan todas las demás herramientas. |
get_law | Lee lo que dice una norma hoy — el texto completo, o un artículo de ella. |
law_at_date | Lo que decía la norma en un día dado, con el SHA de git detrás de esa versión. |
diff_law | Qué cambió entre dos fechas, como diff unificado de los dos textos. |
reform_history | Qué normas modificaron esta, cuándo, y qué dice cada una que tocó. |
law_stats | Cuán grande es un corpus y cuánto se mueve, antes de profundizar en él. |
El resto gestiona tus propias suscripciones — la única pregunta que el corpus no puede responder, que es avísame cuando esto cambie. Son las únicas herramientas que escriben algo, lo que escriben es la suscripción de tu propia cuenta, y necesitan un plan de pago.
Una regla, dos formas de recibirla. Un webhook publica cada cambio en un servidor que tú ejecutas; un resumen lista un día de ellos en tu bandeja de entrada:
| Herramienta | Qué hace |
|---|---|
preview_webhook | Prueba una regla de suscripción contra los últimos 30 días sin crear nada: cuántos eventos habría entregado, y cuáles. Funciona para cualquiera de las dos entregas — prueba la regla, no el destino. |
create_webhook ✎ | Suscribe un endpoint HTTPS tuyo a cambios de leyes. Limítalo a leyes específicas, a palabras en el título y encabezados de materia, o a países. El secreto de firma no se devuelve: puede falsificar una entrega, y cualquier cosa que devuelva una herramienta queda en la transcripción. Recógelo y rótalo en el panel. |
list_webhooks | Los endpoints que tiene esta cuenta, y el id que usan las otras dos. Los secretos nunca se devuelven. |
set_webhook_enabled ✎ | Pausa uno, o reinícialo. El endpoint, su regla y su historial se conservan. |
delete_webhook ✎ | Elimina uno. Las entregas se detienen, y su historial se va con él. |
create_email_digest ✎ | La misma regla, entregada como un correo al día — la versión que puedes recibir sin ejecutar nada. lang elige el idioma del correo, no el de las leyes. |
list_email_digests | Los resúmenes que recibe esta cuenta, con la regla y el idioma de cada uno, y el id que usan las otras dos. |
set_email_digest_enabled ✎ | Pausa el correo, o reinícialo. Un resumen pausado conserva su lugar: lo que se perdió llega en el primer correo tras reanudarse. |
delete_email_digest ✎ | Detén uno definitivamente. Si se recrea más tarde, empieza desde ese día y el hueco no se envía. |
El resumen va a la dirección propia de la cuenta y no hay argumento para otra. No es una omisión: un destinatario de texto libre convertiría el conector en una forma de enviar correo a otra persona, firmado por nuestro dominio, por orden de un modelo.
Limita la suscripción o dejarás de leerla. Los filtros se combinan con AND, una regla que nunca podría coincidir — un país desconocido, un id de ley que no está en el corpus — se rechaza en lugar de almacenarse, y un filtro de texto alcanza un idioma: las leyes están escritas en el suyo propio, así que proteccion de datos encuentra la ley española y no la portuguesa protecao de dados.
Las marcadas con ✎ se declaran a los clientes con readOnlyHint: false, de modo que un cliente que confirma antes de escribir confirmará antes de estas. Se necesita un plan de pago para crear una; pausar y eliminar nunca lo requieren, en ningún plan, porque la cuenta que más necesita apagar sus entregas es la que acaba de terminar su plan. En un plan sin la función, crear responde con un error estructurado feature_not_available y no crea nada — y tampoco se entrega nada, ni a un endpoint ni a una bandeja, hasta que vuelva. Ninguna entrega es instantánea: los webhooks se firman y se agrupan diariamente (el formato y el verificador), y un resumen es un correo al día — en un día sin coincidencias, ningún correo.
Cada herramienta devuelve el mismo sobre — data, citation, url, source, note — y cada resultado enlaza a su página en legalize.dev. Un fallo a nivel de herramienta es una llamada exitosa cuyo data es un error estructurado que indica qué hacer a continuación, para que el modelo pueda corregirse en lugar de adivinar.
Ejemplos (pregunta a tu asistente)
- "¿Qué decía el artículo 348 bis de la Ley de Sociedades de Capital española en marzo de 2023?"
- "¿Ha cambiado el Code du travail francés en este punto desde 2020? Muéstrame el diff."
- "¿Qué normas han modificado esta ley, y cuándo?"
- "¿Cuánta legislación letona tiene Legalize realmente?"
- "Envíame un correo cada mañana cuando algo sobre protección de datos cambie en España — en español."
Autenticación
Se requiere inicio de sesión; no hay acceso anónimo. Cada llamada está vinculada a una cuenta, y una solicitud no autenticada recibe 401 con el desafío WWW-Authenticate que inicia el flujo OAuth.
Tu cliente descubre el servidor de autorización desde https://legalize.dev/.well-known/oauth-protected-resource, se registra dinámicamente, y te envía a iniciar sesión una vez en el navegador. Después conserva el token y nunca vuelves a ver el protocolo de autenticación. No se pega ninguna clave API en ningún sitio.
Límites
Hay una cuota mensual gratuita y un límite de ráfaga por minuto. Ninguno de los dos números está escrito aquí a propósito — quedarían obsoletos el día que cambien, y un README que miente en silencio sobre un límite es peor que uno que señala hacia él. Ambos se indican, en vivo, en legalize.dev/mcp y legalize.dev/pricing.
Lo que no cambia: superada la cuota mensual, el conector responde quota_exceeded y se detiene hasta que cambie el mes — no se cobra nada y no se corta nada en silencio. Cada país está incluido en todos los planes.
Antes de citarlo
La mayor parte del corpus está consolidada: las modificaciones están integradas en el texto, así que lo que lees es la ley tal como está. Parte no lo está. Un texto publicado tal como se promulgó viene marcado, con las normas que lo modifican nombradas, y nunca como ley vigente — pero la marca solo es útil si la lees antes de pegar la cita en un escrito.
Tres límites más que conviene conocer:
- Una fecha se resuelve a lo que se publicó en o antes de ella, no a lo que estaba en vigor.
- Los límites de los artículos se derivan emparejando encabezados en el texto, no se publican como estructura por la fuente. Cita el ancla y verifica el límite antes de confiar en él.
- Los recuentos son de lo que Legalize ha ingerido, no de lo que el boletín oficial ha publicado. Un hueco en el corpus no es prueba de que una norma no exista.
Un cuerpo nunca se trunca: una ley demasiado grande para enviarse completa vuelve como su tabla de contenidos con instrucciones para volver a preguntar, porque medio artículo se lee exactamente igual que uno entero.
Para desarrolladores
El transporte es Streamable HTTP, sin estado. Cada método JSON-RPC necesita un token, incluidos initialize y tools/list. Así que lo primero que hay que comprobar es el catálogo, que se sirve junto al endpoint como un GET simple y no necesita nada:
curl -s https://legalize.dev/mcp/tools.json | jq '.tools[] | {name, readOnly}'
Eso es lo que lee un directorio, y es donde se publica readOnly por herramienta. El propio endpoint JSON-RPC responde 401, y ese 401 es el protocolo de autenticación — su cabecera WWW-Authenticate es lo que le dice al cliente dónde está el servidor de autorización:
curl -si -X POST https://legalize.dev/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_countries","arguments":{}}}' | head -20
# 401 + WWW-Authenticate: Bearer ... resource_metadata="..." ← correct: that is the handshake
Una vez iniciada la sesión, la misma llamada responde con el payload de la herramienta.
Qué hay detrás de los datos
Legalize construye un repositorio git público por país: cada ley es un archivo Markdown, y cada reforma que contiene es un commit fechado. De ahí viene el SHA en una respuesta — es un commit en un repo público, no un identificador acuñado para la respuesta.
Cuando un corpus empieza más tarde que la ley que contiene — una fuente que publica sus textos consolidados desde 1996, por ejemplo, para un código de 1885 — reform_history lo dice en history, y pedir una fecha anterior es un simple "el corpus empieza en X", nunca un reintento.
Pregunta qué decía la Ley de Sociedades de Capital española en marzo de 2023 y la respuesta lleva el commit
3b9aea8d5 de legalize-dev/legalize-es:
git show 3b9aea8d5:es/BOE-A-2010-10544.md
devuelve ese archivo: el texto que entrega el conector, bajo el frontmatter YAML donde el corpus guarda sus metadatos. El conector alcanza cada país que Legalize publica — la lista en vivo, con el tamaño de cada corpus, está en legalize.dev y desde la herramienta list_countries.
Más
- 🌐 Web: legalize.dev — explora el corpus, gratis, sin cuenta.
- 🔌 Este conector, en línea: legalize.dev/mcp
- 🧾 API REST: legalize.dev/api — los mismos datos por HTTP.
- 💶 Precios: legalize.dev/pricing
- 🛠️ Pipeline y corpus: github.com/legalize-dev/legalize — código abierto.
Acerca de Legalize
Legalize convierte gacetas oficiales en git: legislación consolidada como Markdown, un commit por reforma, un repositorio por país. Este repositorio documenta su conector MCP — la superficie con la que un asistente de IA interactúa.
legalize.dev · licencia MIT