md-graph
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@md-graphsearch for 'knowledge graph' in my markdown files"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
md-graph
Markdown 知识图谱引擎 — 为 AI Agent 提供文档全文搜索、链接导航和变更感知
~54% 更快 · ~71% 更少工具调用 · 100% 本地
快速开始
# 安装
git clone https://github.com/LZMW/md-graph.git && cd md-graph
npm install && npm run build && npm link
# 注册 MCP 服务器(全局一次)
claude mcp add --transport stdio --scope user md-graph -- node /path/to/md-graph/dist/cli.js serve --mcp
# 给项目建索引
cd /path/to/your/project
md-graph init
# 重启 Claude Code 即可使用md-graph 启动时自动开启文件监控,项目中的 MD 文件增删改后索引秒级增量更新,无需手动操作。--scope user 让 md-graph 在所有项目中可用——Claude Code 启动时自动注入 CLAUDE_PROJECT_DIR 环境变量,服务器据此自动发现项目索引。
卸载
md-graph uninstall # 删除项目索引
claude mcp remove md-graph # 移除 MCP 注册Related MCP server: mcp-markdown-vault
为什么用 md-graph?
当 Claude Code 在 Markdown 文档项目中搜索内容时,通常用 Grep 扫描文件、Read 读取内容——每次工具调用都消耗 token。
md-graph 给 agent 一个预索引的知识图谱——文档节点、标题层级、链接关系全部在 SQLite 中。agent 一次 md_search 就能定位到相关段落,一次 md_navigate 就能看到完整链接关系图,无需逐个文件 Read + Grep。
与直接搜索的对比
场景 | 不用 md-graph | 用 md-graph |
查找"staleness"概念 | Grep 所有文件 → Read 匹配行 |
|
了解文档引用关系 | Read 每个文件 → 人工追踪链接 |
|
感知文档变更 | 没有标准方式 |
|
核心设计哲学
md-graph 只负责定位,Read 负责阅读。 md_status 定位变更 → agent 用 Read 读取变更内容;md_search 定位搜索命中 → agent 用 Read 读取命中段落;md_navigate 定位关联文档 → agent 用 Read 读取关联文档。所有输出均为自然语言模板,内置 【务必】/【不要】 引导块告诉 agent 下一步做什么。搜索结果的 snippet 是相关性证据(匹配词居中 ±80 字符),不是内容预览——agent 用它判断文件值不值得 Read。staleness 只在索引真正过期时提示,正常状态静默。
核心功能
变更感知 | 每次会话首先调用 |
全文搜索 | SQLite FTS5 毫秒级搜索,BM25 相关度排序。比 Grep 更精确——匹配限定在语义 MD 块(段落、标题、列表项)而非原始文本行 |
链接导航 | 自动解析 |
Staleness 新鲜度合约 | 每个 MCP 响应末尾嵌入 |
自然语言输出 | 所有 MCP 工具返回自然语言模板文本,非 JSON 数组。 |
100% 本地 | 数据不离开本机。无需 API key。无需外部服务。纯 SQLite 数据库 |
自动同步机制
文件编辑保存
→ chokidar 检测到 change 事件 (<100ms)
→ debounce (300ms) 合并批量变更
→ Indexer 增量更新改动的文件
→ MD 解析 → SQLite 写入
→ 下一次 agent 查询看到最新数据连接时追赶: MCP 服务器启动时,MdGraph.status() 运行增量索引确保编辑器的离线修改被吸收。Staleness 信号: 如果 debounce 窗口中有待处理的文件,MCP 响应末尾的 staleness 行会标记为"过期",agent 据此判断是否需要 Read 最新文件。
验证:md-graph status --verbose 或直接用 MCP 工具 md_status()。
MCP 工具
工具 | 意图(你想做什么) | 示例 |
| 会话唤醒入口:最近变更 + 高频关键词 |
|
| 已索引 MD 文件全貌:目录树 + H1 主题 + 外链数 |
|
| 跨文件全文搜索,匹配词居中 snippet |
|
| 出链/入链关系,同目标去重合并 |
|
md_status — 变更感知入口
每次会话第一个调用的工具。按 ±15 分钟窗口分组显示最近增删改的 MD 文件。
参数 | 类型 | 必填 | 默认值 | 描述 |
| number | 否 | 3 | 时间批次数量 |
| string | 否 | — | ISO 8601 时间戳,仅显示之后的变更 |
| number | 否 | 50 | 每批次最大文件数 |
md_search — 全文搜索
参数 | 类型 | 必填 | 默认值 | 描述 |
| string | 是 | — | 搜索关键词(支持 FTS5 布尔操作符) |
| number | 否 | 20 | 最大结果数(最大 50) |
| string | 否 | — | 过滤: |
| string | 否 | — | 限定搜索指定文件路径 |
md_navigate — 链接关系探索
参数 | 类型 | 必填 | 默认值 | 描述 |
| string | 与 nodeId 二选一 | — | 起始文件路径 |
| number | 与 path 二选一 | — | 起始节点 ID |
| string | 是 | — |
|
| number | 否 | 1 | BFS 遍历深度(最大 30) |
| number | 否 | 20 | 最大返回链接数(最大 100) |
md_files — 文件全貌
首次进入项目时了解已索引文档的目录结构。返回文件树、H1 标题主题、外链数量、最近 30 分钟增删改标记(✚/✎/✕)。
参数: 无
CLI 参考
md-graph init [dir] [--force] # 初始化或更新索引。默认增量,--force 全量重建
md-graph status [dir] [--verbose] # 索引健康检查 + staleness 报告
md-graph uninstall [dir] [--keep-db] # 删除索引。--keep-db 仅移除配置保留数据库
md-graph serve --mcp [--path <dir>] # 启动 MCP stdio 服务器规范 | 值 |
stdout | 纯 JSON(无 ANSI、无进度条) |
stderr | 仅文本错误 |
exit code | 0=完全成功, 1=部分成功, 2=完全失败 |
项目自动发现
服务器按三层优先级查找项目索引:
--path显式指定CLAUDE_PROJECT_DIR环境变量(Claude Code 自动注入)cwd向上遍历查找.md-graph/目录
未找到项目时服务器仍正常运行,工具调用返回友好的初始化提示。
排除规则
索引和文件监控默认跳过以下目录,无需配置:
隐藏目录(
.开头,除.md文件外)node_modules/vendor/venvdist/build/target/.next
架构
agent MCP 请求
→ MCP Server (JSON-RPC 2.0)
→ MdGraph Facade
→ Searcher (FTS5) / Traverser (BFS) / Indexer (Watcher)
→ SqliteDbAdapter (better-sqlite3) + FileStore + Staleness数据库
每个项目在 .md-graph/index.db 中创建 SQLite 数据库:
表 | 内容 |
| 文件元数据(路径、哈希、大小、修改时间) |
| 文档节点(7 类:document/heading/paragraph/list_item/code_block/blockquote/table_row) |
| 节点全文(仅 searchable 节点) |
| 链接边(link-only 模型,拒绝 contains/reference) |
| FTS5 全文搜索虚拟表(自动触发器同步) |
开发
npm run build # tsc + 复制 schema.sql
npm test # 149 个测试
npx tsc --noEmit # 类型检查技术栈
运行时: Node.js >= 22
语言: TypeScript (ESM)
搜索: SQLite FTS5 (better-sqlite3)
MD 解析: markdown-it
文件监控: chokidar
CLI: commander
协议: MCP / JSON-RPC 2.0
故障排除
"md-graph 未初始化" — 在项目目录下运行 md-graph init 创建索引。
MCP 服务器连接失败 — 确保项目已运行过 md-graph init,验证 MCP 配置中路径正确:claude mcp list 检查。也可以在命令行测试:echo '{"jsonrpc":"2.0","id":1,"method":"initialize",...}' | node dist/cli.js serve --mcp。
搜索结果过时 — 每个 MCP 响应末尾有 staleness 元数据行。若显示"过期",文件监控会自动增量更新(等待 300ms debounce 窗口)。若 watcher 未运行,运行 md-graph init 手动更新。
数据库锁定 — better-sqlite3 使用同步 API,并发读取不会阻塞。若遇到锁定,检查是否有其他进程同时写入。
索引了不需要的目录 — 将不需要的目录添加到 .gitignore,或在项目外运行 md-graph init。
许可证
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/LZMW/md-graph'
If you have feedback or need assistance with the MCP directory API, please join our Discord server