Skip to main content
Glama
SantosRojas

notebooklm-mcp-pro

by SantosRojas

notebooklm-mcp-pro

Servidor MCP para NotebookLM (ahora «Gemini Notebook») pensado para que un agente de código lea, busque y razone sobre los documentos de tu cuenta gastando el mínimo de contexto, y que solo pueda escribir o borrar si tú lo habilitas expresamente.

Aprovecha que NotebookLM ya guarda cada fuente convertida a Markdown: el agente puede ver el índice de encabezados, leer solo la sección que necesita, buscar en local (BM25 / grep) sin gastar cuota, o exportar todo a una carpeta de .md para trabajar con sus propias herramientas de archivos.

⚠️ API no oficial. NotebookLM no tiene API pública para cuentas personales. Este proyecto usa notebooklm-py, que emplea endpoints internos de Google y puede romperse sin aviso (por eso la versión está fijada a >=0.8.5,<0.9). Úsalo con tu propia cuenta y bajo tu responsabilidad; revisa los términos de servicio de Google.

🔐 El storage_state.json que crea notebooklm login es tu sesión de Google. Trátalo como una contraseña: no lo subas a Git ni lo compartas.

¿En qué se diferencia del MCP que ya trae notebooklm-py?

notebooklm-py incluye su propio servidor (notebooklm-mcp), amplio en administración: compartir notebooks, investigación web/Drive, generación de audio/vídeo, OAuth para alojarlo en remoto, etc. Este proyecto no lo reemplaza; se centra en otra cosa:

Este proyecto

notebooklm-mcp incluido

Enfoque

Acceso al conocimiento para agentes de código

Automatización integral de NotebookLM

Lectura económica en contexto

get_source_outline, read_source_section, paginación por next_offset

—

Búsqueda local sin cuota

keyword_search (BM25) y grep (texto/regex con contexto), en una notebook o en todas a la vez

—

Exportar fuentes a .md en disco

export_markdown (notebook completo o una fuente, en la carpeta que elijas)

—

Seguridad

Solo lectura por defecto; las herramientas de escritura ni se registran si no se habilitan; borrado exige repetir el título exacto; auditoría

Confirmaciones vía anotaciones MCP

No cubre

Compartir, investigación web/Drive, audio/vídeo/cuestionarios, OAuth remoto

—

Si necesitas lo que aquí no está, puedes ejecutar ambos servidores a la vez.

Related MCP server: RAGDown

Instalación

Requiere Python ≥ 3.10.

cd notebooklm-mcp-pro
python -m venv .venv
source .venv/bin/activate            # Windows: .venv\Scripts\activate
pip install -e ".[browser]"          # incluye Playwright, necesario solo para el login
playwright install chromium          # si el login pide el navegador de Playwright
notebooklm login                     # abre el navegador y guarda la sesión (storage_state.json)
notebooklm-mcp-pro --check           # verifica configuración y sesión

--check imprime un JSON de estado y devuelve código 0 si la sesión es válida (auth: ok).

Conectarlo a opencode

Añade esto a ~/.config/opencode/opencode.json (o al opencode.json del proyecto), con la ruta real (examples/opencode.json tiene el archivo listo para copiar):

{
  "mcp": {
    "servers": {
      "notebooklm": {
        "type": "local",
        "command": ["/RUTA/ABSOLUTA/notebooklm-mcp-pro/.venv/bin/notebooklm-mcp-pro"],
        "environment": { "NLM_MCP_MODE": "readonly" }
      }
    }
  }
}

En Windows el ejecutable está en .venv\Scripts\notebooklm-mcp-pro.exe. Para Claude Desktop y otros clientes con la clave mcpServers, usa examples/claude_desktop_config.json.

Esta es la forma nativa de OpenCode 2: los servidores van bajo mcp.servers y para dejar uno configurado sin conectar se usa disabled: true. En OpenCode 1 el nombre va directamente bajo mcp y el campo equivalente es enabled (su inverso); V2 sigue aceptando esa forma, pero conviene migrarla.

Herramientas

Siempre disponibles (modo readonly) — 23

Herramienta

Para qué sirve

health_check

Modo, caché, versiones, antigüedad de la sesión (avisa cuando toca reloguear) y file_upload_hint (cómo habilitar la subida si está apagada)

list_notebooks, get_notebook

Notebooks, resumen generado y temas sugeridos

list_sources

Fuentes con tipo, estado, URL y nº de palabras (filtrable; limit opcional)

read_source

Fuente en Markdown, paginada (offset → next_offset)

get_source_outline

