Mortis-RAG-MCP
This server provides local RAG (Retrieval-Augmented Generation) capabilities for Obsidian/Markdown knowledge bases via MCP, enabling registration, indexing, search, and management of private note libraries.
Knowledge Base Management: Register (
kb_init), unregister (kb_unregister), list (kb_vaults), and rebuild (kb_rebuild) knowledge bases from local folders.Search & Retrieval: Hybrid semantic/keyword search (
kb_search) across one or all vaults, with filters (tags, path, mtime, pagination), reranking, deduplication, and per-vault grouping.Read & Export: Read original notes by path or line range (
kb_read), export/import index snapshots for migration (kb_export,kb_import).Fine-Tuning: Set retrieval weights per vault (
kb_set_weight), and manage exemptions for private or draft content (kb_exempt).Monitoring: List indexed files (
kb_list) and get stats on index health, failures, and model info (kb_stats).Ingestion: Parse PDF/Office/images into searchable Markdown (
kb_ingestmentioned in README, though not in schema).Private Vaults: Support for solo/private libraries that are excluded from global search unless explicitly queried (
kb_init_solofrom README).
Allows registering Obsidian-style Markdown vaults as knowledge bases, searching raw chunks across one or multiple vaults, reading specific notes or sections, and managing vault indexes and exclusions.
Click on "Deploy 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., "@Mortis-RAG-MCPsearch my notes for 'RAG evaluation metrics' and show top results"
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.
Mortis'RAG MCP
English | 简体中文
面向 Obsidian 与 Markdown 笔记的本地知识库 RAG(检索增强生成)MCP 服务。 笔记完全保留在本地,支持语义检索、精准定向路由、PDF/Office 文档自动解析摄取与跨知识库搜索,开箱即用。
🌟 核心特性
📂 自由挂载,零路径绑定:通过
kb_init一键挂载任意本地文件夹为知识库,配置持久化保存,不绑定死路径,换电脑或多库管理极简。🔍 Agent 信任锚,免预检开箱即搜(0.7.1):一条
python -m mortis_rag_mcp --doctor生成本机环境凭证(STATUS.md)。AI 助手读到 ✅ 即不再做任何环境/依赖/key 预检,首次提问就直接检索,省掉每次调用前的反复试探;真出问题才提示你跑那一条命令,且失败不会陷入重试死循环。📄 文档智能解析与摄取(0.7.0):支持将知识库内的 PDF、Word、PPT、Excel 与图片等文件自动转换为 Markdown 纳入搜索;解析文件单独存放,原笔记与源文件零修改、零污染。
🎯 智能定向路由(0.7.0):支持为知识库添加一句话自然语言描述,AI 检索时按意图精准选库,大幅减少无关库干扰,回答更快更准。
📊 表格排版与完整保护(0.7.0):复杂表格与数据表头完整保护,不被生硬切断,检索结果排版清晰美观。
🔒 私密独立库(solo):支持注册独立私密库(
kb_init_solo),默认不参与跨库全局搜索,仅在明确指定时查询,妥善保护个人隐私。⚡ 秒级混合检索:融合关键词全文检索与语义向量召回,配合自动重排序;支持文件监听与秒级增量同步,笔记随写随搜。
📦 轻量纯粹:核心功能纯标准库实现,无冗余第三方运行时依赖。
Related MCP server: SeekLink
🚀 5 分钟快速上手
1. 安装
环境要求:Python 3.10+。
git clone https://github.com/moton16/Mortis-RAG-MCP.git
cd Mortis-RAG-MCP
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -e .2. 配置
从模板复制配置文件:
Copy-Item .\config\app.toml.example .\config\app.toml(1) 基础配置:Embedding API Key(用于笔记语义检索)
推荐使用免费档硅基流动 BAAI/bge-m3:
方式一(推荐):设置系统环境变量
MORTIS_RAG_API_KEY=你的API密钥(同时兼容旧名VAULT_MCP_API_KEY)。方式二:直接在
config/app.toml中配置你的服务商地址与密钥。
(2) 可选配置:MinerU 接入(0.7.0,用于 PDF / Office 文档解析摄取)
如果需要检索知识库内的 PDF、Word、PPT、Excel 或图片文件:
打开
config/app.toml,在[ingest]小节将enabled = true。配置 MinerU Token(两种方式):
高精度通道(推荐):前往 mineru.net 免费获取 API Token,设置系统环境变量
MINERU_API_TOKEN=你的Token(或在config/app.toml的[ingest]中填写api_key = "你的Token"),享受每日 1000 页额度与大文件支持。免登试用通道:留空
api_key即可直接使用(适合 20 页以内的日常小文档体验)。
3. 接入 AI 客户端
服务以标准 stdio 模式运行,直接在你的 MCP 客户端中配置即可:
WorkBuddy / 自定义 JSON 连接器
{
"mortis-rag-mcp": {
"command": "python",
"args": ["-m", "mortis_rag_mcp", "--serve-mcp-stdio", "--app-config", "C:\\你的路径\\config\\app.toml"],
"env": {
"MORTIS_RAG_API_KEY": "你的API密钥",
"MINERU_API_TOKEN": "可选,用于PDF解析的MinerU密钥"
}
}
}Codex / Trae / TOML 配置
[mcp_servers.mortis_rag_mcp]
command = "mortis-rag-mcp"
args = ["--serve-mcp-stdio", "--app-config", "C:\\你的路径\\config\\app.toml"]
enabled = true4. 初始化与使用
连接成功后,在对话中对 AI 助手说:
“帮我用
kb_init注册知识库:D:\我的笔记”
知识库即可在后台自动建立索引。之后只需自然提问:
“搜一下数电笔记里关于触发器的内容” “查一下知识库里关于项目架构的说明”
🛠️ 常用工具一览
工具 | 用途说明 |
| 注册新知识库(指定文件夹路径与名称) |
| 注册/转换为私密独立库(不参与跨库全局搜索) |
| 查看已注册的全部知识库列表与状态 |
| 设置知识库自然语言描述,引导 AI 精准定向检索(0.7.0) |
| 语义与关键词混合检索(支持跨库、指定库、目录过滤与分页) |
| 快速按文件路径或行号读取原文笔记 |
| 摄取并解析知识库内的 PDF / Office 文档(0.7.0,按需开启) |
| 从注册表移除知识库(安全操作,不删除本地实际文件) |
| 查看知识库文件数、切片数与索引健康度 |
📚 详细文档与导航
📖 新手完整指南:详见 QUICKSTART_user.md(更详尽的安装排错与完整配置项说明)。
📝 版本更新日志:详见 CHANGELOG_user.md(各版本更新说明与功能亮点)。
🤖 AI 助手配套技能:详见 skills/mortis-rag-mcp/SKILL.md(为智能体提供最佳检索路由纪律)。
💻 开发者技术说明书:详见 docs/PROJECT_GUIDE.md 与 docs/Quick-start_developer.md(底层架构设计、二次开发与技术流水)。
📄 License
本项目采用 MIT License 开源许可。
Available Tools
12 toolskb_exemptA
查看、添加、删除知识库的 RAG 豁免项(排除不希望被检索的私密/草稿内容)。支持查看规则、添加/删除 .vaultignore 通配符、标记/取消单个文件豁免、检查文件豁免状态。
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | 操作类型:list (列出当前豁免规则与统计), add_pattern (向 .vaultignore 添加排除通配符), remove_pattern (从 .vaultignore 移除规则), exempt_file (将单个文件设为豁免), unexempt_file (取消单个文件豁免), check (检测某个文件是否被豁免及原因) | |
| method | No | 单文件豁免机制:'frontmatter' (修改文件标头写入 rag: false) 或 'ignore_file' (写入 .vaultignore) | frontmatter |
| source | No | 文件相对路径,用于 exempt_file / unexempt_file / check(例如 '日记/2026-08-19.md') | |
| pattern | No | 排除规则通配符,用于 add_pattern / remove_pattern(例如 '日记/*', '*.draft.md', '私密/') | |
| vault_path | No | 可选,已注册知识库的绝对路径;仅注册了一个库时可省略 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
无任何注释,描述承担全部行为披露义务。描述披露了操作范围和机制(. vaultignore 通配符、单个文件豁免、状态检查),但未披露变更的副作用,如 exempt_file 使用 frontmatter 机制会重写源文件 YAML 头部、remove_pattern 可能让原本排除的内容重新暴露给检索,也未说明修改的持久性。对无注释的变更类工具而言,行为披露有明显缺口。
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
两句话零废字:第一句前置核心用途,第二句紧凑列举全部操作能力,与六个 action 枚举一一对应。对于多操作工具而言,篇幅控制得当且信息密度高。
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
该工具为六动作管理类工具,无输出 schema 也无注释,描述虽完整覆盖了操作空间和机制,但未说明各动作的返回行为(如 list/check 返回什么),也未提及前提条件(如知识库需先经 kb_init 注册、vault_path 何时可省略)。在一个动作多样、无输出结构的工具上,这些信息对代理人正确调用仍属必要。
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
schema 描述覆盖率 100%,五个参数均有 detail 说明,描述未在 schema 基础上增加参数级语义。描述提到的 .vaultignore 与 single-file 豁免机制在 schema 的 method 参数中已有覆盖,因此维持基准 3。
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
描述明确给出动词(查看、添加、删除)和资源(知识库的 RAG 豁免项),并解释目的(排除不希望被检索的私密/草稿内容),与获取类兄弟工具(kb_search、kb_read)形成清晰区分。同时列举了与 action 枚举完全对应的六类操作,代理人无需打开 schema 即可理解工具职能。
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
描述给出了明确的使用场景语境——管理检索豁免以排除私密/草稿内容,代理人可据此判断何时调用。但未显式点名替代工具或给出 when-not-to-use 的排除条件,例如未说明检索内容时应使用 kb_search 而非本工具。
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_exportA
把知识库的索引快照(chunks + 向量 + FTS)导出为 zip 文件,用于换机/换目录迁移,导入后无需全量重新 embedding。要求缓存已启用且完成过至少一次索引。
| Name | Required | Description | Default |
|---|---|---|---|
| out_path | Yes | 必填,快照输出路径(.zip) | |
| vault_path | No | 可选,已注册知识库的绝对路径;仅注册了一个库时可省略 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses what gets exported (chunks + vectors + FTS), why it is useful (import avoids full re-embedding), and a prerequisite (cache enabled and at lest one index). It doesn't state whether the operation mutates anything or what happens on failure, but for an export operation this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the core action (export snapshot to zip), then gives the use case and prerequisite. There is no filler or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only 2 params and full schema coverage, the description covers purpose, scope, and prerequisites. It doesn't cover error conditions or post-conditions, but the agent can call the tool correctly with the information provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters (out_path and vault_path), so the baseline is 3. The description adds no additional parameter-level semantics beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (export) and a specific resource (knowledge base index snapshot: chunks + vectors + FTS) and a concrete use case (migration to a new machine/directory). This makes it clearly distinguishable from siblings like kb_search or kb_read, which operate on content rather than on snapshots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states when to use the tool: for migration to a new machine or directory, so no full re-embedding is needed. It also gives a precondition (cache enabled and at least one completed index). It doesn't explicitly name alternatives or say when-not-to-use, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_importA
从 kb_export 生成的快照恢复索引缓存(先 kb_init 注册目标目录再调用)。导入后的下一次同步应当 0 次 embedding 调用;快照的向量模型/维度与本机配置不一致时拒绝,除非 force=true(此时只导入文本层并本地重嵌)。
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | 模型/维度不一致时强制导入(仅文本层,向量重算) | |
| snapshot | Yes | 必填,快照 zip 文件路径 | |
| vault_path | No | 可选,已注册知识库的绝对路径;仅注册了一个库时可省略 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden, and it does well: it states the post-import effect (next sync should make 0 embedding calls), the rejection behavior on model/dimension mismatch, and the force=true fallback of importing only the text layer and locally re-embedding. It does not mention whether existing cache data is overwritten or merged, which is a minor gap, but the key behavioral traits are clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core purpose, then packs the prerequisite, expected outcome, and exception behavior into a compact and readable form. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description supplies the essential context: source of the snapshot, required setup, expected post-import behavior, and the condition under which force is needed. It is complete enough for correct invocation and interpretation. The only minor omission is explicit handling of existing cache data, but that does not block selecting or calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the schema already documents all three parameters. The description adds value by explaining what 'snapshot' should be (an output of kb_export), the prerequisite relationship of vault_path to kb_init, and the semantic consequence of force=true. This goes beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—restoring an index cache from a kb_export-generated snapshot—and clearly differentiates it from sibling tools like kb_export and kb_rebuild. The reference to kb_export as the snapshot source and kb_init as a prerequisite removes ambiguity about what this tool does and how it fits into the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: call after registering the target directory with kb_init, and use it to restore cache from a snapshot. It also explains the force=true branch for handling model/dimension mismatches. It does not explicitly name alternatives to avoid, but the prerequisite and behavioral conditions are strong enough for an agent to decide when this tool applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_initA
注册(初始化)一个文件夹为知识库:校验目录、写入用户级注册表(跨重启保留)、后台建立索引并启动文件监听。首次使用或要纳入新文件夹时调用。
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | 可选,显示名,默认取文件夹名 | |
| path | Yes | 必填,要注册为知识库的文件夹绝对路径 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does well: it reveals that the tool validates the directory, writes to a user-level registry that survives restarts, builds an index in the background, and starts file monitoring. These are meaningful side effects beyond a mere 'initializes'. It omits edge-case behavior such as idempotency (what happens if the folder is already registered) and error handling for invalid paths, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact, front-loaded sentence packs in the core action, the four-step behavioral outline, the persistence note, and a clear usage condition. Every clause earns its place and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description covers the essential decision-making facts: what it does, what side effects it triggers, persistence across restarts, asynchronous behavior, and when to invoke it. The notable gaps are the return value/confirmation format and behavior on duplicate registration, but given the moderate complexity this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. Both parameters (name, path) are already documented in the schema. The description adds only minor value by implying that the path must be a valid directory (校验目录) and confirming that name is optional and defaults to the folder name. It does not materially enrich parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pairing — 注册(初始化)一个文件夹为知识库 (register/initialize a folder as a knowledge base) — and enumerates concrete steps: validate directory, write registry, build index, start file monitoring. It distinguishes itself from the sibling set (kb_unregister, kb_list, kb_search, etc.), none of which perform initialization, and the closing clause positions it as the setup tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to call it: 首次使用或要纳入新文件夹时调用 (call on first use or when adding a new folder). This is clear context for an agent. However, it does not name alternatives or exclusion conditions — e.g., it never says to use kb_unregister for removal or kb_rebuild for re-indexing — so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_listB
列出已索引的 Markdown 文件。可传 vault_path 指定知识库。
| Name | Required | Description | Default |
|---|---|---|---|
| vault_path | No | 可选,已注册知识库的绝对路径;仅注册了一个库时可省略 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates a non-destructive listing operation and the 'indexed' qualifier, but omits what the returned list contains (paths, names, metadata), whether it is recursive, and how multiple knowledge bases are handled when vault_path is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core action is front-loaded and the optional parameter behavior is stated immediately after, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and no output schema, the description is borderline adequate, but it lacks return-value details and when-to-use context. An agent could invoke it correctly, but may be uncertain about the shape of the result or how to choose it over related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 even with no additional parameter explanation in the description. The description does restate that vault_path selects the knowledge base, which adds minor contextual value, but it does not go beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('列出' / list) and resource ('已索引的 Markdown 文件' / indexed Markdown files), making the action clear. It does not explicitly name sibling tools or contrast with them, but the listed resource is distinct enough from kb_search, kb_read, and kb_vaults to avoid obvious confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool rather than a sibling, and names no alternatives or exclusion conditions. The only usage hint is that vault_path can be passed to select a knowledge base, but this is parameter-level guidance, not tool selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_readA
读取知识库原文(不调用 LLM 生成回答;若索引有未同步的变更会先触发一次增量同步,可能调用 embedding API,建议带上 start_line/end_line 限定范围避免一次拉全篇)。多库环境下建议显式传 vault_path(fan-out 结果中的 source 是库内相对路径)。
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| heading | No | ||
| end_line | No | ||
| start_line | No | ||
| vault_path | No | 可选,已注册知识库的绝对路径;仅注册了一个库时可省略 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden and discloses important side effects: it may trigger an incremental sync and call an embedding API if there are unsynced index changes. It also warns about the cost of retrieving an entire document, which is valuable behavioral context beyond the bare read semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, immediately stating the primary purpose. Both sentences deliver essential guidance with no filler, and the structural use of parentheses keeps secondary details attached without disrupting the main flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description covers the most critical operational behaviors: read semantics, side-effecting sync/embedding calls, range guidance, and multi-vault path behavior. It does not describe the return structure or fully explain all parameters, such as heading, which leaves slight room for ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, so the description must compensate. It adds meaning for start_line/end_line as a range-limitation mechanism, explains vault_path's role in multi-vault scenarios, and clarifies that source is a vault-relative path in fan-out results. However, the heading parameter remains undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action — reading the original knowledge base text — and explicitly distinguishes itself from answer-generation tools by noting it does not call an LLM. This makes it clear what kb_read is for and differentiates it from siblings like kb_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use when you want raw text, not an LLM-generated answer. It also advises passing start_line/end_line to avoid pulling the full document, and vault_path in multi-vault environments. It does not explicitly name alternative sibling tools, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_rebuildA
删除指定知识库的磁盘缓存并强制全量重建索引(首次建库或内容大改后用)。
| Name | Required | Description | Default |
|---|---|---|---|
| vault_path | No | 可选,已注册知识库的绝对路径;仅注册了一个库时可省略 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the destructive/heavy nature of the operation ('删除磁盘缓存' and '强制全量重建索引'), warning the agent that this is not a lightweight read. It omits details like permissions or time cost, but the core behavioral profile is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action, and the usage condition is isolated in a parenthetical. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-param maintenance tool with no output schema, the description covers the operation and its trigger conditions. It doesn't describe return values or failure modes, but these are less critical for a destructive rebuild action where the effect is the point.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the vault_path property is fully documented in the schema (optional, absolute path, condition for omission). The tool description adds no additional parameter semantics, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action — deleting the knowledge base's disk cache and forcing a full index rebuild — with a clear resource ('指定知识库') and scope. This distinguishes it from siblings like kb_init (initialization) and kb_search/kb_read (query operations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(首次建库或内容大改后用)' explicitly states when to invoke the tool: after initial database creation or major content changes. It does not name alternatives or when-not-to-use conditions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_searchA
搜索知识库并返回结构化原始 chunks。不传 vault_path 时跨全部注册库 fan-out 检索(结果带 vault 字段)。
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | 可选,frontmatter 标签过滤:命中任一标签即保留(大小写不敏感,自动去掉 '#' 前缀) | |
| limit | No | 可选,本页最多返回条数;缺省时用 top_k | |
| query | Yes | ||
| top_k | No | ||
| dedupe | No | 可选,默认 true:正文完全相同的 chunk 只保留排在最前面的一条(重复备份/复制段落不再占多格 top_k) | |
| offset | No | 可选,跳过前 N 条结果(分页用) | |
| use_rerank | No | ||
| vault_path | No | 可选,已注册知识库的绝对路径;缺省时跨全部注册库检索 | |
| mtime_after | No | 可选,只保留修改时间 >= 该值的文件;epoch 秒或 ISO 8601 字符串(如 '2026-01-01') | |
| path_prefix | No | 可选,只保留 source 以该前缀开头的 chunk(source 是库内相对 posix 路径,如 '教材/') | |
| mtime_before | No | 可选,只保留修改时间 <= 该值的文件;epoch 秒或 ISO 8601 字符串 | |
| group_by_vault | No | 可选,仅跨库检索(不传 vault_path)时生效:结果按知识库分组返回 groups,每组取 top_k 条 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden; it explicitly discloses that the tool is a read-only search returning raw chunk data and that cross-vault results include a vault field. It doesn't discuss auth/rate-limit or full result-shaping behaviors, but for a search tool the core contract is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, then the key scope caveat. No redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description states the essential return type and the one scope-dependent output field. With 12 parameters, no output schema, and no annotations, it leaves result field details and default behavioral implications (dedupe, rerank, grouping) to the schema, which is adequate for invocation but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is75%, so most parameters already carry descriptions; the description reinforces vault_path's default behavior and notes the vault field in cross-vault output, adding mild value. query, top_k, and use_rerank lack schema descriptions and the description does not compensate for them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('搜索知识库') and output type ('结构化原始 chunks'), and distinguishes the cross-vault fan-out behavior. This clearly differentiates it from siblings like kb_read or kb_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear scope rule: omitting vault_path searches across all registered vaults and attaches a vault field, while supplying it targets one vault. It does not name alternative sibling tools or give exclusion criteria, so it doesn't earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_set_weightA
设置知识库的检索权重:跨库检索时该库所有 chunk 的分数会乘以该系数,用于表达"这个库更重要"(默认 1.0,取值 0 < w <= 100)。
| Name | Required | Description | Default |
|---|---|---|---|
| weight | Yes | 必填,权重系数,取值 0 < weight <= 100;1.0 为默认不放大 | |
| vault_path | Yes | 必填,已注册知识库的绝对路径 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and does it well: it explains the operational effect (score multiplication across chunks), the default value, and the allowed range. It does not discuss persistence, permissions, or reindexing requirements, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action, then gives the effect, default, and range with no wasted words. It is compact and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter setter with no output schema, the description is largely sufficient. It covers the mechanism, default, and value range; the only omitted details are persistence/return confirmation, which are low-risk for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds the conceptual intent ('this vault is more important') but does not materially expand on what the parameter descriptions already provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb+resource: setting the retrieval weight of a knowledge base. It clearly distinguishes this from the sibling tools by focusing on weight configuration rather than import, export, search, stats, or registration operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides concrete context: the weight takes effect during cross-vault retrieval by scaling all chunk scores. It does not explicitly name alternatives or exclusions, but the intended use is clear given the sibling tool set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_statsB
返回指定知识库的索引状态、失败文件、最后同步时间和模型信息。
| Name | Required | Description | Default |
|---|---|---|---|
| vault_path | No | 可选,已注册知识库的绝对路径;仅注册了一个库时可省略 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It does clearly indicate a read operation ('返回') and lists the exposed data: index status, failed files, last sync time, and model info. However, it does not disclose behavior for invalid or multiple vault paths, error cases, or any assumptions about permissions or side effects beyond the implied read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence, front-loaded with the action and output categories. There is no filler, redundancy, or unnecessary detail, so every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and no output schema, the description covers the core return content: index status, failed files, last sync time, and model info. It is concise enough for an agent to understand the tool's purpose. The main gap is lack of detail about edge-case behavior, such as what happens when multiple vaults are registered and vault_path is omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter, vualt_path, has 100% schema description coverage already, including its optionality and absolute-path requirement. The description adds little beyond the phrase '指定知识库' (specified knowledge base), so it does not meaningfully supplement the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('返回' / returns) and identifies the resource (stats for a specified knowledge base). It lists meaningful output categories, making the purpose clear. However, it does not explicitly differentiate itself from sibling tools like kb_list or kb_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use kb_stats versus kb_list, kb_search, kb_vaults, or other siblings. The only usage note, about omitting vault_path when a single vault is registered, lives in the schema rather than in the description. No when-to-use or when-not-to-use context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_unregisterA
注销一个已注册的知识库:停止文件监听并从注册表移除(不影响文件夹本身)。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | 必填,已注册知识库的绝对路径 | |
| purge_cache | No | 是否同时删除该库的磁盘索引缓存 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It transparently states the two key side effects: stopping file watching and removing the entry from the registry, and explicitly reassures that the folder itself is not affected. It does not mention the conditional cache deletion behavior or any permission/reversibility aspects, but the main consequences are clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly written sentence that front-loads the core action ('注销一个已注册的知识库') before a colon-separated clarification of the effects. Every clause earns its place; there is no padding or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, this description is reasonably complete: it identifies the target state (registered), describes the operation's effects and its non-destructive nature, and the schema fully documents both parameters. It does not cover error cases or success/output behavior, but for a simple unregister operation this is sufficient for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the 'path' parameter is described as the required absolute path, and 'purge_cache' is described as a boolean for deleting the disk index cache. The tool description adds no additional parameter-level meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: '注销一个已注册的知识库' (unregister a registered knowledge base), and immediately clarifies the scope with '停止文件监听并从注册表移除' (stop file watching and remove from registry). This clearly distinguishes it from sibling tools such as kb_init (registration) and kb_search/kb_read (access operations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for already-registered knowledge bases ('已注册的') and notes that the folder itself is unaffected ('不影响文件夹本身'), which gives some contextual guidance. However, it does not explicitly state when to prefer this tool over alternatives or mention exclusions, such as 'use kb_init to re-register' or 'use kb_exempt if you only want to pause monitoring'. This is implied usage rather than explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kb_vaultsA
列出所有已注册的知识库(含存活状态与索引进度)。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description is minimal. The phrase '含存活状态与索引进度' provides context that the tool does more than a basic list, but it does not disclose whether the operation is read-only, whether it may trigger refresh, or what '存活状态' checking implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that fully expresses the tool's purpose and the distinguishing output fields. No wasted words or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-like listing tool, the description covers essential purpose but lacks explicit behavioral context like read-only guarantee, possible exclusions, or sibling differentiation. Given no annotations, a short note about read-only status and relationship to kb_list would make it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and schema description coverage is 100%, so the schema has nothing to add. The description correctly indicates the tool's scope of output without needing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('列出所有已注册的知识库') with a clear resource and additional detail about what information is included ('存活状态与索引进度'). This makes it immediately distinguishable from siblings like kb_list, which would otherwise be a potential competitor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it obvious this is a listing/enumeration tool, and the tool name 'kb_vaults' contrasts with siblings like kb_search and kb_read. However, there is no explicit statement about when to prefer this over kb_list or whether it is the canonical list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.5.0- Added
kb_export - Added
kb_import - Changed
kb_search8 fields changed- added
Input schema / properties / dedupeAdded value: +{ + "default": true, + "description": "可选,默认 true:正文完全相同的 chunk 只保留排在最前面的一条(重复备份/复制段落不再占多格 top_k)", + "type": "boolean" +} - added
Input schema / properties / group_by_vaultAdded value: +{ + "default": false, + "description": "可选,仅跨库检索(不传 vault_path)时生效:结果按知识库分组返回 groups,每组取 top_k 条", + "type": "boolean" +} - added
Input schema / properties / limitAdded value: +{ + "description": "可选,本页最多返回条数;缺省时用 top_k", + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / mtime_afterAdded value: +{ + "description": "可选,只保留修改时间 >= 该值的文件;epoch 秒或 ISO 8601 字符串(如 '2026-01-01')", + "type": [ + "number", + "string" + ] +} - added
Input schema / properties / mtime_beforeAdded value: +{ + "description": "可选,只保留修改时间 <= 该值的文件;epoch 秒或 ISO 8601 字符串", + "type": [ + "number", + "string" + ] +} - added
Input schema / properties / offsetAdded value: +{ + "default": 0, + "description": "可选,跳过前 N 条结果(分页用)", + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / path_prefixAdded value: +{ + "description": "可选,只保留 source 以该前缀开头的 chunk(source 是库内相对 posix 路径,如 '教材/')", + "type": "string" +} - added
Input schema / properties / tagsAdded value: +{ + "description": "可选,frontmatter 标签过滤:命中任一标签即保留(大小写不敏感,自动去掉 '#' 前缀)", + "items": { + "type": "string" + }, + "type": "array" +}
- Added
kb_set_weight
9 tool updates
v0.4.1- First observed
kb_exempt - First observed
kb_init - First observed
kb_list - First observed
kb_read - First observed
kb_rebuild - First observed
kb_search - First observed
kb_stats - First observed
kb_unregister - First observed
kb_vaults
TDQS
Scored across 12 tools
Each tool targets a distinct operation in the RAG knowledge-base lifecycle: init/unregister manage registration, export/import handle snapshots, search/read retrieve content, and stats/vaults/exempt cover status and filtering. Even similar actions like rebuild and import are clearly separated by purpose and described preconditions.
Tools consistently use a kb_ prefix and short snake_case names, with clear verb-style commands like kb_init, kb_search, and kb_export. Minor deviations exist: kb_vaults and kb_stats are noun-style rather than verb-based, and kb_exempt covers multiple exemption-related actions rather than a single operation.
The 12 tools are well-scoped for a RAG knowledge-base management server, covering registration, indexing, migration, search, reading, statistics, weighting, and exemptions. Each tool serves a distinct and necessary role without bloat or redundancy.
The tool surface covers the core lifecycle well: registering, listing, searching, reading, exporting/importing, rebuilding, unregistering, and managing exemptions are all present. A minor gap is the lack of an explicit manual sync command, though file watching and read-triggered incremental sync largely mitigate this.
Maintenance
Related MCP Connectors
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Token-efficient MCP memory for Markdown vaults. Tiered search, GraphRAG, AI memories.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceEnables semantic search across Obsidian vaults using vector embeddings and ChromaDB. Supports multiple vaults with real-time indexing and provides both MCP server and CLI interfaces for natural language querying of notes.4-
- AlicenseNot gradedqualityBmaintenanceLocal-first Markdown vault retrieval for agents. Read-only MCP stdio server exposing search, get, status, and doctor over Obsidian-compatible Markdown with hybrid BM25/vector/wikilink/title retrieval and first-class CJK support.11MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides always-fresh semantic search over Obsidian vaults, automatically watching file changes and using local embeddings via Ollama.80 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables semantic search and related-note discovery across an Obsidian vault via MCP, providing RAG context blocks for natural language queries.-