# io.github.jmpdsevilla/bovedia (npm · bovedia)

Memoria personal para Claude Code en notas Markdown; no carga el contexto a ciegas.

- Trust score: 69/100 (medium)
- Change this week: +42
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `bovedia`: 69/100 (this document), [markdown](https://verifymcp.io/servers/jmpdsevilla-bovedia/bovedia.md), [page](https://verifymcp.io/servers/jmpdsevilla-bovedia/bovedia)

## Channel facts

- Registry: `npm`
- Package: `bovedia`
- Version: `2.7.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 8 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 78/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 4167 tokens (~115/item across 36 items; 36 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add jmpdsevilla-bovedia -- npx -y bovedia
```

### Codex

```bash
codex mcp add jmpdsevilla-bovedia -- npx -y bovedia
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "jmpdsevilla-bovedia": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "bovedia"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add jmpdsevilla-bovedia --command npx --arg -y --arg bovedia
```

### Hermes

```yaml
mcp_servers:
  jmpdsevilla-bovedia:
    command: "npx"
    args: ["-y", "bovedia"]
```

### Other

```json
{
  "mcpServers": {
    "jmpdsevilla-bovedia": {
      "command": "npx",
      "args": [
        "-y",
        "bovedia"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 69, +44)

- [security regression] Provenance: unverified → fail
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] License: unverified → pass
- [functional improvement] Schema quality: unverified → excellent
- [functional] Licence: MIT

### 2026-08-01 (score 25, +20)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] MCP protocol: unverified → pass

### 2026-07-31 (score 5, −22)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 27, +21)

- [functional improvement] Tool coverage: unverified → 100

### 2026-07-28 (score 6, −21)

- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 27)

First indexed and scored.

## MCP tools (36)

### `read_note` (~37 tokens)

Leer el contenido completo de una nota. Busca en todas las categorías.

Input parameters:

- `name` (string, required): Nombre de la nota sin extensión .md

### `search_notes` (~145 tokens)

Buscar notas por texto libre. Con múltiples palabras busca notas que contengan TODAS (lógica AND). Busca en títulos, contenido y etiquetas, y no distingue mayúsculas ni acentos: "piramide" y "pirámide" devuelven lo mismo. Los resultados se ordenan por relevancia (título y etiquetas antes que cuerpo) y vienen limitados; usa limit o category para acotar.

Input parameters:

- `category` (string): Acotar la búsqueda a una categoría y sus subcarpetas (opcional)
- `limit` (number): Máximo de resultados. Por defecto 20
- `query` (string, required): Término de búsqueda

### `list_notes` (~227 tokens)

Listar notas con sus metadatos, filtradas opcionalmente por categoría y/o tag. El filtro de categoría es RECURSIVO: incluye la categoría indicada y todas sus subcarpetas. Por ejemplo, category "conocimiento" devuelve las notas sueltas en su raíz Y todas las de subcarpetas como "conocimiento/problemas-resueltos". Para ver la estructura completa de carpetas, usa get_index.

Input parameters:

- `category` (string): Categoría para filtrar (recursiva): devuelve las notas de esa categoría y de todas sus subcarpetas. Usa la categoría raíz (p. ej. "conocimiento") para todo el árbol, o una subcategoría completa (p. e…
- `tag` (string): Etiqueta opcional para filtrar. Busca tanto en los hashtags del cuerpo (#tipo_proceso) como en los tags del frontmatter YAML de las notas antiguas. Se puede escribir con o sin almohadilla.

### `get_index` (~122 tokens)

Obtener el mapa de categorías de la base de conocimiento con el número de notas de cada una. Devuelve solo el árbol, que es barato; el listado nota a nota (caro en bóvedas grandes) hay que pedirlo con full:true y conviene acotarlo con category.

Input parameters:

- `category` (string): Acotar a una categoría y sus subcarpetas (opcional)
- `full` (boolean): Si true, lista además cada nota con sus tags y backlinks. Puede ser muy largo: úsalo junto a category. Por defecto false.

### `write_note` (~350 tokens)

Crear, guardar, anotar, añadir o actualizar una nota en la base de conocimiento (la bóveda). Operación de escritura — úsala cuando quieras guardar contenido nuevo o sobrescribir uno existente, incluyendo notas en la carpeta bandeja-de-entrada. Si la nota ya existe, la actualiza completa (sobrescribe el cuerpo entero). Para retoques puntuales sin reenviar todo, prefiere edit_note, append_to_note, prepend_to_note, update_section o insert_after_section. Usa "name" para actualizar una nota existente por su slug real (útil cuando el título nuevo difiere del nombre de archivo).

Input parameters:

- `category` (string, required): Subcarpeta donde guardar la nota (p. ej. "proyectos", "clientes/nombre-cliente" o "conocimiento/problemas-resueltos"). La estructura de carpetas es libre: usa las categorías que tu trabajo pida. Para…
- `content` (string, required): Contenido en Markdown, sin incluir frontmatter ni el título h1
- `name` (string): Slug del archivo existente a actualizar (sin extensión .md). Úsalo cuando el título no coincide con el nombre de archivo actual. Si se omite, el slug se genera automáticamente desde el título.
- `tags` (array): Etiquetas para el frontmatter YAML. Opcional y desaconsejado: los editores que agrupan por etiqueta no leen el frontmatter, así que la clasificación se pone como hashtags #snake_case en la última lín…
- `title` (string, required): Título de la nota

### `delete_note` (~95 tokens)

Eliminar, borrar o quitar una nota de la base de conocimiento. La nota va a la papelera (fuera de la bóveda), así que se puede recuperar. Avisa si otras notas la referencian con wikilinks.

Input parameters:

- `name` (string, required): Nombre de la nota sin extensión .md
- `permanent` (boolean): Si true, borra definitivamente sin pasar por la papelera. Por defecto false.

### `create_category` (~52 tokens)

Crear una nueva subcarpeta o categoría en la base de conocimiento. Úsala antes de guardar la primera nota en una categoría que aún no exista.

Input parameters:

- `name` (string, required): Nombre de la nueva categoría

### `move_note` (~105 tokens)

Mover, renombrar o reubicar una nota — cambiarla de categoría y/o cambiarle el título. Actualiza automáticamente los wikilinks de otras notas que la referencien.

Input parameters:

- `name` (string, required): Nombre actual de la nota (sin extensión .md)
- `new_category` (string): Nueva categoría/carpeta destino (opcional)
- `new_title` (string): Nuevo título para la nota, si se quiere renombrar (opcional)

### `delete_category` (~44 tokens)

Eliminar o borrar una categoría/subcarpeta vacía. Solo funciona si la carpeta no tiene notas dentro.

Input parameters:

- `name` (string, required): Nombre de la categoría a eliminar

### `edit_note` (~211 tokens)

Editar, modificar, retocar o cambiar una porción concreta de una nota mediante find/replace exacto. Reemplaza old_text por new_text dentro del cuerpo de la nota sin reenviar el archivo entero. Falla si old_text no aparece o aparece más de una vez (ambigüedad). Es la operación más eficiente para correcciones puntuales: una palabra, una línea, una entrada de tabla. Para añadir contenido al final usa append_to_note; para reemplazar una sección entera usa update_section.

Input parameters:

- `name` (string, required): Nombre de la nota sin extensión .md
- `new_text` (string, required): Texto nuevo que sustituye a old_text
- `old_text` (string, required): Texto exacto a reemplazar. Debe ser único en la nota — incluye contexto suficiente si la cadena corta podría aparecer varias veces
- `replace_all` (boolean): Si es true, reemplaza todas las ocurrencias en lugar de fallar por ambigüedad. Por defecto false

### `append_to_note` (~109 tokens)

Añadir, agregar, anexar o concatenar contenido al final del cuerpo de una nota sin tocar el resto. Si la nota termina en una línea de hashtags `#snake_case`, el contenido se inserta antes de los hashtags (preservando la convención de la bóveda). Ideal para notas-bandeja, listas crecientes y logs.

Input parameters:

- `content` (string, required): Contenido Markdown a añadir al final
- `name` (string, required): Nombre de la nota sin extensión .md

### `prepend_to_note` (~83 tokens)

Añadir, insertar o anteponer contenido al principio del cuerpo de una nota (justo después del título h1, antes del resto del contenido). Útil para entradas tipo log invertido donde lo más nuevo va arriba.

Input parameters:

- `content` (string, required): Contenido Markdown a insertar al inicio
- `name` (string, required): Nombre de la nota sin extensión .md

### `update_section` (~168 tokens)

Reemplazar, sustituir o reescribir una sección Markdown entera de una nota, identificada por el título exacto de su encabezado (sin los `#`). La sección abarca desde su encabezado hasta el siguiente encabezado del mismo nivel o superior. Conserva el encabezado original, sustituye solo el contenido entre encabezados. Es markdown-aware: ideal para regenerar tablas grandes, listas o párrafos largos sin tocar el resto del documento.

Input parameters:

- `name` (string, required): Nombre de la nota sin extensión .md
- `new_content` (string, required): Nuevo contenido de la sección, sin incluir el encabezado (que se conserva)
- `section_title` (string, required): Título exacto del encabezado, sin los # iniciales (ej. "Marketing y publicidad")

### `insert_after_section` (~136 tokens)

Insertar, añadir o intercalar una nueva sección Markdown justo después de otra sección existente, identificada por su título. La sección nueva incluye su propio encabezado dentro de new_content. Útil para añadir entradas en orden a un inventario sin reescribir todo el archivo.

Input parameters:

- `after_section_title` (string, required): Título exacto de la sección tras la cual se inserta el contenido nuevo
- `name` (string, required): Nombre de la nota sin extensión .md
- `new_content` (string, required): Bloque Markdown nuevo, normalmente empezando por su propio encabezado (ej. "### Adle\n\nDescripción...")

### `list_broken_links` (~61 tokens)

Listar todos los wikilinks rotos de la bóveda (referencias [[slug]] que apuntan a notas inexistentes), agrupados por la nota que los contiene. Operación de mantenimiento: úsala periódicamente para limpiar la bóveda.

### `find_backlinks` (~61 tokens)

Devolver únicamente los backlinks de una nota (qué notas la referencian), sin cargar su contenido. Más rápido y económico en tokens que read_note cuando solo se quieren los backlinks.

Input parameters:

- `name` (string, required): Nombre de la nota sin extensión .md

### `find_orphans` (~57 tokens)

Listar notas huérfanas: notas que no tienen backlinks ni outlinks (no enlazan a ninguna nota ni son enlazadas por nadie). Útil para auditar notas aisladas que probablemente deberían integrarse o eliminarse.

### `rename_wikilink` (~131 tokens)

Renombrar, cambiar o sustituir globalmente un wikilink en todas las notas que lo referencian. Útil cuando se ha consolidado un concepto y hay que redirigir todas las referencias [[old_slug]] a [[new_slug]] sin tocar las notas origen ni destino. No mueve archivos — usa move_note si lo que quieres es renombrar la propia nota.

Input parameters:

- `new_slug` (string, required): Wikilink nuevo que lo reemplaza (sin los corchetes)
- `old_slug` (string, required): Wikilink antiguo a sustituir (sin los corchetes)

### `list_tags` (~54 tokens)

Listar todos los hashtags `#snake_case` presentes en el cuerpo de las notas, con el número de notas en que aparece cada uno. Útil para auditar la taxonomía, detectar variantes y mantener consistencia.

### `update_frontmatter` (~129 tokens)

Actualizar, modificar o cambiar campos concretos del frontmatter YAML de una nota (title, category, tags, created) sin tocar el cuerpo. El campo updated se renueva automáticamente. Para mover de categoría usa move_note (mantiene wikilinks); este tool solo edita el YAML in situ sin mover archivos.

Input parameters:

- `fields` (object, required): Objeto con los campos a actualizar. Claves válidas: title, category, tags (array), created. updated se ignora — siempre se pone a hoy.
- `name` (string, required): Nombre de la nota sin extensión .md

### `peek_note` (~71 tokens)

Echar un vistazo rápido a una nota: devuelve solo frontmatter + primer párrafo del cuerpo. Ahorra tokens cuando solo se quiere comprobar la categoría, tags o de qué trata la nota antes de decidir si leerla entera.

Input parameters:

- `name` (string, required): Nombre de la nota sin extensión .md

### `read_section` (~97 tokens)

Leer únicamente una sección Markdown de una nota, identificada por el título exacto de su encabezado. Devuelve desde ese encabezado hasta el siguiente del mismo nivel o superior. Ideal para notas largas (inventarios, capturas) cuando solo interesa una parte.

Input parameters:

- `name` (string, required): Nombre de la nota sin extensión .md
- `section_title` (string, required): Título exacto del encabezado, sin los # iniciales

### `read_frontmatter` (~54 tokens)

Leer únicamente el frontmatter YAML de una nota, sin el cuerpo. Útil para validaciones rápidas o cuando solo se necesitan los metadatos.

Input parameters:

- `name` (string, required): Nombre de la nota sin extensión .md

### `recently_updated` (~64 tokens)

Listar notas modificadas recientemente, en los últimos N días (por defecto 7). Útil para retomar contexto de qué se ha tocado últimamente sin leer toda la bóveda.

Input parameters:

- `days` (number): Número de días hacia atrás. Por defecto 7

### `move_category` (~104 tokens)

Mover, renombrar o reubicar una categoría/carpeta entera con todas sus notas dentro. Actualiza el campo category del frontmatter de cada nota. Más eficiente que mover una a una. No actualiza wikilinks porque los slugs no cambian.

Input parameters:

- `name` (string, required): Categoría actual (puede ser anidada como "conocimiento/problemas-resueltos")
- `new_name` (string, required): Nueva ruta de categoría

### `validate_note` (~91 tokens)

Validar, comprobar o auditar la estructura de una nota según el protocolo de la bóveda: frontmatter completo (title, category, created, updated), presencia de sección "Ver también", presencia de hashtags `#snake_case` al final, y wikilinks no rotos. Devuelve un reporte con los problemas detectados.

Input parameters:

- `name` (string, required): Nombre de la nota sin extensión .md

### `bulk_move` (~108 tokens)

Mover, reubicar o desplazar varias notas a la vez a una misma categoría destino. Procesa el array de slugs en una sola llamada. Útil al procesar la bandeja de entrada cuando hay varias notas para la misma carpeta. No renombra — para renombrar usa move_note una a una.

Input parameters:

- `names` (array, required): Lista de slugs (sin extensión .md) a mover
- `new_category` (string, required): Categoría destino para todas las notas

### `due_notes` (~134 tokens)

Revisar las notas programadas y devolver SOLO las que ya toca sacar hoy. Lee la fecha `> APARECER: AAAA-MM-DD` del principio de cada nota de la carpeta de programados y la compara con la fecha actual. Sustituye a mirar una por una: una sola llamada barata para la comprobación de arranque de sesión.

Input parameters:

- `category` (string): Carpeta de notas programadas. Por defecto "programado".
- `include_upcoming` (boolean): Si true, incluye también las que aún no han vencido, con su fecha y los días que faltan. Por defecto false.

### `list_sections` (~84 tokens)

Listar el índice de secciones (los encabezados) de una nota, con su nivel y su tamaño en líneas, sin devolver el contenido. Sirve para orientarse en notas largas y decidir qué leer: después se lee solo lo necesario con read_section en vez de cargar la nota entera.

Input parameters:

- `name` (string, required): Nombre de la nota sin extensión .md

### `migrate_yaml_tags` (~194 tokens)

Migrar, trasladar o bajar al cuerpo los tags que quedan en el frontmatter YAML, convirtiéndolos en hashtags `#snake_case` al final de la nota, y dejar el frontmatter limpio. Los tags que ya existen como hashtag no se duplican. Operación one-shot e idempotente: conserva la fecha de modificación y la autoría. Por defecto corre en dry_run para ver qué haría sin tocar nada.

Input parameters:

- `category` (string): Acotar a una categoría y sus subcarpetas (opcional). Útil para migrar por partes.
- `drop` (array): Etiquetas que NO se rescatan al cuerpo: se descartan al vaciar el frontmatter. Útil para ruido genérico.
- `dry_run` (boolean): Si true (por defecto), no escribe nada y devuelve el informe de lo que haría. Con false ejecuta la migración real.

### `list_snapshots` (~62 tokens)

Listar las copias de seguridad (instantáneas) disponibles de la bóveda, con su fecha y el motivo por el que se hicieron. Se crean solas antes de cada operación masiva, y también se puede crear una a mano con create_snapshot.

### `create_snapshot` (~74 tokens)

Crear ahora una copia de seguridad completa de la bóveda, antes de hacer algo arriesgado. Se guarda fuera de la bóveda, con fecha y motivo, y se puede volver a ella con restore_snapshot.

Input parameters:

- `reason` (string): Motivo, para reconocerla luego (ej. "antes de reorganizar clientes")

### `restore_snapshot` (~109 tokens)

Restaurar, recuperar o volver a una copia de seguridad anterior de la bóveda: devuelve las notas al estado que tenían en esa instantánea. Antes de tocar nada guarda otra copia del estado actual, así que también se puede deshacer la restauración. Por defecto simula y dice qué cambiaría.

Input parameters:

- `dry_run` (boolean): Si true (por defecto), solo informa de qué notas cambiarían.
- `name` (string, required): Nombre de la instantánea (el que devuelve list_snapshots)

### `vault_health` (~159 tokens)

Revisar el estado de salud de toda la bóveda en una sola llamada: wikilinks rotos, notas huérfanas, notas sin etiquetar o con demasiadas, etiquetas mal formadas, restos de tags en el frontmatter y notas que incumplen el estándar (sin "Ver también"). Devuelve un parte corto con lo que está mal y qué herramienta lo arregla. Pensada para pasarla de vez en cuando y que el desorden no se acumule sin que nadie lo vea.

Input parameters:

- `detail` (boolean): Si true, lista las notas afectadas de cada problema, no solo el recuento.
- `max_tags` (number): Máximo de etiquetas por nota que se considera correcto. Por defecto 6.

### `prune_tags` (~260 tokens)

Podar, limpiar o simplificar las etiquetas de la bóveda: fusionar variantes que significan lo mismo (#tipo_filosofia → #tipo_doctrina) y recortar las notas que llevan más etiquetas de la cuenta, quedándose con las que de verdad agrupan. Conserva siempre el `#tipo_*`, lo que se indique en `keep` y las etiquetas más usadas; las que sobran se retiran empezando por las de uso único, que no agrupan nada. Preserva la fecha de modificación y la autoría. Por defecto corre en dry_run.

Input parameters:

- `category` (string): Acotar a una categoría y sus subcarpetas (opcional).
- `dry_run` (boolean): Si true (por defecto), no escribe nada y devuelve el informe de lo que haría.
- `keep` (array): Etiquetas que nunca se retiran (autor, dominio, estado…), sin la almohadilla.
- `max` (number): Máximo de etiquetas por nota. Por defecto 6.
- `merge` (object): Fusiones a aplicar, como pares {etiqueta_vieja: etiqueta_nueva} sin la almohadilla. Por ejemplo {"tipo_runbook": "tipo_proceso"}.

### `audit_tags` (~125 tokens)

Auditar, revisar o comprobar la salud de las etiquetas de la bóveda: hashtags mal formados con guión medio (que los editores no agrupan y el extractor trunca), variantes del mismo concepto, etiquetas usadas una sola vez y notas que aún conservan tags en el frontmatter YAML. Devuelve un informe para limpiar la taxonomía.

Input parameters:

- `fix_dashes` (boolean): Si true, corrige en las notas los hashtags con guión medio pasándolos a snake_case (#nano-banana → #nano_banana). Por defecto false: solo informa.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/jmpdsevilla-bovedia/bovedia#diagnostics

## Score history

- 2026-08-03: 69
- 2026-08-02: 69
- 2026-08-01: 25
- 2026-07-31: 5
- 2026-07-30: 27
- 2026-07-28: 6
- 2026-07-27: 27

## Links

- npm package: https://www.npmjs.com/package/bovedia
- Socket report: https://socket.dev/npm/package/bovedia
- Repository: https://github.com/jmpdsevilla/BovedIA
- Changelog RSS feed: https://verifymcp.io/servers/jmpdsevilla-bovedia/bovedia/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/jmpdsevilla-bovedia/bovedia/changelog.json
- HTML version of this page: https://verifymcp.io/servers/jmpdsevilla-bovedia/bovedia
