Context7
Up-to-date docs for AI agents
作者提供的说明(英文原文)
MCP server wrapping the nb CLI for LLM-friendly note-taking
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
链接指向作者自己的文件;我们不托管也不重新打包它。打开文件后,Claude Desktop 会进行安装。
在终端中运行这条命令
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过 GitHub 账户 emcd 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.15.0)于14天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 MCPB。
同一分类中有:Context7, Codebase Memory, Exa
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
MCP server wrapping the nb CLI for LLM-friendly note-taking.
Using nb directly via shell has two problems for LLM assistants:
nb assumes a default notebook, making per-project use awkward.This MCP server solves both by:
Install nb by following the official instructions: nb installation guide.
From crates.io:
cargo install nb-mcp-server
See the changelog for release history and upgrade notes.
Or download a prebuilt binary from GitHub Releases.
cargo build --release
With default notebook from environment:
NB_MCP_NOTEBOOK=myproject ./target/release/nb-mcp
Or via CLI argument (takes precedence):
./target/release/nb-mcp --notebook myproject
Disable commit and tag signing in the notebook repository:
./target/release/nb-mcp --notebook myproject --no-commit-signing
Allow new notes at the notebook root instead of requiring a folder:
./target/release/nb-mcp --notebook myproject --allow-top-level-notes
Print the installed version:
./target/release/nb-mcp --version
Show the resolved notebook path and state directory:
./target/release/nb-mcp --show-paths
Add to your MCP client configuration (e.g., .mcp.json):
{
"mcpServers": { "nb": { "command": "/path/to/nb-mcp", "args": ["--notebook", "myproject"] } } }
The canonical access path is the multiplexed nb tool with a command parameter, which reduces the token footprint of the MCP server. The args field must be a JSON object. Stringified JSON payloads are rejected. Unknown args fields are rejected instead of ignored; use the exact command schema fields or documented aliases. Returned identifiers such as coordination/mcp/1 or myproject:coordination/mcp/1 are nb selectors, not filesystem paths in the current repository. Notebook storage is managed by nb configuration. The notebook argument must be a bare notebook name. Use folder for folder paths and id / selector for note selectors. Existing-item commands accept copied selectors such as myproject:coordination/mcp/1, but reject conflicts with a separate notebook argument.
All commands are also available as direct first-class tools with typed schemas: add, show, delete, move, list, search, todo, do, undo, tasks, bookmark, folders, mkdir, import, status, notebooks, plus the body-aware tools replace_note_body, edit_note_substring, edit_note_lines, retitle_note, edit_note_tags, and the line tools show_note_lines, search_note_lines. These bypass the multiplexed command dispatch. The multiplexed nb tool remains as the compact/backcompat compatibility surface for the retained commands.
| Command | Description | Key Arguments |
|---|---|---|
nb.add | Create a note | title, content, tags[], folder required by default |
nb.show | Read a note (structured envelope) | id (alias: selector) |
nb.delete | Delete a note | id (alias: selector) |
nb.move | Move or rename a note | id (alias: selector), destination |
nb.list | List notes | folder, tags[], limit ([ ] / [x] indicate todo status; leading glyphs are item markers) |
nb.search | Full-text search | queries[] (required), mode (any default, all), tags[] |
| Command | Description | Key Arguments |
|---|---|---|
nb.todo | Create a todo | folder required by default, title, optional description (alias: content), optional tasks[], tags[] |
nb.do | Mark complete | id (alias: selector), optional task_number |
nb.undo | Reopen | id (alias: selector), optional task_number |
nb.tasks | List todos | optional status (open or closed), optional recursive (true default) |
| Command | Description | Key Arguments |
|---|---|---|
nb.bookmark | Save a URL | url, folder required by default, title, tags[], comment |
nb.import | Import file/URL | source, folder required by default, filename, convert |
nb.folders | List folders | parent |
nb.mkdir | Create folder | path |
nb.notebooks | List notebooks only | (none) |
nb.status | Notebook info | (none) |
Create a note with code:
{
"command": "nb.add", "args": { "title": "API Design Notes", "content": "# API Design\n\nUse GET /items for listing.\n\npython\nresponse = client.get('/items')\n", "tags": ["design", "api"], "folder": "docs" } }
Search for notes:
{
"command": "nb.search", "args": { "queries": ["API", "design"], "mode": "any", "tags": ["design"] } }
For multi-LLM projects, consider using consistent tag prefixes (optional). Example categories and prefixes:
| Category | Pattern | Examples |
|---|---|---|
| Collaborator | llm- | llm-claude, llm-gpt |
| Component | component- | component-api, component-ui |
| Task type | task- | task-bug, task-feature |
| Status | status- | status-review, status-blocked |
The legacy nb.edit tool (and its overwrite/append/prepend modes) was removed in the nb-api 0.3 cutover. The body-aware replacement tools are direct-only (no multiplexed nb.* aliases) and are designed to prevent the destructive whole-note-overwrite failure mode that the old surface enabled:
replace_note_body — replace the entire note body with plain UTF-8 new_body. Requires the body fingerprint from a preceding show; a stale fingerprint is rejected with re-read guidance so you cannot overwrite a note you have not just read.edit_note_substring — replace one or more occurrences of a plain-text pattern with replacement. expected_count must match the actual match count; an optional fingerprint guards against stale edits.edit_note_lines — apply a batch of disjoint insert/delete/replace edits verified against line anchors from one original snapshot; content is bare text (no terminator bytes; the library appends the document EOL, so single-line replaces never merge the next line).retitle_note — change the title without changing the path.edit_note_tags — add and/or remove tags in one atomic operation.These tools address notes by a flat id (alias selector) string exactly like show/delete/move; notebook-relative filenames are not exposed, and qualified selectors returned by show/show_note_lines/ search_note_lines round-trip directly as id. Since nb-api 0.4, numeric .index ids are surfaced too: reads and mutation outcomes carry selector plus numeric_id, and / / are accepted as id (ids are folder-local, positional, and never reused; path stays canonical). Body content (pattern, replacement, title, new_body, line-edit content) and line/search text/title are native UTF-8 strings with no base64 anywhere on the wire. Line-level reads are available through show_note_lines (bounded, anchored windows with a document-level eol declaration — lf/crlf plus has_final_eol — instead of per-line terminators) and search_note_lines (anchored matches, no EOL fields by design), which support search-to-edit without reading the whole note. New notes get nb-faithful filenames mangled from the title (Hello World Title → hello_world_title.md).
add creates notes only: todo-shaped content (checkbox lines or a Tasks heading outside fenced code blocks) is rejected with a hint to use the todo tool instead.
Invoking multiplexed nb.edit is rejected with recovery guidance naming the replacement tools. The body-aware and line tools are direct-only: invoking them through the multiplexed nb tool is rejected.
show returns a text-first slim structured envelope: selector, path, kind, todo_state, title (normalized Option ), tags, body (full UTF-8 text), body_contiguous, fingerprint, and numeric_id. No base64 field is exposed. When the source is not valid UTF-8, show returns a typed NonUtf8 error carrying the MIME hint plus guidance to an external raw-retrieval facility outside MCP (the nb CLI); a non-textual target returns UnsupportedShowTarget. Neither ever returns base64 bytes.add, todo, bookmark, mkdir, delete, move, do, undo, and the body-aware tools) return a structured CommitOutcome: commit_created, revision_id, pre_revision, and per-operation path/selector/numeric_id/noop/fingerprint. Idempotent no-op mutations report commit_created: false.nb-api 0.4 introduces typed failures that the MCP layer translates into actionable diagnostics on both the multiplexed nb.* surface and the first-class tool surface. NonUtf8 and IndexLockTimeout (busy .index lock; retry later, nothing mutated) join the existing set:
show on a non-text selector (folder, archive, image, ...): the error names the selector and the actual non-text type, states that show reads text notes only, and points the caller at folders/list. The server never silently re-routes show to another command.add with both a title and a content whose first nonblank line is an H1 that duplicates the title: the error names the title and the detected heading and tells the caller to remove the duplicate H1 or omit the separate title.FingerprintMismatch, AnchorMismatch, and OccurrenceMismatch tell the caller to re-read the note and retry with fresh fingerprint/anchors/counts.FragmentedBody: a multi-fragment body (for example a bookmark with multiple body fragments) refuses line/substring/body-replace operations; metadata operations (retitle_note, edit_note_tags) still apply.DirtyBaseline: a mutation refuses when the notebook worktree/index is dirty; the diagnostic tells the caller to commit or clean it first.IndeterminateCommit / RecoveryRequired: commit completion is unknown or recovery is needed; the diagnostic instructs the caller not to auto-retry and to inspect HEAD/status before acting.GateTimeout: the notebook is busy; retry later.PathCollision / PathIgnored / UnsupportedStructure / PlanValidation: surface the specific path/plan guidance.Priority order:
notebook argument (highest)--notebook flagNB_MCP_NOTEBOOK environment variableIf no notebook can be resolved, commands fail with a configuration error. The server does not fall back to nb's default notebook.
If the resolved notebook does not exist, the server creates it automatically. Use --no-create-notebook to disable automatic creation.
Logs are written to ~/.local/state/nb-mcp/{project}--{worktree}.log (XDG-compliant).
For Git worktrees, logs are named after both the master project and the worktree basename to avoid collisions between multiple MCP server instances.
Use --show-paths to print the resolved notebook path and
只显示了开头部分;其余内容请在仓库中阅读