nblm-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nblm-mcpSwitch to my work account and list my notebooks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
nblm-mcp
Servidor MCP de NotebookLM multicuenta, con cuenta y notebook pegajosos por sesión.
Está construido encima de notebooklm-py (MIT),
que habla la RPC interna de NotebookLM (batchexecute) en vez de automatizar el DOM con
un browser headless — por eso no se desloguea cada dos por tres. Este paquete no forkea esa
base: la usa como dependencia y le pone encima sólo lo que le falta.
Por qué esto y no otro MCP de NotebookLM
MCPs basados en Playwright/DOM |
| nblm-mcp | |
Transporte | Scraping del DOM | RPC interna | RPC interna |
Se desloguea | Constantemente | No (master-token) | No (master-token) |
Varias cuentas Google | No | Una por proceso ( | En caliente, |
Repetir | Sí | Sí | No, se inyecta solo |
Tools | Pocas | 33 | 38 |
Lo de multicuenta no es cosmético: una cuenta free de NotebookLM tiene ~50 consultas/día. Poder saltar de cuenta sin reiniciar el server es la diferencia entre seguir trabajando o parar.
Related MCP server: OneClickLM
Qué añade sobre las 33 tools de upstream
Tool | Para qué |
| Ver las cuentas de Google configuradas (una por perfil, cada una con su cuota) |
| Elegir cuenta en caliente; upstream ata el perfil al proceso, aquí no |
| Fijar el notebook activo; luego se puede omitir |
| En qué cuenta y notebook estamos |
| Qué anda y qué no: auth, config, cuentas — con una lista |
Cómo funciona por dentro: el cliente que ven las tools de upstream es un proxy
(SwitchingClient) que apunta al perfil activo, y un middleware (StickyContext) rellena el
notebook que falte. Cero cambios en las 33 tools originales, así que un uv sync -U trae
las mejoras de upstream gratis.
Con más de una cuenta configurada, el middleware exige account_use antes de tocar nada —
que es el flujo que se quiere: elegir cuenta → elegir/crear notebook → trabajar.
Dependencias
Python ≥ 3.11
uvpara instalar y correr (instalación)notebooklm-py[mcp,browser,headless]==0.8.0rc1— única dependencia directa; traefastmcp, el cliente RPC, el CLInotebooklmy las 33 tools.uvla instala sola.Un browser (Chromium/Chrome) sólo la primera vez, para el login inicial de cada cuenta.
Una cuenta de Google con acceso a NotebookLM.
Instalación
git clone https://github.com/Solar2004/nblm-mcp.git
cd nblm-mcp
uv syncAlta de cuentas (una vez por cuenta, la corre el humano)
uv run notebooklm login --master-token --account tu@gmail.com -p personal
uv run notebooklm login --master-token --account otra@gmail.com -p secundaria--master-token = un sign-in en el browser y a partir de ahí re-mintea cookies solo, sin browser.
El
master_token.jsonque queda en~/.notebooklm/es una credencial durable de tu cuenta de Google: trátalo como un secreto, no lo subas a ningún repo.
Comprobar que quedó bien: uv run nblm-mcp y llamar a la tool health, o directamente
uv run notebooklm doctor.
Cablearlo a un cliente MCP
Claude Code (.mcp.json del proyecto, o claude mcp add), Claude Desktop
(claude_desktop_config.json) y cualquier otro cliente stdio:
{
"mcpServers": {
"notebooklm": {
"command": "uv",
"args": ["run", "--directory", "/ruta/absoluta/a/nblm-mcp", "nblm-mcp"]
}
}
}También habla HTTP si hace falta:
uv run nblm-mcp --transport http --host 127.0.0.1 --port 9421Uso
Flujo típico desde el agente:
account_list()→account_use("personal")notebook_list()→notebook_use("Mi investigación")(acepta título, prefijo único o id)source_add(...)para meter fuentes,chat_ask(...)para preguntarstudio_generate(...)para audio, video, slide-deck, infographic, mind-map, report o quizstudio_download(path=...)para bajar lo generado y leerlo del disco
Desde el paso 2 en adelante ya no hace falta pasar notebook en ninguna llamada.
Tests
uv run python test_server.py # sin red: gate de cuenta, cambio de cuenta, inyección de notebookLímites (heredados de la base)
Usa una API interna no documentada de Google: puede romperse sin aviso.
~50 consultas/día en cuentas free (de ahí lo de multicuenta).
research_importno es atómico.Estado en memoria del proceso: con stdio hay un proceso por sesión de agente, que es justo el alcance que se busca.
Licencia
MIT. La base notebooklm-py también es MIT. Proyecto no afiliado a Google ni a NotebookLM.
Available Tools
38 toolsaccount_listA
Lista las cuentas de Google (perfiles) disponibles para NotebookLM.
Cada perfil es una cuenta con su propia cuota. Devuelve profile,
account (email), authenticated y default. Para anadir una cuenta,
el usuario debe correr en su maquina:
notebooklm login --master-token --account EMAIL -p NOMBRE_PERFIL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses that each profile has its own quota and specifies the return fields (profile, account, authenticated, default). It also notes that adding accounts requires a separate CLI command, providing operational context beyond a simple list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the main purpose. Every sentence earns its place: the first states what it does, the second explains the profile/quota context, and the third provides the alternative for adding accounts. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, an output schema exists, and the description covers return fields and usage context, the tool is fully specified. The quota note adds useful operational context, and the CLI guidance fills a likely user need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no parameter-specific details because none are needed; the schema is already empty and complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista') and clearly identifies the resource ('cuentas de Google (perfiles) disponibles para NotebookLM'). It distinguishes itself from sibling tools like account_use by focusing on listing available profiles rather than using them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies that this tool is for listing accounts and provides an explicit alternative workflow for adding accounts via a CLI command. While it doesn't mention sibling alternatives like account_use, the instruction to run `notebooklm login` for adding implies this tool is not for that purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
account_useA
Elige la cuenta con la que trabajaras el resto de la sesion.
profile es el nombre que devuelve account_list. Cambiar de cuenta
suelta el notebook activo (los notebooks no se comparten entre cuentas).
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosure. It notably reveals a key behavioral consequence: switching accounts releases the active notebook and that notebooks are not shared between accounts. This is valuable side-effect information beyond the basic action. It does not describe error conditions or return format, but for a simple selection tool, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences, no filler. The first sentence states the purpose, and the second provides the parameter source and a critical side-effect. It earns its place with zero waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one simple parameter and an output schema, the description is quite complete. It explains the action, the parameter semantics, and a key side-effect. It doesn't elaborate on output, but the output schema covers that. It could mention error cases or prerequisites, but these are not critical for account selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only a bare string parameter 'profile' with no description (0% coverage). The description compensates by explaining that profile is the name returned by account_list, giving the agent a clear source for the value. This is sufficient for a single parameter, though it lacks examples or format details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb ('Elige') and resource ('cuenta'), clearly stating the action: selecting the account for the rest of the session. It also distinguishes itself from sibling account_list by referencing the profile name as the return value of account_list, establishing a clear relationship and differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: when you need to switch to or select an account for the session. It also implicitly instructs to get the profile name from account_list. It does not explicitly state when not to use it or mention alternatives, but the session-scoping and notebook side-effect give the agent practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
await_uploadARead-only
Wait for a file uploaded via a source_add(source_type="file") link to land.
Pass the human_upload.url (or the bare token) that source_add returned.
Polls the server in-process until the browser/agent upload commits the source:
{"status":"received","source_id",...,"file":{...}}— the upload landed.{"status":"pending",...}— nothing yet after ~timeouts; re-invoke with the same link (the wait resumes; a transport reset does not lose it).{"status":"expired_or_invalid",...}— the link failed; mint a fresh one viasource_add(source_type="file").
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| upload_link | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations declaring readOnlyHint=true and destructiveHint=false, the description adds substantial behavioral detail: polling mechanism, timeout behavior, resumability across transport resets, and the three possible statuses. This goes far beyond the annotation and gives the agent a precise mental model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a brief intro, a parameter instruction, and a bulleted list of status outcomes. Every sentence is purposeful, no filler, and formatting aids quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (true), the description goes beyond it by explaining the full workflow: when to call, what to pass, what each status means, and how to handle pending/expired cases. It is complete for a polling tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate. It does so by explaining upload_link (from source_add return) and timeout indirectly ('after ~timeout s'). The default value is in the schema, so no issue. This is solid compensation for missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb+resource: 'Wait for a file uploaded via a source_add(source_type="file") link to land.' This clearly distinguishes it from siblings like source_add or source_wait by focusing on the file-upload link wait workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: pass the human_upload.url from source_add, re-invoke on pending, and mint a fresh link on expired_or_invalid. It does not explicitly mention alternatives like source_wait, but the usage context is well-defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chat_askA
Ask a notebook's sources a question, and/or recall prior turns. Accepts a notebook name or ID.
Pass conversation_id to continue a specific conversation; omit it to
continue the notebook's most-recent conversation (or start a new one).
source_ids (optional) scopes the question to specific sources by
id/prefix/title; omit it to query every source. It accepts a real list, a
JSON-array string, or a comma-separated string (the comma form cannot
carry a source title that itself contains a comma — use a JSON array or a
real list for those).
history (optional, default 0): the max number of prior Q&A pairs
(each a {question, answer}) to also return (oldest-first), from the
conversation as it stood before this question. There is no unbounded
"all" value — pass a generously large number (e.g. 100) for the whole
conversation. Omit question (leave it empty) with history > 0 to
recall prior pairs without asking anything new; a recall-only call also
echoes the conversation_id it read. Pass neither and the call is
rejected.
Returns the answer plus citation references (when a question is
asked). The internal raw_response debugging blob is never included.
references controls citation detail: lite (default) returns
source_id / citation_number / cited_text; full adds
chunk-level char offsets and scores.
suggest_followups (optional, default False): when True the
result also carries a suggested_prompts list of AI-suggested
follow-up questions (each a {title, prompt}), scoped to the same
source_ids and steered by question when one is given. It works on
its own too — pass it with no question (and history 0) to get
suggested questions without asking anything. When omitted/False the
result never contains a suggested_prompts key.
| Name | Required | Description | Default |
|---|---|---|---|
| history | No | ||
| notebook | Yes | ||
| question | No | ||
| references | No | lite | |
| source_ids | No | ||
| conversation_id | No | ||
| suggest_followups | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and excels: it discloses edge-case behaviors (comma-form source_ids limitation, 'no unbounded all' history), output details (raw_response never included, suggested_prompts key omitted when false), and side effects of a recall-only call echoing conversation_id. This is exemplary transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place, using bold parameter names and clear sub-clauses. It front-loads the core purpose before diving into parameter details, and avoids repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, multiple modes, and an output schema), the description covers all necessary usage details: parameter interactions, defaults, output guarantees, and rejection conditions. The existence of an output schema means return-value details are not required, so the added output behavior notes are a bonus.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds rich semantics for every parameter: notebook, conversation_id continuation, source_ids accepted formats, history default and meaning, references enum, and suggest_followups behavior. It even explains a subtle comma-embedded-title limitation, fully compensating for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action ('Ask a notebook's sources a question, and/or recall prior turns') and names the resource ('a notebook's sources'). It also covers the tool's dual modes, clearly distinguishing it from sibling tools like suggest_prompts (which only suggests follow-ups) and source_read (which reads sources).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use each parameter: continuing vs starting a conversation, scoping with source_ids, recall-only usage with history, and standalone suggestion mode. It also states a rejection condition ('Pass neither and the call is rejected'). However, it does not explicitly compare against sibling tools such as suggest_prompts, leaving some alternative-selection ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chat_configureA
Configure a notebook's chat behavior. Accepts a notebook name or ID.
Two mutually-exclusive ways to configure:
chat_modeis a preset — one ofdefault/learning-guide/concise/detailed. It replaces the whole block, so it can't be combined withgoal/response_length(that's rejected).goal(custom persona; selects the CUSTOM goal) andresponse_length(default/longer/shorter) set a custom config. A partial call (just one) merges with the current settings — the omitted field is preserved. Only a bare call (no preset, neither field) is rejected, as it would reset every setting to its default.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | No | ||
| notebook | Yes | ||
| chat_mode | No | ||
| response_length | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It explains that chat_mode replaces the whole block, custom fields merge with existing settings, and a bare call is rejected. It stops short of discussing persistence or permissions, but the key behavioral traits are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening sentence and bullet-style explanation of configuration modes. Every sentence contributes to understanding behavior, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description needn't document return values. It covers all parameters, required field, edge cases, and interaction rules, making it complete for a configuration tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds substantial meaning to all four parameters beyond the schema, mapping notebook to name/ID, enumerating chat_mode and response_length values, and explaining goal's role as a custom persona. It clarifies interaction semantics (mutual exclusion, merging, rejection), which the schema alone does not convey. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool configures a notebook's chat behavior, using a specific verb and resource. It distinguishes itself from sibling chat_ask by focusing on configuration rather than querying. The two configuration modes add specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides detailed usage guidance through two mutually exclusive configuration paths, including what combinations are rejected and how partial calls merge. It implies when to use it (when needing to set chat behavior) though it doesn't explicitly name alternative tools. This is clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
healthA
Diagnostico: dice que anda y que no, y que hacer si algo falla.
Se puede llamar sin haber elegido cuenta. Comprueba auth, config y
rutas de cada perfil configurado. Si ok es False, mira fix.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of transparency. It discloses that it checks auth, config, and routes for each profile, and that the output includes 'ok' and 'fix' fields when something fails. The word 'Diagnostico' implies a read-only operation, though it doesn't explicitly state that no changes are made.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: three short sentences, each adding value. The first sentence states the purpose, the second provides usage context, and the third explains output behavior. No unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameter-less diagnostic tool with an output schema, the description is complete. It explains what the tool does, when it can be used, what it checks, and how to interpret the output. The output schema handles the detailed return structure, so the description need not repeat it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no schema to explain. The description adds appropriate context about its operation, matching the baseline for parameter-less tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a diagnostic tool that reports what works and what doesn't, and provides fix instructions. The verb 'diagnostico' and resource ('health' of profiles) are specific, and the mention of checking auth, config, and paths distinguishes it from sibling status tools like 'studio_status' or 'session_status'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use the tool: it can be called without selecting an account, and it checks profiles' auth, config, and paths. However, it does not explicitly mention alternatives or when not to use it, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_createB
Create a new notebook with the given title.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'create a new notebook' without mentioning side effects, permissions, idempotency, or whether existing notebooks with the same title are allowed. This lacks critical behavioral context for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded with the action and resource. No unnecessary words, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one parameter and an output schema, so return values are covered by the schema. However, the description lacks behavioral context like error conditions, validation, or creation semantics (e.g., requires a workspace or handles duplicates). For a create operation, this is minimally sufficient but leaves gaps in operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one required parameter 'title' (string), and the description merely restates 'with the given title'. This adds no meaning beyond the parameter name and type. For 0% schema description coverage, the description fails to provide additional semantic value such as title format, uniqueness, or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Create' and resource 'notebook', clearly indicating the action. It distinguishes from siblings like notebook_list and notebook_rename by focusing on creation with a title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like notebook_rename or notebook_delete. It simply states the function without context on prerequisites, exclusions, or alternative selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_deleteADestructive
Delete a notebook (irreversible). Accepts a notebook name or ID.
Two-step confirmation: called with confirm=False (the default) it does
NOT delete — it returns a needs_confirmation preview of the resolved
notebook. Call again with confirm=True to perform the delete.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| notebook | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant context beyond annotations: describes irreversibility and the exact two-step confirmation flow, including the fact that default call returns a preview without deleting. Annotations only declare destructiveHint, so this description enriches agent understanding of safety and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact paragraphs with the core action front-loaded. Every sentence adds essential behavioral detail; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-step delete tool with an output schema, the description fully explains the default preview behavior, the confirmation parameter, and irreversibility. It is complete for an agent to use correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% coverage, but description compensates by explaining that 'notebook' accepts a name or ID and that 'confirm' is a boolean defaulting to false, triggering preview vs actual delete. This gives functional meaning to both parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Begins with a specific verb+resource: 'Delete a notebook (irreversible).' Clearly distinguishes from siblings like notebook_create, notebook_list, and notebook_rename by stating the delete action. Also clarifies input type ('name or ID').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear contextual guidance on the two-step confirmation process and how confirm=False vs true changes behavior. Does not explicitly name alternative tools for exclusion, but the resource-specific nature makes the use case unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_describeARead-only
Fetch a notebook's AI-generated description. Accepts a notebook name or ID.
Returns the resolved notebook_id plus the AI description. Pass
include_metadata=True to additionally fetch the notebook's metadata
(details + source list) and surface it under a metadata key; the
default output (include_metadata omitted) is unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| notebook | Yes | ||
| include_metadata | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only (readOnlyHint=true, destructiveHint=false), and the description complements this by detailing the return structure (notebook_id, description, and optional metadata) and the effect of include_metadata. It does not contradict the annotations and adds context about output formatting. It doesn't cover error cases or rate limits, but for a read operation that's acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, starts with the core purpose, and every clause provides useful information. It avoids fluff and repetition, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the presence of an output schema, and supportive annotations, the description covers the main behavior, parameters, and return shape. It's sufficiently complete for an agent to invoke confidently, even without mentioning error scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema has no parameter descriptions (0% coverage), the description fully compensates by explaining that 'notebook' accepts a name or ID and that 'include_metadata' controls whether metadata is included, with the default behavior unchanged. This adds meaning beyond the raw schema types, so it earns a high score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and clearly identifies the resource ('a notebook's AI-generated description'). It also notes that it accepts a name or ID, which distinguishes it from notebook_list and other mutation siblings. No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to prefer this tool over alternatives or mention exclusions, but the purpose is clear enough that an agent can infer when to use it (whenever the AI description of a specific notebook is needed). It also explains how to optionally get metadata via include_metadata, which guides parameter usage. However, it lacks explicit when-to-use vs alternative statements, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_listARead-only
List all notebooks (id + title + metadata).
Returns a bounded page: limit (default 50) items from offset (default
0), plus total / offset / has_more. Page forward by re-calling
with offset += limit while has_more is true.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavior beyond that: it reveals the bounded page nature, default values, and the pattern for forward pagination with offset/limit and has_more. This discloses the actual behavior without contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core purpose and followed by pagination details. Field names are in backticks for clarity. No filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a simple read-only list tool with an output schema, the description covers all essential aspects: what is listed, pagination mechanics, defaults, and the page-advance algorithm. Nothing substantive is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%—the schema only provides types and defaults. The description compensates fully by explaining what limit and offset do, including defaults (50, 0) and how to use them for paging (offset += limit). This gives the agent everything needed to pass parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' with a clear resource ('all notebooks') and specifies the returned fields (id + title + metadata). This clearly distinguishes it from sibling tools like notebook_describe (single notebook details) and mutation tools like notebook_create/delete/rename.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains how to page through results using limit/offset and has_more, which is usage guidance. However, it does not explicitly state when to use this tool versus alternatives like notebook_describe or notebook_search, nor does it mention any exclusions. Clear context without alternative naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_renameB
Rename a notebook. Accepts a notebook name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| notebook | Yes | ||
| new_title | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose any behavioral traits beyond the action of renaming, which is also apparent from the tool name. It does not mention side effects, reversibility, permissions, or error conditions. With no annotations provided, the description carries the full burden of safety disclosure, and it fails to do so.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence, front-loaded with the primary action. It contains no filler or redundant information. Every word contributes to understanding the tool's purpose and key parameter behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity and the presence of an output schema (which presumably documents return values), the description covers the essential usage. It states the action and the acceptable input format. However, it lacks context about error cases or whether the notebook must exist, but for a simple rename operation, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description partially compensates for the 0% schema coverage by clarifying that the 'notebook' parameter accepts a name or ID. However, it provides no additional meaning for 'new_title', leaving that to be inferred from the name. It adds value for one parameter but not the other.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Rename a notebook.' This distinguishes it from sibling tools like notebook_create, notebook_delete, and notebook_describe. It also adds useful detail that it accepts a notebook name or ID, further clarifying its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like source_rename or studio_rename. It does not mention prerequisites, exclusions, or context. The only hint is the tool name itself and the generic action, which is insufficient for an agent to decide between rename tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notebook_useA
Fija el notebook activo (acepta titulo, prefijo unico o id).
Despues de esto puedes omitir notebook en las demas tools: se rellena
solo. Pasa otro para cambiar.
| Name | Required | Description | Default |
|---|---|---|---|
| notebook | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It reveals that the tool changes session state (active notebook) and affects subsequent tool calls by auto-filling the notebook parameter. It also acknowledges that passing another value changes the active notebook. This is sufficient transparency for a state-setting tool, though it does not mention validation or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences. The first sentence states the core purpose and input format; the second explains the behavioral consequence and how to change. Every word earns its place, with no redundancy or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having only one parameter and no annotations, the description fully covers the tool's purpose, input semantics, and behavioral effects on subsequent tool usage. The existence of an output schema reduces the need to document return values, and no critical information appears missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides a required string parameter 'notebook' with no description. The description adds meaning by specifying that it accepts a title, unique prefix, or ID, which is crucial for understanding what values are valid. This fully compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Fija el notebook activo' (sets the active notebook), with a specific verb and resource. It also clarifies accepted input formats (title, unique prefix, or id), distinguishing it from sibling tools like notebook_create or notebook_delete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys when to use the tool: before other tool calls to avoid specifying the notebook parameter each time. It states that after using this tool, 'puedes omitir `notebook` en las demas tools' and that passing another notebook changes the active one, giving clear context. It does not explicitly name alternative tools, but the usage pattern is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
note_saveA
Create a note, or update an existing one (upsert). Accepts a notebook name or ID.
Mode is chosen SOLELY by note:
noteomitted → create a new note;titleANDcontentare both required. Returnsstatus="created".notegiven (a note name or id) → update that note; supplytitleand/orcontent(at least one — title-only renames, content-only replaces the body). A ref that doesn't resolve is a not-found error, NEVER a stray create. Returnsstatus="updated".
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| title | No | ||
| content | No | ||
| notebook | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility. It discloses critical behaviors: create vs. update modes, required fields, status returns ('created'/'updated'), title-only rename, content-only body replacement, and the never-stray-create error policy. This is thorough and preempts common misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-sentence purpose followed by a bulleted list of mode-specific rules. Every sentence adds value, with no filler. The formatting makes the create/update distinction easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and an output schema, the description covers the essential logic, required parameters, error behavior, and status returns. It does not explicitly state whether the notebook must already exist, but this is a minor gap given the level of detail provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so the description is the sole source of parameter meaning. It explains that 'notebook' accepts a name or ID, 'note' governs mode, and 'title'/'content' have different requirements depending on mode. This fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates or updates a note (upsert) and accepts a notebook name or ID. The verb 'Create' and 'update' are specific, and the note resource is unambiguous. Although there are no sibling note tools, the description fully clarifies the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: mode is chosen solely by the 'note' parameter, with clear instructions for create (require title and content) and update (supply at least one of title/content). It also explains that an unresolved ref errors rather than creating. It does not compare to alternatives, but no alternative note-save tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_cancelA
Cancel an in-flight research run in a notebook.
Accepts a notebook name or ID and the poll_task_id to cancel — the
value from research_start / research_status. run_id is a
deprecated alias (removed in v0.9.0).
Sends the cancel unless the run is already TERMINAL (completed /
failed), which returns cancel_requested: false with the observed
status and no RPC. Otherwise returns cancel_requested: true with
run_status_before; a just-started run reading not_found /
no_research (replication lag) is cancelled too. Fire-and-forget; poll
research_status afterward to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | No | ||
| notebook | Yes | ||
| poll_task_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to rely on, the description fully discloses behavior: terminal-run behavior (cancel_requested: false, no RPC), non-terminal behavior (cancel_requested: true, run_status_before), replication-lag edge case, and fire-and-forget semantics. This is exceptional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet comprehensive, organized into three short paragraphs: purpose, parameters, and behavioral details. Every sentence adds essential information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of annotations, the description covers all key aspects: what it does, required parameters, edge cases, return flag semantics, and next steps. An output schema exists, but the description still adds value by explaining the cancel_requested flag and statuses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain parameters. It does so thoroughly: notebook accepts name/ID, poll_task_id comes from research_start/research_status, and run_id is a deprecated alias. All three parameters are semantically covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Cancel an in-flight research run in a notebook.' This clearly distinguishes it from siblings like research_start and research_status, which are explicitly mentioned for context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the main use case (cancel in-flight research) and gives a follow-up guideline: 'Fire-and-forget; poll research_status afterward to confirm.' It does not explicitly exclude alternatives, but the context and mention of related tools make usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_importA
Import a completed research task's sources into the notebook.
Accepts a notebook name or ID and the poll_task_id to import — the
value from research_start / research_status. task_id is a
deprecated alias (removed in v0.9.0).
The id pins the task. Timeout-tolerant: a timed-out import reconciles
what committed. Idempotent: sources already present (by URL) are skipped
as already_present; allow_duplicate re-adds them.
cited_only imports only report-cited sources (all, if none resolve).
max_sources caps the count.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | ||
| notebook | Yes | ||
| cited_only | No | ||
| max_sources | No | ||
| poll_task_id | No | ||
| allow_duplicate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does this well by explaining timeout tolerance ('reconciles what committed'), idempotency (duplicate URLs skipped as 'already_present'), the allow_duplicate re-add behavior, and the cited_only fallback. This goes beyond a simple 'import' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense. It front-loads the purpose in the first sentence, then organizes behavior into short paragraphs with clear inline code references. Every sentence adds useful context without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 params, no annotations) and the presence of an output schema, the description is quite complete. It covers key behaviors, parameter origins, and edge-case handling. It could briefly mention error scenarios or what happens with invalid IDs, but the overall picture is solid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must explain all parameters. It covers every parameter: notebook (name or ID), poll_task_id (source from research_start/research_status), task_id (deprecated alias), allow_duplicate (re-adds duplicates), cited_only (report-cited filtering with fallback), and max_sources (caps count). This is strong compensation for the lack of schema descriptions, though a bit more detail on max_sources and notebook resolution could push it higher.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb+resource: 'Import a completed research task's sources into the notebook.' It distinguishes this from sibling tools like research_start, research_status, and source_add by focusing on the import action and identifying the source of the poll_task_id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states when to use the tool: after a research task is completed, using the poll_task_id from research_start/research_status. It also clarifies that task_id is deprecated. It does not explicitly list alternatives, but the context of importing research results makes the use case clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_startA
Start a research session in a notebook. Accepts a notebook name or ID.
Non-blocking. Carry the returned poll_task_id into
research_status / research_import / research_cancel — the
single id that drives polling (it resolves deep vs fast for you). Poll
research_status until completed, then research_import to add
the sources.
source is web (default) or drive. mode is fast
(default) or deep (deep is web-only).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | fast | |
| query | Yes | ||
| source | No | web | |
| notebook | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries the burden. It discloses non-blocking behavior, the poll_task_id contract, and the deep web-only constraint. This goes beyond what schema reveals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise paragraphs, front-loaded with the main action, then workflow, then parameter options. Every sentence is informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the async nature, it explains the full lifecycle: start, poll, import. Output schema exists, so return values aren't described in prose, but poll_task_id is mentioned. Minor omission of error/edge cases, but overall very usable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains notebook (name/ID), source (web/drive), mode (fast/deep) and the deep-is-web-only constraint. Query is implied by the tool's purpose, and parameter names are self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Cleary states the tool starts a research session in a notebook, and distinguishes from siblings by referencing the follow-up tools (research_status, research_import, research_cancel). It has a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear workflow guidance: poll research_status until completed, then research_import. It also explains source/mode options and the deep web-only constraint. Slight lack of explicit when-not-to-use, but context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_statusARead-only
Check a notebook's research status. Accepts a notebook name or ID.
Returns status (no_research|in_progress|completed|failed|not_found),
poll_task_id, the sources, and report metadata. Poll until
completed, then pass poll_task_id to research_import.
report and each source's report_markdown are omitted by default;
set include_report=True (optionally report_max_chars) to include
them, truncated to that length. report_char_count is the full size;
report_truncated flags an omitted/truncated report.
source_limit / source_offset page sources.
poll_task_id (optional) pins one of several in-flight tasks; omit it
for a single task (ambiguous with two+ running). An unmatched pin reports
not_found. task_id is a deprecated alias (removed in v0.9.0).
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | No | ||
| notebook | Yes | ||
| poll_task_id | No | ||
| source_limit | No | ||
| source_offset | No | ||
| include_report | No | ||
| report_max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description richly discloses behavior: default omission of report/source markdown, truncation behavior, source pagination, ambiguous task pinning, and the deprecated task_id alias. This goes well beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into short, information-dense sentences. It front-loads the core purpose, then systematically covers return values, optional parameters, and edge cases. No sentence is wasted; it is appropriately sized for 7 parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers all relevant use cases: polling, report inclusion/truncation, pagination, ambiguous task pinning, and deprecation. Since an output schema exists, it does not need to re-explain return structures, but it still adds useful field-level context (e.g., report_char_count, report_truncated).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates fully. It explains notebook (name or ID), poll_task_id (pinning), include_report, report_max_chars (truncation), source_limit/source_offset (pagination), and task_id (deprecated alias). Every parameter is given meaningful semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource: 'Check a notebook's research status.' It specifies what the tool does (returns status) and differentiates it from sibling tools like research_start, research_cancel, and research_import by focusing on the status-checking and polling workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the polling workflow: 'Poll until completed, then pass poll_task_id to research_import.' It also gives parameter-level usage guidance (e.g., 'omit it for a single task (ambiguous with two+ running)') and distinguishes from the next step, research_import.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_infoARead-only
Report the server version and local authentication health.
Returns the package version and an auth block (authenticated /
storage_exists / json_valid / cookies_present / sid_cookie /
profile). Use it to confirm the server is logged in before driving
notebook tools; if authenticated is false, run notebooklm login on
the server host.
Set include_account=True to also fetch an account block: the
signed-in identity {email, authuser} (in-memory/persisted first, then a
single live WIZ_global_data probe when authenticated — email is
None only when it can't be discovered at all) plus quota-pacing fields
{available, notebook_limit, source_limit, tier, output_language}
(output_language is the global account setting, e.g. "en"/"ja",
or None when unset or unparseable). The quota fields need a live
session (a few reads), so the block is off by default — the default call is
a fast, network-free probe. When the session is missing or stale the quota
fields degrade to {available: False, reason: ...} (identity still
included) rather than failing the whole call.
profile names the resolved storage profile the probe ran against
(e.g. "default"); the booleans are the actual health signals.
The absolute on-disk storage path is deliberately not returned: it leaks the server-host OS username / filesystem layout to any (possibly remote) caller, while telling the agent nothing it can act on.
| Name | Required | Description | Default |
|---|---|---|---|
| include_account | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description reveals significant behavioral details: default call is a fast network-free probe, quota fields degrade gracefully when the session is stale instead of failing, and the deliberate omission of the on-disk storage path for security reasons. This level of depth exceeds what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but very well-structured, with clear sections for return values, the include_account behavior, and a security note. Every sentence adds value, but it could be slightly more concise without losing critical detail. The front-loaded purpose sentence helps orientation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description comprehensively covers the tool's behavior: return fields, parameter effects, default vs. extended modes, degradation logic, and security rationale. It also references the output schema implicitly by detailing the auth and account blocks, making it self-sufficient for an agent to choose and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only lists 'include_account' with no description (0% coverage). The description fully compensates by explaining what setting it to True fetches, the structure of the account block, and the trade-off (live session needed for quota fields). This gives the agent complete understanding of the parameter's purpose and consequences.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Report the server version and local authentication health.' It clearly separates this tool from siblings by focusing on authentication status and account information, making it distinct from health or session_status tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use it to confirm the server is logged in before driving notebook tools.' It even provides a remediation step if authentication fails (run notebooklm login). However, it doesn't directly compare with alternatives like health or session_status, nor explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_statusB
Dice que cuenta y que notebook estan activos ahora mismo.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It indicates a read-only informational role, which is transparent, but it does not clarify what 'active' means, whether authentication is required, or whether it only reports the current session. This is minimal but not misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no waste. It front-loads the action and resource, but the informal phrasing and lack of context around 'active' reduce its polish slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description covers the core purpose but leaves ambiguity about the meaning of 'active' and whether it reports all accounts or just the current one. The output schema likely fills return format details, so a 3 is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds semantic value by specifying the scope of the result (which account and notebooks), which is essential since the schema is empty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports which account and notebooks are active, using a specific verb and resource. It differentiates from sibling status tools (studio_status, research_status) by explicitly naming account and notebook scope, though it could be more formal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The phrase 'ahora mismo' implies current status, but there is no exclusions or mention of complementary tools, leaving the agent without clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_addA
Add a source to a notebook — single, batch, or in-channel bytes. Accepts a notebook name or ID.
Call in exactly ONE of two modes:
Single mode — pass source_type; it selects the required input:
url/youtube— requireurl(youtube→ a YouTube link).text— requirestext;titleoptional.file— over stdio, requirespath(a local path on the server host). Over the remote (http) connector the host filesystem is unreachable, so it returnsupload_requiredwith two actor paths:human_upload(open the signed URL in a browser) andagent_upload(an agent POSTs the bytes as the raw body);agent_instructionsgives the rule (tryagent_upload, elsehuman_upload.url). Alternatively passbytes_base64to add a SMALL file in-channel (any transport, no signed URL): standard base64 (not URL-safe) ≤ 10,000 chars (≈ 7 KB);filenameseeds the title/extension. A bigger file must take the signed URL (≤ 200 MiB).drive— requiresdocument_id+mime_type(one of google-doc|google-slides|google-sheets|pdf; required, no default — a wrong default fails non-Doc imports, #1827).
The single-mode content inputs are mutually exclusive — supply only the one
your source_type requires (bytes_base64 is the file alternative to
path). An explicit title for url/youtube/drive is honored via a post-add
rename; a miss returns title_override_applied: false (#1960).
Pass wait=true to block until the ONE added source finishes processing and
return the source_wait aggregate (buckets + per-bucket *_count +
total_count) with a top-level source_id (present even on timeout/failure);
timeout/interval tune the poll. wait is single-mode only and NOT for a
remote file signed-URL upload (add it, then source_wait). Without wait
the added source is echoed under source with string kind /
status_label labels; imports are ASYNCHRONOUS so the echo is usually still
processing/preparing — confirm with source_wait or
source_list(status="error"). A failed import is flagged inline
(status_label="error" + a warning); source_wait also flags a READY web
page with suspiciously thin text (dead link/soft-404/paywall).
Batch mode — pass urls (a list of http/https URLs, YouTube links
included) to add many in one call instead of one round-trip each. Each entry is
validated and added independently; the response is an explicit per-item list so
partial failure is never hidden::
{"notebook_id": …, "added": <int>, "failed": <int>,
"results": [{"input": "<url>", "status": "added", "source_id": …,
"title": …, "status_label": …, "warning"?: …},
{"input": "<url>", "status": "error",
"error": {"code": …, "message": …, "retriable": …, "hint"?: …}}]}results is positional (results[i] is for urls[i]); status is
"added" or "error" (the ADD outcome). An "added" item also carries the
source's status_label and, when the add response already reflects a failed
import, an inline warning — same failure-signaling as single mode. A per-URL
input failure (bad URL / 404 / SSRF-blocked host) isolates as an error
item; a fatal service failure (expired auth, rate limit, upstream 5xx) aborts
the whole call. Batch is URL-only: a non-URL entry (plain text, a local path,
file:///ftp://) is reported as a per-item VALIDATION error. The
single-mode named inputs (incl. bytes_base64/filename/wait) are not
valid with urls; allow_internal applies to every entry.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| path | No | ||
| text | No | ||
| urls | No | ||
| wait | No | ||
| title | No | ||
| timeout | No | ||
| filename | No | ||
| interval | No | ||
| notebook | Yes | ||
| mime_type | No | ||
| document_id | No | ||
| source_type | No | ||
| bytes_base64 | No | ||
| allow_internal | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden and does so thoroughly: discloses async import behavior, partial-failure isolation in batch, upload_required flow, transport-specific filesystem limits, base64 size cap, title override behavior, and error signaling (inline warnings, status_label). Even details timeout/interval polling semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although long, the description is well-structured with headers, bullet lists, and a code block for the batch response. Every section adds distinct, non-redundant value. Issue references add traceability without bloating. The front-loaded purpose makes the tool immediately understandable despite its complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 15 parameters, no output schema, and no annotations, the description is remarkably complete: covers return formats for both modes, error handling, async status, size limits, transport differences, and wait polling. It leaves no significant gap for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet every parameter is explained in context: source_type picks required inputs, wait/timeout/interval, notebook, mime_type, document_id, bytes_base64, filename, urls, allow_internal, title. Constraints like mutual exclusivity and base64 length limits are explicitly stated, which is essential for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: 'Add a source to a notebook — single, batch, or in-channel bytes.' Clearly identifies the action and scope, and distinguishes from siblings like source_delete/source_list. Accepts a notebook name or ID, which is a necessary qualifier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit mode selection rules: single vs batch, when wait should be used, and clear exclusions (e.g., wait is not for remote file signed-URL uploads; batch rejects non-URL entries). References source_wait and source_list as complements. Does not explicitly mention the sibling source_add_drive_file, but the drive mode is fully covered via source_type='drive'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_add_drive_fileA
Add a Google Drive file by downloading it server-side and uploading it (supports epub/docx/txt/md/rtf/odt/csv/tsv/pdf).
Probes the Drive file and routes: a downloadable type is fetched server-side and
uploaded; a Google-native Doc/Slides/Sheet isn't downloadable and returns a pointer
error → use source_add(source_type='drive', mime_type=…) for those (or for a
Drive PDF you'd rather add by reference). Use source_add(source_type='file') when
you hold the bytes locally.
Accepts a notebook name or ID and a Drive file id or share URL (/d/<id>,
/file/d/<id>/…, ?id=<id>). The fetch runs server-side with the profile's
session, so it works on the remote (http) connector too — no upload_required
step. Processed ASYNCHRONOUSLY; pass wait=true to block until READY (else
confirm via source_wait / source_list(status="error")).
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | ||
| title | No | ||
| notebook | Yes | ||
| document_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses async processing, the wait flag, server-side fetch, pointer-error routing, and remote-connector compatibility. It doesn't detail permissions or side effects beyond 'add', but the most critical non-obvious behaviors are clearly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense paragraphs each serve a distinct purpose: definition, routing/alternatives, and input formats plus async behavior. Every sentence adds useful information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, return-value documentation is unnecessary. The description covers tool-specific routing, supported formats, async semantics, wait behavior, and error-confirmation via source_wait/source_list. This is complete for a tool with this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It clearly explains that notebook accepts a name or ID, document_id accepts a Drive file ID or share URL in multiple formats, and wait controls blocking behavior. The optional title parameter is not explicitly described, but its purpose is inferable from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Add a Google Drive file by downloading it server-side and uploading it.' It clearly distinguishes this tool from siblings by naming source_add(source_type='drive', mime_type=…) and source_add(source_type='file') as alternatives for different cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use and when-not-to-use guidance: Google-native Docs/Slides/Sheet should use source_add(source_type='drive', mime_type=…), and local bytes should use source_add(source_type='file'). It also explains when to pass wait=true and how to verify async completion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_deleteADestructive
Delete a source (irreversible). Accepts a notebook/source name or ID.
Two-step confirmation: with confirm=False (default) it returns a
needs_confirmation preview of the resolved source without deleting;
call again with confirm=True to perform the delete.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| confirm | No | ||
| notebook | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already indicate destructiveHint=true, the description adds critical behavioral details: the confirmation flow, that the default call is a non-destructive preview, and that irreversible deletion only occurs with confirm=True. This goes well beyond the annotations and is essential for safe usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the core purpose and then provide necessary usage detail. No wasted words, every sentence contributes to understanding the tool's behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool, the description explains the essential confirmation workflow and irreversibility, which is the most critical context. It does not mention error conditions or the exact format of the preview, but given the output schema exists and the two-step process is clear, it is reasonably complete. The slight ambiguity around identifier formats keeps it from being perfect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description compensates by explaining that `source` can be a name or ID and that `confirm` controls the two-step behavior. However, the phrase 'notebook/source name or ID' is slightly ambiguous regarding whether `notebook` is also a name or ID, so it does not fully clarify all parameter nuances.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Delete a source (irreversible)', which is a specific verb and resource that clearly distinguishes this from sibling tools like source_read or source_rename. It also clarifies that it accepts a name or ID, further eliminating ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two-step confirmation process is clearly described, giving explicit instructions on how to use the tool safely (preview with confirm=False, then delete with confirm=True). However, it does not explicitly contrast with alternatives or state when not to use the tool, so it's slightly below a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_listARead-only
List a notebook's sources. Accepts a notebook name or ID.
detail (default full): full gives each source's metadata plus string
kind / status_label labels; compact returns only id / title
/ kind / status_label / created_at — a low-token roster.
Pass status to list only sources whose status_label matches (error =
a broken import's ghost row). Pass label (name or ID) to restrict to that
label's members; composes with status.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | ||
| limit | No | ||
| detail | No | full | |
| offset | No | ||
| status | No | ||
| notebook | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a safe read operation (readOnlyHint=true, destructiveHint=false). The description adds value by explaining the difference between 'full' and 'compact' detail, the meaning of status 'error' as a ghost row, and how labels compose with status. This goes beyond the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: it opens with the primary purpose, then uses a compact code-block style to explain parameters. Every sentence adds meaningful detail, avoiding redundancy. It is well-sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description sufficiently covers the tool's behavior and filtering options. It lacks explicit mention of pagination behavior (limit/offset) and does not enumerate all status values, but these are present in the schema. Overall, it provides a solid understanding without over-explaining.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the 'detail' parameter (full vs compact), the 'status' filter (including 'error' semantics), the 'label' parameter, and the 'notebook' parameter in prose. The 'limit' and 'offset' pagination parameters are not explicitly described, but they are standard and have defaults in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List a notebook's sources.' This uses a specific verb and resource, and the additional note about accepting a notebook name or ID clarifies the input. It distinguishes itself from sibling tools like source_read or source_delete by focusing on the listing operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on how to use the tool, including filter options (status, label) and detail levels. However, it does not explicitly mention exclusions or alternatives like 'use source_read for a single source's content.' It still offers sufficient guidance for typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_readARead-only
Read a source at one of two detail levels. Accepts a notebook/source name or ID.
detail selects what you get back (two distinct shapes):
summary— a tiny AI digest for low-token triage:{notebook_id, source_id, summary, keywords}. Cheap to fan out across many sources before deciding which to pull in full.full(DEFAULT) — the source metadata (incl. stringkind/status_label) plus the extractedcontent, the fullchar_count, and atruncatedflag.contentis ALWAYS bounded: omittingmax_charscaps it at the first 10,000 chars; raisemax_charsand/or page withoffset(slice[offset : offset+max_chars]).char_countstays the FULL length.contentisnull(char_count0) when the source isn't ready yet or has no extractable text.
output_format (text default / markdown, needs the server's
markdownify extra) and max_chars / offset apply only to
detail="full" (ignored for summary). Prefer chat_ask for
querying large sources rather than pulling the whole body.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | full | |
| offset | No | ||
| source | Yes | ||
| notebook | Yes | ||
| max_chars | No | ||
| output_format | No | text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description adds substantial behavioral context beyond that. It discloses content length limits (default 10,000 chars), pagination via offset/max_chars, that char_count stays full length, content null when not ready, and that output_format markdown requires a server extra. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but densely structured with bullet points and code blocks. Every sentence earns its place, delivering detailed parameter semantics and return shapes without redundancy. It is front-loaded with a clear purpose statement and then organized detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description explains return values thoroughly, including both detail shapes and edge cases like truncated content and null content. It also covers the 'markdownify' dependency and refers to chat_ask for large sources, making the tool's behavior fully understandable in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates. It explains each parameter: detail chooses the return shape, offset/max_chars slice the content, output_format controls formatting, and provides the exact return keys for summary and full. This goes far beyond the schema's bare enum/type definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Read a source at one of two detail levels.' It clearly differentiates from sibling tools like source_list, source_delete, and source_wait by focusing on reading the content/metadata at chosen detail levels. The two detail shapes (summary vs full) further clarify the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'summary' is recommended for low-token triage across many sources, 'full' for detailed content, and it explicitly says 'Prefer chat_ask for querying large sources rather than pulling the whole body.' This names an alternative and provides context on when to choose one approach over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_renameC
Rename a source. Accepts a notebook/source name or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| notebook | Yes | ||
| new_title | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing effects. It states the core rename action but doesn't mention consequences like whether old references are updated, permission requirements, or reversibility—significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that includes both the action and identifier semantics. It earns its place, though the phrase 'notebook/source name or ID' is structurally unclear and could be rephrased for better readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a rename tool with no annotations and incomplete parameter descriptions, the overall context is insufficient. The agent knows what the tool does but lacks the behavioral and usage context needed to invoke it confidently in varied situations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The phrase 'Accepts a notebook/source name or ID' adds partial meaning for identifying the source/notebook, but new_title is left undescribed, and the exact relationship between notebook and source is unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Rename a source') with a clear resource, distinguishing it from sibling tools like source_delete or notebook_rename. The verb and object are unambiguous, even if the subsequent identifier phrase is slightly awkward.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives, such as source_add or notebook_rename. It neither specifies prerequisites nor mentions exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
source_waitARead-only
Wait for sources to finish processing. Accepts a notebook name or ID.
Waits for a subset when sources (list or comma/JSON string) is given, a
single source when source (name or ID) is given, else every source. All
three modes return the SAME structured aggregate, so an agent never has to
branch on the shape:
{"notebook_id", "ok", "ready", "timed_out", "failed", "not_found"}plus per-bucket *_count + total_count. ready holds sources that
reached READY (with kind / status_label labels); timed_out /
failed / not_found hold {"source_id", "error"} entries. ok is
true iff all error buckets empty. Subset
and all-sources modes report partial progress (a slow or failed source no
longer discards the ones that did become ready).
A READY web-page entry may carry a non-blocking warning when its indexed
text is thin (likely dead link / soft-404 / paywall); advisory only
(still READY, still ok — verify with source_read (detail="full")).
An unresolved ref in sources / source raises NOT_FOUND before the wait —
an input error, distinct from a resolved source the backend reports missing /
failed / slow (which lands in a bucket).
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | ||
| sources | No | ||
| timeout | No | ||
| interval | No | ||
| notebook | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint=true and destructiveHint=false, the description adds substantial behavior beyond annotations: it discloses the exact aggregate return shape, the meaning of 'ok', the contents of error buckets, partial progress semantics, warning behavior for web pages, and the distinction between input errors (NOT_FOUND before wait) and backend-reported failures. This is rich, non-obvious behavior that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is organized into clear paragraphs, front-loads the purpose, uses a code block for the output schema, and every sentence adds critical detail (return shape, partial progress, warnings, error semantics). It is dense but not verbose; all content earns its place given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully specifies the return value (aggregate keys, buckets, counts, ok flag), explains all three input modes, and covers edge cases (unresolved refs, partial progress, advisory warnings). It also references source_read for additional verification. The only minor omission is explicit units for timeout/interval, but this does not undermine overall completeness for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain 'sources' (list or comma/JSON string), 'source' (name or ID), and 'notebook' (name or ID). However, 'timeout' and 'interval' are not explained at all—units and semantics are left to inference from their names and defaults. With 5 parameters and 0% schema help, this partial coverage leaves gaps, but the description does meaningfully clarify the core selector parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: "Wait for sources to finish processing." It clearly identifies the operation and distinguishes it from sibling tools like source_read (which reads content) and source_list (which lists sources). The scope (notebook name or ID) and three waiting modes are all laid out, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (waiting for sources to finish processing) and details the three modes (sources, source, all), which guides selection. It also provides an exclusion: when a READY web-page entry has a warning, the agent should not trust it unconditionally and instead "verify with source_read (detail='full')" — an explicit alternative for that sub-case. This is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_deleteADestructive
Delete a Studio item (irreversible) — a text note OR an artifact.
Accepts a notebook name or ID plus an item name-or-id ref resolved over
the merged notes+artifacts list. Routing is by resolved type: a note is
deleted via the note system; an artifact via the artifact delete RPC (which
itself clears a note-backed mind map through the note system rather than
hard-removing it — Google may garbage collect it later).
Two-step confirmation: with confirm=False (default) it returns a
needs_confirmation preview of the resolved item without deleting; call
again with confirm=True to perform the delete. Deleting an already-absent
full id is idempotent (no error) — it routes down the artifact path (a
present note would have been found in the list).
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| confirm | No | ||
| notebook | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations by detailing the two-step confirmation flow, idempotency for absent full IDs, routing behavior, and the artifact-delete nuance that it clears a note-backed mind map rather than hard-removing it. This adds significant insight into the tool's runtime behavior and edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds necessary information: purpose, routing, confirmation flow, idempotency, and artifact-specific behavior. It is well-structured, starting with the core purpose and then escalating into edge cases without any filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (two-step confirmation, type routing, idempotency, and artifact clearing semantics), the description is exceptionally complete. It covers the full workflow, expected inputs, and subtle behaviors. The presence of an output schema means return values need not be detailed, but even without it, the description is self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameter descriptions, but the description explains all three parameters: 'notebook' as a name or ID, 'item' as a name-or-id ref resolved over the merged notes+artifacts list, and 'confirm' with its default false behavior leading to a preview. This fully compensates for the schema's lack of description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a Studio item (irreversible) — a text note OR an artifact.' This specifies the exact action (delete), the resource (Studio item), the scope (notes or artifacts), and the irreversible nature. It distinguishes the tool from sibling delete tools by focusing on Studio items and their dual types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear operational context: it accepts notebooks and items, routes by resolved type, and explains the two-step confirmation. However, it does not explicitly state when to prefer this tool over alternatives or mention exclusion conditions (e.g., 'use source_delete for sources instead'). The context is strong but lacks explicit naming of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_downloadA
Download a generated artifact. Accepts a notebook name or ID.
Target the artifact in ONE of two ways (exactly one):
artifact— a name-or-id ref (title / id / unique-id-prefix), the form the otherartifact_*tools take; resolves to its type + id.artifact_type— one of audio|video|slide-deck|infographic|report| mind-map|data-table|quiz|flashcards, optionally withartifact_id(full or unique-prefix) for a specific one; omitartifact_idto get the latest artifact of that type.
output_format overrides the default file format where supported:
slide-deck → pdf|pptx; quiz/flashcards → json|markdown|html.
Over stdio the artifact is written to path (required). Over the
remote (http) connector the server filesystem is unreachable, so the tool
returns a clickable resource_link plus {"status": "download_ready", "url": …} — a short-lived signed URL; path is ignored. A text kind
(report/data-table) also returns the body inline (bounded content +
char_count + truncated) for link-incapable hosts. On the remote
connector an explicit artifact_id (and output_format) is validated up
front — an unknown/ambiguous id fails immediately, not as a 400 when opened.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| artifact | No | ||
| notebook | Yes | ||
| artifact_id | No | ||
| artifact_type | No | ||
| output_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden: it discloses that over remote the path is ignored and a signed URL is returned, that text kinds return truncated inline content, and that explicit artifact_id is validated up front. This exceeds typical behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with a one-sentence summary, bullet lists, and transport sections. Every sentence adds functional information; the length is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers dialog semantics, return values for remote and text kinds, error validation, and output format support. The absence of an output schema is mitigated by explicit response descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains all six parameters—notebook name/ID, artifact ref, artifact_type with enum values, artifact_id prefix, output_format mappings, and transport-dependent path. It adds meaning far beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Download a generated artifact,' a specific verb+resource pairing. It further details the two targeting modes, distinguishing it from sibling tools like studio_list and studio_generate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit instructions on exactly-one targeting between artifact and artifact_type, and explains when to use each with artifact_id. Transport-specific guidelines (stdio vs remote) and output_format overrides provide clear context, though it doesn't explicitly compare against alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_generateA
Start generating a studio artifact. Accepts a notebook name or ID.
Non-blocking: returns immediately with a task_id; poll
studio_status(notebook, task_id) until is_complete is true.
Exception: mind-map renders synchronously (no task_id) — its node
tree is under mind_map (or null), the map's id under mind_map_id.
artifact_type selects the artifact kind (each routes to its own
generator):
audio— podcast-style overview (audio_format: deep-dive|brief|critique|debate,audio_length: short|default|long).video— video overview (video_format: explainer|brief|cinematic|short,style: auto|custom|classic|whiteboard| kawaii|anime|watercolor|retro-print|heritage|paper-craft,style_prompt: free-text custom-style prompt — requiresstyle=custom).cinematic-video— AI-generated documentary video.slide-deck— slide deck (deck_format: detailed|presenter,deck_length: default|short).quiz/flashcards— study aids (quantity: fewer|standard|more,difficulty: easy|medium|hard).infographic— single-image infographic (orientation: landscape|portrait|square,detail: concise|standard|detailed,style: auto|sketch-note|professional|bento-grid|editorial| instructional|bricks|clay|anime|kawaii|scientific).data-table— extracted data table.mind-map— mind map (map_kind: interactive|note-backed).report— text report (report_format: briefing-doc|study-guide|blog-post|custom).
Each per-kind option is valid ONLY for the kind(s) listed above; passing one
to a different artifact_type is a validation error, not a silent no-op.
Options default to the standard choice when omitted.
source_ids (optional) scopes generation to specific sources; omit it
to use every source. It accepts a real list, a JSON-array string, or a
comma-separated string (a source title containing a comma needs the
JSON-array or list form).
instructions is free-text guidance for kinds that accept it
(including mind-map). language (optional) is a language code,
e.g. en/ja/zh_Hans.
| Name | Required | Description | Default |
|---|---|---|---|
| style | No | ||
| detail | No | ||
| language | No | ||
| map_kind | No | ||
| notebook | Yes | ||
| quantity | No | ||
| difficulty | No | ||
| source_ids | No | ||
| deck_format | No | ||
| deck_length | No | ||
| orientation | No | ||
| audio_format | No | ||
| audio_length | No | ||
| instructions | No | ||
| style_prompt | No | ||
| video_format | No | ||
| artifact_type | Yes | ||
| report_format | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does so thoroughly: non-blocking behavior, task_id, synchronous exception for mind-map, validation errors, default behavior, and source_ids input formats. It sets clear expectations beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every segment adds necessary detail for an 18-parameter tool. It is structured with a clear initial statement, a notable behavioral note, and a bulleted artifact-type breakdown, making it scannable despite length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, the description still adds essential return-value context (task_id, mind_map, mind_map_id), error semantics, and per-type options. It is complete for effective invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates comprehensively. It explains each artifact_type's associated options, defaults, relationships, and even source_ids format variations (list, JSON string, comma-separated). This adds far more meaning than the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Start generating a studio artifact', a specific verb+resource statement that immediately distinguishes this tool from siblings like studio_status or studio_list. It also lists ten artifact types, reinforcing its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage flow: non-blocking returns task_id, poll studio_status until complete. Notes synchronous exception for mind-map, and warns that per-kind options are invalid for other artifact types. This is clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_listARead-only
List a notebook's Studio panel — text notes AND generated artifacts.
Accepts a notebook name or ID. Returns a merged items list; each item has
id / title / type (note or a hyphenated artifact kind); artifacts
also carry status_label / url. Bounded page of limit (default 50)
from offset, with total / offset / has_more.
detailladder (NOTE bodies only; read a report/data-table body viastudio_download):summary(default) gives each note a boundedcontent_preview+char_count(artifacts addcreated_at+generation_prompt, the free-text prompt the artifact was generated from,nullwhen it records none);full= wholecontent;compact= aid/title/type/status_label/created_atroster.kindfilters to onetype.item(name or id) fetches just that item as a 1-element list with the note's FULLcontent(an artifact also carries itsgeneration_prompt); no match is NOT_FOUND.limit/offset/detailare ignored withitem;kindscopes resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| item | No | ||
| kind | No | ||
| limit | No | ||
| detail | No | summary | |
| offset | No | ||
| notebook | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true and destructiveHint=false, and the description adds substantial behavioral detail: pagination bounds (limit/offset, total, has_more), the detail ladder (summary, full, compact), item-specific behavior (returns 1-element list with full content, NOT_FOUND on no match, ignores limit/offset/detail), and kind scoping. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but densely informational, with a clear first line, then structured paragraphs and bullet-style lists for detail and item behaviors. Every sentence contributes meaning; there is no fluff or repetition. The front-loading of the core purpose and the organized breakdown of parameter interactions make it highly effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, multiple behaviors, output schema exists), the description is remarkably complete. It covers pagination, the detail ladder, kind filtering, single-item fetches, and error behavior (NOT_FOUND). Since an output schema exists, return values need not be fully re-explained, but the description still outlines item fields. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the full burden. It explains every parameter: notebook (name or ID), item (name or id), kind (filters to one type), limit/offset (pagination), detail (three levels with exact field differences), and notes interactions such as 'kind scopes resolution' and 'limit/offset/detail are ignored with item.' This fully compensates for the empty schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'List a notebook's Studio panel — text notes AND generated artifacts.' It clearly distinguishes this tool from siblings like studio_generate (creates) and studio_download (fetches artifact bodies) by stating it lists both notes and artifacts in a merged list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance for when to use studio_download instead ('read a report/data-table body via studio_download'), and clarifies that item fetches a specific item, ignoring other params. It provides context about the detail ladder and kind filtering, but could more explicitly contrast with studio_status or studio_generate. Overall, it offers clear context with one explicit alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_renameA
Rename a Studio item (title only) — a text note OR an artifact.
Accepts a notebook name or ID plus an item name-or-id ref resolved over
the merged notes+artifacts list (mirroring studio_delete). Routing is by
resolved type: a note is renamed through the note system, preserving its
content via a get-then-update; every artifact type — audio, video,
slide-deck, quiz, flashcards, infographic, data-table, report, and BOTH
mind-map kinds — through the artifact rename RPC (note-backed mind maps route
back through the note system inside the shared core). Callers need not know
which backing an item has.
Returns item_id / type plus the applied new_title and
is_mind_map.
| Name | Required | Description | Default |
|---|---|---|---|
| item | Yes | ||
| notebook | Yes | ||
| new_title | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the transparency burden. It discloses routing by resolved type (note vs. artifact), the get-then-update mechanism for notes, the artifact rename RPC for all artifact types, the mind-map special case, and the exact return fields (item_id, type, new_title, is_mind_map). This is highly detailed and goes well beyond minimal safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds value: purpose, parameter semantics, routing logic, and return values. The main purpose is front-loaded, and there is no filler or repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (mixed note/artifact types, routing by type, mind-map special case), the description is complete. It covers all three parameters, the resolution rule, the different backing types, and the return values. The presence of an output schema does not create gaps because the description already explains the output shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so thoroughly: notebook is described as accepting a name or ID, item is described as a name-or-id ref resolved over the merged notes+artifacts list, and new_title is clarified by the 'title only' constraint. The routing logic further explains how the item parameter is interpreted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Rename a Studio item (title only) — a text note OR an artifact,' which clearly identifies the verb (rename), the resource (Studio item), and the scope (title only). It distinguishes the tool from siblings like studio_delete and studio_list by focusing specifically on the rename operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (renaming any Studio item regardless of its backing type) and references studio_delete for the ref resolution pattern, but it does not explicitly state when not to use it or list alternative tools for similar operations. This is clear context but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_retryA
Retry a failed Studio artifact in place (the UI "Retry" action).
Accepts a notebook/artifact name or ID. Non-blocking: on acceptance it
returns the kicked-off task_id (equal to the artifact id) and the new
status; poll studio_status(notebook, task_id) until complete. A
synchronous refusal (rate limit / quota / not-retryable) surfaces as an error.
| Name | Required | Description | Default |
|---|---|---|---|
| artifact | Yes | ||
| notebook | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden and does an excellent job: discloses non-blocking behavior, return values (task_id, status), that task_id equals artifact id, the need to poll studio_status, and synchronous refusal conditions (rate limit/quota/not-retryable). This exceeds typical transparency expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight paragraphs front-load the purpose and then efficiently pack behavioral details, return values, and error handling into compact, high-value sentences. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with two params, no annotations, and an output schema, the description covers purpose, behavior, return values, polling strategy, and error cases. It provides agents with enough operational detail to invoke and follow up correctly, making it functionally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has zero description coverage, but the description states 'Accepts a notebook/artifact name or ID', clarifying that both parameters accept either a name or ID. This adds meaningful semantics beyond the bare string type, though it does not elaborate on what constitutes a notebook or artifact in this context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with 'Retry a failed Studio artifact in place', a specific verb+resource that clearly identifies the action and scope. It explicitly references the UI 'Retry' action and distinguishes itself from sibling tools like studio_generate by focusing on retrying existing failed artifacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use (retrying a failed artifact) and instructs polling via studio_status after acceptance. It does not explicitly state when not to use the tool or name alternative tools for regeneration, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
studio_statusARead-only
Poll a generation task's status. Accepts a notebook name or ID.
Stateless: pass the task_id from studio_generate. Returns status /
url / error / is_complete / media_ready; poll until done. A
pending url is provisional — trust it only if media_ready.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | ||
| notebook | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the readOnlyHint/destructiveHint annotations: statelessness, polling lifecycle, return fields, and the critical caveat that a pending URL is provisional until media_ready. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences with no filler. The purpose is front-loaded, and every sentence adds operational value, including return fields and the provisional URL caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the polling workflow, status fields, trust caveat, and producer relationship. With an output schema present and read-only annotations, no significant gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explaining that notebook accepts a name or ID and that task_id comes from studio_generate. This gives meaningful semantic meaning to both parameters, though it leaves some type/format details to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Poll') and clearly identifies the resource ('a generation task's status'), explicitly scoping it to generation tasks and referencing studio_generate. This distinguishes it from sibling status tools like research_status or share_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent to pass the task_id from studio_generate and to poll until done, establishing a clear usage context. It does not explicitly name alternatives or exclusions, but the producer relationship and polling pattern are sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_promptsARead-only
Get AI-suggested, ready-to-send prompts for a studio surface. Accepts a notebook name or ID.
surface selects what the prompts are written for (default ask):
ask— chat questions to ask the notebook's content.audio-deep-dive/audio-brief/audio-critique/audio-debate— prompts to steer an Audio Overview in that format.video-explainer/video-short— prompts to steer a Video Overview.quiz/flashcards— prompts to steer quiz / flashcard generation.
Each result is a ready-to-send instruction you can pass to the matching
generator (chat_ask for ask; studio_generate's instructions for
the studio formats). source_ids (optional) scopes the suggestions to
specific sources; omit for all. query optionally steers the suggestions.
Related: chat_ask(suggest_followups=true) returns ask-surface
suggestions inline with a question (ask + follow-ups in one call); this tool
is the standalone selector across every surface.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| surface | No | ask | |
| notebook | Yes | ||
| source_ids | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds behavioral context beyond that: results are 'ready-to-send,' they can be passed to specific generators, and source_ids/query affect the output. This goes beyond a bare read-only declaration, though it does not discuss auth or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, a bulleted list for surface options, and a related-tools note. It is longer than average but every sentence adds necessary detail; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has rich schema (9 enum values), an output schema, and multiple parameters. The description covers the purpose, parameter meanings, output usage, and a key alternative, providing complete context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full responsibility. It explains every parameter: notebook accepts a name or ID, surface has a default and detailed meanings for each enum, source_ids scopes to specific sources (with 'omit for all'), and query steers suggestions. This fully compensates for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Get AI-suggested, ready-to-send prompts for a studio surface.' It clearly distinguishes this tool from siblings by framing it as the standalone selector across every surface, and by listing specific surfaces (ask, audio formats, video formats, quiz/flashcards) and matching generators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names an alternative ('chat_ask(suggest_followups=true)') and explains when that alternative is appropriate versus this standalone tool. It also states that results can be passed to matching generators, giving clear guidance on how 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
38 tool updates
v0.1.0- First observed
account_list - First observed
account_use - First observed
await_upload - First observed
chat_ask - First observed
chat_configure - First observed
health - First observed
note_save - First observed
notebook_create - First observed
notebook_delete - First observed
notebook_describe - First observed
notebook_list - First observed
notebook_rename - First observed
notebook_use - First observed
research_cancel - First observed
research_import - First observed
research_start - First observed
research_status - First observed
server_info - First observed
session_status - First observed
share_remove_user - First observed
share_set_access - First observed
share_set_user - First observed
share_status - First observed
source_add - First observed
source_add_drive_file - First observed
source_delete - First observed
source_list - First observed
source_read - First observed
source_rename - First observed
source_wait - First observed
studio_delete - First observed
studio_download - First observed
studio_generate - First observed
studio_list - First observed
studio_rename - First observed
studio_retry - First observed
studio_status - First observed
suggest_prompts
TDQS
Most tools target distinct resources and actions, but a few overlap: server_info, health, and session_status all cover diagnostics/status, and source_add vs source_add_drive_file could be confused. Descriptions are detailed enough to disambiguate with careful reading.
The naming is predominantly verb_noun with clear resource prefixes (notebook_, source_, studio_, research_, share_, account_). Minor deviations: server_info, session_status, and health are noun phrases, and source_add_drive_file is a long compound, but the overall pattern is consistent and predictable.
38 tools is well above the 25+ threshold and feels excessive for a single MCP server. While the domain is broad, several tools overlap (server_info/health/session_status, source_add variants) and could be consolidated, resulting in unnecessary complexity.
The tool surface covers the full lifecycle for notebooks, sources, chat, studio artifacts, research, sharing, and account management. Minor gaps exist, such as no dedicated notebook get (covered by notebook_describe) and no source update (sources are immutable), but no critical workflows are missing.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
MCP server for building and testing AI agents with multi-model experimentation and insights.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Related MCP Servers
- AlicenseAqualityCmaintenanceAn unofficial MCP server for Google NotebookLM that enables users to manage notebooks, add sources, ask questions with citations, and generate audio podcasts via a Playwright-based automation layer.19MIT
- AlicenseAqualityDmaintenanceA robust MCP server for NotebookLM that provides auto-healing authentication, zero-config setup, and tools to list, query, create notebooks, and manage sources.62MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for querying Google NotebookLM notebooks, enabling AI assistants to list notebooks, read sources, and ask questions about them.MIT
- AlicenseBqualityBmaintenanceMCP server that provides ~39 tools to interact with Google NotebookLM's internal API, enabling notebook management, source addition, chat queries, and Studio artifact generation through stdio, HTTP, and SSE transports.39MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Solar2004/nblm-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server