up-law-argleg-mcp
# up-law-argleg-mcp
Servidor MCP que expone el corpus legal de la base `up_law_argleg_db` (legislacion
nacional argentina + jurisprudencia CSJN + tratados internacionales de
Cancilleria) a Claude, con **proveniencia
verificable en cada respuesta**: el abogado puede rastrear cada texto al
documento oficial capturado (sha256 + fecha + URL de InfoLEG) y auditar
cualquier cita textual con el tool `verificar_cita`.
## Requisitos
- Docker Desktop (Postgres 16 + pgvector via docker compose del proyecto infoleg)
- Python >= 3.12 y [uv](https://docs.astral.sh/uv/)
- La base `up_law_argleg_db` cargada (ver proyecto hermano `../infoleg`)
## Instalacion (macOS / Windows)
```bash
# 1. base con pgvector (en el proyecto infoleg)
cd ../infoleg && docker compose up -d
# 2. dependencias
cd ../mcp-v2 && uv sync
# 3. schema mcp + roles (idempotente)
uv run up-law-argleg-mcp setup-db
# 4. embeddings (primera vez: 2-4 h; incrementales: minutos)
uv run up-law-argleg-mcp index
# 5. smoke
uv run up-law-argleg-mcp status
```
## Claude Desktop
Agregar a `claude_desktop_config.json`
(macOS: `~/Library/Application Support/Claude/`,
Windows: `%APPDATA%\Claude\`):
```json
{
"mcpServers": {
"up_law_argleg": {
"command": "uv",
"args": ["run", "--directory", "/RUTA/ABSOLUTA/a/mcp-v2", "up-law-argleg-mcp", "serve"]
}
}
}
```
En Windows la ruta usa barras invertidas escapadas: `C:\\Users\\...\\mcp-v2`.
## Servidor HTTP (clientes remotos)
Ademas del modo stdio, el servidor puede exponerse por **Streamable HTTP**
(el transporte que aceptan los conectores remotos de claude.ai y el parametro
`mcp_servers` de la API):
```bash
uv run up-law-argleg-mcp serve-http # 127.0.0.1:8000
uv run up-law-argleg-mcp serve-http --host 0.0.0.0 --port 9000
```
El endpoint MCP queda en `http://HOST:PORT/mcp`, en modo stateless (apto para
escalar horizontalmente). Configuracion via `.env`:
- `HTTP_HOST`, `HTTP_PORT`: interfaz y puerto de escucha.
- `HTTP_ALLOWED_HOSTS`: lista JSON de dominios publicos aceptados en el header
`Host` al desplegar detras de un proxy (p.ej. `'["mcp.ejemplo.ar"]'`); vacia
= solo localhost, proteccion DNS-rebinding default del SDK.
- `HTTP_RATE_RPM`, `HTTP_RATE_BURST`: rate limit por IP (token bucket, default
120 rpm / burst 20; `HTTP_RATE_RPM=0` lo desactiva). Al exceder responde 429
con `Retry-After`.
- `DB_POOL_MAX`: conexiones simultaneas maximas del pool de lectura (default 10).
Las consultas a la base van por un pool de conexiones (`psycopg_pool`), asi que
multiples clientes concurrentes se atienden en paralelo.
## Operacion
- Tras cada sync mensual del ETL infoleg: `uv run up-law-argleg-mcp index`.
- `uv run up-law-argleg-mcp status` muestra frescura y cobertura.
- Tests: `uv run pytest` (unit) | `uv run pytest -m live` (requiere base) |
`uv run pytest -m model` (carga el modelo de embeddings).
## Garantia de fidelidad
- El servidor se conecta con un rol **de solo lectura** (`mcp_reader`).
- Los tools devuelven texto **verbatim**; el servidor jamas resume.
- Cada texto viaja con bloque `fuente` (sha256 del documento oficial, fecha de
captura, URL, offsets).
- `verificar_cita` confirma si una cita existe literalmente en el corpus, y
detecta citas casi-correctas mostrando el diff contra el texto real.
- La base no determina **vigencia**: expone el grafo de modificaciones y las
observaciones de InfoLEG; el analisis juridico es del profesional.
## Créditos
Proyecto de la **Facultad de Derecho de la Universidad de Palermo** — **Palermo E-Law / Innovation Hub**.
Equipo: Hernán Quadri, Juan Cruz Romano, Aníbal Ramírez y Guido Barosio.
TDQS
Scored across 13 tools
Each tool targets a distinct operation and document type: buscar for search, leer for reading literal text, obtener for metadata, plus specialized tools for modifications, corpus status, and citation verification. No overlap.
All tool names follow a consistent verb_noun pattern in Spanish: buscar_ (search), leer_ (read), obtener_ (get). Exceptions like modificaciones, estado_corpus, and verificar_cita are nouns or verb+noun but are clearly differentiated and fit the domain.
With 13 tools, the server covers all essential operations for legal research (search, read, metadata, modifications, citation verification) without being overwhelming. Each tool has a clear purpose.
The tool set provides a complete workflow: search across articles, rulings, norms, and treaties; read full literal texts; retrieve detailed metadata; explore modification graphs; verify citations; and check corpus health. No obvious gaps for the intended domain.