Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BOME_NAVAJA_PDF_DIRNoChanges only the PDF folder. A relative path is resolved against the working directory; `~` is expanded to the user home directory.
BOME_NAVAJA_DATA_DIRNoChanges the whole data folder (index and, unless otherwise specified, PDF folder). A relative path is resolved against the working directory; `~` is expanded to the user home directory.

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
listar_bomesA

Lista los boletines publicados entre dos fechas (calendario de bomemelilla.es y, antes de 2021-03-13, también el catálogo del portal antiguo de melilla.es).

Fechas en AAAA-MM-DD o DD/MM/AAAA, ambas incluidas. Por defecto, los últimos 30 días hasta hoy. Devuelve como máximo 500 boletines, del más reciente al más antiguo; si hay más, 'truncado' es true y 'total' dice cuántos hay: acota el rango. Cada boletín trae cve, number, date, extraordinary (BOME-BX), title, url y origen ("bomemelilla.es" o "melilla.es"). Si el rango llega antes del 2021-03-13 se añaden los boletines que solo tiene el portal antiguo (a bomemelilla.es le faltan muchos antes de 2018 y no tiene nada antes de 2014); traen dboid y ver_con (ábrelos con ver_bome_antiguo) y 'solo_portal_antiguo' los cuenta. Si un boletín está en los dos, gana bomemelilla.es (ábrelo con ver_bome). Si el portal antiguo no responde, devuelve lo de bomemelilla.es y un 'aviso'. Antes de 2014 los identificadores no son CVE de bomemelilla.es (cve_oficial=false) y pueden repetirse: usa el dboid.

ver_bomeA

Muestra un boletín (BOME-B-AAAA-N o BOME-BX-AAAA-N) con su árbol de artículos.

Estructura: sections (departamento) → consejerias → organismos → articles, cada artículo con cve, number, sumario, url y pdf_url. Antes de finales de 2016 los artículos no tienen sumario. La página del sitio a veces omite artículos; con recuperar_ocultos=true se buscan los huecos de numeración (una petición por hueco) y se devuelven en 'articulos_ocultos'. Para el texto de un artículo usa leer_articulo.

ver_sumarioA

Vista web del sumario de un boletín: lista plana de artículos con su primera página.

Acepta el CVE del boletín (BOME-B/BX) o del sumario (BOME-S/SX). Aviso: en algunos boletines el sumario web es texto libre y se analiza como 0 entradas; en ese caso usa ver_bome, que es la fuente fiable de artículos y sumarios.

resolver_cveA

Devuelve la URL canónica de cualquier CVE (boletín, artículo, sumario o página).

Útil para citar o para saber a qué boletín y artículo pertenece un CVE de artículo (BOME-A-...) o de página (BOME-P-...). Comprueba que la página exista. El resolutor del sitio confunde los extraordinarios con los ordinarios: un BOME-AX se localiza sin él (índice local o calendario del año y páginas de sus boletines extraordinarios; puede costar unas peticiones más) y se comprueba el artículo; para un BOME-PX se devuelve la URL de su PDF, con un aviso. Nunca se da por buena una redirección a un boletín del otro tipo (extraordinario frente a ordinario).

listar_consejeriasB

Consejerías de un departamento, con su id (para filtrar buscar_bomes/buscar_articulos).

El departamento 1 es CIUDAD AUTÓNOMA DE MELILLA, el habitual.

listar_organismosA

Organismos de una consejería, con su id (filtro 'organismo' de las búsquedas en vivo).

leer_articuloA

Texto completo de un artículo (anuncio), página a página.

cve: el CVE del artículo (BOME-A-2026-1051) o el del boletín (BOME-B-...) junto con numero (el número del artículo). Un artículo extraordinario (BOME-AX-...) se localiza sin el resolutor del sitio, que lo confunde con el artículo ordinario del mismo número: se usa el índice local si lo tiene y, si no, el calendario del año y las páginas de sus boletines extraordinarios (puede costar unas peticiones más). Nunca se devuelve un artículo distinto del pedido. Los artículos de 2014-2016 no tienen texto en el sitio: fuente="ninguna" y un aviso. Paginación: devuelve páginas enteras hasta max_caracteres (1000-100000, por defecto 20000), siempre al menos una; una página más larga que max_caracteres se corta ahí (cortada=true). Si 'siguiente' no es null, vuelve a llamar con desde_pagina y desde_caracter de 'siguiente' para continuar; null significa que no queda más.

leer_boletinA