Índice de encabezados (ignora # dentro de bloques de código)

read_source_section

Solo una sección, hasta el siguiente encabezado del mismo nivel

get_source_guide

Resumen y palabras clave que NotebookLM genera por fuente

search_sources

Búsqueda semántica de NotebookLM (fragmentos por relevancia)

keyword_search

Búsqueda léxica BM25 local (sin acentos/mayúsculas)

grep

Texto o regex con líneas de contexto, sobre la caché

source_stats

Radiografía local sin cuota: por fuente (caracteres, palabras, encabezados, términos dominantes) o, sin notebook_id, resumen de toda la caché (fuentes, caracteres, antigüedad)

ask_notebook

Pregunta con respuesta y citas a las fuentes (ver nota); si NotebookLM cierra con una oferta de Studio, va en suggestions y no ensucia answer

list_notes, read_note

Notas del notebook

list_artifacts, read_report, get_generation_status

Informes y su estado: read_report lee los de tipo report (los de generate_report), get_generation_status acepta wait_seconds y espera el estado terminal

get_usage

Cuota de la cuenta (ventanas y acciones con capacidad restante). Si la cuenta no la expone, responde status: disabled

get_chat_history

Historial de chat del notebook (turnos pregunta/respuesta)

sync_notebook

Descarga todas las fuentes a la caché local

export_markdown

Deja un .md por fuente (con front matter) + INDEX.md en disco; incremental (reescribe solo lo que cambió). Con source_id exporta una sola fuente, y directory elige la carpeta destino

clear_cache

Borra caché y exportaciones locales de un notebook — o de TODOS con purge_all: true

Convenciones de las respuestas: count es lo que devuelve la llamada y total lo que coincide antes del recorte; los listados con limit añaden truncated y las lecturas paginadas next_offset. Lo que sale del contenido de las fuentes va marcado con untrusted_content: true (texto de terceros: nunca instrucciones). Las herramientas de barrido añaden notebooks_requested, notebooks_scanned (y notebooks_scanned_ids: con max_notebooks conviene comprobar que tu notebook entró en el tope), sources_not_ready, download_errors (por fuente) y notebook_errors (por notebook). Las subidas (add_source_file, add_source_base64) añaden text_density_warning solo cuando el archivo trae muy poco texto para su tamaño — típicamente un deck de imágenes que NotebookLM no podrá cubrir del todo.

Tres detalles del contrato que son deliberados: en un barrido, notebook_title solo se rellena cuando se recorren varias notebooks (en una sola ya sabes cuál es y se ahorra una llamada); las búsquedas no devuelven total porque el escaneo se corta al agotar el presupuesto y un total sería un dato falso (truncated avisa de que había más); y grep/keyword_search son locales, así que no consumen cuota.

También expone el recurso notebooklm://notebooks, la plantilla notebooklm://notebooks/{notebook_id}/sources/{source_id} y tres prompts (research_topic, summarize_source, compare_sources).

Nota sobre ask_notebook: no modifica fuentes, por eso está en modo lectura, pero consume la cuota de chat de tu cuenta y deja la pregunta en el historial del notebook.

Con NLM_MCP_MODE=readwrite — +10

create_notebook, rename_notebook, add_source_url (solo http/https), add_source_text, add_source_file (solo desde carpetas de NLM_UPLOAD_DIRS), add_source_base64 (bytes ya en memoria, p. ej. un adjunto de correo: pasan por un temporal efímero dentro de NLM_UPLOAD_DIRS y no viajan por el contexto del agente), rename_source, create_note, update_note, generate_report (asíncrona: luego get_generation_status y read_report).

Con readwrite + NLM_MCP_ALLOW_DESTRUCTIVE=1 — +4

delete_source, delete_note, delete_artifact y delete_notebook: exigen confirm_title con el título exacto actual. Si no coincide, no se borra nada y el error no revela el título correcto, así el agente tiene que consultarlo (y tú confirmarlo) en lugar de reintentar a ciegas.

Flujo recomendado para el agente

  1. list_notebooks → list_sources para ubicar el material.

  2. Localizar: search_sources (semántica) o keyword_search / grep (local). Si no sabes en qué notebook está algo, omite notebook_id (notebook_ids para limitar el barrido): ambas recorren todas las notebooks y etiquetan cada resultado con su origen.

  3. Leer: get_source_outline → read_source_section. read_source solo si hace falta el documento entero. source_stats resume tamaño, encabezados y términos dominantes sin gastar cuota (sin notebook_id, toda la caché: útil para decidir sync_notebook o clear_cache).

  4. ask_notebook cuando se quiere una síntesis con citas ya hecha por NotebookLM.

  5. export_markdown si el agente va a trabajar con sus herramientas de archivos (directory para dejar los .md donde te interese).

La primera keyword_search/grep de un notebook descarga sus fuentes (campo downloaded_now); después usan la caché. Con auto_sync=false buscan solo en lo ya descargado.

Configuración (variables de entorno o .env)

Variable

Defecto

Descripción

NLM_MCP_MODE

readonly

readonly o readwrite

NLM_MCP_ALLOW_DESTRUCTIVE

0

Habilita borrado (solo con readwrite)

NLM_UPLOAD_DIRS

(vacío)

Carpetas permitidas para add_source_file y add_source_base64 (separador : en Linux/Mac, ; en Windows). Vacío = subida deshabilitada

NLM_STORAGE_PATH

(de la librería)

Ruta a storage_state.json

NLM_PROFILE

(activo)

Perfil de notebooklm-py (varias cuentas)

NLM_CACHE_DIR

~/.cache/notebooklm-mcp-pro

Caché, exportaciones y auditoría

NLM_CACHE_TTL_SECONDS

3600

Vigencia de la caché (0 = nunca usarla)

NLM_MAX_CHARS

20000

Tamaño máximo de página devuelta al agente (mín. 1000)

NLM_MAX_CONCURRENCY

4

Llamadas simultáneas a NotebookLM

NLM_TIMEOUT_SECONDS

60

Timeout por llamada (algunas operaciones lo multiplican)

NLM_DEFAULT_LANGUAGE

es

Idioma por defecto de generate_report

NLM_AUDIT_LOG

<cache>/audit.jsonl

Registro de escrituras/borrados

NLM_AUDIT_MAX_BYTES

10485760

Rotación del registro de auditoría por tamaño (se guarda una generación en .1)

NLM_RETRIES

2

Reintentos (0-5) ante errores de red/servidor/cuota en lecturas; las operaciones no idempotentes nunca se reintentan

NLM_LOG_JSON

0

1 = logs en JSON estructurado en stderr (una línea por evento)

NLM_STRIP_IMAGES

1

Recorta imágenes incrustadas (base64) del Markdown de las fuentes: los PDFs con screenshots vienen con MB de blobs; por defecto se reemplazan por marcadores de texto

NLM_LOG_LEVEL

INFO

Los logs van a stderr (stdout es del protocolo)

Hay una plantilla en .env.example. El servidor lee ./.env si existe (sin pisar variables ya definidas).

Modelo de seguridad

  • Mínimo privilegio: en readonly las herramientas de escritura no existen para el agente.

  • Borrado deliberado: doble habilitación (readwrite + flag) y título exacto como confirmación.

  • Contenido no confiable: el texto de las fuentes se marca con untrusted_content: true y las instrucciones del servidor piden tratarlo como datos, no como órdenes (mitiga prompt injection).

  • IDs validados ([A-Za-z0-9_-]): imposible escapar de la carpeta de caché con ../.

  • Subidas solo desde carpetas permitidas; se resuelven symlinks y .. antes de comprobar.

  • Sin filtración de errores: al agente solo llegan mensajes controlados (nunca cookies, rutas ni trazas). Cada fallo lleva un ref (p. ej. ... (ref 3a9c1f2b)) que aparece en los logs de stderr para que el operador pueda encontrar la traza exacta.

  • Caché privada: directorios 0700, archivos 0600, escritura atómica. Nota: los permisos POSIX se aplican en Linux/Mac; en Windows se ignora silenciosamente (protege la ruta con tu perfil).

  • Auditoría JSONL de toda escritura/borrado; nunca guarda contenido, solo longitud y huella SHA-256.

  • Transporte: stdio por defecto. --transport streamable-http solo enlaza a loopback; --allow-remote existe pero no hay autenticación: expondría tu sesión de Google. No lo uses sin un proxy con autenticación.

  • grep es literal por defecto; con literal=false usa regex de Python (limitada a 300 caracteres y con un presupuesto de ~5 s de escaneo: si la regex es patológica, se corta y devuelve timed_out: true, aunque una única línea con backtracking catastrófico puede seguir demorando).

  • export_markdown con directory escribe donde le pidas (absoluto, o relativo a la carpeta de exportaciones del servidor): es una escritura local a cargo del agente, como el resto de readonly.

Arquitectura

src/nlm_mcp/
  server.py     herramientas, recursos y prompts (registro condicionado por modo)
  backend.py    Protocol `Backend` + adaptador sobre notebooklm-py (único archivo que toca la librería;
                lecturas idempotentes con reintento y backoff ante red/5xx/cuota)
  state.py      concurrencia, timeouts, descarga única por fuente, sincronización
  cache.py      caché Markdown en disco (TTL, atómica, privada)
  mdtools.py    outline, secciones, paginación, grep, troceado
  bm25.py       búsqueda léxica local
  validators.py IDs, rutas de subida, regex
  errors.py     excepciones de la librería -> mensajes accionables
  config.py     configuración validada (inmutable)
  audit.py      auditoría JSONL

Todo el servidor depende de la interfaz Backend, no de notebooklm-py. Si Google rompe algo o quieres otro origen de datos, solo se toca backend.py.

Pruebas

uv sync --extra dev        # o: pip install -e ".[dev]"
uv run --extra dev pytest
uv run --extra dev ruff check .
uv run --extra dev ruff format --check .
uv run --extra dev mypy

111 pruebas: unitarias (config, validadores, Markdown, BM25, caché), de servidor completo con un cliente MCP en memoria (modos, gating de seguridad, paginación, búsqueda local en una o varias notebooks, grep con contexto, exportación incremental y a una carpeta elegida, errores, escritura, borrado, recursos, prompts, CLI, generaciones con y sin espera, cuota e historial) y del adaptador contra los modelos reales de notebooklm-py (incluidos los reintentos ante errores transitorios). ruff check, ruff format --check y mypy (configuración laxa, solo src/) y las pruebas corren en CI en cada push (GitHub Actions, .github/workflows/ci.yml).

Estado de verificación: las pruebas no se ejecutan contra Google (requieren una cuenta real). El adaptador se validó con instancias reales de las clases de la librería y un cliente simulado; la primera ejecución real con tu cuenta puede revelar diferencias. Empieza con notebooklm-mcp-pro --check y una lectura sobre un notebook de prueba.

Solución de problemas

Síntoma

Causa y solución

auth: error / «No hay sesión»

Ejecuta notebooklm login o define NLM_STORAGE_PATH

Sesión caducada

Repite notebooklm login y reinicia el cliente MCP

«Google aplicó un límite»

Baja NLM_MAX_CONCURRENCY y espera unos minutos

read_source devuelve poco

Es una página: sigue con next_offset o usa read_source_section

Una fuente no aparece en búsquedas locales

Solo se descargan fuentes en estado ready; revisa list_sources

read_report dice que el artefacto «no es un informe»

Es un archivo, audio o presentación: solo los de tipo report tienen texto. Para fuentes usa export_markdown; para notas, read_note

get_usage devuelve status: disabled

La API interna de cuota no está habilitada para esa cuenta; el resto de herramientas funciona igual

add_source_file / add_source_base64 dice «deshabilitada»

Define NLM_UPLOAD_DIRS (lo mismo anuncia health_check.file_upload_hint) y reinicia el cliente MCP

text_density_warning en una subida

Pocas palabras para el tamaño: el material es de imágenes/escaneado y puede quedar sin cubrir. Añade una fuente de texto complementaria

Falla tras actualizar notebooklm-py

API no oficial: mantén la versión fijada o ajusta backend.py

Available Tools

23 tools
ask_notebookA

Pregunta al notebook y devuelve respuesta con citas a fuentes. Consume cuota de chat y queda en el historial del notebook.

NameRequiredDescriptionDefault
questionYesPregunta; NotebookLM responde solo con base en las fuentes.
source_idsNoRestringe la respuesta a estas fuentes.
notebook_idYesID del notebook (obtenlo con list_notebooks).
conversation_idNoID devuelto antes, para repreguntar con contexto.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag readOnlyHint=false, openWorld=true, idempotent=false. The description adds genuinely useful side-effect context beyond those: it consumes chat quota and persists in the notebook history — exactly the non-obvious costs an agent needs before calling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler, front-loading the primary action and return, then appending the cost/side-effect note. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values needn't be explained, and the schema fully covers parameters. The description adds the quota/history cost, making it complete for correct invocation, only lacking when-to-use guidance versus siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (question, source_ids, notebook_id, conversation_id) are already documented in the schema, including usage hints like obtaining notebook_id via list_notebooks. The description adds nothing beyond it, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (pregunta/ask) and resource (notebook) plus the return format (respuesta con citas a fuentes). This distinguishes it from retrieval siblings like read_source or search_sources, though it doesn't name siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied — you ask the notebook when you want a synthesized, cited answer. But it doesn't state when to prefer this over search_sources, keyword_search, or get_chat_history, and gives no prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clear_cacheA
Idempotent

Borra la caché local y las exportaciones (no toca nada en NotebookLM).

purge_all=True vacía por completo el estado local (útil antes de un refresco masivo); en ese caso no se requiere notebook_id.

NameRequiredDescriptionDefault
purge_allNoVacía la caché y exportaciones de TODOS los notebooks.
notebook_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark this as non-read-only but non-destructive, and the description usefully clarifies that only local cache and exports are deleted, not remote notebooks. It does not state whether deleted exports are irreversible or how the operation reports partial failures, which matters given destructiveHint=false while exports are being removed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the scope boundary comes first, then the mode-specific rule. No filler, and the most decision-relevant conditional is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description covers scope and the purge_all branch adequately. The main gap is the default path — what gets cleared when purge_all is false and no notebook_id is given — which an agent could plausibly hit given zero required parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, but the description compensates by explaining purge_all's semantics (full wipe of all local state) and the resulting parameter interaction — notebook_id becomes unnecessary. The default no-flag behavior (presumably per-notebook clearing) is only implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('Borra la caché local y las exportaciones') plus a crucial scope boundary: it does not affect NotebookLM itself. The resource is unambiguous, though it never contrasts itself with the related sibling sync_notebook, which also deals with local state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear usage context ('útil antes de un refresco masivo') and the conditional precondition that notebook_id is unnecessary when purge_all=True. It stops short of naming alternatives or stating what happens when neither parameter is supplied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_markdownA
Idempotent

Exporta a .md (con front matter) un notebook completo o una sola fuente.

Notebook completo (incremental): solo reescribe las fuentes cuyo Markdown cambió —el resto conserva su exported_at—, deja INDEX.md + .manifest.json y borra los .md de fuentes que ya no existen (force reescribe todo). Una sola fuente: escribe ese documento y, con refresh, lo vuelve a descargar antes. directory elige el destino; los archivos quedan listos para las herramientas de archivos del agente.

NameRequiredDescriptionDefault
forceNoNotebook completo: reescribe todo aunque no haya cambiado.
refreshNoUna fuente: vuelve a descargarla de NotebookLM antes de escribir.
directoryNoCarpeta destino (por defecto, la de exportaciones del servidor; si es relativa, cuelga de ella).
source_idNoExporta solo esta fuente. Omitir = exporta el notebook completo.
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Despite annotations already declaring idempotency and non-destructiveness, the description adds substantive behavior beyond them: it preserves `exported_at` on unchanged sources, emits `INDEX.md` + `.manifest.json`, and deletes `.md` files for sources that no longer exist. Surfacing that stale-file cleanup is exactly the kind of side effect an agent needs but would not infer from annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the export target, then structured by mode with parenthetical modifiers, so no sentence is filler. It is dense and somewhat long, but the density is earned by the amount of mode-specific behavior being conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't cover return values, and it still accounts for both modes, incremental vs. forced behavior, destination selection, and the stale-file cleanup that would otherwise be a surprise. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description goes further by framing `force` and `refresh` in terms of which mode they apply to ('Notebook completo' vs. 'Una fuente'), which the schema's per-property text does not make as clear cross-parameter-wise. `directory` destination semantics are covered by both schema and prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Exporta a `.md` (con front matter)') and immediately splits the two operating modes: full notebook vs. single source. That distinction, plus the mention of front matter and produced artifacts, lets an agent tell exactly what the tool produces without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains both invocation modes and the conditions that select each modifier ('incremental', '`force` reescribe todo', 'con `refresh`, lo vuelve a descargar antes'). It stops short of naming when an agent should prefer this over other retrieval siblings, but no sibling competes for the same output, so the guidance is clear in context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_chat_historyA
Read-onlyIdempotent

Historial de chat del notebook: turnos (pregunta, respuesta) más recientes.

Los turnos vienen recortados y sin conversation_id: para repreguntar con contexto, usa el que devolvió ask_notebook.

NameRequiredDescriptionDefault
limitNoMáximo de turnos a recuperar (1-50).
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish it is a read-only, idempotent, non-destructive operation, so the bar is lower. The description adds non-obvious behavioral facts beyond that: returned turns are truncated, the newest turns are returned, and conversation_id is stripped from the payload — all of which affect how an agent should interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences: purpose and scope first, then the caveat and the alternative. Every sentence carries information the agent cannot get from schema or annotations, with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value structure need not be explained, but the description correctly flags the two things the schema will not show the agent: truncation and the missing conversation_id. Only remaining gap is that neither ordering nor what happens when fewer turns exist is stated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with limit (1-50, default 20) and notebook_id (obtain via list_notebooks) documented in the schema itself. The description only loosely implies recency ordering via 'más recientes' and adds no syntax or semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (chat history of a notebook) and specifies the shape of what is returned: recent turns of (question, answer). It is clearly distinct from ask_notebook, though it names that sibling only as a source for conversation_id rather than contrasting the tools' purposes directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly redirects the agent: the turns come without conversation_id, so to re-ask with context the agent must use the conversation_id returned by ask_notebook. This is genuine routing guidance. There is no explicit statement of when NOT to call this tool (e.g., for full-text history before a given turn), keeping it below 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_generation_statusA
Read-onlyIdempotent

Estado de una generación iniciada con generate_report (pending / in_progress / completed / failed).

Con wait_seconds > 0 espera activamente hasta el estado terminal (o agotar la espera) y devuelve final, para que el agente no tenga que consultar en bucle. Con 0 responde ya.

NameRequiredDescriptionDefault
task_idYesID de la tarea devuelto por generate_report.
notebook_idYesID del notebook (obtenlo con list_notebooks).
wait_secondsNo0 = consulta única; hasta 600 s esperando el estado terminal.
poll_interval_secondsNoIntervalo entre consultas mientras espera (1-10 s).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, so safety needs no restating. The description adds genuinely new behavior: it blocks actively up to the wait budget and returns a `final` flag, which is the key runtime trait an agent needs. It could have mentioned that a non-terminal timeout still returns the current state, but the core trait is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the resource and states, then the critical non-obvious behavior (active waiting). No filler and no repetition of schema or annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be detailed, and the description still highlights the `final` field and state enumeration. Complete enough to call correctly; minor gap on what happens when the wait budget expires without reaching a terminal state.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description nevertheless adds meaning by explaining the semantics of wait_seconds (blocking until terminal or exhausting the wait) and the resulting `final` field, which the schema alone does not convey. poll_interval_seconds and notebook_id are left to the schema, which is acceptable at full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Estado de una generación') and anchors it to the tool that creates the task ('iniciada con generate_report'), then enumerates the possible states. An agent immediately knows this is the polling companion to report generation and cannot confuse it with read_report or list_notebooks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains the two usage modes: wait_seconds > 0 blocks until terminal state so the agent avoids polling loops, while 0 returns immediately. That is clear when-to-use guidance for the main decision. It does not name any sibling alternative (there is none for status), but it also lacks guidance on failure/retry behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_notebookC
Read-onlyIdempotent

Metadatos de un notebook, su resumen generado y temas sugeridos.

NameRequiredDescriptionDefault
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, so the safety profile is fully covered. The description contributes by noting the returned payload includes a generated summary and suggested topics, which is behavioral context not in the annotations. It says nothing about failure modes (unknown notebook_id) or whether summary/topics can be absent, so it adds only modest value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short clause with no filler; the return contents are listed up front. It is perhaps overly terse for its scope, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the return values needn't be explained, and annotations cover safety, so the remaining burden is small. Still, for a lookup tool across a 22-tool sibling set, the description gives no scoping or routing context beyond the resource list, leaving the agent to infer its place in the workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter notebook_id carries a description that even points at list_notebooks for discovery, so the schema does the heavy lifting. The description adds nothing about the parameter. Baseline 3 applies for full schema coverage with no extra meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource surface (metadata, generated summary, suggested topics) which goes beyond the bare name 'get_notebook', but the verb is only implied and there is no differentiation from siblings such as list_notebooks or get_source_outline. An agent can infer it fetches one notebook's details, but only through the resource listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to call this versus list_notebooks or ask_notebook, and states no preconditions. The only routing hint ('obtenlo con list_notebooks') lives in the schema, not the description, and it is about acquiring the ID rather than when to use the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_source_guideC
Read-onlyIdempotent

Resumen y palabras clave que NotebookLM genera para una fuente.

NameRequiredDescriptionDefault
source_idYesID de la fuente (obtenlo con list_sources).
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered structurally. The description adds nothing beyond them – no note on whether a guide must be pre-generated, whether it can be absent, or what triggers generation, which is exactly the kind of context a read tool like this needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient, though its brevity borders on under-specification for a tool with an output schema and pre-generation semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, and annotations cover safety. However, for a tool whose availability may depend on whether NotebookLM has generated a guide for the source, the description leaves an important operational question unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters carry their own guidance on where to obtain the IDs, so the schema does the heavy lifting. The description contributes no additional meaning about the IDs or their relationship.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (a source) and the specific content returned (summary and keywords generated by NotebookLM), which distinguishes it from siblings like read_source (full text) and get_source_outline (structure). It lacks an explicit verb such as 'retrieves', but the resource+content pairing is specific enough to select on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives such as read_source, get_source_outline, or source_stats. The only routing hints live in the parameter schema (pointers to list_sources/list_notebooks), not in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_source_outlineB
Read-onlyIdempotent

Índice de encabezados (nivel, título, línea, posición) de una fuente en Markdown.

NameRequiredDescriptionDefault
source_idYesID de la fuente (obtenlo con list_sources).
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds that the result is a heading index with position/line metadata, which is useful beyond the annotations, but it is silent on behavior for non-Markdown sources or sources without headings — a real gap given the 'en Markdown' qualifier.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the returned fields front-loaded and no filler. It is arguably slightly too terse for a tool whose scope constraints are unstated, but nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return-value explanation is unnecessary, and the description covers the shape of the result. However, it leaves open the important edge case of non-Markdown sources and offers no routing guidance among several overlapping read tools, so it is only minimally sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters document how to obtain their values (list_notebooks, list_sources), so the schema does the heavy lifting. The description adds nothing about the parameters, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (a source's heading index) and enumerates the returned fields (level, title, line, position), so the operation is unambiguous. It does not distinguish itself from neighbors like read_source, get_source_guide, or source_stats, which an agent could easily confuse with a structural view of a source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to prefer this over read_source, read_source_section, or get_source_guide, and no note about prerequisites (e.g. that the source must be Markdown). The only usage hint lives in the schema (how to obtain the IDs), not in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usageA
Read-onlyIdempotent

Cuota de la cuenta (ventanas de uso y acciones con capacidad restante).

Útil antes de lotes de ask_notebook/generate_report para no chocar con límites. No todas las cuentas exponen la cuota: si no, devuelve status: disabled y enabled: false — en ese caso confía en los límites por defecto y no reintentes.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds genuinely new context: some accounts don't expose quota, in which case it returns `status: disabled` and `enabled: false` and the agent should fall back to defaults rather than retry. That degraded-state disclosure is exactly the kind of behavior the schema cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short lines, front-loaded with the resource definition followed by the usage condition and the edge case. The parenthetical is slightly dense but every sentence carries actionable content; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description needn't enumerate return fields, and the one return shape that matters (the disabled case) is called out explicitly. Coverage is solid for a zero-argument read; only minor details (e.g. which windows are reported) are left implicit and are available in the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to disambiguate. The description does not introduce any spurious argument expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the resource precisely: account quota, with the two facets (usage windows and actions with remaining capacity). The name-plus-description pairing makes it clearly distinct from health_check or source_stats, though the description itself doesn't explicitly contrast with those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit precondition ('útil antes de lotes de ask_notebook/generate_report para no chocar con límites'), names the concrete sibling operations it protects, and adds an exclusion/fallback rule: if quota isn't exposed, trust defaults and do not retry. When-to-use, when-not-to-worry, and the anti-pattern are all covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

grepA
Idempotent

Busca un texto o regex (como grep) en la caché: en un notebook o en todas a la vez.

Devuelve línea + contexto. Sin notebook_id recorre todas las notebooks de la cuenta y etiqueta cada coincidencia con su origen (notebooks_scanned_ids dice cuáles se recorrieron); una notebook con problemas no aborta el barrido (notebook_errors con ref). Es literal salvo que uses literal=false.

NameRequiredDescriptionDefault
literalNotrue = texto literal; false = expresión regular de Python.
patternYesTexto a buscar (literal por defecto).
auto_syncNoDescarga a la caché las fuentes que falten (la primera vez puede tardar).
source_idsNoLimita la búsqueda a estas fuentes (requiere notebook_id).
max_matchesNoMáximo total de coincidencias (1-200).
notebook_idNoNotebook concreto. Omitir = busca en todas las de la cuenta.
notebook_idsNoLimita el barrido a estas notebooks (solo si omites notebook_id).
context_linesNoLíneas de contexto antes/después (0-10).
max_notebooksNoTope de notebooks a recorrer (1-50).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavioral context beyond the annotations: each match is tagged with its origin, notebooks_scanned_ids reports which notebooks were scanned, and notebook_errors (with ref) shows that a failing notebook does not abort the sweep — important partial-failure semantics. Annotations declare readOnlyHint=false, consistent with the cache-downloading auto_sync behavior rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the core action and scope, then the return shape, then the fallback/error semantics. Nearly every sentence earns its place; the only slight redundancy is restating the literal default already in the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter search tool with an output schema and annotations present, the description covers scope, return shape (line + context), origin tagging, and partial-failure handling. The remaining details (limits, context line counts) live in the schema and output schema, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all nine parameters are already documented in the schema; the description only echoes the notebook_id-omission behavior and the literal flag. It adds no syntax or interaction details (e.g. source_ids requiring notebook_id) beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (search text or regex in the cache, like grep) and defines scope precisely: one notebook or all of them at once. It clearly differentiates itself from a listing/read tool, though it never names the closest sibling (keyword_search / search_sources), so the agent must infer the split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that omitting notebook_id sweeps all notebooks and that matching is literal unless literal=false, which implicitly guides usage. However, it never says when to prefer this over keyword_search or search_sources, nor any prerequisite or exclusion — the caller has to infer the choice from the sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

health_checkB
Read-onlyIdempotent

Estado del servidor y de la sesión con NotebookLM (modo, caché, autenticación).

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and openWorld, so safety is covered. The description contributes useful scope detail by naming the three state areas reported (mode, cache, authentication), but says nothing about side effects, latency, or what a failure state looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, and the resource scope is front-loaded before the reported facets. Nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter diagnostic call with an output schema documenting return values, the description need only convey scope, which it does. The only shortfall is the absent routing guidance relative to sibling status/cache tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource (server and NotebookLM session) and enumerates the facets reported (mode, cache, authentication), which distinguishes it from siblings such as get_usage or clear_cache. It lacks an explicit verb ("get/report"), but the intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to call this versus alternatives like get_usage, clear_cache, or sync_notebook, nor any stated prerequisites or follow-up actions. The agent must infer that this is a diagnostic entry point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_artifactsA
Read-onlyIdempotent

Lista los artefactos generados (informes, audio, cuestionarios, mapas mentales...) y su estado.

NameRequiredDescriptionDefault
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuine value by disclosing the artifact taxonomy (reports, audio, quizzes, mind maps) and that each item carries a status field, which the annotations don't convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the verb and resource and spends no words on filler. Nothing is redundant or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, annotations covering behavior, and full parameter documentation, the description gives enough to invoke correctly. Only the missing tie-breaker against sibling listing/status tools keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter already documents itself, including the pointer to list_notebooks. The description adds no further parameter semantics, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Lista los artefactos generados... y su estado') and enumerates artifact types (informes, audio, cuestionarios, mapas mentales), which cleanly separates it from list_notes, list_sources and list_notebooks. It doesn't explicitly name those siblings, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: it's a listing tool scoped by notebook_id, so an agent can infer when to call it. There is no explicit when-to-use guidance and no routing between this and nearby tools like get_generation_status or read_report.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_notebooksB
Read-onlyIdempotent

Lista los notebooks de la cuenta (id, título, nº de fuentes, fechas).

NameRequiredDescriptionDefault
limitNoMáximo de resultados (1-200).
queryNoFiltra por texto en el título (sin mayúsculas).

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered. The description adds only a restatement of returned fields, which the existing output schema already provides, and says nothing about pagination behavior, ordering, or truncation beyond the default limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with the scope and the returned fields front-loaded; nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return values need not be explained given the output schema, and the safety profile is carried by annotations. However, the description never signals that listing can be filtered or capped, so an agent reading only the description could miss the search/limit capability entirely; adequate but with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both `limit` (1-200) and `query` (title text filter) are already documented in the schema; baseline 3 applies. The description notably omits any mention that filtering by title text is possible, which would have been a useful pointer beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Lista los notebooks de la cuenta") and names the fields returned (id, title, source count, dates). It is clearly distinguishable from get_notebook in intent, but it never explicitly contrasts with siblings such as list_sources or list_artifacts, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus get_notebook (single notebook), list_sources, or search_sources, and no prerequisites or exclusions. The only usage signal is implicit in the verb "Lista".

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_notesB
Read-onlyIdempotent

Lista las notas del notebook con una vista previa.

NameRequiredDescriptionDefault
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile needs no restating. The description adds one genuinely useful behavioral fact beyond that: results are previews rather than full note bodies. It does not disclose ordering, pagination, or truncation limits on those previews.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, front-loading the verb and the returned view. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple, read-only, single-parameter list operation, annotations cover safety, and an output schema exists so return values need not be described. Only the preview/truncation behavior and result ordering are left implicit, which is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter at 100% schema description coverage, the schema already explains notebook_id and where to obtain it. The description adds no further meaning, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lista las notas del notebook') plus a distinguishing output trait ('con una vista previa'), so an agent can tell it returns abbreviated note content. It does not explicitly contrast with the sibling read_note, but the verb 'list' vs 'read' makes the split largely inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no sibling is named (read_note, list_notebooks). The only navigational hint ('obtenlo con list_notebooks') lives in the JSON schema property description, not in this tool's description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sourcesB
Read-onlyIdempotent

Lista las fuentes de un notebook con tipo, estado, URL y nº de palabras.

NameRequiredDescriptionDefault
limitNoMáximo de fuentes a devolver (1-100). Por defecto, todas.
statusNoFiltra por estado: ready, processing, error.
notebook_idYesID del notebook (obtenlo con list_notebooks).
source_typeNoFiltra por tipo: pdf, markdown, web_page, youtube, pasted_text, docx, google_docs...

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered elsewhere. The description adds only the shape of the returned record (type, status, URL, word count), which is partly duplicative of the output schema and says nothing about ordering, pagination, or behavior on an empty notebook.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb first and zero filler; the returned fields are packed efficiently. It is perhaps too terse for the tool's role, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a fully documented schema and an output schema present, the description need not restate parameters or return values, and it correctly avoids doing so. What remains missing is only the relational context to siblings and any hint about preferred use over search_sources.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: limit, status, notebook_id (with a pointer to list_notebooks) and source_type are all documented in the schema, including enum-like values and the 1-100 range. The description's mention of "tipo" and "estado" merely echoes two of those parameters without adding format or interaction detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Lista las fuentes de un notebook") plus the fields returned (tipo, estado, URL, nº de palabras), so an agent knows exactly what it gets back. It does not name or differentiate itself from close siblings such as search_sources or keyword_search, which keeps it out of the 5 band.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use, when-not-to-use, or alternative routing. An agent must infer from the name alone that this is the enumeration path versus search_sources (filtered search) or read_source (content retrieval). No prerequisites or pagination guidance appear in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_noteB
Read-onlyIdempotent

Lee una nota completa (paginada).

NameRequiredDescriptionDefault
offsetNoPosición (caracteres) desde la que leer.
note_idYesID de la nota (obtenla con list_notes).
max_charsNoTamaño de página. Por defecto y máximo: NLM_MAX_CHARS.
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/destructive=false, so the safety profile is covered. The word 'paginada' adds a genuinely useful behavioral signal (content may be truncated and require offset/max_chars looping), but the description doesn't explain default/maximum page size, truncation semantics, or what a partial read returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste and the core action front-loaded; the terseness is efficient but leaves little room for the pagination nuance to be explained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 4-parameter read tool with full schema coverage, annotations, and an output schema, the description is adequate but thin: it omits when-to-use routing and how pagination should be driven, which are the only things structured fields don't carry.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema, including offset semantics and the NLM_MAX_CHARS default. The description adds only the implicit notion of pagination, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb+resource: reads a full note, with the qualifier that it is paginated. It does not differentiate itself from siblings like read_source, read_report, or get_notebook, which read other content types, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives (read_source, read_report, list_notes), no preconditions, and no note about needing the IDs first — that hint lives only in the schema parameter descriptions, not the tool description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_reportA
Read-onlyIdempotent

Lee en Markdown un informe (briefing, guía de estudio...), paginado.

Solo los informes (tipo report, los que crea generate_report): un archivo subido, un audio o una presentación no tienen texto que leer y la llamada lo dirá con el tipo que tiene en lugar del «no está listo» interno de NotebookLM.

NameRequiredDescriptionDefault
offsetNoPosición (caracteres) desde la que leer.
max_charsNoTamaño de página. Por defecto y máximo: NLM_MAX_CHARS.
artifact_idYesID del artefacto (obtenlo con list_artifacts); debe ser de tipo report.
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds real behavior: output is Markdown, it is paginated, and non-report artifacts return the artifact's actual type rather than the misleading internal 'not ready' message. That error-shape detail is genuinely useful for an agent interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs, front-loaded with what the tool does, followed by the scope restriction. The explanation of NotebookLM's internal error behavior is slightly discursive but earns its place by preventing misinterpretation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four fully documented parameters, an output schema, and read-only/idempotent annotations, the definition covers purpose, scope and failure mode adequately. Missing only an explicit pointer to the tool to use for non-report artifacts.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% — offset, max_chars, artifact_id and notebook_id are all documented in the schema, including the 'must be of type report' constraint. The description only echoes the pagination idea already conveyed by offset/max_chars, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (reads a report in Markdown, paginated) and scopes it to artifacts of type `report`, contrasting that with uploaded files, audio and presentations. It does not name the sibling that handles the other cases (read_source / export_markdown), so an agent must infer that routing itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when it applies ('Solo los informes') and pre-empts a common mistake by describing what happens when the artifact is not a report. It stops short of naming the alternative tool to call for sources or files, and references `generate_report`, which is not in the sibling list shown.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_sourceA
Read-onlyIdempotent

Lee una fuente en Markdown, paginada. Para documentos largos prefiere get_source_outline + read_source_section.

NameRequiredDescriptionDefault
offsetNoPosición (caracteres) desde la que leer; usa next_offset de la página anterior.
refreshNoIgnora la caché y vuelve a descargar la fuente.
max_charsNoTamaño de página. Por defecto y máximo: NLM_MAX_CHARS.
source_idYesID de la fuente (obtenlo con list_sources).
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the description only needs to add pagination and format context, which it does. It does not mention cache behavior (covered only by the refresh param) or that responses expose next_offset, leaving a small gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, with the core capability first and the alternative workflow second.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a rich schema, full annotations and an output schema, the description covers what is needed to call it correctly. Only minor gaps remain around cache/refresh behavior and offset chaining, which the schema partly covers.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so offset/max_chars/refresh/source_id/notebook_id are already documented with usage hints. The description adds only the implicit notion of pagination, no syntax or default details beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lee una fuente') plus output format ('en Markdown') and behavior ('paginada'), which separates it from read_source_section and get_source_outline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the alternative workflow and the condition that selects it: for long documents use get_source_outline + read_source_section instead. This is exactly the routing an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_source_sectionB
Read-onlyIdempotent

Lee solo una sección (hasta el siguiente encabezado del mismo nivel o superior).

NameRequiredDescriptionDefault
offsetNoPosición (caracteres) desde la que leer dentro de la sección.
headingYesTítulo del encabezado (exacto o fragmento único). Ver get_source_outline.
max_charsNoTamaño de página. Por defecto y máximo: NLM_MAX_CHARS.
source_idYesID de la fuente (obtenlo con list_sources).
occurrenceNoSi el título se repite, cuál de ellos (1 = primero).
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered. The description adds real behavioral value by defining exactly what content is returned (the section ending at the next same-or-higher heading), but it says nothing about pagination semantics even though offset/max_chars exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is efficient, though its extreme brevity leaves the usage question unaddressed rather than wasting space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need no explanation, and annotations plus full parameter coverage handle safety and inputs. The one meaningful gap is that the description never clarifies when to prefer this over read_source or how pagination behaves in practice.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (offset, heading, max_chars, source_id, occurrence, notebook_id) is already documented in the schema. The description's section-boundary concept loosely supports heading/occurrence but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (a single section), and even defines the scope boundary as 'up to the next heading of the same or higher level', which cleanly distinguishes it from a whole-source read. It stops short of naming the sibling read_source explicitly, so the differentiation is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, no exclusions, and does not name an alternative such as read_source. The heading-related schema description points to get_source_outline, but that pointer lives in the schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_sourcesB
Read-onlyIdempotent

Búsqueda semántica de NotebookLM: fragmentos más relevantes ordenados por relevancia.

NameRequiredDescriptionDefault
limitNoMáximo de fragmentos (1-30).
queryYesConsulta en lenguaje natural.
source_idsNoLimita la búsqueda a estas fuentes.
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, openWorld and non-destructive behavior, so the safety profile is fully covered without the description. The description adds that results are fragments ordered by relevance, which is useful ranking context, but says nothing about scoring thresholds, empty-result behavior, or latency/cost of an open-world semantic search.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the key concept (semantic search, relevance-ranked fragments) front-loaded and no filler. It is efficient, though it spends its only clause on ranking rather than on the routing information an agent most needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full input schema and an output schema present, return values and parameters are covered elsewhere, so the description's remaining obligation is disambiguation from the other search/read tools, which it does not provide. Adequate but with an obvious gap for a tool sitting among four overlapping retrieval siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the note that notebook_id comes from list_notebooks, so the schema carries the parameter burden. The description contributes no additional semantics about query phrasing, the source_ids scoping, or the 1-30 limit, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: semantic search over NotebookLM sources returning the most relevant fragments ranked by relevance. It is clear what the tool does, but it never mentions how it differs from siblings like keyword_search, grep, or ask_notebook, leaving the agent to infer the distinction from the name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus keyword_search, grep, ask_notebook, or read_source, all of which could plausibly satisfy a lookup need. The only implicit cue is the word 'semántica', which an agent must interpret on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

source_statsA
Idempotent

Radiografía local de las fuentes: tamaño, palabras, encabezados y términos dominantes.

Sin notebook_id resume la caché entera por notebook (fuentes, caracteres y antigüedad), sin red ni cuota: es la vista para decidir sync_notebook o clear_cache. Con notebook_id mide fuente a fuente; con auto_sync=False mide solo lo ya cacheado y lista el resto en not_cached.

NameRequiredDescriptionDefault
termsNoCuántos términos dominantes devolver por fuente (1-30).
auto_syncNoDescarga a la caché las fuentes que falten.
source_idsNoLimita las métricas a estas fuentes (requiere notebook_id).
notebook_idNoNotebook a medir. Omitir = resumen de toda la caché local.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations present (readOnlyHint=false, openWorldHint=true, idempotent=true), the description adds real context: the no-notebook_id summary runs 'sin red ni cuota', while auto_sync can populate the cache and uncached sources are listed under not_cached. That reconciles the openWorld/write hints with the read-style summary. It stops short of describing cost or side effects of the auto-sync download path.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the resource and its metrics, then immediately covers the notebook_id-less case before the per-source case. Dense but every clause carries a mode distinction; slightly heavy in one paragraph but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All four modes are accounted for and an output schema exists, so return values need not be spelled out. Given a read-mostly, four-optional-parameter tool with cache semantics, this is enough for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description nonetheless adds semantics beyond the schema — the meaning of an omitted notebook_id (whole-cache summary) and the behavioral consequence of auto_sync=False (cached-only plus not_cached list). Source_ids and terms are left to the schema, which is acceptable at full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Radiografía local de las fuentes') and enumerates exactly what is measured: tamaño, palabras, encabezados y términos dominantes. It also distinguishes the two operating modes (cache-wide vs per-source) and names the downstream siblings it feeds (sync_notebook, clear_cache), so an agent can tell it apart from search_sources or list_sources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit routing is given for every mode: omit notebook_id to get the cache-wide summary used to decide sync_notebook or clear_cache; pass notebook_id to measure source by source; set auto_sync=False to measure only cached sources. The when-to-use condition is stated rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_notebookA
Idempotent

Descarga todas las fuentes del notebook en Markdown a la caché local (habilita keyword_search/grep sin esperas).

NameRequiredDescriptionDefault
forceNoVuelve a descargar todo aunque la caché esté vigente.
notebook_idYesID del notebook (obtenlo con list_notebooks).

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context: it writes Markdown copies into a local cache and is a prerequisite for latency-free keyword_search/grep. It omits cache staleness/disk-usage implications, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the core action front-loaded and the payoff (fast search) attached. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not needed, and annotations cover idempotency and safety. The only gap is that the description does not touch cache freshness/force behavior, which the schema handles, leaving little missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (notebook_id and force) are already documented in the schema, establishing the baseline of 3. The description says nothing about the force/re-download behavior, adding no meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (descarga) and resource (todas las fuentes del notebook) plus the output form (Markdown a la caché local). It also names the siblings it enables (keyword_search/grep), so an agent can distinguish it from read_source or search_sources without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(habilita keyword_search/grep sin esperas)' makes the when-to-use condition explicit: call this before relying on fast local search. It does not state when NOT to use it (e.g., cache already warm, or pairing with clear_cache), which keeps it below 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 23 tool updatesv0.1.0
    • First observedask_notebook
    • First observedclear_cache
    • First observedexport_markdown
    • First observedget_chat_history
    • First observedget_generation_status
    • First observedget_notebook
    • First observedget_source_guide
    • First observedget_source_outline
    • First observedget_usage
    • First observedgrep
    • First observedhealth_check
    • First observedkeyword_search
    • First observedlist_artifacts
    • First observedlist_notebooks
    • First observedlist_notes
    • First observedlist_sources
    • First observedread_note
    • First observedread_report
    • First observedread_source
    • First observedread_source_section
    • First observedsearch_sources
    • First observedsource_stats
    • First observedsync_notebook

TDQS

B3.4/5.0

Scored across 23 tools

Disambiguation4/5

Most tools target a clearly distinct resource/action (notebooks, sources, notes, reports, cache, quota). The main risk is the search trio—search_sources (semantic), keyword_search (BM25) and grep (regex)—which overlap conceptually, though descriptions explain when to use each. read_source vs read_source_section vs get_source_outline are also related but well differentiated.

Naming Consistency4/5

Predominantly consistent snake_case verb_noun pattern (list_notebooks, get_notebook, read_source, sync_notebook, clear_cache). A few deviations—grep (bare verb), keyword_search and source_stats (noun/adjective-noun), health_check—but they remain readable and predictable overall.

Tool Count3/5

23 tools is on the heavy side of the 16-25 band for a single server. Most tools earn their place (notebook/source/note/artifact lifecycle plus a cache and quota subsystem), but the search suite and cache utilities could be consolidated to reduce surface area.

Completeness3/5

The surface is strong on reading, searching and caching, but lacks creation/management operations: no create_notebook, add_source, create_note or delete tools. Notably, generate_report is referenced by read_report and get_generation_status but is absent from the tool list, creating a dead end for artifact generation.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to search, read, create, and maintain a local-first knowledge base using hybrid retrieval and Markdown note management through the Model Context Protocol.
    0
    1
    MIT
  • F
    license
    A
    quality
    A
    maintenance
    Enables agents to run hybrid dense and BM25 search over a local folder of Markdown files, read and write notes, and trigger reindexing as the folder changes. It also injects the most relevant sections into each prompt automatically and runs entirely locally with a bundled embedding model.
    12
    -
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI agents to capture, search, relate, review, and safely update a local-first Markdown knowledge vault through typed operations such as inventory, retrieve, run_view, update, add_attachment, trash, and restore. Agents get validated access to personal notes and attachments without a generic shell or arbitrary filesystem access.
    28
    36 PyPI
    Apache 2.0