使用说明
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:
配置(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-gatewayarg是必需的。 - 数据不持久: 这
-vpath必须是主机上的目录;如果需要,创建它(例如。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存储:
-
使用共享配置和数据库:
import uuid import config db = config.get_db() -
呼叫
store_document用你自己的(title, content)成对和可选metadata(例如项目、类型)。 -
跑 从项目根(so
config和db解决):./venv/bin/python my_seed_script.py
定义您自己的列表 (title, content) 配对(和可选元数据),然后调用 db.store_document 对于每一个。要保持数据独立(例如每个项目一个集合),请设置 COLLECTION_NAME (以及可选 CHROMA_PERSIST_DIR)in .env 或者在运行种子或服务器之前的环境中。
自定义VectorDB后端
如果您想使用其他存储(例如另一个矢量数据库),可以在不更改MCP服务器的情况下将其插入:
-
实施
VectorDB接口 从db.vector_db:store_document,query_documents,list_documents,delete_document具有相同的签名。 -
在你的课堂上进行点配置 通过env:
VECTOR_DB_PROVIDER=my_package.my_db.MyProvider你的类将被实例化为:
collection_name,persist_directory,ollama_base_url,embedding_model(与ChromaProvider).如果您的后端需要不同的参数,请将其包装在一个接受这些参数并映射它们的瘦适配器中。 -
像往常一样运行服务器(或种子);他们将使用
config.get_db()因此,您的提供者。
这样,MCP服务器保持不变,用户可以自由连接自己的实现。
许可证
麻省理工学院
安全
看 SECURITY.md 在提交或发布之前,请查看隐私/净化清单。