mcpField
D
DocsAgent — Zotero, Obsidian & Apple Notes MCP Server

DocsAgent — Zotero, Obsidian & Apple Notes MCP Server

本地服务
github.com记忆与知识5784 周前更新

关于 DocsAgent — Zotero, Obsidian & Apple Notes MCP Server

DocsAgent 是一个 MCP 服务,让 AI Agent 能够检索、读取和写入 Zotero、Obsidian 与 Apple Notes(仅 macOS)中的个人知识库。其搜索核心为 C++ 实现,全部在本地运行,适合重视隐私的研究者与知识工作者。

主要功能

  1. 01BM25 全文检索与段落排序
  2. 02Zotero、Obsidian、Apple Notes 混合检索
  3. 03基于倒数排名融合的多源结果合并
  4. 04三层写入安全门控
  5. 05stdio 与 Streamable HTTP 两种传输方式

适用场景

  1. 01让 AI 助手检索 Zotero 文献库中的论文段落
  2. 02在 Obsidian 笔记库中按标签或文件夹浏览内容
  3. 03为 Zotero 条目批量添加标签或加入集合

MCP 相关

DocsAgent 本身是 MCP 服务,向 MCP 客户端暴露 8 个工具,其中 5 个为读取工具、3 个为写入工具,写入工具默认关闭。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"docsagent-docsagent": {
"command": "npx",
"args": [
"-y",
"@docsagent/docsagent"
],
"env": {
"DOCSAGENT_CONFIG": "<DOCSAGENT_CONFIG>"
}
}
}
}
启动命令npx -y @docsagent/docsagent
需要配置的环境变量
DOCSAGENT_CONFIGPath to the shared docsagent config file (default: ~/.docsagent/config.json)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@docsagent/docsagent5.0.1
pypidocsagent-mcp5.0.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

DocsAgent MCP — 为 AI Agent 提供 Zotero、Obsidian 和 Apple Notes 📚⚡

DocsAgent 让 AI Agent 能即时、私密地访问你的个人知识库。 docsagent 是一个由规范驱动的 MCP(Model Context Protocol)服务,让任意 AI Agent——Claude Desktop、Cursor、Cline、Qwen Code 或任何 MCP 客户端——都能通过常驻的 C++ 搜索引擎搜索、读取和写入你的 Zotero 文献库、Obsidian 知识库和 Apple Notes(macOS)。基于 1,000+ PDF 的 BM25 全文搜索 + 查询排序段落检索,耗时约 15 ms,完全在本地运行(适用于 RAG 的知识库)。

  • 🔒 本地优先且私密——引擎直接在你的设备上读取 Zotero 文献库、Obsidian 知识库和 Apple Notes 存储。你的笔记和 PDF 永远不会离开设备。
  • 🗂 三个来源,一次查询——Zotero 条目/批注/笔记、Obsidian 知识库和 Apple Notes(仅限 macOS);混合搜索通过倒数排名融合这三个来源。
  • ⚡ 原生 C++ 搜索核心——倒排索引 BM25 + 段落排序,毫秒级检索,内存占用低(1,500 篇论文的文献库占用 160–227 MB)。
  • 🧩 8 个 MCP 工具——5 个读取 + 3 个写入,支持 JSON Schema 参数验证、令牌预算、结果去重,以及三层写入安全门控。
  • 🌐 两种传输方式——stdio 供本地 MCP 客户端使用;Streamable HTTP 用于远程部署(来源检查、API 密钥/OAuth 2.0 令牌内省、按请求执行 RBAC、/health 探测)。
  • 🐍 两种封装,一个核心——此 TypeScript 包和功能相同的 Python 封装通过相同的 JSON-RPC 契约提供相同的工具。

架构

MCP Client (Claude Desktop / Cursor / Cline / Qwen Code / any MCP host)
        │  stdio (local)   or   Streamable HTTP  /mcp  (remote)
        ▼
MCP shell  ← this package (@docsagent/mcp-zotero / docsagent-mcp-zotero)
   · tool schemas (spec-driven), argument validation, token budget, dedup
   · write orchestration via the Zotero local API, write safety gate, RBAC
   · group-library sync via the Zotero Web API
        │  JSON-RPC 2.0 over HTTP ({coreHost}:{httpPort}/rpc, cpp-httplib)
        ▼
DocsAgent Core (resident C++ engine)
   · reads ~/Zotero/zotero.sqlite + storage/, an Obsidian vault, and (macOS) the
     Apple Notes store — directly on your machine
   · builds & serves one index per source (BM25 + passage ranking); mixed search
     (source "all") fuses them by reciprocal rank (RRF, k=60)

