# sourcebolt (npm · sourcebolt)

Fast MCP server for Google NotebookLM: notebooks, sources, cited chat, research. Unofficial.

- Trust score: 88/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- npm · `sourcebolt`: 88/100 (this document), [markdown](https://verifymcp.io/servers/candidloom-hub-sourcebolt/sourcebolt.md), [page](https://verifymcp.io/servers/candidloom-hub-sourcebolt/sourcebolt)
- oci · `ghcr.io/candidloom-hub/sourcebolt`: 47/100, [markdown](https://verifymcp.io/servers/candidloom-hub-sourcebolt/ghcr-io-candidloom-hub-sourcebolt.md), [page](https://verifymcp.io/servers/candidloom-hub-sourcebolt/ghcr-io-candidloom-hub-sourcebolt)

## Channel facts

- Registry: `npm`
- Package: `sourcebolt`
- Version: `0.3.3`
- Transport: `stdio`

## Trust breakdown

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

Scored 2026-11-05.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 0 of 6 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to candidloom-hub/sourcebolt).
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 15 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 69/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3872 tokens (~129/item across 30 items; 30 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 53/100
  - Stability observed for 16 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 30 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the sourcebolt MCP server?

sourcebolt runs locally as an npm package, launched with npx -y sourcebolt. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add candidloom-hub-sourcebolt -- npx -y sourcebolt
```

### Cursor

```json
{
  "mcpServers": {
    "candidloom-hub-sourcebolt": {
      "command": "npx",
      "args": [
        "-y",
        "sourcebolt"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "candidloom-hub-sourcebolt": {
      "command": "npx",
      "args": [
        "-y",
        "sourcebolt"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add candidloom-hub-sourcebolt -- npx -y sourcebolt
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add candidloom-hub-sourcebolt --command npx --arg -y --arg sourcebolt
```

### Hermes

```yaml
mcp_servers:
  candidloom-hub-sourcebolt:
    command: "npx"
    args: ["-y", "sourcebolt"]
```

### Netclaw

```json
{
  "McpServers": {
    "candidloom-hub-sourcebolt": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "sourcebolt"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add candidloom-hub-sourcebolt -t stdio -c npx -a -y sourcebolt
```

### Other

```json
{
  "mcpServers": {
    "candidloom-hub-sourcebolt": {
      "command": "npx",
      "args": [
        "-y",
        "sourcebolt"
      ]
    }
  }
}
```

## Changelog

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

### 2026-11-05 (score 88, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 87, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 86, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 85, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 82, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-22 (score 81, +26)

- [security improvement] Malware scan: unverified → pass
- [security improvement] Known CVEs: unverified → pass
- [functional improvement] Dependency health: unverified → 1.00

## MCP tools (30)

### `account_settings` (~72 tokens)

Read the account's quota windows, or set the output language when output_language is given. The language setting slot is not live-verified (the call is sent, but Google may ignore or reject it).

Input parameters:

- `output_language` (string): language code to set, for example en or de; omit to only read

Output parameters:

- `language_set` (boolean)
- `output_language` (string)
- `quota` (object)

### `auth_login` (~115 tokens)

Not available through MCP: sign-in needs the local credential store, and cookies should not pass through a chat. Returns UNSUPPORTED_BY_TRANSPORT with the CLI command to run instead (sourcebolt login --import, --browser or --attach).

Input parameters:

- `file` (string): path of a cookie export file (method import)
- `host` (string): NotebookLM host, for example notebook.google.com
- `method` (string, required): import (cookies or file), browser or attach
- `profile` (string): account profile name

Output parameters:

- `status` (string)

### `auth_logout` (~66 tokens)

Not available through MCP: the credential store is only reachable from the CLI. Returns UNSUPPORTED_BY_TRANSPORT with the command to run instead (sourcebolt logout).

Input parameters:

- `confirm` (boolean): must be true to delete the stored session
- `profile` (string): account profile name

Output parameters:

- `status` (string)

### `chat_ask` (~241 tokens)

Ask a question about a notebook's sources. Streams partial text as progress notifications. Returns the answer, citations (source, cited text, UTF-16 offsets) and the conversation id. save_as_note also saves the answer as a note (note_id, or note_error when it could not be saved). wait=false returns a job_id; poll with chat_status. Not retried after sending.

Input parameters:

- `conversation_id` (string): continue this conversation; default is the notebook's newest thread
- `new_conversation` (boolean): start a fresh conversation instead of the default thread
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `question` (string, required): the question to ask
- `save_as_note` (boolean): also save the answer as a note, as the web app's Save to note does (the server picks the note title)
- `sources` (null|array): restrict the answer to these sources (id, id prefix or title); default all sources
- `wait` (null|boolean): wait for the answer (default true); false returns a job_id to poll with chat_status

Output parameters:

- `answer` (string)
- `citations` (null|array)
- `conversation_id` (string)
- `job_id` (string)
- `note_error` (string)
- `note_id` (string)
- `note_title` (string)
- `response_id` (string)
- `status` (string)

### `chat_configure` (~125 tokens)

Change a notebook's chat settings: mode (default, learning_guide, or custom with custom_prompt) and response_length (default, longer or shorter). Unset fields keep their value. mode default with response_length default resets the notebook to the web app's defaults.

Input parameters:

- `custom_prompt` (string): instructions for mode custom, up to 10000 characters
- `mode` (string): conversational goal; custom needs custom_prompt
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `response_length` (string): response length

Output parameters:

- `mode` (string)
- `notebook` (string)
- `response_length` (string)
- `updated` (boolean)

### `chat_history` (~122 tokens)

Read a notebook conversation (oldest turn first within a page), with cursor paging. format=markdown adds a rendered transcript. Turn layout is not yet live-verified.

Input parameters:

- `conversation_id` (string): conversation to read; default is the newest thread
- `cursor` (string): next_cursor of the previous page (older turns)
- `format` (string): json (default) or markdown
- `limit` (integer): max turns per page (default 20)
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title

Output parameters:

- `conversation_id` (string)
- `markdown` (string)
- `next_cursor` (string)
- `turns` (null|array)

### `chat_status` (~66 tokens)

Status and result of a detached chat_ask (wait=false): running, done, failed or cancelled. Jobs live in memory and are dropped an hour after they finish or when the server restarts.

Input parameters:

- `job_id` (string, required): job id returned by chat_ask with wait=false

### `delete` (~223 tokens)

Delete notebooks, sources, notes, artifacts, chat history, labels or collections. Without confirm:true it only returns a preview of what would be deleted and changes nothing. Items are matched strictly (exact id, unique id prefix or exact title) against a fresh list. source, note and chat_history need notebook; chat_history deletes the whole history of the given conversations; it reaches only the newest 20 conversations of a notebook, and its preview shows their created and updated times and, when the whole history can be read, the first question. Kinds artifact, label and collection are not available yet and return UNSUPPORTED_BY_TRANSPORT.

Input parameters:

- `confirm` (boolean): must be true to delete; without it only a preview is returned
- `ids` (null|array, required): ids (or exact titles) of the items to delete; for chat_history, conversation ids
- `kind` (string, required): notebook, source, note, artifact, chat_history, label or collection
- `notebook` (string): notebook id, prefix or title; required for every kind except notebook

Output parameters:

- `guidance` (string)
- `items` (null|array)
- `kind` (string)
- `status` (string)

### `job_cancel` (~54 tokens)

Cancel a running detached job (chat_ask with wait=false, deep research). For an ask with a known conversation the server-side generation is also stopped, best effort.

Input parameters:

- `job_id` (string, required): job id to cancel

Output parameters:

- `cancelled` (boolean)
- `job_id` (string)
- `note` (string)
- `status` (string)

### `label_list` (~67 tokens)

List a notebook's source labels with emoji and the ids of the sources in each. Collections are not available yet.

Input parameters:

- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `scope` (string): source_labels (default); collections are not available yet

Output parameters:

- `labels` (null|array)
- `total` (integer)

### `label_update` (~163 tokens)

Rename a label, set its emoji, or add/remove sources. Actions auto and create (and notebook collections) are not available yet and return UNSUPPORTED_BY_TRANSPORT. Payload shapes are not live-verified.

Input parameters:

- `action` (string, required): rename, set_emoji, add_sources or remove_sources (auto and create are not available yet)
- `emoji` (string): emoji for set_emoji
- `items` (null|array): source ids, id prefixes or titles for add_sources / remove_sources
- `label` (string, required): label id or name
- `name` (string): new name for rename
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `scope` (string): source_labels (default)

Output parameters:

- `action` (string)
- `label` (string)
- `status` (string)

### `note_list` (~66 tokens)

List the notes of a notebook with id, title and content. Deleted notes are not shown.

Input parameters:

- `include_mind_maps` (boolean): accepted for compatibility; mind maps are not listed yet
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title

Output parameters:

- `notes` (null|array)
- `total` (integer)

### `note_save` (~125 tokens)

Create a note, or update an existing one (note = id or title). from_turn (save a chat turn as a note) is not available yet and returns UNSUPPORTED_BY_TRANSPORT.

Input parameters:

- `content` (string): note body
- `from_turn` (string): save a chat turn as a note (not available yet)
- `note` (string): existing note id or title to update; omit to create a new note
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `title` (string): note title

Output parameters:

- `content` (string)
- `id` (string)
- `title` (string)
- `updated` (string)

### `notebook_create` (~122 tokens)

Create a notebook with a title and optionally add sources in the same call (same items as source_add). The create call is sent once and never retried. emoji is accepted but ignored (no known wire slot). If the rename or the source add fails, the notebook still exists and its id is returned with warnings.

Input parameters:

- `emoji` (string): notebook emoji (ignored: no known wire slot yet)
- `sources` (null|array): sources to add right after creation; same items as source_add
- `title` (string, required): title of the new notebook

Output parameters:

- `notebook_id` (string)
- `sources` (null|object)
- `title` (string)
- `warnings` (null|array)

### `notebook_list` (~120 tokens)

List NotebookLM notebooks with id, title, source count and ownership. Filter by title and scope. Returns 20 by default; has_more says whether to page with offset. Cached 30 s.

Input parameters:

- `limit` (integer): max notebooks to return (default 20; page with offset)
- `offset` (integer): skip this many notebooks
- `query` (string): case-insensitive filter on notebook titles
- `refresh` (boolean): bypass the 30 s cache
- `scope` (string): mine, shared or all (default all)

Output parameters:

- `has_more` (boolean)
- `notebooks` (null|array)
- `total` (integer)

### `notebook_open` (~45 tokens)

Open one notebook by id or title: its sources with status, summary and suggested questions.

Input parameters:

- `notebook` (string, required): notebook id, id prefix (6+ chars) or title

Output parameters:

- `created` (string)
- `emoji` (string)
- `id` (string)
- `modified` (string)
- `owned` (boolean)
- `source_count` (integer)
- `sources` (null|array)
- `suggested_questions` (null|array)
- `summary` (string)
- `title` (string)
- `warnings` (null|array)

### `notebook_update` (~148 tokens)

Rename a notebook (title, verified by read-back) and/or drop it from the recently viewed list (remove_from_recent). emoji, pinned, alias and tags are not available yet and are ignored with a note.

Input parameters:

- `alias` (string): not available yet (ignored)
- `emoji` (string): not available yet (ignored)
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `pinned` (null|boolean): not available yet (ignored)
- `remove_from_recent` (boolean): drop the notebook from the recently viewed list
- `tags` (null|array): not available yet (ignored)
- `title` (string): new title

Output parameters:

- `notebook_id` (string)
- `notes` (null|array)
- `removed_from_recent` (boolean)
- `renamed` (boolean)

### `research_import` (~161 tokens)

Import research candidates as notebook sources, by urls (from research_status), report, or all. Candidates are matched by URL against a fresh read, so results reordered since research_status still import the intended ones; an unknown URL is NOT_FOUND. Candidates already in the notebook are skipped, so a retry is safe. Reports added, skipped and failed per candidate.

Input parameters:

- `all` (boolean): import every candidate
- `job` (string, required): research job id from research_start or research_status
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `report` (boolean): also import the deep-research report candidate
- `urls` (null|array): URLs of the web candidates to import, as listed by research_status

Output parameters:

- `added` (integer)
- `failed` (integer)
- `notebook` (string)
- `results` (null|array)
- `skipped` (integer)

### `research_start` (~155 tokens)

Start a web or Drive research job in a notebook (fast or deep). Returns a job handle; poll with research_status, then import with research_import. Queries under 4 words are rejected unless force is true. Mode discover is not yet available (UNSUPPORTED_BY_TRANSPORT).

Input parameters:

- `corpus` (string): web (default) or drive; deep supports web only
- `force` (boolean): allow a query shorter than 4 words
- `mode` (string): fast (default) or deep; discover is not yet available
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `query` (string, required): what to research; at least 4 words unless force is set

Output parameters:

- `job` (object)
- `notebook` (string)

### `research_status` (~129 tokens)

Check research jobs of a notebook and list their candidates (pick them by url in research_import). With wait_seconds (0-120) polls every 3 s, reporting progress, until the job is done.

Input parameters:

- `include_report` (boolean): include the deep-research report text
- `job` (string): research job id; omit for all jobs of the notebook
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `wait_seconds` (integer): 0-120: poll every 3 s until the job is done or time runs out

Output parameters:

- `done` (boolean)
- `jobs` (null|array)
- `notebook` (string)

### `server_info` (~60 tokens)

Show the sourcebolt version, active Google profile, NotebookLM host, enabled tools and which transport served the last call. No Google call unless include_usage is set.

Input parameters:

- `include_usage` (boolean): also fetch account tier and quota windows (one Google call)

Output parameters:

- `host` (string)
- `last_transport` (string)
- `name` (string)
- `profile` (string)
- `tool_profile` (string)
- `tools` (null|array)
- `usage` (null|object)
- `version` (string)

### `share_status` (~41 tokens)

Show who a notebook is shared with and whether the link is public.

Input parameters:

- `notebook` (string, required): notebook id, id prefix (6+ chars) or title

Output parameters:

- `public` (boolean)
- `users` (null|array)

### `share_update` (~230 tokens)

Change notebook sharing: link visibility (public) and per-user roles (viewer, editor, remove). Widening access or removing people requires confirm:true; without it a preview is returned and nothing is sent. The link setting and the user changes are sent as two calls; if only one applies, status is partial and parts says which applied and which failed. Payload shapes are not live-verified. view_level and artifact sharing are not available yet.

Input parameters:

- `artifact` (string): share one artifact instead of the notebook (not available yet)
- `confirm` (boolean): required to widen access or remove people; without it only a preview is returned
- `message` (string): message to include in the notification
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `notify` (boolean): email the added people
- `public` (null|boolean): true = anyone with the link can view, false = restricted
- `users` (null|array): per-user changes
- `view_level` (string): full or chat_only (not available yet)

Output parameters:

- `changes` (null|array)
- `guidance` (string)
- `notebook_id` (string)
- `notebook_title` (string)
- `parts` (null|array)
- `requires_confirm` (boolean)
- `status` (string)

### `source_add` (~106 tokens)

Add sources to a notebook: public URLs (YouTube auto-detected) and pasted text, in one call. Returns a per-item outcome. Drive and file items are not yet available (UNSUPPORTED_BY_TRANSPORT). URLs to private or internal addresses are rejected.

Input parameters:

- `items` (null|array, required): sources to add; each item sets exactly one of url, text, drive, file
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title

Output parameters:

- `failed` (integer)
- `notebook` (string)
- `pending` (integer)
- `requested` (integer)
- `results` (null|array)
- `succeeded` (integer)

### `source_list` (~64 tokens)

List a notebook's sources with type and processing status; optionally filter by status.

Input parameters:

- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `status` (string): filter: processing, ready, error, preparing or a raw status number

Output parameters:

- `sources` (null|array)
- `total` (integer)

### `source_read` (~136 tokens)

Read a source's full text, markdown, or guide (summary and keywords), paged by character offset (max_chars default 20000; see truncated and next_offset).

Input parameters:

- `max_chars` (integer): max characters to return (default 20000, cap 200000)
- `mode` (string): fulltext (default), markdown, or guide (the source guide: summary as text plus keywords)
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `offset` (integer): character offset to start from
- `source` (string, required): source id, id prefix or title

Output parameters:

- `keywords` (null|array)
- `next_offset` (integer)
- `offset` (integer)
- `source_id` (string)
- `text` (string)
- `total_chars` (integer)
- `truncated` (boolean)

### `source_update` (~116 tokens)

Rename a source (title) and/or check whether it is up to date (check_freshness). refresh is not yet available (UNSUPPORTED_BY_TRANSPORT).

Input parameters:

- `check_freshness` (boolean): report whether the source is up to date
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `refresh` (boolean): re-fetch the source (not yet available)
- `source` (string, required): source id, id prefix or title
- `title` (string): new title

Output parameters:

- `fresh` (null|boolean)
- `renamed` (boolean)
- `source_id` (string)

### `studio_generate` (~448 tokens)

Generate a Studio artifact: audio, video, report, interactive_report, slide_deck, mind_map, quiz, flashcards, infographic or data_table. Each kind takes only the option values a live capture has proven (the enums); other values the web app offers return UNSUPPORTED_BY_TRANSPORT naming the option, before any call. Omitted options take the web app's defaults. instructions is optional for audio, video, slide_deck and quiz, required for report, mind_map, flashcards and data_table, and refused by infographic and interactive_report (each as captured). video.generate_later asks for deferred generation (cinematic format only). report needs report.title and report.description plus instructions as the prompt (suggest surface report returns ready-made triples). Checks the account quota first and returns a QUOTA error when it is used up. Artifacts are built from the notebook's sources only, not notes (the web app can add notes; that is not supported). Returns the new artifact as pending; poll studio_list for its status. Not retried after sending.

Input parameters:

- `audio` (null|object): options for kind audio
- `flashcards` (null|object): options for kind flashcards
- `infographic` (null|object): options for kind infographic
- `instructions` (string): free text: audio and video focus, slide deck description and quiz topic (optional); report prompt, data table description, mind map and flashcards topic (required); infographic and interactive_report…
- `kind` (string, required): the artifact kind
- `language` (string): output language code as the web app sends it (default en; cinematic video takes none)
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `quiz` (null|object): options for kind quiz
- `report` (null|object): options for kind report (required)
- `slide_deck` (null|object): options for kind slide_deck
- `sources` (null|array): source ids, id prefixes or titles; default all sources (notes cannot be used as sources)
- `video` (null|object): options for kind video

Output parameters:

- `created` (string)
- `id` (string)
- `kind` (string)
- `media_urls` (object)
- `status` (string)
- `title` (string)

### `studio_list` (~176 tokens)

List a notebook's Studio artifacts (audio, video, report, slide_deck, mind_map, quiz, flashcards, infographic, data_table) with kind and status (pending while queued or generating, then ready or failed). Pass artifact to read one with its interactive content (HTML or mind-map tree) when Google has any.

Input parameters:

- `artifact` (string): one artifact id or title; returns it with its interactive content when available
- `kind` (string): filter by kind: audio, video, report, slide_deck, mind_map, quiz, flashcards, infographic, data_table (interactive and unknown for unrecognized rows)
- `notebook` (string, required): notebook id, id prefix (6+ chars) or title
- `status` (string): filter by status: pending (queued or generating), ready or failed

Output parameters:

- `artifacts` (null|array)
- `content` (null|object)
- `total` (integer)

### `suggest` (~110 tokens)

Suggested prompts for a surface: chat, report or studio_options. The followups surface is not yet available (UNSUPPORTED_BY_TRANSPORT until a live capture pins it).

Input parameters:

- `notebook` (string): notebook id, id prefix or title (not needed for studio_options)
- `query` (string): steer chat suggestions toward this topic
- `sources` (null|array): limit to these sources (id, id prefix or title)
- `surface` (string, required): chat, followups, report or studio_options

Output parameters:

- `suggestions` (null|array)

## Diagnostics

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

## Score history

- 2026-11-05: 88
- 2026-11-04: 87
- 2026-11-03: 87
- 2026-11-02: 86
- 2026-11-01: 86
- 2026-10-31: 86
- 2026-10-30: 85
- 2026-10-29: 85
- 2026-10-28: 84
- 2026-10-27: 84
- 2026-10-26: 83
- 2026-10-25: 83
- 2026-10-24: 82
- 2026-10-23: 82
- 2026-10-22: 81
- 2026-10-21: 55
- 2026-10-20: 65

## Common questions

### What is the sourcebolt MCP server?

sourcebolt is an MCP server listed in the public MCP registry as io.github.candidloom-hub/sourcebolt. Fast MCP server for Google NotebookLM: notebooks, sources, cited chat, research. Unofficial. This page covers its npm package (sourcebolt).

### Is the sourcebolt MCP server safe to use?

sourcebolt scores 88 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the sourcebolt MCP server expose?

sourcebolt exposes 30 tools: account_settings, auth_login, auth_logout, chat_ask, chat_configure, and 25 more. Their descriptions and schemas cost roughly 3,872 tokens of context every time the server is loaded.

### Is the sourcebolt MCP server still maintained?

sourcebolt is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the sourcebolt MCP server under?

sourcebolt declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

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