1TA MCP Server
README.md
# Conector MCP — Primer Tribunal Ambiental (1TA)
Consulta de causas, expedientes, estado diario y documentos del Primer Tribunal
Ambiental de Chile (Antofagasta). Jurisdicción: Arica y Parinacota, Tarapacá,
Antofagasta, Atacama y Coquimbo.
**No es una variante del conector del Segundo Tribunal.** El 2TA corre sobre
lexsoft; el 1TA usa su propio sistema (SIGC1TA) con backend REST en
`portaljudicial1ta.cl/sgc-ws/rest`. Son APIs distintas.
## Herramientas
| Herramienta | Qué hace |
|---|---|
| `filtros()` | Tipos de causa, estados, años, regiones y actividades económicas. |
| `buscar_causas(texto, anio, tipo, estado, limite)` | Busca sobre el universo consultable (~274 causas, 2017 en adelante). Ignora tildes. |
| `ver_causa(rol)` | Carátula, materia, ubicación, estado final, audiencias, ministros y partes. |
| `expediente(rol)` | Cuadernos → asientos → documentos, con la ruta para descargarlos. |
| `estado_diario(fecha)` | Causas con providencias dictadas ese día. |
| `leer_documento(archivo, paginas)` | Texto del PDF del expediente. |
## Notas de la fuente
- Toda respuesta viene envuelta dos veces: `{"response": "<json string>"}`.
Sin datos, `response` trae la **cadena** `"null"`, no `null`.
- La búsqueda es `POST` con `application/x-www-form-urlencoded`. Con JSON
responde 415 y con GET responde 405.
- El servidor solo filtra por `anioIngreso`; los demás filtros del formulario
son del lado del cliente, así que el conector los aplica en memoria sobre el
listado completo cacheado.
- `lista-participantes` y `lista-ministros-causa` devuelven `[]` en causas
recién ingresadas. No es un fallo del parseo.
- El estado diario del día en curso puede venir vacío hasta que se firma.
- Cada documento existe en dos versiones: `archivo_foleado` (con folio, el que
conviene citar) y `archivo_original`.
- El sitio rechaza clientes que no parecen navegador: el User-Agent de Chrome
no es cosmético.
## Variables de entorno
| Variable | Default | Qué hace |
|---|---|---|
| `TRIBUNAL_1TA_BASE` | `https://www.portaljudicial1ta.cl` | Base del portal |
| `TRIBUNAL_1TA_TIMEOUT_SEG` | `45` | Timeout HTTP |
| `TRIBUNAL_1TA_CACHE_TTL_SEG` | `3600` | Vida de la caché en memoria |
| `PORT` | `8080` | Lo inyecta Railway |
## Despliegue
1. **GitHub**: sube estos archivos a `bawzenit-glitch/1ta-mcp`.
2. **Railway**: New Project → Deploy from GitHub repo → detecta el Dockerfile →
Settings → Networking → Generate Domain (puerto 8080).
3. **Claude**: Personalizar → Conectores → "+" → Agregar conector personalizado
→ `https://TU-DOMINIO.up.railway.app/mcp`.
Verificación: abrir `/mcp` en el navegador debe devolver el error
`Client must accept text/event-stream`. Eso significa que está vivo.
## Local
```bash
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
.venv/bin/python test_parseo.py # tests de parseo, sin red
.venv/bin/python server.py # http://localhost:8000/mcp
```
## Aviso sobre la versión de `mcp`
`requirements.txt` fija `mcp>=1.9.0,<2`. La versión 2.x renombró `FastMCP` a
`MCPServer` y rompe este código. Los conectores anteriores quedaron con
`mcp>=1.9.0` sin tope: al reconstruirse en Railway tomarán la 2.x y fallarán al
arrancar. Conviene agregarles el `<2`.
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues