Skip to main content
Glama
README.md
# elPeruanoMCP

![elPeruanoMCP](assets/banner.png)

![Licencia](https://img.shields.io/badge/licencia-Apache--2.0-blue)
![Python](https://img.shields.io/badge/python-3.10%2B-blue?logo=python&logoColor=white)
![MCP](https://img.shields.io/badge/MCP-compatible-8a2be2)
![Local](https://img.shields.io/badge/local--only-stdio-success)

Servidor MCP **local** para buscar y leer el Diario Oficial El Peruano
(normas, resoluciones, cuadernillos y PDFs) desde tu harness MCP.

> Herramienta **no oficial**: sin afiliacion con EL PERUANO y sin aceptacion
> de contribuciones externas. Ver [Aviso legal](#aviso-legal).

| | |
|---|---|
| Fuente de datos | [busquedas.elperuano.pe](https://busquedas.elperuano.pe) (publico) |
| Almacenamiento | **Ninguno** — el servidor nunca guarda archivos; los PDFs se entregan como URL |

## Instalacion

### Opcion 1: .mcpb (one-click, Claude Desktop)

1. Descarga `elperuanoMCP-0.3.0.mcpb` de la seccion
   [Releases](https://github.com/pipaacebedo/elPeruanoMCP/releases).
2. En Claude Desktop: Ajustes > Extensiones > instalar desde archivo, y
   selecciona el `.mcpb`.
3. Claude Desktop se encarga del entorno y las dependencias por ti.

### Opcion 2: uv (recomendada para desarrolladores)

1. Clona el repo: `git clone https://github.com/pipaacebedo/elPeruanoMCP`
2. Entra a la carpeta: `cd elPeruanoMCP`
3. Instala las dependencias: `uv sync`
4. Lanza el servidor: `uv run elperuano-mcp serve`

### Opcion 3: pip (sin uv)

1. Instala el paquete: `pip install .`
2. Lanza el servidor: `elperuano-mcp serve`

## Conectar el cliente

- **Claude Code**: `claude mcp add elPeruanoMCP -- uv --directory RUTA/elPeruanoMCP run elperuano-mcp serve`
- **ChatGPT**: seccion MCP/connectors de tu setup (config equivalente)
- **Otros harness**: config MCP equivalente (command + args)

```json
"mcpServers": {
  "elPeruanoMCP": {
    "command": "uv",
    "args": ["--directory", "RUTA/elPeruanoMCP", "run", "elperuano-mcp", "serve"]
  }
}
```

Al ser local, no hay autenticacion, tokens ni limites de ningun tipo.

## Herramientas

| Tool | Uso |
|---|---|
| `buscar_dispositivos` | Busqueda full-text con filtros (cuadernillo, fecha, rango) y paginacion; en PC/DJ/JU/CA devuelve `cuadernillos_con_coincidencias` |
| `buscar_por_op` | Puntual por numero de orden de publicacion (NNNNNNN-N) |
| `obtener_dispositivo` | Sumilla, tipo, numero, sector, fechas y texto integral + `pdf_url` |
| `obtener_dispositivo_texto` | Texto por parrafos en rangos (documentos largos) |
| `listar_cuadernillos` | Cuadernillos por fecha, con `pdf_url` de cada uno |
| `descargar_pdf` / `descargar_cuadernillo` | Devuelven la **URL publica** del PDF (no descargan nada) |
| `listar_tipos_publicacion` | Siglas y cuales tipos tienen dispositivos individuales |

## Como consultar

| Necesitas | Como |
|---|---|
| Frase exacta | Entre comillas dobles: `'"prescripcion adquisitiva de dominio"'` |
| Palabras sueltas | El buscador exige **todas** las palabras: usa pocas y clave |
| Puntual por OP | `buscar_por_op("2558398-1")` |
| Un dia puntual | `fecha="20260923"` (acepta `2026-09-23` o `23/09/2026`) |
| Un rango | `fecha_ini` + `fecha_fin` |
| Solo Normas Legales | `cuadernillo="NL"` (siglas: NL, BO, EX, PC, DJ, JU, SE, CA, IN, TU) |
| Jurisprudencia del TC | `cuadernillo="PC"` — el texto integral solo vive en el **PDF del cuadernillo** (`pdf_url`) |

## Variables de entorno (opcionales)

| Variable | Default | Para que |
|---|---|---|
| `EPERUANO_BASE_URL` | `https://busquedas.elperuano.pe` | Origen de los datos |
| `EPERUANO_TIMEOUT` | `60` | Timeout HTTP |
| `EPERUANO_CACHE_TTL` | `300` | Cache en memoria (0 = off) |
| `EPERUANO_CACHE_BYTES` | `32 MB` | Presupuesto de cache por bytes |
| `EPERUANO_CACHE_MAX_ENTRY` | `3 MB` | No cachear paginas mayores a esto |
| `EPERUANO_MAX_PAGINAS` | `20` | Tope de paginas por llamada |
| `EPERUANO_MAX_CONCURRENCY` | `3` | Requests simultaneos hacia el sitio |

## Limitaciones y diseno

| Aspecto | Detalle |
|---|---|
| Filtros web Entidad/Tipo de dispositivo | No aplican server-side: incluye el organismo en `consulta` |
| `total_publicaciones` | Cuenta coincidencias de texto (igual que la web), no dispositivos unicos |
| PC/DJ/JU/CA/IN/TU | Sin dispositivo individual: el texto integral solo vive en el PDF del cuadernillo |
| Streaming | Paginas de busqueda se leen con corte en `</main>` (algunas superan los 100 MB de HTML; lo util es ~40-140 KB) |
| Cortesia | Cache + single-flight + semaforo de concurrencia para no sobrecargar la fuente oficial |

## Aviso legal

- Herramienta de terceros **no oficial**, sin afiliacion con EL PERUANO ni
  con ninguna entidad publica.
- Provista **tal cual**; el autor no responde por el uso que se le de ni
  por la disponibilidad del sitio.
- Los datos son de acceso publico en busquedas.elperuano.pe; respeta la
  fuente: no la uses para scraping masivo.
- **Proyecto personal: no se aceptan contribuciones externas ni se ofrece
  soporte.** Puedes forkarlo y adaptarlo a tu criterio.

## Licencia

[Apache-2.0](LICENSE).