工具调用期间,封装绝不会启动核心进程,也不会触碰你的源文件。 核心作为后台服务运行,在 MCP 客户端重启后仍可使用。 工具架构和错误代码:spec/。


快速开始

1. 启动核心
npx @docsagent/docsagent start           # spawn the bundled core for your platform
npx @docsagent/docsagent status          # pid / endpoint / version

Python 封装(相同命令,位于 core 子命令下):

pip install ./python                      # build the wheel locally (PyPI upload pending)
docsagent-mcp core start

(也提供 core stop / core restart。核心会为每个已配置的来源建立索引——你的 Zotero 数据目录、Obsidian 知识库,以及(macOS 上的)Apple Notes——并在 http://0.0.0.0:23120/rpc 提供 JSON-RPC 服务。)

2. 配置 MCP 客户端

Claude Desktop / Cursor / Cline / Qwen Code(mcpServers):

{
  "mcpServers": {
    "docsagent": {
      "command": "npx",
      "args": ["-y", "@docsagent/docsagent"]
    }
  }
}

Python 封装(相同工具、相同契约,从此仓库安装)——mcpServers:

{
  "mcpServers": {
    "docsagent-zotero-py": {
      "command": "docsagent-mcp"
    }
  }
}

请先安装 Python 包(步骤 1),确保 docsagent-mcp 位于 PATH 中。

启动时,封装会连接核心、加载来源并检查索引状态。如果核心未运行,它会立即失败并显示启动说明——绝不会启动任何进程。


MCP 工具(外部 API)

共 8 个工具,5 个读取 + 3 个写入。架构以 spec/tools/*.json 中的规范为唯一来源(同步至两个包);运行处理程序前会验证参数,失败时会映射为带类型的 docsagent 错误代码。

list_sources

列出所有可搜索来源及其功能、支持的目标/包含项/浏览模式、筛选条件和文档数。请先调用此工具。

当前支持的来源:zotero(目标为 items、annotations、notes;可浏览分类/标签)、 obsidian(一个知识库——笔记作为条目,可浏览文件夹/标签)和 apple-notes(仅限 macOS——在其他平台上,引擎会省略此来源)。知识库位于 ~/Documents/Obsidian Vault(可通过 DOCSAGENT_OBSIDIAN_VAULT 覆盖);Apple Notes 从系统 Notes 存储中读取(可通过 DOCSAGENT_APPLE_NOTES_DB 覆盖)。

search

跨条目搜索一个来源中的内容(条目、批注和笔记)。

参数类型说明
query字符串普通关键词或短语;除非 mode=grep,否则为必填
moderelevance | grep默认为 BM25 相关性搜索;grep 会扫描字面模式,不进行分词或排序
pattern字符串,在 mode=grep 时必填要扫描的字面字符串
caseSensitive、wholeWord、maxMatches仅用于 mode=grep:ASCII 大小写折叠、[A-Za-z0-9_] 单词边界、命中总数上限
target"items" | "annotations" | "notes" 或数组默认为 items
depthids | snippets | full默认为 snippets(按 BM25 排序的段落)
filters对象tags、yearFrom/yearTo、itemType、authors、colors、containerId、titleContains
k、snippetsPerResult、max_tokens数字排序深度和令牌预算(mode=grep 时为最大文档数、每个文档的最大命中窗口数)

返回包含全局 ID(zotero:KEY、obsidian:<path>、apple-notes:<uuid>)、标题、相关性和摘要的 results[];多目标搜索会按目标分组。在 mode=grep 下,每个结果包含 matchCount 和 snippets[] 命中窗口(hits[] 中带有 line/column/offset,元数据命中项则带有 field 标签),relevance 为 0,响应还会添加 totalMatches。结果会去重(先按 ID,再按规范化标题和年份),并控制在令牌预算内。

search 会针对 config.defaultSource(默认为 zotero)运行。混合搜索是核心功能:将 source: "all" 传给核心的 search / grep 方法后,每个来源都会独立排序,然后通过倒数排名融合(k=60)合并结果——每个命中项都会标记其来源。不同语料库的 BM25 分数不可比较,因此融合依据排名进行。

get_content

读取一条条目。mode=passages(按查询排序的段落,k)或 mode=fulltext(带 nextOffset 的偏移分页)。笔记会返回正文及标签和元数据。

get_metadata

include:metadata、abstract、annotations、notes、citation(通过 citationFormat/citationStyle 指定 bibtex / csljson / 格式化引用)。笔记会控制在令牌预算内。

list_library

浏览模式:collections(通过 parentId 逐级浏览)、items(按 containerId)、tags、saved_searches、standalone_notes。浏览模式按来源区分——Zotero 提供所有这些模式,而 Obsidian 和 Apple Notes 提供 folders(逐级浏览)/ tags / items。

写入工具(三层安全关卡)
工具功能关键参数
import_item导入本地 PDF,或解析 DOI / ISBN / arXiv ID(通过 Zotero translation server);可选的 autoClassify 会推荐分类集合paths | identifiers、containerId、autoClassify、confirmed
add_note为条目添加 Markdown 子笔记(转换为 Zotero 笔记 HTML),并验证是否为孤立笔记,必要时回滚id、content、tags、confirmed
batch_modify对最多 200 个条目进行批量 add_to_collection / remove_from_collection / add_tags / remove_tags 操作,每批 50 个action、ids、containerId、tags、confirmed

写入工具仅适用于 Zotero 来源——Obsidian 和 Apple Notes 来源为只读。

写入安全关卡(spec/algorithms/write-gate.md):除非设置 enableWrites=true,否则第 1 层不会注册写入工具;第 2 层中,confirmed=false 会返回预览,且不消耗速率限制额度;第 3 层中,已确认的写入会消耗每小时速率限制额度(默认为 30/h)。在 batch_modify 中,超过 20 个条目的操作还会在预览中报告 requiresConfirmation。

引擎性能

C++ 引擎为 PapersGPT 提供支持——同一套索引和检索技术栈也用于此 MCP 服务。在真实的 Zotero 安装环境中进行基准测试(完整报告):

指标Mac(Intel i9)Windows VM(4C8G)
文库大小1,506 篇 PDF(磁盘占用 4.5 GB)500+ 篇 PDF
索引构建时间141 s几秒
内存(Agent 进程)227 MB160 MB
平均检索延迟~15 ms~15 ms
  • 索引耗时大致随文库大小线性增长;检索延迟则保持恒定——包含 10,000 篇论文(约 30 GB)的文库约需 15–20 分钟完成索引,日常搜索仍为 ~15 ms。
  • 作个比较:典型网页加载需要 1,000–3,000 ms;眨眼约为 100–150 ms。PapersGPT 完全离线,约 15 ms 即可给出答案。
  • 隐私:你的文库不会离开你的设备。

配置

配置文件位于 ~/.docsagent/config.json(或 $DOCSAGENT_CONFIG)——JS shell、Python 封装层和 C++ 核心共用同一个文件。根据 spec/config.json 进行验证。

键默认值说明
coreHost0.0.0.0核心绑定并由 shell 连接的地址
httpPort23120核心 HTTP 端口(POST /rpc)
coreBinary""可选的核心二进制文件显式路径
zoteroDataDir~/ZoteroZotero 数据目录
zoteroApiUrlhttp://localhost:23119/apiZotero 本地 API(写入操作编排)
zoteroGroups[]从 zotero.org 同步的群组文库
enableWritesfalse注册三个写入工具
writeRateLimitPerHour30已确认写入的速率限制
maxTokensPerTool4000每个工具结果的 Token 预算
defaultSourcezoteroshell 搜索和解析 ID 前缀时使用的数据源(zotero、obsidian、apple-notes)
transportstdiostdio 或 streamable-http
httpListenAddr0.0.0.0:8080streamable-http(/mcp)的监听地址
authMode / authConfignoneapi-key 或 oauth2(RFC 7662)+ allowedOrigins
rbacRoles{}角色 → 允许使用的工具名称(HTTP 上按请求执行 RBAC)
logLevelinfodebug / info / warn / error

分发

渠道包随附核心大小
npm(JS/TS shell)@docsagent/docsagentbin/ 中包含所有平台的文件~70 MB tarball
PyPI(Python shell)docsagent-mcp(pip install ./python)wheel 中包含相同的二进制文件~65 MB wheel

随附核心支持的平台:macOS 通用版(Intel + Apple Silicon)、Windows x64 (x86_64)、Linux x64(x86_64)——不支持 Linux ARM。数据源可用性: Zotero 和 Obsidian 可在所有平台上使用;Apple Notes 仅限 macOS(其他平台上的 list_sources 不会列出它)。

两个 shell 读取相同的配置,并连接到同一个核心——可任选其一(或同时使用),作为 MCP 分发渠道。两个 CLI 均支持核心生命周期管理(start / stop / restart / status)。

链接

许可证

Apache-2.0

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。