本地RAG文档存储与查询服务

一个基于本地运行的RAG(检索增强生成)服务器,用于在代码编辑器中存储和查询文档,并通过本地LLM(如Ollama)进行检索增强生成。

  • by SoyamDarshan
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 SoyamDarshan/mcp-local-memory

使用说明

mcp本地存储器

用于代码编辑器的本地RAG MCP服务器:在矢量数据库(ChromaDB+Ollama嵌入)中存储和查询文档,然后通过本地LLM(Ollama)使用检索增强生成来回答问题。

特性

  • store_document --存储带有标题的文本;长内容会自动分块。
  • 查询文档 --语义搜索,可选元数据过滤器和距离阈值。
  • ask_rag --检索相关块,并仅使用该上下文生成答案(Ollama)。
  • list_文档 / 删除文档 --检查并移除储存的物品。
  • 导出文档 / 导入文档 / import_from_file --将存储的块(ID、文本、元数据)导出为JSON,并将其导入到另一个设置中(通过传递JSON或从本地文件读取)。

所有嵌入和(可选)生成都通过Ollama在本地运行;没有数据离开你的机器。

需求

  • Python 3.10+
  • 奥拉玛 带着跑 nomic-embed-text (嵌入)和聊天模型(例如。 llama3)

设置

python -m venv venv
source venv/bin/activate   # or venv\Scripts\activate on Windows
pip install -r requirements.txt

