语义笔记搜索工具

一个连接个人知识库与AI系统的语义搜索工具,支持检索增强生成(RAG),实现基于语义而非关键词的笔记搜索。

  • by ruanodendaal
  • JavaScript
  • 本地部署
  • 14 星标
  • 更新于
在 GitHub 查看 ruanodendaal/bear-mcp-server

使用说明

带RAG的Bear Notes MCP服务器

想用人工智能助手来增强你的Bear Notes体验吗?这个小宝石使用语义搜索和RAG(检索增强生成)将您的个人知识库连接到人工智能系统。

我构建这个是因为我希望我的人工智能助手能够真正理解我的笔记中的内容,而不仅仅是执行简单的文本匹配。如果我自己这么说的话,结果相当甜蜜。

入门指南

设置很简单:

git clone [your-repo-url]
cd bear-mcp-server
npm install

使脚本可执行(因为权限很重要):

chmod +x src/bear-mcp-server.js
chmod +x src/create-index.js

第一件事:索引你的笔记

在开始之前,您需要创建笔记的向量嵌入:

npm run index

合理的警告:如果你像我一样是一个多产的笔记者,这可能需要几分钟的时间。它将你所有的笔记转换为数学向量,以捕捉它们的含义——聪明的东西😉.

配置

更新您的MCP配置文件:

{
  "mcpServers": {
    "bear-notes": {
      "command": "node",
      "args": [
        "/absolute/path/to/bear-mcp-server/src/bear-mcp-server.js"
      ],
      "env": {
        "BEAR_DATABASE_PATH": "/Users/yourusername/Library/Group Containers/9K33E3U3T4.net.shinyfrog.bear/Application Data/database.sqlite"
      }
    }
  }
}

🚨 记住用实际安装位置替换路径。恐怕逐字使用示例路径没有奖励。

是什么让这个特别?

  • 语义搜索:根据含义查找笔记,而不仅仅是关键字。询问“生产力系统”,它会找到你关于GTD和番茄的笔记,即使它们不包含这些确切的单词。

  • RAG支持:你的人工智能助手现在可以从你的笔记中提取相关上下文,即使你没有明确提到它们。

  • 所有本地处理:一切都在你的机器上运行。没有数据离开您的计算机,不需要API密钥,没有互联网依赖性(初始设置后)。

  • 优雅的退路:如果语义搜索因任何原因不可用,它将悄悄地回到传统搜索。皮带和牙套。

运作原理

聪明的比特

此服务器使用带有全MiniLM-L6-v2模型的transformers.js的Xenova实现:

  • 它创建384维向量,捕捉笔记的语义本质
  • 所有处理都在您的机器上本地进行
  • 模型加载时,第一次启动可能有点慢,但之后会很快

流量

  1. 使用转换器模型将查询转换为向量
  2. 将此向量与笔记的预索引向量进行比较
  3. 无论关键字是否完全匹配,都会返回含义相似的注释
  4. 人工智能助手使用这些相关笔记作为他们回应的背景

项目结构

这里没什么太复杂的:

bear-mcp-server/
├── package.json
├── readme.md
└── src/
    ├── bear-mcp-server.js     # Main MCP server
    ├── create-index.js        # Script to index notes
    ├── utils.js               # Utility functions
    ├── lib/                   # Additional utilities and diagnostic scripts
    │   └── explore-database.js # Database exploration and diagnostic tool
    ├── note_vectors.index     # Generated vector index (after indexing)
    └── note_vectors.json      # Note ID mapping (after indexing)

AI助手的可用工具

连接到此服务器的AI助手可以使用以下工具:

  1. search_notes:查找与查询匹配的注释

    • 参数: query (必填), limit (可选,默认值:10), semantic (可选,默认值:true)
  2. get_note:按ID获取特定笔记

    • 参数: id (必填)
  3. 获取标签:列出您的Bear Notes中使用的所有标签

  4. retrieve_for_rag:获取语义上类似于查询的注释,专门为RAG格式化

    • 参数: query (必填), limit (可选,默认值:5)

需求

  • Node.js 16或更高版本
  • 适用于macOS的熊笔记
  • 兼容MCP的AI助手客户端

限制和注意事项

  • Bear Notes的只读访问权限(我们不会修改您的珍贵笔记)
  • 仅限macOS(抱歉,Windows和Linux用户)
  • 如果添加大量新笔记,则需要使用以下命令重建索引 npm run index
  • 首次启动有点像在嵌入模型加载时等待水壶沸腾

故障排除

如果事情变得不稳定:

  1. 仔细检查您的Bear数据库路径
  2. 确保您已使用以下命令运行了索引过程 npm run index
  3. 检查Bear Notes数据库的权限
  4. 验证服务器脚本是否可执行
  5. 在日志中查找错误消息

如有疑问,请尝试关闭并重新打开。工作的频率比我们愿意承认的要高。

🐳 使用Docker运行(可选)

更喜欢集装箱?你也可以在Docker中运行所有东西。

1.构建Docker镜像

docker build -t bear-mcp-server .

2.将笔记编入索引

在任何有用的事情发生之前,您仍然需要运行索引步骤:

docker run \
  -v /path/to/your/NoteDatabase.sqlite:/app/database.sqlite \
  -e BEAR_DATABASE_PATH=/app/database.sqlite \
  bear-mcp-server \
  npm run index

🛠 替换 /path/to/your/NoteDatabase.sqlite 使用Bear数据库的实际路径。

3.启动服务器

索引后,启动它:

docker run \
  -v /path/to/your/NoteDatabase.sqlite:/app/database.sqlite \
  -e BEAR_DATABASE_PATH=/app/database.sqlite \
  -p 8000:8000 \
  bear-mcp-server

轰——你的人工智能助手现在正在一个容器中运行,并与你的笔记对话。

许可证

麻省理工学院(随意修补、分享和改进)