notebook-dossier
It turns NotebookLM Deep Research into an MCP workflow for evidence-grounded research, source verification, viewpoint comparison, and citation-grounded export.
Check NotebookLM upstream login/profile status without returning credentials.
Start a web + deep research job with idempotent
request_keyand get aresearch_id.Poll research status, including long polling, phase, elapsed time, discovered-source counts, and adaptive next-poll suggestions.
Read paginated results: findings, full report, digest, evidence, comparisons, tasks, and answers, including
cite_mapand citation warnings.Import selected or all discovered sources into NotebookLM, record mappings, reconcile mismatches, and handle task-ID conflicts.
Fetch a single source’s metadata and indexed text excerpt with content hash and retrieval time.
Ask NotebookLM questions restricted to specified
source_ids, with per-answer citation keys.Extract per-source evidence cards in background tasks, with quote matching, resume/skip behavior, and validation states.
Compare viewpoints across common questions, enforce evidence rules, and merge host-AI comparison drafts.
Export a research dossier directory containing manifest, report, sources, evidence, viewpoints, and writing brief, with credential scanning.
Wraps Google NotebookLM Deep Research as an orchestration layer: starts deep research runs, saves and reconciles all discovered sources, extracts per-source evidence cards verified against original text, compares viewpoints across sources (consensus, conflict, gaps), and exports a citation-grounded research brief (manifest, report, sources, evidence, viewpoints, writing brief).
Click on "Deploy 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., "@notebook-dossierstart deep research on quantum computing and export a citation brief"
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.
notebook-dossier
NotebookLM Deep Research as an MCP server: start deep research, keep every source, verify each claim against the original text, compare viewpoints, and export a citation-grounded writing brief. Evidence-first knowledge groundwork for writers, analysts, and patent practitioners.
把 NotebookLM Deep Research 封装成 MCP,服务「写文章前的知识调研」:
研究主题 → 深度检索 → 保存完整来源 → 逐篇核验依据 → 比较共识与分歧 → 输出文章研究底稿。
现状
已实现:MCP 服务器(10 个工具
dossier_*)、SQLite 任务存储、上游notebooklm-mcp适配器、逐来源证据卡、观点比较不变量、研究底稿导出。验证:
tests/43 项通过(幂等启动、跳过续跑、任务租约与心跳、调用审计、导入对账、错误信封、导出守卫);stdio 冒烟 tools/list 通过;真实账号验收完成一轮(2026-10-16:deep 模式确认、46 来源发现、36 导入 + 9 对账未命中、4 来源 47 证据卡、限定来源问答,详见文末清单)。
Related MCP server: RECON
架构
AI 写作客户端(宿主 AI)
│ MCP (stdio)
▼
notebook-dossier ── SQLite(research_jobs/sources/evidence/comparisons/answers/tasks)
│ MCP (stdio 子进程,版本固定)
▼
notebooklm-mcp-cli @ a277ce7 (0.15.5) ── 登录/Profile 由其自行管理
│ 网页内部协议(非官方)
▼
NotebookLM Deep Research / 来源 / 聊天与引文本服务只做「研究编排 + 证据整理 + 导出」;登录、NotebookLM 协议细节全部留在上游适配器。两侧数据目录互相隔离(见下)。
安装
uv sync # 本服务依赖 + dev(pytest)
uv sync --extra upstream # 可选:安装固定版本上游(提供 notebooklm-mcp 命令)上游登录(使用独立 Google 账号/Profile):
.venv\Scripts\nlm.exe login --profile research --storage protected # 弹浏览器窗口,自己完成 Google 登录
.venv\Scripts\nlm.exe login --check # 只检查当前登录是否有效
.venv\Scripts\nlm.exe doctor # 出问题时诊断MCP 客户端接入(stdio):
{
"mcpServers": {
"nlm-research": {
"command": "uv",
"args": ["--directory", "D:/OMP/app-dev/notebooklm", "run", "notebook-dossier"],
"env": { "NLM_APP_DIR": "D:/OMP/app-dev/notebooklm/.nlm-app" }
}
}
}OMP 挂载(实测)
OMP 的用户级配置在 ~/.omp/agent/mcp.json(mcpServers 里加条目后 /mcp reload)。本机已挂载 notebook-dossier(2026-10-16 由 nlm-research 改名):
"notebook-dossier": {
"type": "stdio",
"command": "D:\\OMP\\app-dev\\notebooklm\\.venv\\Scripts\\notebook-dossier.exe",
"args": [],
"env": {
"NLM_APP_DIR": "D:\\OMP\\app-dev\\notebooklm\\.nlm-app",
"NLM_UPSTREAM_COMMAND": "D:\\OMP\\app-dev\\notebooklm\\.venv\\Scripts\\notebooklm-mcp.exe"
},
"timeout": 600000
}要点:timeout 必须大于导入/长问答耗时(OMP 默认 30 秒会截断 dossier_import 等调用);NLM_UPSTREAM_COMMAND 用绝对路径,否则 OMP 启动的子进程 PATH 里找不到上游命令。
配置(环境变量)
变量 | 默认 | 说明 |
| 系统用户数据目录 | 任务库、研究产物、导出目录 |
|
| 上游 MCP 命令 |
| 空 | 上游命令参数(空格分隔) |
| 上游保存的默认 profile | 指定上游登录 profile(如 |
| 240 | 单次问答超时(秒) |
| 120 | 来源索引等待(秒) |
| 300 | 导入超时(秒) |
| 120 | 任务租约:心跳超过该秒数才允许其他进程接管为 interrupted |
|
| 审计表中的调用方标识(多宿主共库时建议在各宿主配置里命名) |
账号 / profile 说明(实测)
每个 profile 必须单独登录才可用:
nlm.exe login --profile research --storage protected。未登录的 profile 会静默回退到默认账号会话(实测:
NLM_PROFILE=research未登录时notebook_list仍返回默认账号的笔记本)。因此换账号必须nlm.exe login --check --profile <名>验证,dossier_auth_status也会把auth_status != configured判为未连接。nlm doctor提示的nlm auth storage set protected是建议项:把明文 cookie 迁入系统密钥库,执行后用nlm login --check确认,失效就重登。nlm doctor提示的nlm setup add <client>不需要执行:那是把原始上游 MCP 挂进 AI 工具;本项目要挂的是notebook-dossier(见上方 stdio 配置)。
工具
工具 | 用途 |
| 本地/在线登录状态(不返回凭据)与下一步动作 |
| 启动 Deep Research(web + deep),返回 |
| 查状态并同步完整报告与全量发现来源;返回 |
| 分页读取: |
| 导入并逐来源记录映射;收尾自动对账(按 Notebook 实际来源清单回填漏配, |
| 单来源元数据 + 索引文本摘录(含内容版本哈希、取得时间) |
| 指定 |
| 逐来源(单独会话)提取证据卡,短引文与原文比对;返回任务号;断点续跑:已有证据卡的 (来源, 问题) 组合自动跳过 |
| 按共同问题比较观点,生成共识/差异/缺口;可并入宿主 AI 的比较草稿 |
| 导出研究底稿目录(manifest/报告/sources/evidence/viewpoints/writing-brief) |
长时间工作(取证、比较)返回任务号,用 dossier_status / dossier_result(view="tasks") 读取进度。任务生命周期语义:
后台任务存活于服务进程内,MCP 连接断开/进程退出即终止;已落库的成果不丢(证据卡逐条写入)。
重放即恢复、不重复:
dossier_evidence按 (来源, 问题) 组合跳过已有证据卡;比较按问题替换空壳行;导入按状态跳过已导入。任务租约:任务带
owner_id+ 心跳;新进程只接管心跳超过NLM_TASK_LEASE_SECONDS的任务,不会误杀兄弟进程(如 OMP 挂载与驱动脚本共用一个NLM_APP_DIR)正在跑的任务。运行期间(含上游长查询)由心跳 ticker 自动续租;被接管的任务旧运行方不再写入,同一 (来源, 问题) 不会重复出卡。调用审计:每次工具调用写入
audit_log(actor、工具、参数摘要哈希、时间),多宿主互扰时可直接归因;参数正文与凭据不入库。
错误信封(机器可判)
所有错误统一返回:{status:"error", code, error, hint?, uncertain, retry_safe, recovery_tool?, ...}
code | 含义 | 调用方动作 |
| research/source ID 不存在 | 按 |
| 参数非法 | 修正参数 |
| 前置条件未满足(未导入/缺 notebook_id) | 按 |
| 来源超出强制范围 | 只用本研究已导入来源 |
| 任务 ID 语义存疑,导入暂停 | 人工核对后 |
| 非 deep 模式启动,拒绝静默降级 | 核对账号能力,勿当 deep 结果使用 |
| 结果不确定(可能已生效) | 先对账( |
| 上游调用失败/无最终回答 | 视 |
| 导出触发凭据/内容守卫 | 修正数据后重试 |
任务 ID 归一化:一研究一 Notebook,「本 Notebook 内完成态 + 有报告」时任务 ID 表示形式变化(base64 型 vs UUID 型)自动采纳并在 task_id_note 留痕;完成态无报告等语义存疑情形才保留 task_id_conflict 守门。
报告质量与可观测性
引用一致性校验:报告
[cite: N]论断中的案号/法条号/判例报告号/日期/数字与被引来源做实体级比对,输出citation_warnings(claim / source_says / severity)。两层:findings 同步后用来源标题先查案号/法条类高价值实体(零成本);原文预取后对全文重算。只抓编号级错配,不冒充语义核验;来源无文本记unverifiable,不谎报通过。进度可见:
phase(researching → awaiting_import → fetching_texts → analyzing → comparing → ready)、elapsed_ms、sources_discovered、自适应suggested_next_poll_seconds(20s→45s→90s);dossier_status(wait_seconds=N)长轮询把 N 次轮询压成 1 次调用。中间态可读:findings 返回
cite_map(cite 编号 → 稳定 source_id,报告自身不占引用位)与cite_map_basis(validated/ambiguous/assumed:用实体命中率对编号假设自检,不给假确定性);每来源one_line_takeaway(提取式,导入取原文后才有)。结果体积:
view=report按cursor(字符偏移)+max_chars分页并给章节清单;view=digest提取式执行摘要(开篇综述 + 结论段 + 高被引来源 + 告警统计,≤1500 字);findings/report 均带next_action提示dossier_export。
软件强制的证据规则
以下不是提示词愿望,而是代码不变量(compare.py):
仅未提及 ≠ 反对:存在
not_mentioned陈述时,contradicts自动降级为not_mentioned并留校验记录。冲突必须双方原文:
contradicts需要 ≥2 个不同来源的原文引文匹配,否则降级为unknown。转载合并计:同
provenance_group(同规范 URL 或同内容哈希)的支持合并计 1 份独立支持。报告不重复计证据:机器生成的研究报告与其依据的网页来源不算两份独立证据。
元数据不补齐:作者/日期等拿不到就留 null/未知,不由模型编造。
引文编号按回答隔离:长期标识用
research_id:answer_seq#编号关联稳定 source/evidence ID。
验证状态分层记录:quote_matched(原文摘录已匹配)≠ analyst_confirmed(原文支持该解释,人工确认)≠ independent_corroboration(独立证据互证)。
导出目录
<export_root>/<research_id>/
manifest.json 主题、任务、覆盖统计(discovered/selected/imported/ready/readable/analyzed/verified)、文件 sha256
notebooklm-report.md 完整原始研究报告(机器生成,单独标记)
sources.json 发现/选择/导入/读取状态、去重映射、内容版本(不含正文)
evidence.json 逐来源主张与原文支撑(含适用条件、局限、验证状态)
viewpoints.md 共识、差异、原因与证据缺口
writing-brief.md 五部分:知识框架 / 逐来源支撑表 / 观点差异 / 可写角度 / 待核验项导出前执行凭据扫描(cookie/token/authorization 等键或行即中止);导出物不含 Cookie、令牌、浏览器 Profile。
已知边界
NotebookLM 个人版网页协议非官方,方法 ID/响应结构随时可能变;失败时错误带修复提示,不静默降级(如 deep → fast 会直接报错)。
导入映射(上游返回 → 本地来源)可能漏配(URL/标题字段不齐)导致
import_uncertain;用reconcile_only=True对账回填,实测有效(39/45 全量命中)。上游研究任务 ID 在运行中会变化(base64 型 ↔ UUID 型):「同 Notebook 完成态 + 有报告」自动归一化(
task_id_note留痕),仅语义存疑时才task_id_conflict+confirm_task_id人工放行(两种路径均实测过)。NLM_UPSTREAM_COMMAND必须是绝对路径:PATH 解析可能命中另一份安装(实测那份读不到受保护凭据,报 "No authentication found")。Deep Research 当前要求账号年满 18 岁,来源额度不足时可能只导入部分;
import_uncertain表示结果不确定,需对账。URL 来源只抓页面文本(无图片/嵌入视频/子页面);索引文本是导入时快照,不等于网页当前全文。
转载识别是近似:同规范 URL / 同内容哈希归并;不同转载 URL 的同稿无法自动识别,可在
sources.json人工改provenance_group。fastmcp 4 客户端与上游(较旧 SDK)握手时,上游 stderr 会打印
server/discover校验告警;工具调用不受影响。可选后端(Gemini API Deep Research、NotebookLM Enterprise API)未接入;需要时另做 provider。
cite 编号语义由上游生成且未文档化:
cite_map基于「报告自身不占引用位」假设并用实体命中率自检,cite_map_basis如实标注 validated/ambiguous/assumed。引用校验为编号/数字级,抓不到不带数字的语义歪曲(判例要旨张冠李戴但无编号时无告警);
unverifiable表示来源文本不可得,绝非「校验通过」。deep research 进行中上游不暴露已发现来源数:
sources_discovered在完成时准确(或透传上游sources_found),研究中只有phase可见。one_line_takeaway与digest均为提取式(原文首句 / 开篇+结论段拼接),不是模型重写摘要。
测试与验收
uv run pytest # 43 项离线测试Available Tools
10 toolsdossier_auth_statusDossier Auth StatusB
查询 NotebookLM 上游的本地登录与在线状态(不返回任何凭据)。
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No | 可选,切换到指定的上游账号 profile。 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses that no credentials are returned, which is a security-relevant trait, but it omits whether the tool performs network requests, requires authentication, or has 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?
The description is a single, front-loaded sentence that delivers the core purpose and one key behavioral caveat without any wasted words. Perfectly sized for a simple status-check tool.
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, a complete input schema, an output schema that covers return values, and no annotations, the description covers the essential purpose and a security note. It falls short only on usage context and deeper operational behavior, which are minor for this type of read-only query.
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 100%, and the schema fully documents the optional profile parameter. The description adds no additional meaning about the parameter, so baseline 3 is appropriate.
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 gives a specific verb (查询/query) and resource (本地登录与在线状态/login and online status) scoped to the NotebookLM upstream. It does not explicitly differentiate from the sibling dossier_status, so the agent must infer the distinction from the name.
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 what the tool checks but offers no guidance on when to use it versus alternatives like dossier_status, nor any prerequisites or exclusions. Usage context is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dossier_compareDossier CompareA
按共同问题比较各来源观点,生成共识/差异/缺口(后台任务,返回任务号)。
软件强制规则:仅未提及≠反对;冲突结论必须有双方原文引文;转载合并计、报告不重复计证据。 statements 可传宿主 AI 已形成的比较草稿(HostStatementInput schema),与 NotebookLM 比较结果合并校验。
| Name | Required | Description | Default |
|---|---|---|---|
| questions | Yes | ||
| statements | No | ||
| research_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 full burden and does add real behavioral context: it discloses the task is asynchronous, and enumerates enforced comparison semantics (mere non-mention ≠ opposition, conflicting conclusions require dual citations, reprints merged, reports not double-counted). It omits auth requirements and failure/error behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, followed by enforced rules and the parameter note. Dense but each clause adds substance; no filler sentences, though the rule block is somewhat terse in phrasing.
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?
An output schema exists, so return-value detail is unnecessary. For a 3-param async tool with no annotations, the description covers the async nature and the key validation rules; gaps remain on how to retrieve results (delegated to siblings) and on research_id/questions format.
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% across 3 parameters, so the description must compensate. It ably explains 'statements' (host AI's pre-formed comparison draft via HostStatementInput, merged and validated against NotebookLM results), but leaves 'research_id' and 'questions' undefined beyond their names.
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?
States a specific verb+resource (compare source viewpoints by common questions) and the concrete output (consensus/differences/gaps). The parenthetical '后台任务,返回任务号' (background task, returns task number) distinguishes it from synchronous siblings like dossier_result, so an agent can route to it correctly.
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 'background task, returns a task number' note implies the async flow (call, then poll status/result), which is useful usage context. However, no sibling is named as an alternative and there is no explicit when-to-use vs dossier_query/dossier_evidence guidance, so usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dossier_evidenceDossier EvidenceB
逐来源生成证据卡(每来源单独会话、只依据该来源),返回任务号。
证据卡含主张、依据类型、短引文、定位、适用条件、局限与验证状态;短引文会与来源原文比对。
| Name | Required | Description | Default |
|---|---|---|---|
| questions | No | ||
| source_ids | Yes | ||
| research_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 full behavioral burden. It usefully discloses that the tool is asynchronous (returns a task number), runs separate sessions per source, and verifies quotes against source text. However, it omits how to poll for completion, auth/permission needs, failure behavior, and whether repeated calls create new jobs.
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 dense sentences front-load the primary action and return value, then enumerate the card contents. There is no filler, though the second sentence is a long enumeration that could be slightly tighter.
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?
An output schema exists, so return-card fields need not be fully explained, and the description does note the task-number return. Still, for an asynchronous generation tool with no annotations and 0% parameter coverage, critical gaps remain around parameter meaning and how to retrieve results.
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% for three parameters. The phrase 'per source' loosely connects to source_ids, but research_id and the optional questions array receive no explanation. The description does not compensate for the complete lack of schema-level parameter documentation.
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 (generate evidence cards per source), its scope (one session per source, source-only basis), and the immediate return (task number). It distinguishes itself from general query tools through the per-source evidence-card framing, though it does not explicitly name a sibling alternative.
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?
Usage is implied by the per-source evidence-card purpose, but the description never states when to choose this tool over siblings like dossier_query or dossier_compare, nor does it mention prerequisites or exclusions. An agent can infer intent but gets no explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dossier_exportDossier ExportB
导出文章研究底稿目录:manifest / 报告 / sources / evidence / viewpoints / writing-brief。
导出物不含 Cookie、令牌或浏览器 Profile;每个重要判断关联来源与证据 ID。
| Name | Required | Description | Default |
|---|---|---|---|
| angles | No | ||
| output_dir | No | ||
| research_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 full burden, and it does disclose useful behavior: the export excludes Cookies, tokens, and browser Profile, and every judgment links to source/evidence IDs. However, it omits whether the tool writes files to disk, whether it overwrites existing output, what auth is required, and whether the operation is reversible.
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 sentences with the artifact list and the privacy constraint front-loaded. No filler; the second sentence carries the meaningful 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?
An output schema exists, so return values need not be described, which the definition correctly relies on. But given zero annotation coverage and 0% parameter coverage, the description is incomplete about side effects (file writing) and the semantics of its own parameters.
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 for parameters, and it does not. None of the three parameters (research_id, angles, output_dir) are explained – in particular output_dir and angles are left entirely opaque, and the listed export contents are not the same as the 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 names a specific verb (导出/export) and resource (文章研究底稿/dossier) and enumerates the artifact types produced (manifest, 报告, sources, evidence, viewpoints, writing-brief). This makes the tool's output concrete. It stops short of explicitly contrasting itself with siblings like dossier_result or dossier_query, so the agent must infer the distinction.
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?
There is no guidance on when to use export versus the other dossier tools (result, status, query, compare). No prerequisites, no preconditions, no named alternatives. The agent gets 'what' but not 'when'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dossier_importDossier ImportC
把选中的发现来源导入 NotebookLM,并逐个记录导入映射与不确定结果。
| Name | Required | Description | Default |
|---|---|---|---|
| research_id | Yes | 研究任务 ID。 | |
| candidate_ids | No | 要导入的来源 ID(source_id 或 candidate_id);缺省导入全部可导入来源。 | |
| reconcile_only | No | 只做导入对账(按 Notebook 实际来源清单回填映射),不重复导入。 | |
| confirm_task_id | No | 任务 ID 不一致时,人工核对后填入观察到的任务 ID 放行导入。 | |
| exclude_reasons | No | 未导入原因说明 {来源 ID: 理由}。 |
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 behavioral burden. It discloses that imports are recorded one-by-one and may yield 'uncertain results', and names the external target (NotebookLM), but says nothing about authentication needs, idempotency, side effects on the destination notebook, or what triggers the task-ID mismatch that confirm_task_id resolves.
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?
A single front-loaded sentence covering the action and its two recording obligations. There is no filler, though it is terse enough that the surrounding context that would aid selection is absent.
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?
An output schema exists so return values need no explanation, but this is a mutation tool writing to an external system with no annotations. Given the complexity signaled by the reconciliation and task-confirmation parameters, the description omits too much about preconditions and failure modes to be considered 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 coverage is 100%, so the schema already fully documents all five parameters including defaults and the reconciliation and confirmation semantics. The description adds no parameter-level detail beyond that, so the baseline 3 applies.
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 plus resource plus destination: it imports the selected discovery sources into NotebookLM and records the mapping. An agent can distinguish it from dossier_export and dossier_source_get by the 'import into NotebookLM' action, though no sibling is named explicitly.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as dossier_source_get for inspecting sources first or dossier_export for the inverse direction. The existence of a reconcile_only mode is only visible in the schema, not framed as usage guidance in the text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dossier_queryDossier QueryA
向 NotebookLM 提问;来源集合由软件强制限定(默认新会话,逐来源取证只传一个来源)。
返回回答与可核验引用;引文编号仅在本回答内有效(citation_key 形如 research:answer_seq#n)。
| Name | Required | Description | Default |
|---|---|---|---|
| question | Yes | ||
| source_ids | Yes | ||
| question_id | No | ||
| research_id | Yes | ||
| conversation_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 the description carries the full burden. It usefully discloses non-obvious traits — the source set is software-enforced, sessions default to new, and citation numbering is only valid within a single answer (with a citation_key format). It omits auth requirements, error/idempotency behavior, and confirmation that the call is read-only, leaving important gaps.
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 dense sentences, with purpose front-loaded and constraints following. Parentheticals carry genuinely useful detail, so little is wasted, though the packing is on the terse side.
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?
An output schema exists, so return structure need not be re-explained, and the description adds citation-validity context. However, with 5 parameters at 0% schema coverage, no annotations, and 3 required fields, the semantics of research_id, question_id, and conversation_id remain unaddressed.
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% across 5 parameters, so the description must compensate. It clarifies source_ids (pass a single source for per-source evidence) and implies conversation_id via the 'default new session' note, but says nothing about question_id or research_id, so it only partially covers the parameter set.
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?
States a specific verb and resource (ask NotebookLM a question over a software-enforced source set) and hints at the per-source evidence case, which points toward the sibling dossier_evidence. It does not explicitly name or contrast with siblings, so this lands just below the sibling-differentiating top score.
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?
Gives real usage context: a new conversation is the default, and to do per-source evidence you must pass only one source. This is clear conditional guidance, though it never explicitly says when to prefer dossier_evidence or dossier_compare over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dossier_resultDossier ResultA
分页读取研究结果。view: findings | report | digest | evidence | comparisons | tasks | answers。
findings 为完整发现来源(含 cite_map、citation_warnings、逐来源提取式摘要); report 为报告全文分页(cursor=字符偏移、max_chars=窗口); digest 为提取式执行摘要(≤1500 字 + 高被引来源清单); include_report_text 仅作用于 findings 视图的报告内嵌(旧口径,建议改用 view='report')。
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | findings | |
| limit | No | ||
| cursor | No | ||
| max_chars | No | ||
| research_id | Yes | ||
| include_report_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden; it discloses pagination behavior, view-specific contents such as cite_map and citation_warnings, report cursor/max_chars semantics, the digest length cap, and the deprecated include_report_text behavior. Remaining gaps include default pagination behavior and whether limit/cursor apply consistently across all views.
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 front-loaded with purpose and the view list, then adds useful view-specific details and a deprecation note. It is dense but efficient, with little wasted text.
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 output schema exists, so return values need not be fully explained, but the tool still has 6 parameters, 0% schema descriptions, no annotations, and seven view values of which four are undocumented. The description is adequate for the main views but incomplete for the full tool surface.
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 view, cursor, max_chars, and include_report_text to some extent, but only details findings/report/digest; it leaves evidence, comparisons, tasks, answers, and the limit parameter without semantic guidance.
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?
States a specific verb and resource: paginated reading of research results, with a list of supported views. The scope is clear, but it does not explicitly distinguish this tool from siblings such as dossier_evidence, dossier_compare, or dossier_query.
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 implied guidance by describing findings as the complete source, report as full-text pagination, and digest as a summary, plus a recommendation to use view='report' instead of include_report_text. However, it gives no when-to-use guidance for the other view values or for choosing this tool over sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dossier_source_getDossier Source GetB
取得单个来源的元数据与索引文本摘录(含内容版本哈希与取得时间)。
来源元数据缺失的字段保持 null/未知,不从模型补齐。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| source_id | Yes | ||
| research_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 full burden. It does add real contract value — return payload composition (version hash, acquisition time) and the rule that absent metadata stays null rather than being model-filled. However it says nothing about the effect of limit/offset on the excerpt, failure modes for an unknown source_id, or auth requirements.
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 sentences with the core payload described first and the null-handling caveat second. Nothing is padded, though the parenthetical could be folded in more tightly.
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?
An output schema exists, so return-value detail is rightly omitted, and the null-preservation rule is a useful addition. Still, with zero annotation coverage and undocumented pagination parameters, an agent lacks enough to call this confidently against its many siblings.
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% and all four parameters (research_id, source_id, limit, offset) are bare types. The description never maps limit/offset to excerpt sizing or clarifies the identifier semantics, so it fails to compensate for the schema gap.
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 concrete verb (取得) and a specific resource (单个来源的元数据与索引文本摘录), enumerating the payload components (内容版本哈希、取得时间). It is clearly a single-source fetch as distinct from collection-level siblings like dossier_query or dossier_result, though it never names those siblings explicitly.
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?
There is no statement of when to use this tool versus the nine siblings, nor any prerequisite (e.g. that research_id must come from dossier_start). Usage is only implied by the word 单个来源. The closing sentence is a data-fidelity rule, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dossier_startDossier StartA
启动一次 NotebookLM Deep Research(web + deep),立即返回 research_id。
每个独立主题一个研究 Notebook。request_key 用于幂等:同键重复调用返回已有任务,不会重复发起研究。
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 可选范围/时间/地域/读者等约束,会写入研究问题。 | |
| title | No | 可选 Notebook 标题。 | |
| topic | Yes | 研究主题。 | |
| request_key | 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 does disclose the key traits: the call is asynchronous (returns research_id immediately rather than blocking for results), it creates a Notebook resource per topic, and duplicate request_key calls return the existing task instead of re-launching research. It omits auth requirements (a sibling dossier_auth_status hints one is needed) and any cost/rate-limit context, keeping it below 5.
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 short sentences, front-loaded with what the tool does, followed by the per-topic rule and the idempotency contract. No filler or repetition of structured fields.
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?
An output schema exists, so return fields need not be enumerated, and the description correctly covers the async launch contract, resource-creation semantics, and idempotency. The main remaining gap is that no auth prerequisite is mentioned for a tool that clearly creates server-side state.
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 100%, so a 3 is the baseline; the description earns a bump because it explains the functional effect of request_key (same key returns an existing task rather than starting duplicate research), which is more than the schema's terse 'optional idempotency key'. topic/scope/title are left to the schema, which already documents them adequately.
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?
States a specific verb and resource: launches a NotebookLM Deep Research (web + deep) and immediately returns a research_id. It is clearly distinguished from the polling/result/export siblings by being the entry point that produces a research_id. It stops short of naming which sibling consumes that id (e.g. dossier_status), so it is clear but not fully self-locating.
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 two useful usage rules: one research Notebook per independent topic, and idempotent behavior via request_key. However, it never states when to call this versus its siblings (e.g. that dossier_status/dossier_result follow), nor any preconditions such as required auth. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dossier_statusDossier StatusA
查询研究任务状态,并同步完整报告与发现来源清单。
完成时会保存 compact=False 的完整结果;来源统计与发现/导入不是同一指标。 返回 phase/elapsed_ms/sources_discovered 与自适应 suggested_next_poll_seconds。
| Name | Required | Description | Default |
|---|---|---|---|
| research_id | Yes | 研究任务 ID。 | |
| wait_seconds | No | >0 时服务端长轮询(封顶 300s):阻塞到状态变化或超时,把 N 次轮询压成 1 次调用。 |
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 the description carries the full burden and rises to it partly: it discloses that completion persists the full compact=False result and warns that source statistics is not the same metric as discovery/import. It omits auth requirements, error behavior, or rate limits beyond the long-poll cap already in 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?
Four compact sentences, front-loaded with the core purpose before the completion-save and metrics caveats. Each sentence carries information, with no repetition of schema content.
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?
An output schema exists, so return values need not be explained, yet the description usefully foreshadows phase/elapsed_ms/sources_discovered and the adaptive poll hint. For a two-param status tool with full schema coverage, this is sufficient, with only permission and failure-mode context 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 description coverage is 100%, including the wait_seconds long-poll semantics, so the schema does the parameter work. The description adds no parameter-level meaning beyond what the schema already provides; baseline 3 is appropriate.
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?
States a specific verb and resource: querying research task status, plus syncing the full report and the list of discovered sources. It is clear enough to separate it from dossier_result, which returns the finished result, but the description never names the sibling, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, nor a named alternative among the many siblings. Usage is only implied by the mention of suggested_next_poll_seconds, which signals this tool is meant for polling.
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.
2 tool updates
v0.0.1- Changed
dossier_result1 field changed- added
Input schema / properties / max_charsAdded value: +{ + "default": 12000, + "type": "integer" +}
- Changed
dossier_status2 fields changed- added
Input schema / properties / research_id / descriptionAdded value: +"研究任务 ID。" - added
Input schema / properties / wait_secondsAdded value: +{ + "default": 0, + "description": ">0 时服务端长轮询(封顶 300s):阻塞到状态变化或超时,把 N 次轮询压成 1 次调用。", + "type": "number" +}
10 tool updates
v0.1.0- First observed
dossier_auth_status - First observed
dossier_compare - First observed
dossier_evidence - First observed
dossier_export - First observed
dossier_import - First observed
dossier_query - First observed
dossier_result - First observed
dossier_source_get - First observed
dossier_start - First observed
dossier_status
TDQS
Scored across 10 tools
Most tools target distinct actions: start/status/result/query/import/export/source_get are clearly separable. The fuzziest boundary is between the analysis-producing trio (dossier_compare, dossier_evidence, dossier_query) and the ability to read those same artifacts via dossier_result's views (evidence/comparisons/answers), which requires careful reading of which tool creates versus just retrieves them.
Strong, predictable snake_case with a uniform 'dossier_' prefix across all ten tools. Minor inconsistency in that several are noun-only state/artifact tools (dossier_status, dossier_result, dossier_auth_status) while others use verbs (dossier_start, dossier_query, dossier_export), but the pattern remains readable.
Ten tools is well within the ideal range and each maps to a distinct step in the research lifecycle: launch, poll, read, ask, compare, evidence, import, export, inspect source, check auth. No obvious redundancy or padding in the surface.
Covers the full lifecycle from dossier_start through status/result, downstream analysis (query/compare/evidence), source inspection, import, and export, with good idempotency hints (request_key). Gaps exist: no way to list or enumerate existing research tasks/notebooks, and no cancel/delete/retry operation, so an agent that loses a research_id has a dead end.
Maintenance
Related MCP Connectors
Google NotebookLM via natural language: create notebooks, add sources (PDF, URL, YouTube) and ask gr
Start cited deep-research runs, read reports, search your source vault, and verify citations.
Google Gemini Notebook (NotebookLM): notebooks, sources, cited chat, podcasts, video, slides
Source-traced evidence research for AI agents. We organise the evidence; you decide.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables citation-audited deep research with tools for web-grounded answers, source conflict detection, and per-claim citation auditing.MIT
- FlicenseNot gradedqualityDmaintenanceEnables multi-source research with YouTube, papers, and podcasts, scoring for substance and credibility, and creating NotebookLM notebooks with knowledge graph and feedback loop.-
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to drive Google NotebookLM notebooks as a deep-research workspace: ingesting local PDFs and YouTube videos, cross-checking sources for contradictions, identifying knowledge gaps, generating audio overviews, and exporting Markdown dossiers with BibTeX and APA bibliographies. It operates over the Model Context Protocol inside Google Antigravity IDE, with browser-session authentication handled automatically.MIT
- AlicenseBqualityAmaintenanceEnables latency-conscious, auditable deep research by delegating bounded semantic judgments to the calling client LLM while the server owns retrieval, durable state, evidence integrity, citation auditing, and deterministic quality gates.20MIT