可选:复制 .env.example 到 .env 并设置:

  • OLLAMA_HOST (默认值: http://localhost:11434)
  • OLLAMA_MODEL (默认值: llama3)
  • CHROMA_PERSIST_DIR (默认值: ./chroma_db)
  • COLLECTION_NAME (默认值: mcp_docs)
  • EMBEDDING_MODEL (默认值: nomic-embed-text);对于自定义DB后端, VECTOR_DB_PROVIDER (通往你班级的虚线路径)

以MCP服务器(stdio)运行

python server.py

使用Docker和游标

Docker为您提供了一个单一的、可重复的环境,并避免了venv/path问题(例如,Cursor使用了错误的Python)。Cursor通过启动容器本身,通过stdio与MCP服务器进行通信。

1.先决条件

  • 码头工人 安装并运行。
  • 奥拉玛 在主机上运行 nomic-embed-text 以及聊天模式(例如。 llama3).

2.塑造形象

从项目根:

docker build -t mcp-local-memory .

如果你看到 “驱动程序未连接”,使用传统构建器: DOCKER_BUILDKIT=0 docker build -t mcp-local-memory .

首先在本项目中使用: 此回购 .cursor/mcp.json 已设置为运行 mcp-local-memory:latest 在ChromaDB数据中 ./chroma_db (项目目录)。构建映像后,重新启动Cursor并打开此项目;MCP服务器将使用该容器。

运行容器时可配置: 传递env -e 在Docker中 args默认值: OLLAMA_HOST, OLLAMA_MODEL (聊天,默认 llama3), EMBEDDING_MODEL (嵌入,默认 nomic-embed-text), CHROMA_PERSIST_DIR, COLLECTION_NAME.使用Ollama实例支持的任何嵌入模型(例如。 nomic-embed-text, mxbai-embed-large).

3.将服务器添加到Cursor(其他项目或全局)

添加一个MCP服务器条目,以便Cursor启动容器并将其用于工具。

将配置放在哪里

  • 仅此项目: 创建或编辑 .cursor/mcp.json 在这个回购中。
  • 所有项目: 编辑用户MCP配置:
    • Linux: ~/.cursor/mcp.json 或 ~/.config/cursor/mcp-config.json
    • macOS: ~/.cursor/mcp-config.json
    • 窗户: %APPDATA%\Cursor\mcp-config.json

配置(Linux)

将此添加到现有 "mcpServers" 对象(或创建它):

"local-rag-memory": {
  "command": "docker",
  "args": [
    "run",
    "--rm",
    "-i",
    "--add-host=host.docker.internal:host-gateway",
    "-e", "OLLAMA_HOST=http://host.docker.internal:11434",
    "-v", "/absolute/path/to/local-rag-data:/app/chroma_db",
    "mcp-local-memory"
  ],
  "env": {}
}

替换 /absolute/path/to/local-rag-data 任何您希望ChromaDB数据在您的机器上持久的路径。要使用不同的Ollama嵌入模型,请添加例如。 "-e", "EMBEDDING_MODEL=your-model" 到 args (默认值为 nomic-embed-text).同样适用于 OLLAMA_MODEL (聊天模式 ask_rag,默认值 llama3).

配置(macOS/Windows,带Docker桌面)

使用相同的结构,但 省略 这 "--add-host=host.docker.internal:host-gateway" 入口从 args (Docker桌面已解析 host.docker.internal):

"local-rag-memory": {
  "command": "docker",
  "args": [
    "run",
    "--rm",
    "-i",
    "-e", "OLLAMA_HOST=http://host.docker.internal:11434",
    "-v", "/path/on/your/machine/local-rag-data:/app/chroma_db",
    "mcp-local-memory"
  ],
  "env": {}
}

在Windows上,使用以下路径 C:\Users\You\.cursor\local-rag-data;在macOS上使用,例如。 $HOME/.cursor/local-rag-data (将其展开为JSON中的完整路径)。

4.重新启动游标

重新启动光标(或 开发者:重新加载窗口)因此,它选择了新的MCP服务器。

5.验证

在Cursor聊天中,询问: “你们有什么MCP工具?” 你应该看看 store_document, query_documents, ask_rag, list_documents,以及 delete_document。然后,您可以说“存储一个标题为Test的注释,内容为Hello”和“Query for Test”,以确认服务器和Ollama正在工作。

要导出数据以在其他设置中使用,请调用 export_documents 在Cursor聊天中(可选使用 metadata_filter JSON字符串)。复制JSON并通过回放将其导入另一个实例 store_document 呼叫,呼叫 import_documents(documents_json=...),或编写一个小脚本,迭代导出的列表并调用 db.store_document 对于每个条目。对于无法传递参数的环境,请将JSON保存到 rag_import.json (或中设置的路径 IMPORT_PATH)并调用no arg import_from_file MCP工具来摄取它。

故障排除

  • 运行时“驾驶员未连接” docker build: Docker守护进程没有响应。重新启动Docker桌面(或运行 sudo service docker start 如果在WSL中使用发动机)。确保在Docker桌面中启用WSL集成→ 设置→ 资源→ WSL集成。尝试 docker context use default 并再次运行构建。
  • “没有这样的文件或目录”/container退出: 确保已构建映像: docker build -t mcp-local-memory .
  • Ollama工具错误: Ollama一定在主机上运行;集装箱到达时 http://host.docker.internal:11434在Linux上 --add-host=host.docker.internal:host-gateway arg是必需的。
  • 数据不持久: 这 -v path必须是主机上的目录;如果需要,创建它(例如。 mkdir -p ~/.cursor/local-rag-data).

对于非Docker游标设置(venv,UI),请参阅 RAG_分析.md.

自定义实现和种子

该应用程序的构建是为了让你可以插入自己的数据,如果你愿意,还可以插入你自己的后端。

到处都是相同的配置

所有设置和数据库都集中在 config.py (以及 .env).如果MCP服务器和您添加的任何脚本使用相同的env,则它们使用相同的存储:

  • OLLAMA_HOST, OLLAMA_MODEL, CHROMA_PERSIST_DIR, COLLECTION_NAME, EMBEDDING_MODEL

因此,自定义脚本和服务器保持同步,而无需硬编码路径或集合名称。

自定义种子脚本

您可以添加自己的种子脚本(例如。 my_seed_script.py)写入MCP服务器使用的同一RAG存储:

  1. 使用共享配置和数据库:

    import uuid
    import config
    
    db = config.get_db()
    
  2. 呼叫 store_document 用你自己的 (title, content) 成对和可选 metadata (例如项目、类型)。

  3. 跑 从项目根(so config 和 db 解决):

    ./venv/bin/python my_seed_script.py
    

定义您自己的列表 (title, content) 配对(和可选元数据),然后调用 db.store_document 对于每一个。要保持数据独立(例如每个项目一个集合),请设置 COLLECTION_NAME (以及可选 CHROMA_PERSIST_DIR)in .env 或者在运行种子或服务器之前的环境中。

自定义VectorDB后端

如果您想使用其他存储(例如另一个矢量数据库),可以在不更改MCP服务器的情况下将其插入:

  1. 实施 VectorDB 接口 从 db.vector_db: store_document, query_documents, list_documents, delete_document 具有相同的签名。

  2. 在你的课堂上进行点配置 通过env:

    VECTOR_DB_PROVIDER=my_package.my_db.MyProvider
    

    你的类将被实例化为: collection_name, persist_directory, ollama_base_url, embedding_model (与 ChromaProvider).如果您的后端需要不同的参数,请将其包装在一个接受这些参数并映射它们的瘦适配器中。

  3. 像往常一样运行服务器(或种子);他们将使用 config.get_db() 因此,您的提供者。

这样,MCP服务器保持不变,用户可以自由连接自己的实现。

许可证

麻省理工学院

安全

看 SECURITY.md 在提交或发布之前,请查看隐私/净化清单。