内容
🧠 第二大脑 MCP
一个 [MCP (Model)](https://modelcontextprotocol 服务器,将您的 Obsidian 保险库转换为可由 AI 查询的第二大脑。
它结合了:
- **KuzuDB** — 一个嵌入式图数据库,用于存储笔记、标签和 `[[wikilink]]` 关系
- **ChromaDB** — 一个本地向量数据库,用于对笔记内容进行语义搜索
- **Watchdog** — 一个实时文件监视器,自动索引您编写/编辑/删除
---
## ✨ 功能
| 工具 | 描述 |
|------|-------------|
| `search_notes` | 对所有笔记内容进行语义搜索 |
| `list_all_notes` | 列出所有笔记,附带标签和最后修改日期 |
| `get_note` | 检索笔记的完整内容、标签、链接和反向链接 |
| `find_related` | 通过图遍历查找 1 跳和 2 跳相关的笔记 |
| `list_tags` | 显示保险库中所有独特的标签及其使用次数 |
| `search_by_tag` | 返回带有特定标签的所有笔记 |
| `get_note_stats` | 保险库范围的分析:总数、中心笔记、最近活动 |
| `create_note` | 在保险库中直接创建新的 Markdown 笔记 |
| `rename_note` | 重命名笔记并自动更新所有 `[[wikilink]]` 引用 |
| `get_orphan_notes` | 查找没有传入或传出链接的孤立笔记 |
| `get_unresolved_links` | 查找 wikilink 中引用的但尚未创建的占位符/存根笔记 |
| `get_link_suggestions` | 查找提到目标标题但未链接到它的笔记 |
| `surface_contradictions` | 使用 NLI 或启发式方法检测笔记中的冲突陈述 |
| `daily_context` | 获取在特定日期标记或修改的笔记 |
---
## 🚀 设置
### 1. 克隆仓库
```bash
git clone https://github.com/your-username/Second-Brain-MCP.git
cd Second-Brain-MCP
```
### 2. 创建并激活虚拟环境
```bash
python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate
```
### 3. 安装依赖项
```bash
pip install -r requirements.txt
```
### 4. 设置保险库路径
将 `VAULT_PATH` 环境变量设置为 Obsidian 保险库的绝对路径:
```bash
# Windows (PowerShell)
$env:VAULT_PATH = "C:\Users\YourName\Documents\MyVault"
# macOS/Linux
export VAULT_PATH="/Users/YourName/Documents/MyVault"
```
> 如果未设置 `VAULT_PATH`,服务器将默认为本地 `./vault/` 文件夹。
### 5. 运行服务器
```bash
python main.py
```
首次运行时,服务器将执行**初始同步** — 爬取和索引保险库中的所有 `.md` 文件。后续运行将更快,因为数据库将保存在 `.db_data/` 文件夹中。
---
## 🔌 连接到 MCP 客户端
该服务器使用 [FastMCP](https://github.com/jlowin/fastmcp)。要将其连接到 Claude Desktop 或任何 MCP 兼容的客户端,请将其添加到您的 MCP 配置中:
```json
{
"mcpServers": {
"second-brain": {
"command": "python",
"args": ["C:/path/to/Second-Brain-MCP/main.py"],
"env": {
"VAULT_PATH": "C:/path/to/your/ObsidianVault"
}
}
}
}
```
---
## 📁 项目结构
```
Second-Brain-MCP/
├── main.py # MCP 服务器入口所有工具定义
├── graph.py # KuzuDB 图数据库包装器
├── vector.py # ChromaDB 向量数据库包装器
├── parser.py # Obsidian Markdown 和 frontmatter 解析器
├── watcher.py # 实时保险库文件监视器(watchdog)
├── requirements.txt # Python 依赖项
└── .db_data/ # 自动创建:持久化 KuzuDB 和 ChromaDB 数据
```
---
## ⚙️ 依赖项
| 包 | 用途 |
|---------|---------|
| `fastmcp` | MCP 服务器框架 |
| `kuzu` | 嵌入式图数据库 |
| `chromadb` | 本地向量数据库 |
| `sentence-transformers` | 本地嵌入(`all-MiniLM-L6-v2`) |
| `python` | 从 Markdown 文件解析 YAML frontmatter |
| `watchdog` | 文件系统监视 |
| `transformers` + `torch` | 可选的 NLI 模型,用于检测矛盾 |
---
## 📝 注意
- 所有数据库都存储在本地的 `.db_data/` 中 — 无需云服务。
- 嵌入模型(`all-MiniLM-L6-v2`)会下载一次并由 `sentence-transformers` 缓存。
- 用于 `surface_contradictions` 的 NLI 模型(`cross-encoder/nli-MiniLM2-L6-H768`)是可选的;如果不可用,则使用词汇否定回退。
- 笔记通过文件名(不带 `.md`)作为标题匹配,除非在 YAML frontmatter 中设置了 `title:` 字段。
---
## 📄 许可证
MIT