juris-sedetc-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TCJ_MERGE | No | Desactiva la integración del inventario histórico con `0`. | 1 |
| TCJ_TIMEOUT | No | Timeout HTTP por request contra la sistematización (en segundos). | 60 |
| TCJ_CACHE_TTL | No | Duración del caché de catálogos (segundos). | 1800 |
| TCJ_TOOL_TIMEOUT | No | Watchdog por tool (5 min máx): toda tool responde aunque un motor cuelgue. | 300 |
| TCJ_UPDATE_CHECK | No | Desactiva el chequeo de versiones con `0`. | 1 |
| TCJ_HISTORICO_BASE | No | Base del inventario histórico de resoluciones. | motor oficial |
| TCJ_HISTORICO_TIMEOUT | No | Timeout HTTP del motor histórico (en segundos). | 40 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| buscar_sentenciasA | Busca en el TEXTO COMPLETO de TODAS las resoluciones del Tribunal Constitucional, COMBINANDO los dos inventarios del TC en una sola vista: (a) la sistematizacion actual (indice Elasticsearch del portal, hasta 2026) y (b) el inventario historico de resoluciones (2001-2018). El server QUITA TILDES del texto (el indice NO matchea acentos) y fusiona las filas con dedup de documento. Args: search: texto a buscar en el contenido del fallo (multi-palabra si funciona en el motor historico; el comodin '' tambien: 'funcionarios'). Con total 0 prueba otra palabra clave o pasa a busqueda_avanzada. page: pagina 1-based (cap de 1000 paginas en ambos inventarios). modo: (inventario historico) 'todas' (contenga TODAS las palabras; default), 'algunas' (contenga ALGUNAS) o 'frase' (la frase completa). Devuelve: {'ok', 'total' (suma de ambos inventarios), 'pagina', 'tamano_pagina' (variable: hasta 20 filas por bloque), 'paginas' (maximo entre inventarios), 'siguiente_pagina', 'filas': [{index GLOBAL, numero_expediente, numero_sentencia?, demandante, demandado, fecha_publicacion, fecha_sentencia?, fecha_ingreso?, sentido?, tipo?, distrito?, sala?, tesaurio?, slug?, url_pdf, extractos/texto}], 'ms', 'nota'?}: las filas del bloque primero vienen de la sistematizacion actual y luego del inventario historico; los documentos repetidos en ambos se omiten (dedup, declarado en 'nota'). El TEXTUAL para fichas completas: detalle_sentencia (si la fila trae 'slug'). |
| busqueda_avanzadaA | Busqueda AVANZADA del TC: texto, expediente, partes, fecha o RANGO, sentido, distrito, sala, tipo y palabras claves por id. COMBINA los dos inventarios del TC en una vista unica: los filtros aplican a ambos cuando tienen equivalente (expediente, partes, año de publicacion, tipo de proceso) y al inventario sistematizado cuando son avanzados (sentido, distrito, sala, palabras). Args: search: texto completo (server quita tildes). Si se pasa, el inventario historico se consulta SOLO por texto (su motor no acepta otras combinaciones con texto) y 'modo' define su semantica. numero_expediente: ej '00148-2026-HC'. nombre_demandante: nombre EXACTO de la parte (ej 'Fernando Catalan Contreras'). nombre_demandado: nombre EXACTO de la entidad demandada. fecha_publicacion: 'YYYY-MM-DD' o RANGO con comas ('2020-01-01,2020-12-31'). VERIFICADO: una fecha EXACTA opera como el ANIO COMPLETO (el backend la degrada); para un dia exacto usa rango '2020-01-01,2020-01-01'. sentencia_sentido: id o nombre EXACTO ('Improcedente', 'Fundada en parte'; catalogo listar_filtros categoria='sentidos'). Solo aplica al inventario sistematizado. id_sentencia_distrito: id o nombre ('Lima'; servir listar_filtros categoria='distritos'). Solo aplica a la sistematizacion. id_sentencia_sala: id o nombre ('Sala 1'; categoria='salas'). Solo sistematizacion. id_sentencia_tipo: id o nombre ('Sentencia'; categoria='tipo'). Solo sistematizacion. palabras: ids (o nombres exactos) del catalogo de palabras (listar_palabras), separados por coma ('1,3'). Solo sistematizacion. proceso: tipo de proceso del inventario historico ('Amparo', 'Habeas Corpus', 'Cumplimiento', 'Inconstitucionalidad', 'Conflicto de Competencia', 'Habeas Data', 'Queja'; catalogo listar_filtros categoria='procesos'). Se ignora si 'search' esta presente. modo: 'todas' | 'algunas' | 'frase' (para el texto en el inventario historico; default 'todas'). page: pagina 1-based (sin cap practico en la sistematizacion; el inventario historico no pasa de 1000 paginas). Devuelve: {'ok', 'total' (suma de inventarios), 'pagina', 'tamano_pagina' (variable), 'paginas', 'siguiente_pagina', 'filas': [{index GLOBAL, slug, numero_expediente, numero_sentencia, demandante, demandado, fecha_publicacion, fecha_sentencia?, fecha_ingreso?, sentido?, tipo?, distrito?, sala?, sistematizacion?, tesaurio?, tipo_resolucion?, url_pdf, texto? (inventario historico: sin 'extracto')}], 'ms', 'nota'?}: bloque con filas de la sistematizacion primero y del inventario historico despues; dups omitidos ('nota'). |
| resultados_sistematizacionA | Resultados por concepto SISTEMATIZADO del TC (la vista 'sistematizacion' del portal): precedentes vinculantes, tipos de proceso (habeas corpus, amparo, cumplimiento...), y las sub-categorias del arbol. Los 'id' EXACTOS vienen de listar_sistematizaciones. Args: sistematizaciones: id(s) separados por coma ('268' = Habeas corpus; '1' = Precedentes vinculantes; varios: '268,269'). search: texto adicional a filtrar dentro de esa sistematizacion (server quita tildes). numero_expediente: filtra por expediente adicional (ej '00148-2026-HC'). page: pagina 1-based. Devuelve: {'ok', 'total', 'pagina', 'tamano_pagina', 'paginas', 'siguiente_pagina', 'filas': [filas comunes], 'ms', 'nota'?}: 'index' GLOBAL y 'slug' para detalle_sentencia. |
| resultados_tesauroA | Resultados por concepto del TESAURO del TC (acumulados con 'count' por nodo; el id viene del arbol de listar_tesauro). 'Derecho a la vida' (id de tesauro=sentencias), autos de tutela de derechos, interlocutorias. Args: tesaurios: id(s) separados por coma del arbol ELEGIDO (ej '4' = Derecho a la vida; '1,2' = multi). tipo: 'sentencias' (default), 'autos' o 'interlocutorias' (EXACTO). page: pagina 1-based. Devuelve: {'ok', 'total', 'pagina', 'tamano_pagina', 'paginas', 'siguiente_pagina', 'filas': [filas comunes], 'ms', 'nota'?}: ATENTO: el 'total' cuenta los documentos asignados DIRECTAMENTE al nodo; el 'count_subarbol' de listar_tesauro es el ACUMULADO de todo el subarbol (publicado por el TC) y NO coincide en nodos agregados (ej: raiz 63493 vs total directo 7; hoja '4' si cuadra con 50). |
| detalle_sentenciaA | FICHA COMPLETA de una sentencia/auto/interlocutoria del TC por slug: expediente, sentencia, demandante/demandado, fechas, sentido, contexto de sala, tesaurio de conceptos y fundamentos COMPLETOS (la decision integral; NUNCA truncada) y URL del PDF del TC. Args: slug: el 'slug' de filas de los buses (ej '00148-2026-hc-1440-2026'). Devuelve: {'ok', 'slug', 'detalle': {todo el contenido publicado por el TC para esa resolucion (con 'fundamentos' COMPLETOS y 'url_archivo'/PDF)}, 'ms', 'nota'?}. |
| listar_tesauroA | Arbol de conceptos del TESAURO del TC NAVEGABLE (el arbol completo puede exceder el limite de contexto del cliente: NUNCA se entrega de un bote; se navega). SIN parent_id devuelve las RAICES (nivel 1) con su 'count_subarbol' (acumulado de todo el subarbol). Con parent_id devuelve el SUBARBUS del nodo hasta 'depth' niveles. Args: tipo: 'sentencias' (default), 'autos' o 'interlocutorias'. parent_id: id del nodo padre (de una respuesta previa); omitido/'' = raices del arbol. depth: niveles de children a incluir bajo el parent (1..4; default 1; cap local a 4). Devuelve: {'ok', 'tipo', 'parent_id', 'depth', 'nodos': [{id, nombre, slug, code, count_subarbol, children? (si depth>1)}], 'ms', 'nota'?}: cada nodo trae 'count_subarbol' (el TOTAL ACUMULADO del subarbol, publicado por el TC) y 'nota' cuando el nodo no existe o no tiene children. IMPORTANTISIMO: los 'count_subarbol' del arbol NO son el 'total' de resultados_tesauro (que cuenta solo asignaciones DIRECTAS al nodo): el acumulado suma todo el subarbol. El 'code' del TC puede NO cuadrar con la posicion del nodo (dato upstream inconsistente, ej nodo 458 con code 6.6.7 colgando de la rama 1.1.2): NAVEGA por 'id', nunca reconstruyas la ruta por 'code'. |
| listar_sistematizacionesA | Arbol COMPLETO de la SISTEMATIZACION del TC (6 ramas tematicas con children por tipo/nodo). Usa los 'id' en resultados_sistematizacion (ej '1' = Precedentes vinculantes, '268' = Habeas corpus). Devuelve: {'ok', 'sistematizacion': [{id, nombre, slug, children: [...]}], 'ms'}. |
| listar_palabrasA | Catalogo de PALABRAS CLAVES del TC (29 603 exactas) con filtrado LOCAL por letra inicial o por contenido (sin acentos). Usa los 'id' en busqueda_avanzada(palabras='1,3'). Args: letra: letra inicial (ej 'a'); filtrado LOCAL (el backend no filtra). contiene: sub-cadena a buscar (LOCAL; sin acentos: la comparacion es case-insensitive). page: pagina del resultado FILTRADO (100 palabras por pagina). paginas: paginas consecutivas a traer en UNA llamada (1..3; si buscas mas hay 'nota' de recorte). Devuelve: {'ok', 'total_filtradas', 'pagina', 'paginas_filtradas', 'tamano_pagina': 100, 'siguiente_pagina', 'palabras': [{id, nombre, slug}], 'ms', 'nota'?}. |
| listar_filtrosA | Catálogo EXACTO para busqueda_avanzada: 'tipo' (tipos de resolucion, 224 registros), 'distritos' (115), 'salas' (5), 'sentidos' (417 con patron ES 'search_elastic'), 'tipos_tesauro' (3) y 'procesos' (los 7 tipos de proceso del inventario historico). 'todos' trae SOLO el recuento de cada catalogo. Las categorias de detalle se PAGINAN localmente (100 valores por pagina; la respuesta de sentidos completa pesa ~86 KB y puede ser truncada por el cliente: usa page). Args: categoria: 'todos' (resumen de counts) o 'tipo', 'distritos', 'salas', 'sentidos', 'tipos_tesauro', 'procesos'. page: pagina del detalle (1-based; 100 valores por pagina; solo aplica a categorias de detalle). paginas: paginas consecutivas a traer en UNA llamada (1..3; si pides mas hay 'nota' de recorte). Devuelve: {'ok', 'categoria', 'valores': [{id, nombre, slug, search_elastic?(sentidos)}], 'total', 'pagina', 'paginas_filtradas', 'siguiente_pagina'?, 'ms', 'nota'?}: los 'id' alimentan busqueda_avanzada; los nombres son EXACTOS (el server resuelve id con nombre/slug). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 9 tools
The three retrieval tools overlap heavily: buscar_sentencias, busqueda_avanzada and resultados_sistematizacion all query the same two TC inventories with text/keyword filters, so an agent must read long prose to decide which to call. The descriptions do provide explicit disambiguation hints (text-only vs. multi-filter vs. concept id, and cross-references between tools), which keeps it usable but not clean. listar_tesauro/listar_sistematizaciones/listar_filtros are clearly distinct, so only the search cluster is ambiguous.
All names are lowercase snake_case Spanish, and clear families emerge: listar_* for catalog/tree navigation (4 tools) and resultados_* for filtered result sets (2 tools). Minor deviations exist — buscar_sentencias (verb) vs. busqueda_avanzada (noun) vs. detalle_sentencia (noun) — but the pattern is still predictable and readable.
Nine tools is well-scoped for a jurisprudence search server with two inventories, two concept trees (tesauro and sistematizacion), a keyword catalog and a filter catalog. Each tool has a clear job and none feels like filler.
The surface covers the full read-only lifecycle: discovery (filtros, palabras, sistematizaciones, tesauro trees), search (full-text and multi-filter), and full-record retrieval via slug with PDF URL. Minor gaps: no way to fetch or page through PDF/binary content, and the heavy overlap between the three search tools suggests the surface could be consolidated rather than extended.