Texto completo de un boletín entero (su PDF) con los metadatos del boletín.

Un boletín ordinario tiene ~35 páginas; lee por tramos. El PDF se descarga una vez y se guarda en caché. Los boletines de 2014-2016 no tienen PDF (fuente="ninguna"): lee sus artículos con leer_articulo. Paginación: devuelve páginas enteras hasta max_caracteres (1000-100000, por defecto 20000), siempre al menos una; una página más larga que max_caracteres se corta ahí (cortada=true). Si 'siguiente' no es null, vuelve a llamar con desde_pagina y desde_caracter de 'siguiente'; null significa que no queda más.

leer_pdfA

Texto del PDF de cualquier CVE: boletín, sumario (BOME-S), artículo (BOME-A) o página (BOME-P / BOME-PX); o, con url en vez de cve, de un PDF del portal antiguo de melilla.es.

Da exactamente uno: cve, o url (solo las URL https://www.melilla.es/mandar.php/... que devuelven buscar_bome_antiguo y ver_bome_antiguo, por página o del boletín entero; se rechaza cualquier otra). Las páginas sin texto extraíble (escaneadas, frecuentes en los boletines antiguos) salen con sin_texto=true y un aviso. Paginación: devuelve páginas enteras hasta max_caracteres (1000-100000, por defecto 20000), siempre al menos una; una página más larga que max_caracteres se corta ahí (cortada=true). Si 'siguiente' no es null, vuelve a llamar con desde_pagina y desde_caracter de 'siguiente'; null significa que no queda más.

descargar_pdfA

Descarga el PDF de cualquier CVE (o, con url, uno del portal antiguo de melilla.es) a la caché local y devuelve su ruta, tamaño, sha256 y número de páginas.

Da exactamente uno: cve, o url (solo las URL https://www.melilla.es/mandar.php/... que devuelven buscar_bome_antiguo y ver_bome_antiguo). El nombre del fichero sale solo del CVE canónico o de la ruta de esa URL (melilla-9-4914-5302_73.pdf); el directorio lo fija BOME_NAVAJA_PDF_DIR (ver estado_servidor). Reutiliza la copia en caché salvo refrescar=true. Límite: 100 MB. Los PDF de 2014-2016 no existen en bomemelilla.es (404): búscalos en el portal antiguo.

buscar_bome_antiguoA

Busca artículos en el portal antiguo del BOME (melilla.es): boletines de 1985 al 12-03-2021, con sumarios de artículos desde ~1991.

Úsalo para cualquier cosa anterior a 2018 (bomemelilla.es está incompleto ahí y no tiene nada antes de 2014). Búsqueda literal de texto en los artículos (3-200 caracteres, sin distinguir mayúsculas; no busca por número de boletín: para eso usa ver_bome_antiguo o listar_bomes). El portal devuelve TODO en una sola página, así que usa términos concretos. Cada artículo trae cve_boletin, fecha, numero, tipo, sumario, ruta (consejería, dirección, sección), paginas (número y url_pdf de cada página: léelas con leer_pdf(url=...)), dboid_boletin y url_ficha. desde/hasta (AAAA-MM-DD o DD/MM/AAAA) filtran por la fecha del boletín después de buscar. Devuelve como mucho limite artículos (por defecto 100, máx. 500) en el orden del portal; 'total' cuenta los que pasan el filtro y 'truncado' dice si hay más: acota el texto o las fechas.

ver_bome_antiguoA

Ficha de un boletín del portal antiguo (melilla.es, 1985 al 12-03-2021): PDF del boletín entero y sus artículos.

Da exactamente uno: cve (BOME-B-AAAA-N o BOME-BX-AAAA-N; se busca en el catálogo del portal) o dboid (el id del portal, como lo dan listar_bomes, buscar_bome_antiguo y los errores de ambigüedad). Antes de 2014 los identificadores tienen forma de CVE pero no son CVE de bomemelilla.es y algunos se repiten: entonces responde boletin_ambiguo con los candidatos (dboid, fecha, sufijo) y hay que repetir con su dboid. Devuelve url_pdf (el boletín entero), y articulos con numero, tipo, sumario, ruta (consejería, dirección, sección) y paginas (url_pdf de cada página). Lee cualquiera de esos PDF con leer_pdf(url=...).

buscar_bomesA

Búsqueda en vivo en el buscador avanzado del sitio: devuelve BOLETINES (10 por página).

texto: frase literal (subcadena, sin tildes ni mayúsculas). ambito: "sumario" (sumarios de artículos, desde finales de 2016) o "contenido" (texto de las páginas, única forma de buscar en 2014-2016). terminos: más frases [{texto, modo: "contiene"|"no_contiene", ambito?}], todas con Y y en el MISMO artículo; el sitio ignora el O, así que se rechaza (usa buscar_articulos). Fechas AAAA-MM-DD o DD/MM/AAAA (por defecto 2014-01-01..hoy). Filtros por id (listar_consejerias/listar_organismos) y números exactos. Para ver qué artículos coinciden usa buscar_articulos o buscar_en_indice.

buscar_articulosA

Búsqueda en vivo de ARTÍCULOS por su sumario: busca boletines en el sitio, abre cada uno y devuelve los artículos cuyo sumario coincide.

Misma semántica que el sitio (subcadena sin tildes ni mayúsculas; Y dentro del mismo artículo) y además admite O: terminos=[{texto, operador: "y"|"o", modo: "contiene"|"no_contiene"}]. Lenta (una petición por boletín, ~0,5 s): acotada por max_bomes (por defecto 20, máx. 100) y max_articulos (por defecto 100, máx. 500); mira 'truncado' y 'total_bomes'. Si el índice local está sincronizado, buscar_en_indice es instantánea. Recupera artículos que la página del boletín omite. Los boletines sin coincidencia local salen en 'bomes_sin_coincidencia'.

buscar_en_indiceA

Búsqueda instantánea de artículos en el índice local de sumarios (sin tocar el sitio).

Requiere haber llamado antes a sincronizar_indice; si el índice está vacío devuelve 0 resultados y un aviso (usa buscar_articulos mientras tanto). Mira 'cobertura' (rango indexado, pendientes, sincronización en curso) antes de afirmar que algo no existe. La sincronización por defecto cubre desde 2018-01-01: 'pendientes' cuenta solo boletines desde esa fecha y pendientes_anteriores_2018 los anteriores del calendario sin indexar (bomemelilla.es está incompleto antes de 2018; esos boletines se consultan mejor en el portal antiguo de melilla.es). Incluye también los boletines del portal antiguo (melilla.es, 1991-2017) una vez sincronizados con sincronizar_indice(origen="melilla.es"): cada artículo trae 'origen' ("bomemelilla.es" o "melilla.es"); en los de melilla.es, url es la ficha del boletín en el portal antiguo, pdf_url el PDF de la página del artículo (léelo con leer_pdf(url=...)), bome_cve el identificador del portal (antes de 2014 no es un CVE de bomemelilla.es) y cve una clave interna MEL--. cobertura.por_origen da lo indexado de cada origen. Un boletín que está en los dos sale una sola vez, del origen con mejor resultado (con sumarios gana; a igualdad, bomemelilla.es). coincidencia: "fragmento" (subcadena, como el sitio: "cese" encuentra "ceses" y "procese") o "palabra" (cada frase debe empezar una palabra: "cese" → cese, ceses, no procese). terminos=[{texto, operador: "y"|"o", modo: "contiene"|"no_contiene"}]; Y dentro del mismo artículo. consejeria: parte del nombre (sin tildes). orden: "fecha" o "relevancia". Pagina con limite (máx. 200) y desplazamiento ('siguiente' da el próximo). Solo cubre sumarios: de bomemelilla.es desde finales de 2016 y del portal antiguo desde ~1991.

estado_indiceA

Estado del índice local de sumarios y de su sincronización (no toca el sitio).

Devuelve boletines indexados / sin sumarios / con error / rotos (páginas que el sitio respondió con error interno dos veces; no cuentan como pendientes), artículos, rango de fechas, pendientes frente al calendario, última sincronización y el progreso de la actual (hechos, total_planificado, eta_segundos). 'pendientes' cuenta solo boletines desde 2018-01-01 (el inicio por defecto de sincronizar_indice); los anteriores del calendario sin indexar (de sincronizaciones antiguas o con un 'desde' anterior) salen aparte en pendientes_anteriores_2018 y no son trabajo pendiente. Úsalo para seguir una sincronización lanzada con sincronizar_indice. Por origen: indice.por_origen cuenta boletines, artículos y fechas de cada origen ("bomemelilla.es" y "melilla.es", el portal antiguo) e indice.ultimas_sincronizaciones guarda el resumen de la última sincronización de cada uno (ultima_sincronizacion es la de bomemelilla.es). 'sincronizacion' es la de este proceso que está en curso (o la última lanzada), de cualquiera de los dos orígenes, con su 'origen'; indice.sincronizacion_en_curso dice qué origen sincroniza ahora cualquier proceso. Estados de la sincronización: en_curso, completado, cancelado, fallido y bloqueado (el sitio nos bloqueó: 403/429/503 o dos peticiones seguidas sin respuesta; lo indexado se conserva y bome-navaja no le pide nada durante reintentar_tras_segundos, ~75 min por defecto: no vuelvas a sincronizar antes; ver 'mensaje'). En 'mensaje' también aparecen las pausas preventivas (por defecto, como mucho 3 respuestas de error del sitio cada 10 minutos) y la sincronización cuenta los boletines que quedaron rotos en 'rotos'.

sincronizar_indiceA

Arranca en segundo plano la sincronización del índice local de sumarios y vuelve al instante.

origen: "bomemelilla.es" (por defecto, el sitio actual) o "melilla.es" (el portal antiguo). Solo corre una a la vez por índice, sea del origen que sea: si ya hay una sincronización en curso (de cualquiera de los dos, en este u otro proceso) devuelve su estado o en_curso_en_otro_proceso con el origen que la ocupa, sin arrancar otra.

origen="bomemelilla.es": recorre el calendario (por defecto 2018-01-01..hoy) del más reciente al más antiguo: indexa los boletines que falten, re-indexa los de los últimos reindexar_recientes_dias días y, si reintentar_errores, los que fallaron. Empieza en 2018 porque antes bomemelilla.es está incompleto e inestable (faltan boletines y sus páginas rotas responden HTTP 500, que el cortafuegos castiga) y apenas tiene texto buscable; los boletines anteriores se consultan mejor en el portal antiguo de melilla.es. Un 'desde' anterior es posible pero no recomendable. Para no saturar el sitio va despacio (~2-3 s entre peticiones) y cada ejecución indexa como mucho max_boletines boletines (por defecto 250, los más recientes; ~15-20 minutos). El rango por defecto (~1100 boletines) necesita varias ejecuciones: si el estado final trae pendientes_tras_limite > 0, vuelve a llamarla más tarde (espaciar las ejecuciones es más amable con el sitio). Es reanudable: si se corta, la siguiente llamada continúa donde quedó. Sigue el progreso con estado_indice; mientras tanto buscar_en_indice da resultados parciales. Si ya hay una en curso (en este u otro proceso) devuelve su estado sin arrancar otra. Solo sincroniza cuando se le pide. El cortafuegos del sitio bloquea la IP tras unas 5 respuestas de error, así que la sincronización admite como mucho 3 cada 10 minutos (si llega al límite hace una pausa preventiva y va más lenta) y espera 30-60 s tras una página rota (valores por defecto; los que están en uso, en estado_servidor, 'ajustes'). Si el sitio la bloquea (403/429/503 o dos peticiones seguidas sin respuesta) termina en estado "bloqueado" y bome-navaja no le pide nada durante reintentar_tras_segundos (~75 min): no la relances antes (terminaría "bloqueado" al instante). Los boletines "rotos" (su página respondió con error interno, HTTP 500, dos veces) se saltan; reintentar_rotos=True los vuelve a pedir: úsalo solo para comprobar si el sitio los arregló, porque cada uno cuesta un HTTP 500 que el cortafuegos del sitio cuenta.

origen="melilla.es" indexa los sumarios de artículos de las fichas de boletín del portal antiguo: por defecto los boletines de 1991-01-01 a 2017-12-31 (antes de 1991 las fichas no traen artículos; desde 2018 manda bomemelilla.es), del más reciente al más antiguo, y se salta los que ya están indexados con sumarios desde cualquiera de los dos orígenes. Una petición por boletín (la ficha, nunca los PDF), igual de despacio (~2-3 s entre peticiones) y con el mismo límite max_boletines (por defecto 250, ~15-20 minutos por ejecución): los ~2.000-2.500 boletines del rango necesitan varias ejecuciones espaciadas (mira pendientes_tras_limite). Es reanudable, reintenta los fallidos si reintentar_errores y los rotos solo con reintentar_rotos. reindexar_recientes_dias no se aplica (el portal está congelado). El portal antiguo tiene su propia guardia (guardia_portal_antiguo): sus errores no cuentan para bomemelilla.es. Rellena también los boletines de 2014-2016 que bomemelilla.es tiene sin sumarios.

cancelar_sincronizacionA

Pide parar la sincronización en curso de este proceso, sea cual sea su origen (bomemelilla.es o el portal antiguo melilla.es: cualquiera de las dos, solo corre una a la vez); termina tras el boletín que esté procesando (o al instante si está en una pausa: preventiva o tras una página rota del sitio).

Devuelve el estado de esa sincronización, con su 'origen'. Lo ya indexado se conserva y una nueva sincronizar_indice (con el mismo origen) continúa desde ahí.

estado_servidorA

Configuración y estado del servidor, sin tocar la red ni crear el índice.

Versión, pid, rutas de datos, PDFs e índice (con el motivo de cada una: variable de entorno, XDG, LOCALAPPDATA...; las rutas relativas en BOME_NAVAJA_* se resuelven contra el directorio de trabajo), si existe el fichero del índice y su estado si ya está abierto, versión de SQLite con FTS5/trigram, URL base y:

  • ajustes: todos los ajustes que marcan cuánto se le pide a los sitios, con las variables de entorno aplicadas (un único juego para bomemelilla.es y el portal antiguo): pausa_sincronizacion_segundos y variacion_sincronizacion_segundos (ritmo de la sincronización), max_boletines_por_ejecucion, pausa_consultas_segundos (herramientas de bomemelilla.es), guardia_max_errores, guardia_ventana_minutos y guardia_enfriamiento_minutos (guardia del sitio), pausa_tras_error_segundos (la pausa tras una página rota va de ese valor al doble, pausa_tras_error_max_segundos), tiempo_espera_segundos; 'variables' dice qué variable BOME_NAVAJA_* fija cada uno, 'avisos' los valores no válidos (se usa el valor por defecto) y 'riesgos' los valores más arriesgados que lo recomendado (se usan igualmente; explícale al usuario el riesgo de bloqueo). Se leen al arrancar: cambiarlos exige reiniciar el servidor.

  • cortesia_segundos (pausa de las herramientas) y cortesia_sincronizacion (pausa, variación aleatoria y máximo de boletines por ejecución, con BOME_NAVAJA_SYNC_DELAY, BOME_NAVAJA_SYNC_JITTER y BOME_NAVAJA_SYNC_MAX_BOLETINES aplicadas, y sus avisos).

  • guardia_sitio: enfriamiento_hasta, segundos_restantes y motivo si el sitio nos bloqueó, durante el cual las herramientas responden sitio_bloqueando; errores HTTP en la ventana (ventana_segundos, 10 minutos por defecto) frente al máximo permitido (max_errores, 3 por defecto): con el cupo lleno las herramientas responden pausa_preventiva; y su fichero estado_sitio.json, compartido por todos los procesos de bome-navaja.

  • Del portal antiguo (melilla.es): url_portal_antiguo, su propia guardia (guardia_portal_antiguo, con su fichero estado_sitio_melilla.json) y la caché de su catálogo (catalogo_portal_antiguo: ruta, existe, fetched_at y número de boletines). La sincronización del portal antiguo (sincronizar_indice con origen="melilla.es") va al mismo ritmo y con el mismo máximo por ejecución que la de bomemelilla.es, con las mismas variables de entorno aplicadas: cortesia_sincronizacion_portal_antiguo (el portal interactivo va a ~1-1,5 s entre peticiones).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.2/5.0

Scored across 19 tools

Disambiguation4/5

Most tools map to distinct resources and actions (view bulletin, search articles, read PDF, sync index), and the descriptions carefully separate live search from local index search and old-portal tools. A few pairs could still be confused at a glance—ver_sumario vs ver_bome and leer_pdf vs leer_boletin/leer_articulo—but the descriptions resolve most ambiguity.

Naming Consistency4/5

Tool names are uniformly snake_case and mostly follow a verb_noun pattern such as ver_bome, buscar_articulos, leer_pdf, and listar_bomes. Minor deviations like estado_indice/estado_servidor and buscar_en_indice break the pure verb-first pattern, but the convention remains readable and predictable.

Tool Count4/5

19 tools is on the high side, but the server covers two distinct portals, a local search index, and PDF/read/download workflows, so each tool has a genuine role. It is slightly above the ideal 3-15 range but not bloated or redundant.

Completeness5/5

The tool surface covers the full reading workflow: listing bulletins, viewing summaries and article trees, reading articles and PDFs, downloading PDFs, resolving CVEs, searching live or in the local index, and synchronizing or canceling index sync. There are no obvious dead ends for the stated archive-search purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues