Skip to main content
Glama
README.md
# 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

A3.8/5.0

Scored across 13 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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.

Maintenance

ActivityMaintained
ResponsivenessSyncing