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 │
└─────────────────┘ └─────────────────┘ └─────────────────┘______________________________________________________________________
配置(摘要)
---
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、排名调整
模式和概念
- LLM维基指南 --代理维护的知识库演练
- 结构化数据 --CSV/JSONL索引
- 建筑与设计 --BM25内部结构,树形导航
- 竞品分析 --PageIndex、QMD、GitMCP、Context7、托管RAG
源
- 提示 --MCP提示模板
- 技能:
/doc-read·/doc-write·/doc-lint
______________________________________________________________________
站在肩膀上
- 页索引 --层次树导航
- 页面查找 通过 云炮 --BM25评分、位置指数、刻面
- Bun.markdown 通过 烤箱 --本机CommonMark解析器
- Karpathy的法学硕士维基 --LLM维护了wiki模式
许可证
麻省理工学院
