文档检索工具

一款基于BM25和树形导航的文档检索工具,支持Markdown、CSV和JSONL格式,适用于技术文档管理和AI辅助检索。

  • by joesaby
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 joesaby/doctree-mcp

使用说明

doctree mcp

通过markdown、CSV和JSONL进行代理文档检索。 BM25+树导航 主控程序 --没有向量数据库,没有嵌入,在索引时没有LLM调用。

球场: MCP提供结构基元(可导航树、BM25、术语表、行查找)。捆绑的技能提供了程序知识(如何走那棵树)。总的来说,代理人的行为就像一个训练有素的研究图书馆员,而不是一个一次性的搜索者。看 技能+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" }
} } }

重新启动工具→ ask “在文档中搜索X” 或调用 doc-read 提示。

重新开始? 支架一种Karpathy风格 LLM维基:

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

创造 docs/wiki/ (保留法学硕士学位)+ docs/raw-sources/ (您的输入),编写MCP配置,安装写后lint钩子,将wiki约定附加到 CLAUDE.md / AGENTS.md / .cursor/rules/.


操作模式

模式 使用时 指南
标准 (默认) 您计算机上的本地开发代理 客户端设置
超文本传输协议 (流式HTTP) 团队、CI、托管代理 部署 --铁路·飞行·渲染·Cloudflare容器·Docker
命令行界面 init, lint,调试索引 操作模式

完整决策树: 操作模式.


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

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_documents BM25关键字搜索+方面过滤器+术语表扩展(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 脚手架:建议路径、推断前体、术语表点击
write_wiki_entry 验证写入:路径包含、模式、重复保护、模拟运行

安全:路径遏制·前端验证·重复检测·干运行·覆盖保护。

弃用的别名(list_documents, find_files, find_symbol)被取代 search_documents --功能正常,不再推荐。


技能+MCP模式

大多数检索工具都会给代理一个搜索框,并寄希望于最好的结果。doctree mcp递给它 树,捆绑的技能教它如何走路。

  • MCP=结构图元。 search_documents, get_tree, navigate_tree, get_node_content, lookup_row 返回树将代理原因定位在未完成的答案上。
  • 技能=程序知识。 /doc-read, /doc-write, /doc-lint 对面包屑进行编码:搜索→ 轮廓→ 导航→ 检索。代理学习 政策,而不仅仅是API。

这种配对在其他地方并不完全存在:

方法 原始 技能传授 差距
管理混合RAG(Cloudflare AI Search,Nia) 扁平块+相似性 -- 黑匣子评分,无审计追踪
工具返回答案(Context7) 2个工具返回答案 查询形状 代理无法对跳过的内容进行推理
技能胜过CLI(QMD) CLI胜过平面搜索 查询扩展 没有树可导航
doctree mcp+ /doc-read 通航树 面包屑、多实例路由、维基编译 —

为什么迭代检索获胜:

  • 上下文腐烂。 在1M的令牌窗口中填充块会降低输出。面包屑导航使工作内存保持较小。
  • 可审计性。 search_documents → get_tree → navigate_tree → get_node_content 这是一条可回放的轨迹。余弦分数不是。受监管的域名可以运送前者。
  • 逐步披露。 更少的可导航原语击败了工具蔓延(参见Cloudflare代码模式)。

多实例=客户端联盟。 以不同的名称注册多个doctree服务器;这 /doc-read skill对路由策略进行编码。在不涉及技能的情况下添加或删除实例。看 客户端设置→ 多实例路由.


LLM Wiki模式

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

受...启发 Karpathy的法学硕士维基.完整演练: 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
---

所有非保留的前体字段都成为过滤器方面:

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

常见环境变量:

变量 默认值 描述
DOCS_ROOT ./docs Docs文件夹
DOCS_GLOB **/*.md 逗号分隔的球体(**/*.md,**/*.csv,**/*.jsonl)
DOCS_ROOTS -- 加权多重集合(./wiki:1.0,./rfcs:0.5)
PORT 3100 HTTP模式端口
WIKI_WRITE (未设置) 1 启用写入工具
GLOSSARY_PATH $DOCS_ROOT/glossary.json 查询扩展术语表

完整参考: docs/CONFIGURATION.md.

术语表 --地点 glossary.json 在用于双向查询扩展的docs-root中:

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

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

结构化数据 --CSV/JSONL文件成为文档,其中每一行都是一个树节点。列角色(id、标题、描述、方面、URL)是从标题中自动检测的。看 docs/STRUCTURE-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

演出

操作 时间 令牌成本
完整索引(900个文档) 2-5秒 0
增量重新索引 ~50ms 0
搜索 5-30ms ~300-1K代币
树轮廓 <1ms ~200-800个标记

文档

设置和操作

  • 操作模式 --stdio·HTTP·CLI
  • 客户端设置 --克劳德代码·光标·风帆·Codex·OpenCode·克劳德桌面
  • 部署 --铁路·Fly.io·渲染·Cloudflare容器·Docker
  • 配置 --env-vars、frontmatter、排名调整

模式和概念

源


站在肩膀上

许可证

麻省理工学院