mcpField
D
doctree-mcp

doctree-mcp

本地服务
github.com/joesaby搜索与检索120 周前更新

关于 doctree-mcp

doctree-mcp 是用于检索 Markdown、CSV 和 JSONL 文档的 MCP 服务,结合 BM25 搜索与树形导航,并提供可选的 Wiki 条目编写和校验工具。

主要功能

  1. 01支持筛选和术语扩展的 BM25 搜索
  2. 02按标题树浏览文档
  3. 03读取章节和结构化数据行
  4. 04可选的 Wiki 写入与校验工具
  5. 05支持 stdio、HTTP 和命令行模式

适用场景

  1. 01查找项目文档中的相关段落
  2. 02从文档大纲逐步定位章节
  3. 03按精确键查找数据记录
  4. 04起草并校验由 LLM 维护的 Wiki 条目

MCP 相关

向 MCP 客户端提供搜索、树形导航、章节读取和行查找工具。设置 WIKI_WRITE=1 可启用可选的 Wiki 写入工具。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"joesaby-doctree": {
"command": "npx",
"args": [
"-y",
"doctree-mcp"
],
"env": {
"DOCS_ROOT": "<DOCS_ROOT>",
"DOCS_GLOB": "<DOCS_GLOB>",
"DOCS_ROOTS": "<DOCS_ROOTS>",
"GLOSSARY_PATH": "<GLOSSARY_PATH>"
}
}
}
}
启动命令npx -y doctree-mcp
需要配置的环境变量
DOCS_ROOTPath to your markdown repository root
DOCS_GLOBGlob pattern for finding markdown files (default: **/*.md)
DOCS_ROOTSMultiple weighted collections: ./docs:1.0,./api:0.8 (alternative to DOCS_ROOT)
GLOSSARY_PATHPath to glossary.json for query expansion (default: $DOCS_ROOT/glossary.json)

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

安装包
npmdoctree-mcp1.0.1

工具

还没有获取到工具列表

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

详细介绍

doctree-mcp

针对 Markdown、CSV 和 JSONL 的 Agentic 文档检索。 通过 MCP 实现 BM25 + 树导航——索引时无需向量数据库、嵌入或调用大模型。

核心思路: MCP 提供结构化原语(可导航的树、BM25、术语表、行查找)。捆绑的技能提供流程知识(如何遍历这棵树)。二者结合后,Agent 的表现就像训练有素的研究馆员,而不是只会一次性搜索的工具。请参阅 技能 + MCP 模式。


快速开始

已有文档? 将客户端指向文档:

# In your AI tool's MCP config — see docs/CLIENTS.md for per-tool snippets
{ "mcpServers": { "doctree": {
    "command": "bunx", "args": ["doctree-mcp"],
    "env": { "DOCS_ROOT": "./docs", "WIKI_WRITE": "1" }
} } }

重启工具 → 提问 “搜索文档中的 X”,或调用 doc-read 提示词。

从头开始? 搭建 Karpathy 风格的 LLM wiki:

bunx doctree-mcp init          # configure current tool
bunx doctree-mcp init --all    # configure every supported client
bunx doctree-mcp init --dry-run

创建 docs/wiki/(由 LLM 维护)和 docs/raw-sources/(你的输入),写入 MCP 配置,安装写入后 lint 钩子,并将 wiki 约定附加到 CLAUDE.md / AGENTS.md / .cursor/rules/。


运行模式

模式适用场景指南
stdio(默认)本地开发、Agent 在你的机器上运行客户端配置
HTTP(Streamable HTTP)团队、CI、托管 Agent部署 — Railway · Fly · Render · Cloudflare Containers · Docker
CLIinit、lint、debug-index运行模式

完整决策树:运行模式。


工作原理 — 检索 · 整理 · 添加

Agent: "How does token refresh work?"

→ search_documents("token refresh")
  #1  auth/middleware.md § Token Refresh Flow       score: 12.4
  #2  auth/oauth.md       § Refresh Token Lifecycle  score: 8.7

→ get_tree("docs:auth:middleware")
  [n1] # Auth Middleware
    [n4] ## Token Refresh Flow
      [n5] ### Automatic Refresh

→ navigate_tree("docs:auth:middleware", "n4")   ← n4 + descendants

核心读取工具(始终启用):

工具用途
search_documentsBM25 关键词搜索 + 分面筛选 + 术语表扩展(Markdown · CSV · JSONL)
get_tree目录 — 标题、字数、摘要
get_node_content按节点 ID 获取特定章节的全文
navigate_tree一次调用获取某章节及其所有子章节
lookup_row对结构化数据行进行 O(1) 精确键查找(例如 PROJ-44)

Wiki 写入工具(通过 WIKI_WRITE=1 选择启用):

工具用途
find_similar根据重叠率检测重复项
draft_wiki_entry脚手架:建议路径、推断的 frontmatter、术语表命中项
write_wiki_entry经验证的写入:路径包含检查、架构验证、重复项防护、试运行

安全机制:路径包含检查 · frontmatter 验证 · 重复项检测 · 试运行 · 覆盖保护。

已弃用的别名(list_documents、find_files、find_symbol)已由 search_documents 取代——仍可使用,但不再推荐。


Skill + MCP 模式

大多数检索工具只是给 Agent 一个搜索框,然后听天由命。doctree-mcp 提供的是一棵树,而随附的技能会教它如何在树中探索。

  • MCP = 结构化原语。 search_documents、get_tree、navigate_tree、get_node_content、lookup_row 返回的是 Agent 可以据此推理的树中位置,而不是现成答案。
  • 技能 = 程序性知识。 /doc-read、/doc-write、/doc-lint 编码了沿线索逐步深入的流程:搜索 → 大纲 → 导航 → 检索。Agent 学到的是策略,而不只是 API。

这种搭配在其他地方并不存在:

方案原语技能传授的内容差距
托管式混合 RAG(Cloudflare AI Search、Nia)扁平分块 + 相似度—黑箱评分,没有审计轨迹
工具直接返回答案(Context7)2 个返回答案的工具查询形式Agent 无法推理被跳过的内容
基于 CLI 的技能(QMD)针对扁平搜索的 CLI查询扩展没有可供导航的树
doctree-mcp + /doc-read可导航的树线索导航、多实例路由、维基编纂—

迭代式检索为何更胜一筹:

  • 上下文退化。 将分块内容塞进 1M-token 窗口会降低输出质量。线索导航能让工作记忆保持精简。
  • 可审计性。 search_documents → get_tree → navigate_tree → get_node_content 是可重放的轨迹;余弦评分则不是。受监管领域可以部署前者。
  • 渐进式披露。 少量可导航原语胜过工具泛滥(参见 Cloudflare Code Mode)。

多实例 = 客户端侧联邦。 使用不同名称注册多个 doctree 服务;/doc-read 技能会编码路由策略。添加或移除实例无需修改技能。请参阅客户端设置 → 多实例路由。


LLM 维基模式

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  Raw Sources    │     │  The Wiki        │     │  The Schema     │
│  (immutable)    │ ──→ │  (LLM-maintained)│ ←── │  (you define)   │
│  notes · logs   │     │  runbooks · refs │     │  CLAUDE.md rules │
└─────────────────┘     └─────────────────┘     └─────────────────┘

灵感来自 Karpathy 的 LLM Wiki。完整演练:docs/LLM-WIKI-GUIDE.md。


配置(摘要)

---
title: "Descriptive Title"
description: "One-line summary — boosts ranking"
tags: [relevant, terms]
type: runbook          # runbook | guide | reference | tutorial | architecture | adr
category: auth
---

所有非保留的 frontmatter 字段都会成为筛选维度:

search_documents("auth", filters: { type: "runbook", tags: ["production"] })

常用环境变量:

变量默认值描述
DOCS_ROOT./docs文档文件夹
DOCS_GLOB**/*.md逗号分隔的 glob 模式(**/*.md,**/*.csv,**/*.jsonl)
DOCS_ROOTS—加权多集合(./wiki:1.0,./rfcs:0.5)
PORT3100HTTP 模式端口
WIKI_WRITE(未设置)1 表示启用写入工具
GLOSSARY_PATH$DOCS_ROOT/glossary.json查询扩展词汇表

完整参考:docs/CONFIGURATION.md。

词汇表 — 将 glossary.json 放在文档根目录中,以进行双向查询扩展:

{ "CLI": ["command line interface"], "K8s": ["kubernetes"] }

诸如 "TLS (Transport Layer Security)" 这样的首字母缩略词定义也会自动提取。

结构化数据 — CSV/JSONL 文件会转换为文档,每行都是一个树节点。列角色(id、标题、描述、筛选维度、URL)会根据表头自动检测。请参阅docs/STRUCTURED-DATA.md。


从源代码运行

git clone https://github.com/joesaby/doctree-mcp.git
cd doctree-mcp && bun install

DOCS_ROOT=./docs bun run serve          # stdio
DOCS_ROOT=./docs bun run serve:http     # HTTP (port 3100)
DOCS_ROOT=./docs bun run index          # CLI: inspect indexed output
bun test

性能

操作耗时Token 开销
完整索引(900 份文档)2–5s0
增量重新索引~50ms0
搜索5–30ms~300–1K tokens
树大纲<1ms~200–800 tokens

文档

设置与运行

  • 运行模式 — stdio · HTTP · CLI
  • 客户端设置 — Claude Code · Cursor · Windsurf · Codex · OpenCode · Claude Desktop
  • 部署 — Railway · Fly.io · Render · Cloudflare Containers · Docker
  • 配置 — 环境变量、frontmatter、排序调优

模式与概念

源代码


站在巨人的肩膀上

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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